【一文看懂SQL系列】最麻烦的连接查询,看图秒懂

21小时学数据库 数据库知识汇总

连接查询

又称为多表查询,应用于多表连接的情况下

问题引入:
当执行SELECT name, boy_name FROM beauty, boys 会出现笛卡尔积的情况

笛卡尔积:表1 有 m 行, 表2 有 n行, 结果为 m*n 行

发生原因:没有有效的连接情况

分类:

按功能分类
	内连接
			等值连接
			非等值连接
			自连接
	外连接
		   左外连接
		   右外连接
		   全外连接
   交叉连接  	   
SQL92 内连接
一、等值连接
SELECT name, boy_name  
FROM beauty, boys 
WHERE beauty.boy_id = boys.id

可以通过给表起别名来提高语句的简洁度,但是如果为表起了别名,则查询的字段就不能使用原来的表名去限定

二、非等值连接
SELECT e.salary, g.grade  
FROM employees e, job_grades g 
WHERE e.salary 
BETWEEN g.lowest_salary AND g.highest_salary
三、自连接
SELECT e.last_name, m.last_name  
FROM employees e, manager m 
WHERE e.employ_id = m.manager_id
SQL99 连接查询

语法SELECT 查询列表 FROM 表1 别名 【连接类型】 JOIN 表2 别名 ON 连接条件 【WHERE 筛选条件】 【GROUP BY 分组条件】【HAVING 筛选条件】【ORDER BY 排序列表】
分类

内连接 INNER
外连接 左外 LEFT OUTER 右外 RIGHT OUTER
全外 FULL OUTER
交叉连接 CROSS
(一)内连接

在这里插入图片描述

一、等值连接
SELECT name, boy_name  
FROM beauty 
INNER JOIN boys 
ON beauty.boy_id = boys.id
二、非等值连接
SELECT salary, grade  
FROM employees e 
INNER JOIN job_grades g 
ON e.salary 
BETWEEN g.lowest_salary AND g.highest_salary
三、自连接
SELECT e.last_name, m.last_name  
FROM employees e 
INNER JOIN manager m 
ON e.employ_id = m.manager_id
(二)外连接
一、左外右外连接

在这里插入图片描述
应用场景: 用于查询一个表中有,另一个表中没有的记录
特点

  1. 外连接的查询结果为主表中的所有记录。如果从表中没有与之匹配的,则显示NULL。外连接查询结果=内连接结果+主表中有从表中没有的记录
  2. 左外连接,LEFT JOIN 左边是主表;右外连接,RIGHT JOIN 右边是主表
  3. 左外由外交换两表的顺序可以实现同样的效果

左外案例

SELECT name, boy_name  
FROM beauty 
LEFT OUTER JOIN boys 
ON beauty.boy_id = boys.id

若想看主表中有从表中没有
在这里插入图片描述

SELECT name, boy_name  
FROM beauty 
LEFT OUTER JOIN boys 
ON beauty.boy_id = boys.id 
WHERE boys.id IS NULL
二、全外连接

在这里插入图片描述
特点:1. 全外连接 = 内连接结果 + 表1有表2没有 + 表1没有表2有

在这里插入图片描述

SELECT name, boy_name  
FROM beauty 
FULL OUTER JOIN boys 
ON beauty.boy_id = boys.id 
WHERE boys.id IS NULL
三、交叉连接
SELECT name, boy_name  
FROM beauty 
CROSS JOIN boys

交叉连接(笛卡尔乘积结果)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值