外连接SQL99语法

# sql99语法
/*
99语法:
    select 查询列表
    from    表1 别名 (连接类型)
    join  表2    别名 (连接类型)
    on 连接条件
    WHERE 筛选条件
    GROUP BY
    having 限制分组后的内容
    ORDER BY



92语法
    select 查询列表
    from    表1 别名,表2 别名
    WHERE 连接条件
与99语法相比,其区别在于99用join代表多个表而92直接在from后面用,代表含义,
99连接条件用on,92连接条件和筛选条件都用where

连接类型
内连接:inner(重点)
外连接:
    左外    left 
    右外    rigth
    全外    full 
交叉连接cross 

*/

#内连接
/*
select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件
*/

#99语法等值连接
#案例1,查询员工名,部门名
select last_name ,department_name
FROM employees e
INNER JOIN departments d
on e.department_id = d.department_id;

#案例2,查询名字中包含e的有员工名和工种名
select last_name,job_title
from employees e
INNER JOIN jobs j
on e.job_id = j.job_id
WHERE e.last_name like '%e%';

#案例3,查询部门个数大于3的城市名和部门个数(分组+筛选)
select COUNT(*),city
FROM departments d
INNER JOIN locations l
ON d.location_id = l.location_id
GROUP BY city
HAVING  COUNT(*)>3;

#案例4,查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序)
select count(*),department_name
FROM employees e
INNER JOIN departments d
on e.department_id = d.department_id
GROUP BY department_name
HAVING COUNT(*) > 3
ORDER BY COUNT(*) DESC;


#外连接
/*
应用场景:用于查询一个表中有,另一个表中没有的记录。
特点:
1:外连接的查询结果为主表的所有记录。如果从表有匹配,则显示匹配值
如果没有匹配,则显示null。
2:左外连接:left join 左边是主表
右外连接:right join 右边是主表

*/

#案例1,查询男朋友,不在男神表中的女神名。
select b.name,bo.*
FROM beauty b
LEFT OUTER JOIN boys bo
ON b.boyfriend_id = bo.id
WHERE bo.id is null;
#WHERE 和Having作为筛选条件的区别:两个都是用来筛选条件的,
#但是Where的范围是原始数据表的内容筛选,
#而Having是对group分组的内容做筛选。

#案例2,查询哪个部门没有员工
#右外
SELECT d.*,e.employee_id
FROM employees e
RIGHT OUTER JOIN departments d
ON d.department_id = e.department_id
WHERE e.employee_id is NULL;


#全外连接
USE girls;
SELECT b.*,bo.*
FROM beauty b
FULL OUTER JOIN boys bo
ON b.boyfrieds_id = boys.id;


#内连接
#

 

 

posted @ 2020-04-03 19:44  大朱123  阅读(386)  评论(0编辑  收藏  举报