目录
MySQL从数据表中查询数据的基本语句为SELECT语句。
SELECT [不重复distinct] 字段 FROM 表名 WHERE/GROUP BY [HAVING] +[条件]+[升降序];
SELECT [字段1,字段2,字段n]
FROM 【表或视图】
WHERE 【查询条件】
[ * |<字段列表>]包含星号通配符选择字段列表,表示查询的字段,其中字段列至少包含一个字段名称,如果要查询多个字段, 多个字段之间用逗号隔开,最后一个字段后不要加逗号.·
FROM <表1>,<表2>.,表1和表2表示查询数据的来源,可以是单个或者多个。·
WHERE子句是可选项,如果选择该项,将限定查询行必须满足的查询条件。还可以增加调价并用多个AND/OR/连接.
GROUP BY<字段>,该子句告诉MySOL如何显示查询出来的数据,并按照指定的字段分组。. [ORDER BY<字段>],该子句告诉MySOL按什么样的顺序显示查询出来的数据,可以进行的排序有:升序(ASC)、降序(DESC) ..
[LIMIT]每次现实查询出来的数据条数;
7.2 单表查询
7.2.1 查询所有字段
1.在SELECT语句中使用星号“*”通配符查询所有字段
2.在SELECT语句中指定所有字段
7.2.2 查询指定字段
1.查询单个字段
2.查询多个字段
7.2.3 查询指定记录
在SELECT 语句中通过WHERE子句,对数据进行过滤,语法格式为:
SELECT 字段名1,字段名2,…,字段名n
FROM 表名
WHERE 查询条件
7.2.4 带IN关键字的查询
IN操作符
查询满足指定范围内的条件的记录,使用IN操作符,将所有检索条件用括号括起来,检索条件用逗号分隔开,只要满足条件范围内的一个值即为匹配项。
7.2.5 带BETWEEN AND的范围查询
BETWEEN AND
查询某个范围内的值,该操作符需要两个参数,即范围的开始值和结束值,如果字段值满足指定的范围查询条件,则这些记录被返回。
7.2.6 带LIKE的字符匹配查询
● 百分号通配符‘%’,匹配任意长度的字符,甚至包括零字符
● 下划线通配符‘_’,一次只能匹配任意一个字符
7.2.7 查询空值
在SELECT语句中使用IS NULL子句,可以查询某字段内容为空记录。
7.2.8 带AND的多条件查询
使用AND连接两个甚至多个查询条件,多个条件表达式之间用AND分开。
7.2.9 带OR的多条件查询
OR操作符,表示只需要满足其中一个条件的记录即可返回。OR也可以连接两个甚至多个查询条件,多个条件表达式之间用AND分开。
7.2.10 查询结果不重复
在SELECT语句中可以使用DISTINCE关键字指示MySQL消除重复的记录值。
SELECT DISTINCT 字段名 FROM 表名
7.2.11 对查询结果排序
MySQL中可以通过在SELECT使用ORDER BY +升序ASC/降序DESC 对查询的结果进行排序(默认升序)。
- 单列排序
- 查询尾+order by 字段名 对字段进行(升序)排列;
- 多列排序
- 查询尾+order by 字段名1,字段名2 对两字段进行排列(前面的优先排序);
3.指定排序方向
末尾+升序ASC/降序DESC
7.2.12 分组查询
分组查询是对数据按照某个或多个字段进行分组。
[GROUP BY 字段] [HAVING <条件表达式>]
1.创建分组:GROUP BY 字段1,[字段2…] 类似排序显示;
2.使用HAVING+条件 过滤分组,满足条件才显示;
可以使用GROUP_CONCAT 显示分组中每个字段的值;
3.在GROUP BY子句中使用WITH ROLLUP:增加一条记录,显示统计记录数量。
4.多字段分组
5.GROUP BY和ORDER BY一起使用
Where 和 having的区别:
where在分组之前选择记录,排除的不在分组中;
having在分组后过滤显示记录,记录还在分组中;
7.2.13 用LIMIT限制查询结果的数量
LIMIT关键字可以返回指定位置的记录。
LIMIT [位置偏移量,] 行数
7.3 使用集合函数查询
COUNT()函数统计数据表中包含的记录行的总数,或者根据查询结果返回的列中包含的数据行数。
● COUNT(*) 。
● COUNT(字段名) 。
7.3.2 SUM()函数
SUM()是一个求总和的函数,返回指定列值的总和。
7.3.3 AVG()函数
AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。
7.3.4 MAX()函数
MAX()返回指定列中的最大值。
7.3.5 MIN()函数
MIN()返回查询列中的最小值。
7.4 连接查询
7.4.1 内连接查询
内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录,也就是说,在内连接查询中,只有满足条件的记录才能出现在结果关系中。
7.4.2 外连接查询
返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接)、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。
LEFT JOIN(左连接) 。
RIGHT JOIN(右连接) 。
7.4.3 复合条件连接查询
复合条件连接查询是在连接查询的过程中,通过添加过滤条件,限制查询的结果。
7.5 子查询
7.5.1 带ANY、SOME关键字的子查询
ANY和SOME关键字是同义词,表示满足其中任一条件,它们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。
7.5.2 带ALL关键字的子查询
ALL关键字与ANY和SOME不同,使用ALL时需要同时满足所有内层查询的条件。
7.5.3 带EXISTS关键字的子查询
EXISTS关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS返回的结果是false,此时外层语句将不进行查询。
7.5.4 带IN关键字的子查询
IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。
7.5.5 带比较运算符的子查询
在前面介绍的带ANY、ALL关键字的子查询时使用了>比较运算符,子查询时还可以使用其他的比较运算符,如<、<=、=、>=和!=等。
7.6 合并查询结果
利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个SELECT语句之间使用UNION或UNION ALL关键字分隔。
7.7 为表和字段取别名
7.7.1 为表取别名
为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名替代表原来的名称。
表名 [AS] 表别名
7.7.2 为字段取别名
MySQL可以指定列别名,替换字段或表达式。
列名 [AS] 列别名
7.8 使用正则表达式查询
7.8.1 查询以特定字符或字符串开头的记录
字符‘^’匹配以特定字符或者字符串开头的文本。
7.8.2 查询以特定字符或字符串结尾的记录
字符‘$’匹配以特定字符或者字符串结尾的文本。
7.8.3 用符号"."来替代字符串中的任意一个字符
字符‘.’匹配任意一个字符。
7.8.4 使用"*"和"+"来匹配多个字符
星号‘*’匹配前面的字符任意多次,包括0次。
加号‘+’匹配前面的字符至少一次。
7.8.5 匹配指定字符串
正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如要匹配多个字符串,多个字符串之间使用分隔符‘|’隔开。
7.8.6 匹配指定字符中的任意一个
方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。
7.8.7 匹配指定字符以外的字符
“[^字符集合]”匹配不在指定集合中的任何字符。
7.7.8 使用{M}或者{M,N}来指定字符串连续出现的次数
“字符串{n,}”表示至少匹配n次前面的字符。“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。