MySql中DQL连接查询介绍

DQL连接查询介绍

连接查询

按年代分:

  1. sq192标准(只支持内连接)
  2. sq199标准

按功能分:

  • 内连接

    等值连接

    非等值连接

    自连接

  • 外连接

    左外连接

    右外连接

    全外连接

  • 交叉连接

    SQL92语法

    等值连接

在这里插入图片描述

在这里插入图片描述

现在有两张表我们想要的是输出boyfriend_id 和 boy表中id匹配的对

SELECT NAME,boyname 
FROM beauty,boys
WHERE beauty.boyfriend_id = boys.id

在这里插入图片描述

非等值连接

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

# 这里我们就用到非等值连接
SELECT salary,grade_level,last_name
FROM employees e,job_grades g
WHERE salary BETWEEN g.lowest_sal AND g.highest_sal
GROUP BY last_name
自连接

在这里插入图片描述

在这里插入图片描述

分析:如上图所示,每个员工后面有个manage_id(领导的id)根据这个manage_id我们可以到这张表中找到id和manage_id相等的员工就是领导的id,这个时候,我们就需要自连接

SELECT e.last_name,e.employee_id,m.employee_id,m.last_name
FROM employees e,employees m
WHERE e.manager_id = m.employee_id

在这里插入图片描述

SQL99语法

语法: SELECT 查询列表

FROM 表1 别名 【连接类型】

JOIN 表2 别名

ON 连接条件

WHERE 筛选条件

连接类型:inner 内连接

left [outer] 左外连接

right[outer] 左外连接

full[outer] 全外连接

cross 交叉连接

等值连接
SELECT last_name,employee_id,employees.job_id
FROM employees INNER
JOIN jobs
ON employees.job_id = jobs.job_id
非等值连接
SELECT salary,grade_level
FROM employees e INNER
JOIN job_grades g
ON salary BETWEEN g.lowest_sal AND g.highest_sal
自连接
SELECT e.last_name,e.employee_id,m.employee_id,m.last_name
FROM employees e INNER
JOIN employees m
ON e.manager_id = m.employee_id
外连接

外连接的结果是主表的所有记录

如果从表有和他匹配的,则显示匹配的值

如果从表中没有和他匹配的,则显示null

外连接的结果 = 内连接的结果 + 主表中有而从表中没有的记录

我们还是拿这两张表举个例子:

一个表是boys表

在这里插入图片描述

一个是beauty表

在这里插入图片描述

内连接没有主表和从表之分,内连接的效果如下图

在这里插入图片描述

可以看到只有匹配上的才会被显示而外连接的结果 = 内连接的结果 + 主表中有而从表中没有的记录,现在我们拿beauty作为主表,那么其中没有匹配上的记录就会显示null

在这里插入图片描述

  • 左外连接:left的左边是主表
  • 右外连接:right join右边是主表
# 左外连接 beauty作为主表
SELECT beauty.name,boys.*
FROM beauty
LEFT OUTER JOIN boys
ON beauty.boyfriend_id = boys.id
ORDER BY boyName

在这里插入图片描述

# 右外连接
SELECT beauty.name,boys.* 
FROM boys
RIGHT OUTER JOIN beauty
ON beauty.boyfriend_id = boys.id
ORDER BY boyName
全外连接

mysql中不支持全外连接,不过可以看作就是右外(左外)连接,分别将两张表做主表,然后取并集

交叉连接
SELECT beauty.name,boys.* 
FROM boys
CROSS JOIN beauty

交叉连接就是笛卡尔乘积,交叉连接后面可以不用接连接条件,如果加上连接条件就是取交集部分,交叉连接和sql92中的效果很像

在这里插入图片描述

SELECT beauty.name,boys.* 
FROM boys
CROSS JOIN beauty
ON beauty.boyfriend_id = boys.id

交叉连接后面可以不用接连接条件,如果加上连接条件就是取交集部分,交叉连接和sql92中的效果很像

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值