连接查询
又叫多表查询.核心是将多个表进行连接后一起查询.
多个表的含义是,既可以是自己,也可以是一张表,还可以是多张表.
目前所使用的语法是sql99,支持比较多的连接方式
内连接
主要包括三方面的连接,
- 等值连接
- 非等值连接
- 自连接
内连接查询模板
最好是别名,利于修改
1 | SELECT |
等值连接
等值连接是通过两个或者多个表中相同字段进行连接.
等值连接的模板在内连接的模板上进行修改了,但是内连接模板差不多等于等值连接了.
其中inner可以省略
例1:查询有奖金的员工名和部门名
1 | SELECT |
例1输出:
同时在这里添加筛选和分组,以及排序,之前的语法适用于所有的连接。
在多表连接的情况类似。
例2:查询员工名,部门名,工种名,并按部门名降序(三表查询)
1 | SELECT |
例2输出:
非等值连接
非等值连接中的表,并没有相同的字段可以进行连接
例3:
例3输出
自连接
自连接相当于等值连接,是一种比较特殊的连接.连接的对象是自己的,所以一定需要取别名
例4
1 | # 查询员工的名字,上级的名字 |
例4输出
last_name | last_name |
---|---|
Kochhar | K_ing |
De Haan | K_ing |
外连接
左外连接与右外连接本质上是相似的
都是遍历主表的所有内容还有从表相交集的地方
left join 说明是左边的为主表
right join 说明是右边的为主表
左外连接:除了返回两表中满足连接条件的元组外,还返回左侧表中的不匹配元组
详细说明:
例5 查询哪个部门没有员工
左外连接
1 | SELECT d.*,e.employee_id |
例5输出结果
department_id | department_name | manager_id | location_id | employee_id |
---|---|---|---|---|
120 | Tre | 1700 | ||
130 | Cor | 1700 | ||
140 | Con | 1700 |
交叉连接
迪卡尔乘积,所有的内容一起方法放入了。总行数等于n*m了