美文网首页
p79SQL-多表查询-join

p79SQL-多表查询-join

作者: 无力韬韬 | 来源:发表于2020-11-30 19:49 被阅读0次

    join 语法:

    select 查询列表
    from 表1 as 别名 【连接类型】 join 表2 as别名 on 连接条件
    【where 筛选条件】
    【group by 分组】
    【having 筛选条件】
    【order by 排序】
    

    与之前的多表查询相比,将连接条件放在了on后面,而之前的多表查询将筛选条件和连接条件都放在了 where后面用and连接。

    内连接:

    内连接查询到的是两张表符合连接条件的交集
    连接类型为 inner
    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 j.job_id=e.job_id where last_name like '%e%';
    

    3.查询部门个数>3的城市名称和部门个数(分组+筛选)

    select city,COUNT(*) FROM departments d
    inner join locations l on d.location_id=l.location_id 
    GROUP BY l.city HAVING COUNT(*)>3;
    

    4.查询部门的员工个数>3的部门名和员工个数,并按个数降序

    SELECT department_name,count(*) from departments d 
    INNER JOIN employees e on e.department_id=d.department_id 
    GROUP BY department_name HAVING COUNT(*)>3 
    ORDER BY COUNT(*) DESC;
    

    5.查询员工名,部门名,工种名,并按部门名降序。

    外连接:

    外连接查询到的是主表本身+主表和从表符合连接条件的交集。

    左外连接:

    左外连接意思是左边的表为主表
    left outer,outer可省略
    查询没有员工的部门

    select department_name from departments d
    left join employees e on e.department_id= d.department_id 
    where e.employee_id is null;
    
    右外连接

    右边的表是主表
    right outer,outer可省略
    查询没有员工的部门

    select department_name from employees e 
    right join departments d on e.department_id= d.department_id 
    where e.employee_id is null;
    
    全外连接

    全外连接=左表全部记录+右表全部记录+相关联结果并且去重复
    mysql不支持 full join 但是可以通过左外和右外实现。

    交叉连接:

    cross join 结果等于两个表的笛卡尔乘积

    相关文章

      网友评论

          本文标题:p79SQL-多表查询-join

          本文链接:https://www.haomeiwen.com/subject/nhrmbktx.html