D7C323F21177606B5E231DAC0EB38AC0.png
C1E469D1D081133F995DD63AB27FC241.png
# 连接查询 多表查询 #笛卡尔乘积现象 表1 m 行 表2 n 行 结果 m n行
SELECT
user_name, birthday
FROM
user_info,
user_detail_info
WHERE
user_detail_info.id = user_info.id;

/
内连接 :等值连接 非等值 自连接
外连接 :左外 右外 全外
交叉连接
/

#1、等值连接

# 查询对应的 select
from where =【And*】……;表顺序可以换

#加分组

(假设有四个表 id对应 department employee job location)
# 查询每个城市的部门个数
SELECT
COUNT(), city
FROM
departments d,
locations l
WHERE
d.id = l.id
GROUP BY city;

#加排序
#查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT
job_title, COUNT(
)
FROM
employees e,
jobs j
WHERE
e.job_id = j.job_id
GROUP BY job_title
ORDER BY COUNT(*) DESC;

三表连接呢
# …… where =AND =

#2、非等值连接
#查询用户名字的长度和长度级别
SELECT
LENGTH(user_name), grade_level
FROM
user_info,
length_level
WHERE
LENGTH(user_name) BETWEEN lowest_level AND high_level
AND grade_level = ‘A’;

3、自连接 自己表连接自己 找员工对应的领导 看成两张表 我自己和领导表
select e.id,e.name,boss.id,boss.name from 领导关系 e ,领导关系 boss where e.boss_id = boss.id;

sql99语法
/
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
/
/内连接 :inner 等值连接 非等值 自连接
外连接 :左外left [outer] 右外right 全外full [outer]
交叉连接 :cross
/

#一 内连接
/select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件
/
#1 等值连接
# 查询 用户名 和 生日(假设id对应
SELECT
user_name, birthday
FROM
user_info
INNER JOIN
user_detail_info
ON user_info.id = user_detail_info.id;

查询 id个数大于50的英语级别 (添加了分组 加筛选
SELECT
english_level, COUNT()
FROM
user_info
INNER JOIN user_detail_info ON user_detail_info.id = user_info.id
# inner join **
on * 多表连接 inner可以省略
GROUP BY english_level
HAVING COUNT(
) > 50;

非等值连接 自连接同上

# 二、外连接 主表去从表查一个一个匹配 显示主表的所有结果 和从表匹配结果
#如果没有匹配从表则显示null

左外 left join左边主表 右外 right join右边主表

查询id不在前一千的 用户生日 说明生日信息是主表 查交集 (例子不好
select * from user_detail_info where id>=1001;

SELECT birthday,user_info.*
FROM user_detail_info
LEFT OUTER JOIN user_info ON user_detail_info.id = user_info.id where user_info.id is null ;

OT}D8LT)4~K08)9YO0DFZV8.png
# 若只想查null的部分 男朋友boys为null的部分 则加where条件
SELECT beauty.name, boys.
FROM beauty
LEFT OUTER JOIN boys
ON boyid = id
WHERE boys.id is null;
![U]Q}$`I{H4K)L}KNK9YNYB.png
*#三、全外连接 full outer join 不支持

# 全外连接=内连接+表1有但表二没有的 +表2有但表1没有的

#四、交叉连接 cross join m*n行
SELECT beauty., boys.
FROM beauty
CROSS JOIN boys ;