数据库MySQL的学习(03)

接数据库MySQL学习(02)下面涉及到的表前面有提供

连表查询

连表查询的语法
select *
from 表1
join 表2
on 表1.字段 = 表2.字段 如果on的条件没有声明,那么结果一定是一个笛卡尔积

连表查询包括如下:

1:内连接,求两张表的交集

-- INNER JOIN可以简写为join 
SELECT * FROM employees emp
INNER JOIN departments dept
ON emp.deptid = dept.deptid

2:左外连接,求左表的全部数据,用右表去匹配,如果按照连表条件能够匹配上就显示数据,如果匹配不上,就用null来代替

-- left outer join  可以简写为LEFT  JOIN 

SELECT * FROM employees emp
LEFT  JOIN  departments dept
ON emp.deptid = dept.deptid
3:右外连接,右边的表全部显示,然后左边的表按照连表条件去匹配,匹配上显示数据,匹配不上用null代替

SELECT * FROM employees emp
RIGHT  JOIN  departments dept
ON emp.deptid = dept.deptid

4:左边表的独有部分

SELECT * FROM employees emp
LEFT  JOIN  departments dept
ON emp.deptid = dept.deptid
WHERE dept.deptid IS NULL

5:右边表的独有部分

SELECT * FROM employees emp
RIGHT  JOIN  departments dept
ON emp.deptid = dept.deptid
WHERE emp.deptid IS NULL

6:公共部分(去重)+左表独有+右表独有

SELECT * FROM employees emp
LEFT  JOIN  departments dept
ON emp.deptid = dept.deptid

UNION

SELECT * FROM employees emp
RIGHT  JOIN  departments dept
ON emp.deptid = dept.deptid

注意:union 可以去重,重复的数据只留一份
union all 不能去重
多个结果集进行union或者union all操作时必须保证两个结果集列的个数相等

7:左边独有+右边独有

SELECT * FROM employees emp
LEFT  JOIN  departments dept
ON emp.deptid = dept.deptid
WHERE dept.deptid IS NULL

UNION 

SELECT * FROM employees emp
RIGHT  JOIN  departments dept
ON emp.deptid = dept.deptid
WHERE emp.deptid IS NULL

多表连表查询

-- 查询每个员工的姓名  邮箱 工资
-- 部门的名称  工种的名称             [要求所有员工全部出现]
-- 以及员工所工作的城市

SELECT 
CONCAT(first_name,last_name) AS 'fullname',
email,
salary,
dept.department_name,
jobs.job_title,
locations.city

FROM employees emp

LEFT JOIN departments dept ON emp.department_id = dept.department_id
LEFT JOIN jobs ON emp.job_id = jobs.job_id
LEFT JOIN locations ON dept.location_id = locations.location_id

单表自连接查询

-- 查询每个员工的姓名以及他直接上一级领导的姓名

SELECT emp1.first_name,emp2.first_name
FROM employees emp1
LEFT JOIN employees emp2
ON  emp1.manager_id = emp2.employee_id

非相关子查询

一个查询语句里面又包含了另外一个完整的查询语句(嵌套查询)

子查询不依赖与外部的查询,可以独立运行

相关子查询

子查询依赖于外部的查询,不能独立运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小理想!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值