1、基本查询语句
SELECT
{*|}
[FROM ,...[WHERE ][GROUP BY ][HAVING [{}...]][ORDER BY ][LIMIT[,]]]
2、单表查询
2.1、查询所有字段:
1)、在SELECT语句中使用‘*’通配符查询所有字段
SELECT * FROM 表名;
2)、在SELECT语句中指定所有字段。
SELECT s1,s2,s3,...,sn FROM 表名;
2.2、查询指定字段:
1)、查询单个字段
SELECT 列名 FROM 表名;
2)、查询多个字段
SELECT s1,s2,s3,...,sn FROM 表名;
2.3、查询指定记录:
SELECT 字段名1,字段名2,...字段名n FROM 表名 WHERE 查询条件;
2.4、带IN关键字的查询:
1)、IN操作符用来查询满足指定范围内的条件的记录,使用IN操作符,将所有条件用括号括起来,检索条件用逗号分隔开,只要满足条件范围内的一个值即为匹配项。
SELECT 字段名1,字段名2,...字段名n FROM 表名 WHERE 字段名 IN (条件1,条件2,...条件n);
2)、NOT IN操作符用来查询不满足指定范围内的条件的记录。
SELECT 字段名1,字段名2,...字段名n FROM 表名 WHERE 字段名 NOT IN (条件1,条件2,...条件n);
5、带BETWEEN AND的范围查询:
1)、BETWEEN AND 用来查询某个范围内的值,该操作需要两个参数,即范围的开始值和结束值,如果字段值满足指定的范围查询条件,则这些记录被返回。
SELECT 字段名1,字段名2,...字段名n FROM 表名 WHERE 字段名 BETWEEN 开始值 AND 结束值;
2)、NOT BETWEEN AND 用来查询指定范围外的值。
SELECT 字段名1,字段名2,...字段名n FROM 表名 WHERE 字段名 NOT BETWEEN 开始值 AND 结束值;
6、带LIKE的字符匹配查询:
1)、百分号通配符'%',匹配任意长度的字符,甚至包括零字符。
2)、下划线通配符'_',一次只能匹配任意一个字符 。
7、查询空值:
1)、IS NULL查询某字段为空值。
2)、NOT IS NULL 查询某字段不为空值。
8、带AND的多条件查询
SELECT 字段名1,字段名2,...字段名n FROM 表名 WHERE 查询条件1 AND 查询条件2 AND 查询条件3;
9、带OR的多条件查询:
只需要满足一个条件的记录即可返回,和IN操作符功能相同,但是IN操作符使得检索语句更加简洁明了,并且IN执行速度快于OR,IN操作符可以执行更加复杂的嵌套查询。OR可以和AND一起使用,但是AND的优先级高于OR。
SELECT 字段名1,字段名2,...字段名n FROM 表名 WHERE 查询条件1 OR查询条件2 OR 查询条件3;
10、查询结果不重复:
SELECT DISTINCT 字段名 FROM 表名;
11、对查询结果排序:ORDER BY
1)、单列排序
2)、多列排序
3)、指定排序方向(ASC,DESC)
12、分组查询:
1)、创建分组
SELECT 字段名1,字段名2,...字段名n
FROM 表名
WHERE 查询条件
[GROUP BY 字段][HAVING ];
2)、使用HAVING过滤分组
3)、在GROUP BY子句中使用WITH ROLLUP
使用WITH ROLLUP关键字后,在所有查询出的分组记录数之后增加一条记录,该记录计算查询出的所有记录的总和
4)、多字段组合
5)、GROUP BY和ORDER BY同时使用
13、使用LIMIT限制查询结果的数量
LIMIT [位置偏移量,] 行数
3、使用集合函数查询
1、COUNT()函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。其使用方法有两种:
1)、COUNT(*)计算表中总的行数,不管某列有数字或者为空值。
2)、COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。
2、SUM()是一个求总和的函数,返回指定列值的总和。
3、AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。
4、MAX()函数返回指定列中的最大值。
5、MIN()函数返回指定列中的最小值。
4、连接查询
1、内连接查询:
内连接(INNER JOIN) 使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的纪录,也就是说,在内连接查询中,只有满足条件的记录才能出现在结果关系中。
2、外连接查询:
1)、LEFT JOIN 左连接:返回包括左表中的所有记录和右表中连接字段相等的记录。
2)、RIGHT JOIN 右连接:返回包括右表中的所有记录和左表中连接字段相等的记录。
3、复合条件连接查询:
在连接查询的过程中,通过添加过滤条件,限制查询的结果,使查询的结果更加准确。
5、子查询
1、带ANY和SOME关键字的子查询
ANY和SOME关键字是同义词,表示满足其中任一条件,他们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。
2、带ALL关键字的子查询
ALL关键字接在一个比较操作符的后面,表示与子查询返回的所有值b比较为true,则返回true。
3、带EXISTS关键字的子查询
EXISTS关键字的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS的结果为false,此时外层语句将不进行查询。
NOT EXISTS与EXISTS使用方法相同,返回的结果相反,子查询如果至少返回一行,那么NOT EXISTS的结果为false,此时外层查询语句将不进行查询;如果子查询没有返回任何行,那么NOT EXISTS的结果为true,此时外层语句将进行查询。
4、带IN关键字的子查询
IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较。
NOT IN 作用与IN作用相反。
5、带比较运算符的子查询
比如">"、"="、""等。
6、合并查询结果:
利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并时两个表对应的列和数据类型必须相同。各个SELECT语句之间使用UNION或UNION ALL关键字隔开。UNION不使用关键字ALL,执行的时候删除重复的记录,所有返回的行都是唯一的;使用关键字ALL的作用是不删除重复行也不对结果进行自动排序。
SELECT column,..... FROM table1UNION [ALL]SELECT column,..... FROM table2
7、为表和字段取别名:
1)、为表去别名
当表名很长或者执行一些特殊查询时,为了方便操作h或者需要多次使用相同表时,可以为表指定别名,用这个别名替代表原来的名称。
表名 [AS] 表名
2)、为字段取别名
列名 [AS] 列别名
8、使用正则表达式查询:(使用REGEXP关键字指定正则表达式的字符匹配模式)
1)、查询以特定字符或字符串开头的记录
字符 '^' 匹配以特定字符或字符串开头的记录
2)、 查询以特定字符或字符串结尾的记录
字符 '$' 匹配以特定字符或字符串结尾的记录
3)、用符号 '.' 来代替字符串中的任意一个字符
字符 '.' 匹配任意一个字符。
4)、使用"*"和"+"来匹配多个字符
"*"匹配前面的字符任意多次包括0次。"+"匹配前面的字符至少一次。
5)、匹配指定字符串
正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如要匹配多个字符串,多个字符串之间s使用分隔符'|'隔开。
6)、匹配指定字符中的任意一个
"[]"指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。
7)、匹配指定字符以外的字符
"[^字符集合]"匹配不在指定集合中的任何字符。
8)、使用{n,}或者{n,m}来指定字符串连续出现的次数
"{n,}"表示至少匹配n次前面的字符;
"{n,m}"表示匹配前面的字符串不少于n次,不多于m次。