SQL 查询
2019-09-29 本文已影响0人
wpf_register
查询单列
SELECT 列名 FROM 表名;
//起别名时AS 可以省略
SELECT 列名 [AS] 列的别名 FROM 表名;
查询多个列
SELECT 列名1, 列名2, ... 列名n FROM 表名;
查询所有列
尽量避免使用*号,会影响性能
SELECT * FROM 表名;
去除相同的查询结果
- 去除单列的重复结果
SELECT DISTINCT 列名 FROM 表名;
- 去除多列的重复结果
查询结果是以行为单位返回的,所以两行记录重复就过滤
两条记录重复的意思是:两条记录的每一个列中的值都相同
SELECT DISTINCT 列名1, 列名2, ... 列名n FROM 表名;
department | major |
---|---|
计算机学院 | 计算机科学与工程 |
计算机学院 | 计算机科学与工程 |
计算机学院 | 软件工程 |
计算机学院 | 软件工程 |
航天学院 | 飞行器设计 |
航天学院 | 电子信息 |
SELECT DISTINCT department,major FROM student
department | major |
---|---|
计算机学院 | 计算机科学与工程 |
计算机学院 | 软件工程 |
航天学院 | 飞行器设计 |
航天学院 | 电子信息 |
限制查询结果条数
LIMIT 开始行, 限制条数;
LIMIT 限制条数; //默认从第0行开始
对查询结果排序
ORDER BY 列名 ASC|DESC
ORDER BY 列1 ASC|DESC, 列2 ASC|DESC ...
说明:
ASC和DESC指的是排序方向。
ASC是由小到大进行排序,也叫做升序,
DESC是由大到小进行排序,也叫做降序,
中间的|表示这两种方式只能选一个
默认ASC 升序列列,所以ASC可省略。
搜索条件
操作符 | 示例 | 说明 |
---|---|---|
= | a=b | 等于 |
<> 或 != | a<>b | 不等于 |
< | a<b | 小于 |
> | a>b | 大于 |
<= | a<=b | 不大于 |
>= | a>=b | 不小于 |
BETWEEN | a BETWEEN b and C | c <= a <= b |
NOT BETWEEN | a NOT BETWEEN b and C | |
IN | a IN (b1,b2...) | |
NOT IN | a NOT IN(b1,b2...) | |
IS NULL | a IS NULL | 值为NULL |
IS NOT NULL | a IS NOT NULL | |
OR | 或条件 | |
AND | 与条件 | 优先级高于OR |
LIKE | 匹配 | |
NOT LIKE | 不匹配 |
关于通配符
- %:代表任意一个字符串
- _:代表任意一个字符
- '%'代表普通字符'%','%'代表普通字符'%'
子查询
操作符 | 示例 | 说明 |
---|---|---|
EXISTS | EXISTS(select...) | 子查询有结果时为真 |
NOT EXISTS | NOT EXISTS(select...) | 子查询没有结果时为真 |
SELECT * FROM student_score
WHERE EXISTS
(SELECT * FROM student_info WHERE number = 20180108);
如果子查询没有结果直接返回false,
外层查询也就不再查,直接返回 Empty set,
查询科目成绩大于平均值
//错误 聚合函数不能放在where内
SELECT * FROM studentScore
WHERE subject = '母猪护理' AND score > AVG(score);
//正确
SELECT * FROM studentScore
WHERE subject = '母猪护理'
AND score >
(SELECT AVG(score) FROM studentScore WHERE subject = '母猪护理');
组合查询
- 查询列表相同
合并查询列数必须相同
SELECT m1, n1 FROM t1
WHERE m1 < 2
OR m1 > 10
OR m1 = 5;
或组合查询
SELECT m1, n1 FROM t1 WHERE m1 < 2
UNION
SELECT m1, n1 FROM t1 WHERE m1 > 10
UNION
SELECT m1, n1 FROM t1 WHERE m1 = 5
- 查询列表不同
虽然m1、n1和m2、n2是两个不同的查询列表,
但是m1和m2都是整数类型的,n1和n2都是字符串类型的,
所以查询结果拼接到一起。
查询的结果集中显示的列名将以第一个查询中的列名为准
SELECT m1, n1 FROM t1 WHERE m1 < 2
UNION
SELECT m2, n2 FROM t2 WHERE m2> 10
ORDER BY m1 DESC
- 使用UNION来合并多个查询的记录会默认过滤掉重复的记录,如果想要保留重复记录,可以使用UNION ALL来连接多个查询。