1. 检索记录
-
查找满足多个行的记录
可以用 and 和 or 来筛选数据, and 的优先级大于 or ,最好使用()来明确使用优先级。
-
在where中筛选别名
一般SQL语句执行顺序:from > where > select #所以该语句报错 select sal as salary, comm as commission from emp where salary < 5000; #该语句正确 select * from ( select sal as salary, comm as commission from emp ) x where salary < 5000;
-
串联多列的值
select concat(ename, ' WORKS AS A ',job) as msg from emp where deptno=10p;
-
在select中使用条件语句
Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END
–Case搜索函数
CASE
WHEN sex = ‘1’ THEN ‘男’
WHEN sex = ‘2’ THEN ‘女’
ELSE ‘其他’
END
详细讲解:https://www.cnblogs.com/clphp/p/6256207.html -
随机返回限定行数
select ename,job from emp order by rand() limit 5;
-
查找null值
要判断一个值是否为 Null,必须使用 IS Null。 不能使用 = 或 != 来测试某一列的值是否为 Null。
-
把null值转换为其他值
select coalesce(comm,0) from emp; #把null转换为0
-
查找匹配项
in (...) 适用于后面数据集较小的情况(执行顺序是先执行in后面的子句,后执行前面的子句) exists ... 适用于前面查询数据集较小的情况(执行顺序是先执行exists前面的子句,后执行后面的子句) 在执行 in 时需要考虑 null 值的影响(注:(true or null)=true,但是(false or null)=false。所以尽量用exists。)
-
排序时对null值的处理
方法一: select ename,sal,comm from ( select ename,sal,comm, case when comm is null then 0 else 1 end as is_null from emp )x order by is_null desc,comm;
方法二:
select ename,sal,comm
from emp
order by coalesce(comm,0) desc,comm;
2. 多表查询
-
叠加多个行集
使用 union 或者 union all 来叠加数据集。 union 会删除重复值。 union all 不会删除重复值,速度较快。
-
连接多个表
形式1: select e.ename, d.loc, e.deptno as emp_deptno, d.deptno as dept_deptno from emp e, dept d where e.deptno = d.deptno and e.deptno = 10; 形式2: select e.ename, d.loc from emp e inner join dept d on (e.deptno = d.deptno) where e.deptno = 10;
-
查找两个表中某一/多列相同的行
方法:内连接或者用in。
查找某一列的值相同:
select e.empno,e.ename,e.job,e.sal,e.deptno
from emp e
where e.ename in
(select ename from V);查找一/多列的值相同:
select e.empno,e.ename,e.job,e.sal,e.deptno
from emp e join V
on ( e.ename = v.ename
and e.job = v.job
and e.sal = v.sal ) -
查找只存在一个表中的数据
方法:用 in (子查询)。
-
从一个表检索与另一个表不相关的行
方法