学到这里感觉难度开始加大,因此还是把脚步放慢一点,认真学
SELECT e.last_name 员工,m.last_name 上司
FROM employees e
INNER JOIN employees m
ON e.manager_id
=m.employee_id
;
#二、外连接
/*
一个表的一行去依次匹配另一个各行的数据
应用场景:一个表中有,另一个表没有的
特点:
1、外连接的查询结果为主表中的所有记录
若从表有匹配的,则显示匹配的值
若从表无匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表无匹配的结果
2、左外连接:left join左边的是主表
右外连接:right join右边的是主表
*/
交叉连接 cross join 笛卡尔乘积
子查询:比较有难度
/*
含义:(内部嵌套)
出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询
分类:
按子查询出现位置:
select后:
仅支持标量子查询
from 后:
支持子查询
where或having后:
标量子查询、列子查询、行子查询
exists后(相关子查询):
表子查询
按结果集的行列数:
标量子查询(结果集只有一行一列)
列子查询(结果集一列多行)
行字查询(多行多列)
表子查询(结果集)
*/
SELECT b.name,bo.*
FROM beauty b LEFT JOIN boys bo
ON b.boyfriend_id
=bo.id
WHERE bo.id
IS NULL
;
SELECT d.*,e.employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.department_id
=e.department_id
WHERE e.employee_id
IS NULL;
USE girls;
SELECT bo.*
FROM beauty b LEFT OUTER JOIN boys bo
ON b.boyfriend_id
=bo.id
WHERE b.id
>3 ;
SELECT city,d.*
FROM departments d
RIGHT OUTER JOIN locations l
ON d.manager_id
=l.location_id
WHERE d.location_id
IS NULL;
#一、where或having后
1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(多列多行)
特点:
1.子查询放在小括号内
2.子查询一般放在条件的右侧
3.标量子查询,一般搭配着单行操作符使用
列子查询:一般搭配着多行操作符使用
IN 、 ANY|SOME ALL
#1标量子查询