文章目录
1. 关于查询结果集的去重
-distinct
select distinct job from emp;
distinct
只能出现在所有字段的最前面。
select distinct deptno,job from emp;
去重的是
deptno和job
联合去重
distinct表示后面的字段联合去重
-
统计岗位的数量?
select count(distinct job) from emp;
2. 连接查询
2.1 什么是连接查询
在实际开发中,大部分的情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。
在实际开发中,一般一个业务都会对应多张表,比如:学生和班级,起码两张表。
2.2 连接查询的分类
2.2.1 年代划分
根据语法出现的年代来划分的话,包括:
- SQL92(一些老的DBA可能还在使用这种语法。DBA:DataBase Administrator,数据库管理员)
- SQL99(比较新的语法)
2.2.2 表的连接方式划分
- 内连接
- 等值连接
- 非等值连接
- 自连接
- 外连接
- 左外连接
- 右外连接
- 全连接
2.3 内连接
2.3.1 等值连接
最大特点是:条件是等量关系
-
查询每个员工的部门名称,要求显示员工名和部门名
SQL92:太老了,不常用
select e.ename,d.dname from emp e,dept d where e.dept = d.dept
SQL99:常用的
select e.ename,d.dname from emp e join dept d on e.dept = d.dept
inner可以省略,带inner目的是可读性好一些
select e.ename,d.dname
from emp e
inner join dept d
on e.deptno = d.deptno;
语法:
... A join B
on 连接条件
where ...
2.3.2 非等值连接
最大的特点是:连接条件中的关系是非等量关系
- 找出每个员工的工资等级,要求显示员工名、工资、工资等级
select ename,sal from emp; //14
+--------+---------+
| ename | sal |
+--------+---------+
| SMITH | 800.00 |
| ALLEN | 1600.00 |
| WARD | 1250.00 |
| JONES | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| TURNER | 1500.00 |
| ADAMS | 1100.00 |
| JAMES | 950.00 |
| FORD | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
select * from salgrade; //5
+-------+-------+-------+
| GRADE | LOSAL | HISAL |
+-------+-------+-------+
| 1 | 700 | 1200 |
| 2 | 1201 | 1400 |
| 3 | 1401 | 2000 |
| 4 | 2001 | 3000 |
| 5 | 3001 | 9999 |
+-------+-------+-------+
如果没有条件的话,会产生笛卡尔积,有14*5条数据
select e.ename,e.sal,s.grade
from emp e join salgrade s
on e.sal between s.losal and s.hisal;
+--------+---------+-------+
| ename | sal | grade |
+--------+---------+-------+