6--mysql DQL--连接查询02

sql 99标准

语法: 
select 查询列表
from1 别名 [连接类型]
join2 别名
on  表间连接条件
[where 筛选条件]
[group by分组]
[having 筛选条件]
[order by 排序列表]

内连接
分类:等值、非等值、自连接
特点:可添加排序、分组;inner可省略;inner join和 sql92语法中等值连接是一样的

语法:
select 查询列表
from1 别名
[innner]  join2 别名
on 连接条件

#查询员工名、部门名
SELECT e.last_name,d.department_name 
FROM employees e 
INNER JOIN departments d
ON e.`department_id`=d.`department_id`;

#查询名字中包含e的员工名和工种名
SELECT  e.last_name ,j.job_title 
FROM employees  e
INNER JOIN  jobs j
ON e.`job_id`=j.`job_id`
WHERE  e.`last_name` LIKE '%e%';

#查询部门个数>3的城市名和部门个数
SELECT city,COUNT(*)
FROM locations l
INNER JOIN departments d
ON l.`location_id`=d.`location_id`
GROUP BY city
HAVING COUNT(*)>3;

#查询员工名、部门名、工种名,并按部门名降序
SELECT last_name,department_name,job_title
FROM employees e JOIN jobs j ON e.`job_id`=j.`job_id`  #inner被省略
JOIN departments d ON d.`department_id`=d.`department_id`
ORDER BY job_title DESC;

#查询员工得名字和上级的名字
SELECT e.last_name,m.last_name
FROM employees e
INNER JOIN employees m
ON e.`manager_id`=m.`employee_id`;

外连接
应用场景:用于查询一个表中有,另一个表中没有的记录

特点:
1 外连接的查询结果为主表中的所有记录
		1)如果从表中有和它匹配的,则显示匹配的值
		2)如果从表中没有和它匹配的,则显示null
		3)外连接查询结果 = 内连接查询结果 + 主表中有而从表没有的记录
2 左外连接:left join 左边的是 主表
  右外连接,right join 右边的是主表
3 左外和右外交换两个鼠标的顺序,可以实现同样的效果

#查询没有员工的部门
SELECT department_name ,last_name
FROM departments d
LEFT JOIN employees e
ON e.`department_id`=d.`department_id`
WHERE last_name IS NULL;

注:mysql 不支持全外连接

交叉连接 cross join : 笛卡尔乘积

总结:
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值