基本查询
SELECT * FROM <表名>; 可以查询一个表的所有行和所有列的数据。
SELECT 1; //测试数据库连接;
条件查询
SELECT * FROM <表名> WHERE <条件表达式>;
<条件表达式>:
<条件1> AND <条件2>
<条件1> OR <条件2>
NOT <条件> :不符合该条件记录
优先级: NOT > AND > OR
使用LIKE判断相似:name LIKE 'ab%' %表示任意字符,例如‘ab%’将匹配‘ab’,'abc','abcd'
投影查询(只希望返回某些列的数据)
SELECT 列1,列2,列3 FROM <表名>;
排序(默认:升序ASC,降序DESC)
从低到高:SELECT * FROM <表名> ORDER BY <列名>;
从高到低:SELECT * FROM <表名> ORDER BY <列名> DESC;
有相同数据,要进一步排序,可以继续添加列名。
SELECT * FROM <表名> ORDER BY <列名1> DESC,<列名2>;
注意:如果有WHERE字句,那么ORDER BY 字句要放到WHERE字句后面。
SELECT * FROM <表名> WHERE <条件表达式> ORDER BY <列名>;
分页:从结果集中截取第“M~N”条记录。
LIMIT <M> OFFSET <N> :索引从N开始的M条记录。
聚合查询:使用聚合函数进行查询。
SELECT COUNT(*) num FROM <表名>;
COUNT(*):表示查询所有列的行数,num:列的别名。
函数 | 说明 |
COUNT | 查询所有列的行数 |
SUM | 计算某一列的合计值,该列必须为数值类型 |
AVG | 计算某一列的平均值,该列必须为数值类型 |
MAX | 计算某一列的最大值 |
MIN | 计算某一列的最小值 |
聚合查询可以使用WHERE条件,没有匹配到行是COUNT返回0,而SUM\AVG\MAX\MIN返回null.
分组聚合查询:
SELECT <列名1>,<列名2>, COUNT(*) num FROM <表名> GROUP BY <列名1>,<列名2>;
注意:聚合查询的列中,只能放分组的列。
多表查询(又称笛卡尔查询)
SELECT * FROM <表1> <表2>;
结果集的列数是<表1>和<表2>列数之和,行数是<表1>和<表2>行数之积
可以利用投影查询“设置列的别名”:
通过给表设置别名来简化查询:
注意:多表查询的结果集可能非常巨大,要小心使用。
连接查询:对多个表进行JOIN运算,先确定一个主表作为结果集,然后,把其他表的行有选中性的“连接”在主表结果集上。
内连接:INNER JOIN
注意INNER JOIN查询的写法是:
- 先确定主表,仍然使用
FROM <表1>
的语法; - 再确定需要连接的表,使用
INNER JOIN <表2>
的语法; - 然后确定连接条件,使用
ON <条件...>
,这里的条件是s.class_id = c.id
,表示students
表的class_id
列与classes
表的id
列相同的行需要连接; - 可选:加上
WHERE
子句、ORDER BY
等子句。
外连接:OUTER JOIN
SELECT ... FROM <表1> ... JOIN <表2> ON <条件...>;
<表1>看作左表,<表2>看作右表
INNER JOIN:只返回同时存在与两张表的行数据。
RIGHT OUTER JOIN:返回右表都存在的行。如果某一行仅在右表存在,那么结果集就会以NULL填充剩下的字段。
LEFT OUTER JOIN:返回左表都存在的行。
FULL OUTER JOIN:把两张表的所有记录全部选择出来,并且,自动把对方不存在的列填充为NULL。
注:JOIN 查询需要先确定主表,然后把另一个表的数据“附加”到结果集上。
仍然可以使用WHERE条件和ORDER BY 排序。