zoukankan      html  css  js  c++  java
  • MySQL:数据查询

    数据查询

    一、基本查询语句

    1、语法:写一行

    select{*<字段列表>}//查询的字段,多个字段用逗号分开
    from<表1>,<表2>…//数据表名
    {//可选
    [where<表达式>]//限定条件,只能放一个。
    

    2、实例

    mysql> select * from publisher;
    +----+-----+------+
    | bh | cbs | bz   |
    +----+-----+------+
    | 01 | 2   | 1111 |
    | 02 | 3   | 1111 |

    二、单表查询

    1、用于查询的比较运算

     

    操作符

    含义

    操作符

    含义

    操作符

    含义

    =

    等于(不是==)

    <=

    小于、等于

    in(set)

    等于值列表中的一个

    大于

    <>(!=)

    不等于

    like

    模糊查询

    >=

    大于、等于

    :=

    赋值

    is (not)null

    (不是)空值

    小于

    betwee…and

    在两值之间

     

     

    2、比较运算符的优先级

    优先级

    运算符

    优先级

    运算符

    1

    算术运算符

    5

    [NOT] BETWEEN

    2

    连接符

    6

    NOT

    3

    比较符

    7

    AND

    4

    IS [NOT] NULL, LIKE, [NOT] IN

    8

    OR

    3、查询所有字段

    语法:

    select * from 表名(心号两边有空格)

    4、查询指定字段,所有记录

    语法:

    select 字段名1…字段名n from 表名 where 条件表达式

    5、给显示的列名重新命名

    语法:

    select 字段1 as 列名1[字段2 as 列名2……字段n as 列名n] from 表名

    6、查询指定记录,单个记录

    语法:

    select 字段名1…字段n from 表名 where 条件

    7、带IN关键字的查询

    作用:用于查询指定范围内的条件记录,只要满足条件范围内的一个值即为匹配项
    语法:

    select 字段 from 数据表 where 指定字段(not)in(取值条件,取值条件1)等于where 指定字段=取值条件 or指定字段=取值条件1(order by 字段//条件可选);

    【附】加not代表不在这个范围的值

    实例:

    mysql> select bh,cbs from publisher where bh in(01,09) order by cbs;
    +----+-----+        bh的值为01,09输出结果
    | bh | cbs |   
    +----+-----+
    | 09 | 10  |
    | 01 | 2   |
    +----+-----+

    8、带BETWEEN AND的范围查询

    作用:查询每个范围内的值

    语法: 

    select 显示结果的列 from 数据表名 where 条件的列 between 范围的开始值 and 范围的结束值;

    字段名>=起始值 and 字段名<=结束值
    两个表达式字段名相同,值不同
    实例:

    mysql> select bh,cbs from publisher where cbs between 7 and 09;
    +----+-----+
    | bh | cbs |
    +----+-----+
    | 06 | 7   |
    | 07 | 8   |
    | 08 | 9   |
    +----+-----+

    9、带LIKE的字符匹配查询

    作用:查询某个字符,如“apple”“grape”“coconut”中带“a”的字段
    通配符:用于where的特殊字符
    (1)、“%”匹配任意长度的字符,甚至包括零字符,最大字段为数据类型的长度
    语法:

    select 字段from 数据表名 where 字段(类型必须是char或varchar) like '条件%';

    实例:

    1)全部值
    mysql> select*from publisher;
    +----+-----+------+
    | bh | cbs | bz   |
    +----+-----+------+
    | 01 | 2   | 1111 |
    | 02 | 3   | 1111 |
    +----+-----+------+
    
    2)取bh列且0在前面的值
    mysql> select*from publisher where bh like '0%';
    +----+-----+------+
    | bh | cbs | bz   |
    +----+-----+------+
    | 01 | 2   | 1111 |
    | 02 | 3   | 1111 |
    +----+-----+------+
    
    3)取列bh且0在后面的值
    mysql> select*from publisher where bh like '%0';
    +----+-----+------+
    | bh | cbs | bz   |
    +----+-----+------+
    | 10 | 11  | 1111 |
    | 20 | 21  | 1111 |
    +----+-----+------+
    4)取例bh且有0在的值 mysql> select*from publisher where bh like '%0%'; +----+-----+------+ | bh | cbs | bz | +----+-----+------+ | 01 | 2 | 1111 | | 02 | 3 | 1111 | +----+-----+------+

    (2)“_”一次只能匹配任意一个字符;
    作用:基本和“%”类似
    语法:

    select 字段from 数据表名 where 列 like '条件_';(后面两个’条件_ _’)

    【例】:
    查询bh列且以“1”开头,后面接一个任意符

    mysql> select*from publisher where bh like '1_';
    +----+-----+------+
    | bh | cbs | bz   |
    +----+-----+------+
    | 10 | 11  | 1111 |
    +----+-----+------+

    10、查询空值

    空值:一般表示数据未知、不适用或者在将来以后添加数据,它不是空格,或者0.
    语法:

    select 字段from 数据表名 where 列1 is null and…… and 例n;

    11、带AND的多条件查询

    条件:满足所有的条件表达式

    语法:

    select 字段from 数据表名 where 条件表达式1 and 条件表达式2 … and 条件表达式n;

    【例】

    mysql> select bh,cbs,bz from publisher where bh=10 and cbs=11 and bz=1111;
    +----+-----+------+
    | bh | cbs | bz   |
    +----+-----+------+
    | 10 | 11  | 1111 |
    +----+-----+------+

    12、带0R的多条件查询

    条件:满足一个条件表达式
    语法:语法:

    select 字段from 数据表名 where 条件表达式1 or 条件表达式2… or 条件表达式n;

    【例】

    mysql> select bh,cbs,bz from publisher where bh=10 or cbs=11 or bz=111;
    +----+-----+------+
    | bh | cbs | bz   |
    +----+-----+------+
    | 10 | 11  | 1111 |
    +----+-----+------+

    【附】and和or联用
    【例】

    mysql> select bh,cbs,bz from publisher where bh=10 or cbs=11 and bz=111;
    +----+-----+------+
    | bh | cbs | bz   |
    +----+-----+------+
    | 10 | 11  | 1111 |
    +----+-----+------+
    
    mysql>  select bh,cbs,bz from publisher where bh=10 and cbs=10 or bz=111;
    Empty set (0.00 sec)
    
    mysql>  select bh,cbs,bz from publisher where bz=111 or bh=10 and cbs=10;
    Empty set (0.00 sec)

    说明:and的优先级高于or,因此先对and两边的操作数进行操作,再于or的操作数结合。

    13、查询结果不重复

    语法:

    select distinct 字段名 from 数据表名;

    14、对查询结果排序

    (1)单列:
    语法:

    select 要显示的字段from 数据表名 order by 排序依据的字段(聚合函数) descasc;

        注意:desc降序,asc升序,asc为排序的默认方式
    (2)多列:
    语法:

    select 要显示的字段from 数据表名 order by a descasc,b descasc ……;

        注意:先进行a表的升降序,在进行b表的升降序

    15、使用LIMIT限制查询结果的数量-----分页查询

      语法:limit [位置偏移量,] 行数
    位置偏移量:值从那行开始显示,是可选,如果不指定,从第一条记录开始(第一条记录的位置从0开始,和java的索引相类似)
    行数:指示返回的记录
    注意:limit 4 offset 3,意思为获取从第五条记录开始后面3条记录,和limit 4,3返回的结果相同。
      【例】select * from dingdan limit 2,3;

    二、连接查询------先内在外

    1、内连接查询(inner join)

    语法:
    ①select 字段名 fromA表表名,B表表名……where【A表表名.】字段名a=【B表表名.】字段名b=……
    ②select 字段名 fromA表表名 inner join B表表名on【A表表名.】字段名a=【B表表名.】字段名b
    注意:字段a、b必须是有相同意义和相同类型

    2、外连接查询

    ①左外连接:
    select 需要的字段名 fromA表表名 left joinB表表名 on A表表名.】字段名=【B表表名.】字段名
    A表被称为左表    B表被称为右表
    注意:
    左外连接,不管连接条件是否满足。都执行一次
    右外连接,是否执行,根据连接条件判断
    ②右外连接:
    select 需要的字段名 fromA表表名 right joinB表表名 on A表表名.】字段名=【B表表名.】字段名
    A表被称为左表    B表被称为右表
    注意:
    右外连接,不管连接条件是否满足。都执行一次
    左外连接,是否执行,根据连接条件判断

    3、连接条件的特点

    (1)内连接:满足连接条件记录出现
    (2)左外连接:左表记录至少出现一次
    (3)满足连接条件,满足出现的记录
    (4)不满足,左表记录信息出现,右表信息为空

    4、连接查询思路

    1、根据题目要求,确定连接结果
    2、根据连接结果,确定连接方式
    3、根据语法,写出语句
    4、确定查询字段
    5、确定访问的表
    6、连接条件

    三、子查询

    1、带ANY、SOME关键字的子查询

    ①定义:只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件
    ②语法:select 字段名 from 表名 where 字段名 关系运算符 any/some(select 字段 from 表名)
    关系运算符:>,<=,<,>=,=
    条件:select 字段 from 表名

    2、带ALL关键字的子查询

    ①定义:只要满足内层子查询中的所有比较条件,才返回一个结果作为外层查询的条件
    ②语法:select 字段名 from 表名 where 字段名 关系运算符 all(select 字段 from 表名)
    关系运算符:>,<=,<,>=,=
    条件:select 字段 from 表名

    3、带EXISTS关键字的子查询---------判断某个字段是否存在

    ①定义:判断条件是否满足,满足返回true,外层开始查询,不满足返回false,外层不查询。
    ②语法:select 字段名 from 表名 where exist(条件)
    关系运算符:>,<=,<,>=,=
    条件:select 字段 from 表名 where 条件
      ③注意:no exists判断条件是否满足,不满足返回true,外层开始查询,满足返回false,外层不查询。

    4、带IN关键字的子查询

      ①定义:内层查询语句仅仅返回一个数据列,这个数据列的里的值,将提供给外层查询语句查询比较
    ②语法:elect 字段名 from 表名 where 字段名 in(select 字段名 from 表名 where 条件)
    5、带比较运算符关键字的子查询
      关键字:<,>,>=,<=,!=(不等于),<>(不等于)

    四、合并查询结果

    ①语法:select 字段名 from 表名 union【all】select 字段名from 表名;
    ②注意:
      1、两个表对应的列数和数据数量必须相同
      2、各个select之间用union或union all关键字分开
      3、union执行时删除重复的行,结果唯一
      4、union all执行时包含重复的行

    五、为表和字段取别名

    1、为表取别名:表名 as 表别名
    2、为字段取别名:列名 as 列别名
    注意,取别名时,别名不能与原有的数据的表名和列名有冲突

    六、使用正则表达式查询

    1、语法:select 字段名 from 表名 where 字段名 regexp ‘正则表达式’;
    2、常用的正则表达式字符匹配列表
    符号 说明 例子 匹配值示例

    符号

    说明

    例子

    匹配值示例

     ^ 

    匹配文本开始字符

    ‘ ^ b’匹配以字母b开头的字符串

    book,big

    $

    匹配文本结束字符

    ‘st$’匹配以st结尾的字符串

    test,resist

    .

    匹配任何单个字符

    ‘b.t’匹配任何b和t之间有一个字符

    bit,bat,but

    *

    匹配零个或多个在它前面的字符

    ‘f*n’匹配字符n前面有任意个字符f

    fn,fan,abcn

    +

    匹配一次或多次在它前面的字符

    ‘ba+’匹配以b开头后面紧跟至少有一个a

    ba,bay,bare

    <字符串>

    匹配包含指定的字符串的文本

    ‘fa’指定文本中包含fa的字符

    fan,afa,faad

    [字符集合]

    匹配字符集合中的任何一个字符

    ‘[xz]’匹配x或z

    dizzy,xebra,

    [ ^ ]

    匹配不在括号中的任何字符

    ‘[ ^ abc]’匹配任何不包含a,b,c的字符串

    desk,fox,f8ke

    字符串{n,}

    匹配前面的字符串至少n次

    b{2}匹配至少2个的b

    bbb,bbbb,bb

    字符串{n,m}

    匹配前面的字符串至少n次,至多m次。

    b{2,4}匹配至少2个,至多4个的b

    bbbb,bbb,bb

    注意:
    1)字符串{n,m},如果n为0,此参数为可选参数
    2)匹配多个指定字
    3)符串,字符串之间用“|”分开

  • 相关阅读:
    e621. Activating a Keystroke When Any Child Component Has Focus
    e587. Filling Basic Shapes
    e591. Drawing Simple Text
    e595. Drawing an Image
    e586. Drawing Simple Shapes
    e636. Listening to All Key Events Before Delivery to Focused Component
    在 PL/SQL 块的哪部分可以对初始变量赋予新值? (选择1项)
    Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
    你判断下面语句,有什么作用?(单选)
    Oracle数据库表空间与数据文件的关系描述正确的是( )
  • 原文地址:https://www.cnblogs.com/hahayixiao/p/10252236.html
Copyright © 2011-2022 走看看