zoukankan      html  css  js  c++  java
  • mysql必知必会系列(一)

    mysql必知必会系列是本人在读《mysql必知必会》中的笔记,方便自己以后查看。

    MySQL、 Oracle以及Microsoft SQL Server等数据库是基于客户机—服务器的数据库。客户机—服务器应用分为两个不同的部分。服务器部分是负责所有数据访问和处理的一个软件。这个软件运行在称为数据库服务器的计算机上。

    在处理SQL语句时,其中所有空格都被忽略,sql语句不分大小写。


    一、基本知识

    • 数据库(database) : 保存有组织的数据的容器(通常是一个文件或一组文件)。
    • 表(table): 某种特定类型数据的结构化清单。
    • 模式(schema):关于数据库和表的布局及特性的信息。模式可以用来描述数据库中特定的表以及整个数据库(和其中表的关系)。如可以存储什么样的数据,数据如何分解,各部分信息如何命名等。
    • 列(column):表中的一个字段。所有表都是由一个或多个列组成的。
    • 行(row):表中的一个记录。表中的数据是按行存储的,所保存的每个记录存储在自己的行内。
    • 数据类型(datatype):所容许的数据的类型。
    • 每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。数据类型还帮助正确地排序数据,并在优化磁盘使用方面起重要的作用。
    • 主键(primary key):一列(或一组列),其值能够唯一区分表中每个行,任意两行都不具有相同的主键值。

    主键规定:
    每个行都必须具有一个主键值(主键列不允许NULL值)。
    不更新主键列中的值;
    不重用主键列的值;
    不在主键列中使用可能会更改的值。


    二、关于使用数据库

    • show databases;显示所有数据库

    eg:show database; 

    +--------------------+
    | Database         |
    +--------------------+
    | information_schema |
    | mysql                |
    | jachin                |
    +--------------------+

    • use databasename; 打开数据库,才能读取其中内容

        eg:use jachin; 使用jachin数据库

    • show tables; 获得一个数据库内的表的列表

    eg:show tables;
    +---------------+
    | Tables_in_ssm |
    +---------------+
    | appointment |
    | book             |
    +---------------+

    • show columns from tablename; 要求给出一个表名 ,它对每个字段返回一行,行中包含字段名、数据类型、是否允许NULL、键信息、默认值以及其他信息(如auto_increment)

    eg: show columns from book;

    • help show ;  可以查看更多show的命令

    三、 关于检索

    • select columnname from tablename; 检索某表下的某列内容
    • select columnname1,columnname2,columnname3 from tablename; 检索某表下的某几列内容
    • select * from tablename; 检索整个表
    • select distinct columnname from tablename; 使用DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同的值
    • select columnname from tablename limit 5; 此语句使用SELECT语句检索单个列从第一个行开始不多于5行。
    • select columnname from tablename limit 5,5; 指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。
    • LIMIT 4 OFFSET 3:limit的另一种表达,意为从行3开始取4行,就像LIMIT 3, 4一样(注意: LIMIT 1, 1将检索出第二行而不是第一行)。

      1.完全限定

    使用完全限定的名字来引用列(同时使用表名和列字)

    • select tablename.columnname from tablename;

    eg: select book.name from book; 一般来说功能和 select name from book; 是一样的。

     


     

    同理,表名也可以使用完全限定

    • select tablename.columnname from databasename.tablename;

    eg: select book.name from jachin.book;

       

      2.排序

    • select columnname from tablename order by columnname; ORDER BY子句取一个或多个列的名字,据此对输出进行排序(ORDER BY(如从A到Z)顺序排序,且用非检索的列排序数据也是完全合法的)
    • select columnname from tablename order by A,B; 按多个列进行排序(如果A是姓列,B是名列,首先按姓排序,然后在每个姓中再按名排序)
    • order by ... DESC; 降序(从Z到A)排序,只应用到直接位于其前面的列名,如果想在多个列上进行降序排序, 必须对每个列指定DESC关键字,若不声明DESC,则按默认的顺序排序

    eg:mysql> select * from book order by name ,number desc ;
    +---------+--------+--------+
    | book_id | name | number |
    +---------+--------+--------+
    | 1002   | c           | 10    |
    | 1003   | c++       | 10    |
    | 1004   | c++       | 10    |
    | 1005   | c++       | 8      |
    | 1000   | Java     | 8      |
    | 1001   | python  | 10    |
    +---------+--------+--------+

    mysql> select * from book order by name desc ,number desc;
    +---------+--------+--------+
    | book_id | name | number |
    +---------+--------+--------+
    | 1001 | python | 10 |
    | 1000 | Java | 8   |
    | 1003 | c++   | 10 |
    | 1004 | c++   | 10 |
    | 1005 | c++   | 8   |
    | 1002 | c       | 10 |
    +---------+--------+--------+

    • select columnname from tablename order by columnname limit n; 如果使用LIMIT,它必须位于ORDER BY之后。

      3.WHERE

        只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件( filtercondition)。在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。  

    WHERE子句在表名(FROM子句)之后给出:
    select columnname from tablename where columnname=...;


    在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后:

    select columnname1 from tablename where columnname1=... order by columnname2 desc;

    eg:mysql> select * from book where name="c++" order by number desc ;

    +---------+------+--------+
    | book_id | name | number |
    +---------+------+--------+
    | 1003 | c++ | 10 |
    | 1004 | c++ | 10 |
    | 1005 | c++ | 8   |
    +---------+------+--------+


     

    为了检查某个范围的值,可使用BETWEEN操作符

    select columnname1 from tablename where columnname1 between n and m;

    eg: mysql> select * from book where number between 7 and 9 ;
    +---------+------+--------+
    | book_id | name | number |
    +---------+------+--------+
    | 1000 | Java  | 8        |
    | 1005 | c++    | 8        |
    +---------+------+--------+


    SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句
    select columnname1 from tablename where columnname2 is null;

     

    4.操作符

     用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符( logicaloperator)如AND,OR等。

     SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。用括号可消除因为圆括号具有较AND或OR操作符高的计算次序,由于AND和OR较简单,不再详写。

    IN操作符

    • IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。 IN取合法值的由逗号分隔的清单,全都括在圆括号中。
    • IN用来指定要匹配值的清单的关键字,功能与OR相当。
    • 在使用长的合法选项清单时, IN操作符的语法更清楚且更直观。
    • 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
    • IN操作符一般比OR操作符清单执行更快。
    • IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。

    select columnname1 from tablename where columnname1 in (1,n);
    selectcolumnname1 from tablename where columnname1=1,columnname1=2...,columnname1=n; 

    以上两句sql语句是等价的。


    NOT操作符

    WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。


    LIKE操作符

    % 百分号表示任何字符出现任意次数
    select columnname1 from tablename where columnname1 like "c%"; 可匹配任意以c开头的字符串
    注:WHERE name LIKE '%'不能匹配用值NULL的行

    _ 下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。
    select columnname1 from tablename where columnname1 like "c_"; 可匹配任意以c开头且后面接着只有一个字符的字符串


     

     

  • 相关阅读:
    转:套接字
    转:Socket原理与编程基础
    转:rabbitmq——用户管理
    转:rabbitMQ 安装与管理
    转:window与linux互相拷贝文件
    转:Xming + PuTTY 在Windows下远程Linux主机使用图形界面的程序
    Rabbitmq集群
    VS2010 win7 64位安装后新建项目生成时错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    java连接sqlserver2008
    Java单体应用
  • 原文地址:https://www.cnblogs.com/jachin01/p/7733162.html
Copyright © 2011-2022 走看看