【Mysql】二、Mysql基础篇 --- 表连接

sql92语法

一、等值链接

相当于将两张表的数据全部链接起来,相等的数据为同一行,组成一个大的表

SELECT * FROM users, projects
WHERE users.id = projects.user_id

案例1: 没有连接条件
users表数据9条,projects表数据3条

SELECT * FROM users, projects

查询结果共有27条数据
在这里插入图片描述
该情况,数据库会以左表或者右表为主,会匹配另一张表的每一行,效果如下:
在这里插入图片描述
案例2: 有连接条件
简单来说就是:连接符合条件的所有行

SELECT * FROM users, projects
WHERE users.id = projects.user_id

在这里插入图片描述
此时,users的id要等于projetcs的user_id时,两条数据才算是匹配上,查询顺序如下:
在这里插入图片描述

二、非等值连接

关联关系不是用=号连接的连接关系

案例1:员工的薪资等级

SELECT u.id,s.level, u.salary
FROM users u, salary_grades s
WHERE u.salary BETWEEN s.lower_salary AND s.high_salary

users表匹配工资等级表,连接薪资范围,符合范围对应的行,连接成一行。
在这里插入图片描述
上述sql等价于如下的等值连接:

SELECT u.id,s.level, u.salary
FROM users u, salary_grades s
WHERE u.salary > s.lower_salary AND u.salary < s.high_salary 

三、自连接

自连接故名思意,就是自己连接自己

-- u2是领导表  u1是员工表
SELECT u2.last_name '领导name', u1.last_name '员工name'
FROM users u1, users u2
WHERE u1.leader_id = u2.id AND u1.leader_id IS NOT NULL

在这里插入图片描述

sql99语法

连接查询必定会涉及到on和where,
where:先生成关联表,然后where才对行进行筛选
on:先筛选后join,left join还是会把坐标中不匹配的行也全部返回
on是先筛选后关联,where是先关联后筛选,where结果集 < on结果集

四、内连接(INNER JOIN)

将关联表所有符合条件的行连接,不符合条件的不输出(有点类似等值连接)
案例1:求员工领导

SELECT u2.last_name '领导name', u1.last_name '员工name'
FROM users u2
INNER JOIN users u1 ON u1.leader_id = u2.id

在这里插入图片描述

案例2:内连接和左连接对比

-- 左连接
SELECT users.id , projects.user_id, projects.id
FROM users
LEFT JOIN projects ON projects.user_id = users.id
-- 内连接
SELECT users.id , projects.user_id, projects.id
FROM users
INNER JOIN projects ON projects.user_id = users.id

左连接:
在这里插入图片描述
内连接:
在这里插入图片描述
案例3:插叙员工薪资等级

SELECT u.id,s.level, u.salary
FROM users u
INNER JOIN salary_grades s ON u.salary BETWEEN s.lower_salary AND s.high_salary

在这里插入图片描述

五、外连接(LEFT JOIN / RIGHT JOIN)

外连接分为做连接和右连接。左连接是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出而右表只列出ON后条件与左表满足的部分

SELECT users.id , projects.user_id, projects.id
FROM users
LEFT JOIN projects ON projects.user_id = users.id

在这里插入图片描述

六、交叉连接

两张表所有数据都会匹配行,全部数据的笛卡尔积,用处不多

SELECT * FROM users
CROSS JOIN projects
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼小鱼啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值