一、基本查询语句
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 BY 和 ORDER 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]之间。