基本查询:
SELECT 字段列表
FROM <表1><表2>...
WHERE <表达式>
GROUP BY _____
HAVING [{operetor expresion}...]
ORDER BY_____
LIMIT
单表查询:
SELECT * FROM 表名;
SELECT 字段 FROM 表名;
SELECT 字段1,字段2... FROM 表名;
SELECT 字段1,字段2... FROM 表名 WHERE 条件;
(条件判断符:=,<>,<,<=,>,>=,between)
带in关键字:SELECT 字段 FROM 表名WHERE 字段 IN(NOT IN) 条件1,条件2...;
带between and:SELECT 字段 FROM 表名 WHERE 字段 (NOT) BETWEEN 条件 AND条件;
带like(%,_通配符):SELECT 字段 FROM 表名 WHERE 字段 LIKE'通配';
查询控制:SELECT 字段 WHERE 字段 IS (NOT) NULL;
带and:SELECT 字段 FROM 表名 WHERE 条件 AND 条件;
带or:SELECT 字段 FROM 表名 WHERE 条件 OR 条件;
查询结果不重复:SELECT DISTINCT 字段 FROM 表;
单列排序:SELECT 字段 FROM 表 ORDER BY 条件;
多列排序:SELECT 字段 FROM 表 ORDER BY 列,列...;
指定排序方向:SELECT 字段 FROM 表 ORDER BY 列 顺序(DESC,ASC);
分组查询:GROUP BY ... HAVING ...
创建分组:SELECT 字段 COUNT(*) AS TOTAL FROM 表 GROUP BY 条件;
分组里全部字段:SELECT 字段 GROUP_CONCAT(字段) AS name FROM 表 GROUP BY字段;
用having过滤:SELECT 字段 FROM 表 GROUP BY 字段 HAVING 条件;
with rollup在最后加一条所有记录的和:SELECT 字段 FROM 表 GROUP BY字段1,字段2;
limit限制数量:SELECT 字段 FROM 表LIMIT 数1,数2;(从数1+1条开始查出数2条记录)
使用集合函数查询:AVG(),COUNT(),MAX(),MIN(),SUM()都可以和WHERE,GROUPBY一起连用
连接查询:
内连接:
例1:SELECT suppliesr,s_id,s_name,f_name,f_price FROMfruits,suppliers WHERE fruits.s_id=suppliers.s_id;
例2:SELECT suppliers,s_id,s_name,f_name,f_price FROM fruitsINNER JOIN suppliers ON fruits.s_id=suppliers.s_id;
自连接(特殊的内连接,在一张表中查询):
例:SELECT f1.f_id,f1.f_name FROM fruits AS f1.fruits AS f2WHERE f1.s_id=f2.s_id AND f2.f_id='a1';
左连接:
例:SELECT 字段... FROM 表1 LEFT JOIN 表2 ON 条件 LEFT JOIN 表3 ON 条件...;
右连接:
例:SELECT 字段... FROM 表1 RIGHT JOIN 表2 ON 条件 LEFT JOIN 表3 ON 条件...;
※mysql没有全连接,只能 左连接 UNION 右连接 代替全连接
符合条件连接查询:连接后的on条件后还可以加条件,排序等。
子查询:
例:SELECT num1 FROM tb2 WHERE num1>ANY(SELECT num2 FROMtb2);
将tb2例的所有num2与num1比较,大于任意一个数就列出num1,如果要后面所有条件都成立,把ANY换成ALL
EXISTS 如果后面的语句有返回的查询,则进行前面的查询,可以和条件一起用,条件放前面(NOTEXISTS相反)
in的子查询:in后面的是数据列,把in前面的数和数据列例比较
例:SELECT c_id FROM orders WHERE o_num IN (SELECT o_num FROMorderitems WHERE f_id='c0');(NOT IN 相反)
带比较符的子查询:
例:SELECT s_id,f_name FROM fruits WHERE s_id = (SELECT s1.s_idFROM suppliers AS s1 WHERE s1.s_city='GuangZhou');
合并查询结果:
SELECT 字段 FROM 表1
UNION (ALL())
SELECT 字段 FROM 表2
※union是把两次查询的记录所有条数合并,合并时删除重复记录,union all不删除重复记录,不排序
正则表达式查询:
例:SELECT * FROM fruits WHERE f_name REGEXP 表达式;
'^b'
以b开头
'y$'
以y结尾
'a.g'
.代表任意字符,查a?g
'^ba*'
以b开头,后面出现a(0次也算)
'^ba+'
以b开头,a至少出现一次
'on|ap'
包含on或ap
'[ot]'
包含o或t
'[^a-e 1-2]'
不在o——e,1——2之间
'x{2,}'
x至少出现2次
'x{2,3}'
x至少出现2次,最多3次