MySQL常用指令(二)查询数据

一、基本查询语句

SELECT 
    {*|<字段列表>}
    [
        FROM <表1>,<表2>...
        [WHERE <表达式>
        [GROUP BY <group by definition>]
        [HAVING <expression> [{<operator> <expression>...]]
        [ORDER BY <order by definition>]
        [LIMIT [<offset>,] <row count>]
    ]
SELECT [字段1, 字段2,..., 字段n]
FROM [表或视图]
WHERE [查询条件]

其中:

  • {*|<字段列表>}包含星号通配符选字段列表,表示查询的字段,其中字段列至少包含一个字段名称,如果要查询多个字段,多个字段之间用逗号隔开,最后一个字段后不要加逗号。
  • FROM<表l>,<表2>…, 表1和表2表示查询数据的来源,可以是单个或者多个。
  • WHERE子句是可选项,如果选择该项,将限定查询行必须满足的查询条件。
  • GROUP BY<字段>,该子句告诉MySQL如何显示查询出来的数据,并按照指定的字段分组。
  • [ORDER BY<字段>],该子句告诉MySQL按什么样的顺序显示查询出来的数据,可以进行的排序有:升序(ASC)、降序(DESC)。
  • [LIMIT [< offset >,]< row count >],该子句告诉MySQL每次显示查询出来的数据条数。


二、单表查询

1.查询所有字段

  • 1.使用“*”通配符、

    SELECT * FROM table_name;
    
  • 2.在SELECT语句中指定所有字段

    SELECT 所有字段名(用逗号隔开)
    

2.查询指定字段

  • 查询单个字段:

    SELECT 列名 FROM 表名;
    
  • 查询多个字段:

    SELECT 字段名1,字段名2,...,字段名n FROM 表名;
    

3.查询指定记录:

    SELECT 字段名1,字段名2,...,字段名n
    FROM 表名
    WHERE 查询条件

WHERE子句中,提供一系列的条件判断符。

    =          相等
    <> , !=    不相等
    <          小于
    <=         小于或等于
    >          大于
    >=         大于或等于
    BETWEEN    位于两值之间

4.带IN关键字的查询:

IN操作符用来查询满足指定范围内的条件的记录,使用IN操作符,将所有检索条件用括号括起来,检索条件之间用逗号分隔开。

    SELECT 字段名1,...,字段名k FROM table_name WHERE 字段名 IN(条件1,...);

5. 带BETWEEN AND的范围查询:

BETWEEN AND用来查询某个范围内的值,该操作符需要两个参数,即范围的开始值和结束值。

    SELECT 字段名1,...,字段名k FROM table_name WHERE 字段名 BETWEEN 开始值 AND 结束值;

6.带LIKE的字符匹配查询

  • 百分号通配符“%d”,匹配任意长度的字符,甚至包括零字符。
  • 下划线通配符 “_”,一次只能匹配任意一个字符。、

7.查询空值

SELSET 字段名k FROM table_name WHERE 某字段名 IS NULL

8.带AND的多条查询

在WHERE子句中使用AND操作符限定只有满足所有查询条件的记录才会被返回。可以使用AND连接两个或以上个查询条件。

9.带OR的多条查询

与AND相反,使用OR,只需满足其中一个条件的记录即可返回。

10.查询结果不重复

SELECT DISTINCT 字段名 FROM 表名;

11.对查询结果排序

  • 单列排序
    ORDER BY 某字段名

  • 多列排序
    ORDER BY 字段名1,字段名2,…;
    注:这里在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。

  • 指定排序的方向
    默认是升序,若要降序,则在最后加上DESC

12.分组查询

[GROUP BY 字段] [HAVING<条件表达式>]

字段值为进行分组时所依据的列名称,HAVING指定满足表达式限定条件的结果将被显示。

  • 创建分组
    GROUP_BY 通常和集合函数一起使用,如MAX(), MIN(), COUNT(), SUM(), AVG()。

  • 使用 HAVING 过滤分组
    HAVING 和 WHERE 都是用来过滤数据的,但是 HAVING 在数据分组之后进行过滤来选择分组,而 WHERE 在分组之前用来选择记录。另外 WHERE 排除的记录不在包括在分组中。

  • GROUP BY 子句中使用 WITH ROLLUP
    使用 WITH ROLLUP 之后,所有查询出的分组记录之后增加一条记录,统计记录数量。

  • 多字段分组
    使用 GROUP BY 可对多个字段进行分组,但是根据多字段的值来进行层次分组,分组层次从左向右,即先按第一个字段分组,然后在第一个字段值相同的记录中,再根据第二个字段的值进行分组…依次类推。

  • GROUP BYORDER BY 一起使用

13.使用LIMIT限制查询结果的数量

LIMIT[位置偏移量,] 行数

位置偏移量参数是一个可选参数,指示MySQL从哪一行开始显示。
即 LIMIT 4,3 表示返回从第5行(位置偏移量从0开始)开始之后的3条记录。


三、使用集合函数查询

1.COUNT()函数

  • COUNT(*)计算表中总的行数,不管某列有数值或者为空值。
  • COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。

2.SUM()函数

SUM()是一个求总和的函数,返回指定列值的总和。在计算中,忽略列值为NULL的行。

3.AVG()函数

AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。

4.MAX()函数

MAX()返回指定列中的最大值。

5.MIN()函数

MIN()返回查询列中的最小值。


四、连接查询

1.内连接查询

INSERT JOIN 使用比较运算符进行表间某列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录。
如果在一个连接查询中,涉及到的两个表都是同一个表,这种查询称为自连接查询。自连接是一种特殊的内连接。

2.外连接查询

  • LEFT JOIN(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
  • RIGHT JOIN(右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。

3.复合条件连接查询

复合条件连接查询是在连接查询的过程中,通过添加过滤条件,限制查询的结果。

五、子查询

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

ANY和SOME关键字是同义词,表示满足其中任一条件,他们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。

2.带ALL关键字的子查询

使用ALL关键字是需要同时满足所有内层查询的条件。

3.带EXISTS关键字的子查询

EXISTS关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行。

4.带IN关键字的子查询

IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。

说明在处理SELECT语句的时候,MySQL实际上执行了两个操作,即先执行内层查询,再执行外层查询,内层子查询的结果作为外部查询的比较条件。

5.带比较运算符的子查询

子查询可以使用一些比较运算符,如 “<”, “>”, “<=”,”>=”, “!=”, “<>”等。


六、合并查询结果

SELECT column,...FROM table1
UNION[ALL]
SELECT column,...FROM table2

使用UNION ALL包含重复的行,不去除重复的行,而UNION从查询结果集中自动去除了重复的行。


七、为表和字段取别名

1.为表取别名

表名 [AS] 表别名

2.为字段取别名

列名 [AS] 列别名

八、使用正则表达式查询

MySQL中使用REGEXP关键字指定 正则表达式的字符匹配模式。

1.查询以特定字符或字符串开头的记录

字符 “^” 匹配以特定字符或字符串开头的文本
‘^b’就是查询以字母b开头的记录

2.查询以特定字符或字符串结尾的记录

字符 “$” 匹配以特定字符或字符串开头的文本
‘y&’就是查询以字母y结尾的记录

3.用符号 “.” 来替代字符串中的任意一个字符

字符 “.” 匹配任意一个字符
‘a.b’就是查询包含字母a和b且两个字母之间只有一个字母的记录。

4.使用 “*”, “+” 来匹配多个字符

星号 “*” 匹配前面的字符任意多次,包括0次。加号 “+” 匹配前面的字符至少一次。

5.匹配指定字符串

正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如要匹配多个字符串,多个字符串之间使用分隔符 “|” 隔开。

6.匹配指定字符中的任意一个

方括号“[]”指定一个字符集合,只匹配其中任意一个字符,即为所查找的文本。
[ab]就是查询包含字母a或者b的记录。

7.匹配指定字符以外的字符

“[^字符集合]”匹配不在指定集合中的任何字符。

8.使用{n,}或者{n,m}来指定字符串连续出现的次数

字符串{n,}表示至少匹配n次前面的字符
字符串{n,m}表示匹配前面的字符串不少于n次,不多于m次。

a{2,} 表示字母a连续出现的次数至少2次,也可以大于2次。
a{2,4} 表示字母a连续出现次数在[2,4]之间。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值