多表联合查询

举例:
两张表
a表:1234
b表:1235
内连接:左边123,右边123 连接;4,5不显示
左连接:左边1234全部显示,右边123显示;5不显示
右连接:右边1235全部显示,左边的的123显示,4不显示
左独有: 只显示左边4
右独有:只显示右边5
全外连接:左边1234显示,右边1235显示

新建dept表和emp表
dept表: 部门表 两个字段:
dept1 部门编号 dept_name 部门名称
emp表:员工表 六个字段:
sid员工编号,name姓名,age年龄,worktime_start 入职时间, incoming工资,dept2 部门编号
关联关系:部门编号 dept1,dept2 有关联

内连接:select * from dept INNER JOIN emp on dept.dept1=emp.dept2
隐藏内连接:select * from dept,emp where dept.dept1=emp.dept2
左连接:select * from dept left join emp on dept.dept1=emp.dept2
右链接:select * from dept right join emp on dept.dept1=emp.dept2
左独有:select * from dept left join emp on dept.dept1=emp.dept2 where dept2 is null
右独有:select * from dept right join emp on dept.dept1=emp.dept2 where dept1 is null
全外连接:

  • (1)左连接+右独有
    select * from dept left join emp on dept.dept1=emp.dept2
    UNION
    select * from dept right join emp on dept.dept1=emp.dept2 where dept_name is null
    -- (2)右连接+左独有
    select * from dept right join emp on dept.dept1=emp.dept2
    UNION
    select * from dept left join emp on dept.dept1=emp.dept2 where dept2 is null
    -- (3)内连接+左独有+右独有
    select * from dept INNER JOIN emp on dept.dept1=emp.dept2
    UNION
    select * from dept left join emp on dept.dept1=emp.dept2 where dept2 is null
    UNION
    select * from dept right join emp on dept.dept1=emp.dept2 where dept_name is null
    题目:

It技术部入职员工的员工号:
select sid from dept INNER JOIN emp on dept.dept1=emp.dept2 where dept_name="IT技术"

财务部门的收入总和:
select sum(incoming) from dept INNER JOIN emp on dept.dept1=emp.dept2 where dept_name="财务"

列出每个部门的平均收入及部门名称:
select avg(incoming),dept_name from dept INNER JOIN emp on dept.dept1=emp.dept2 group by dept_name

posted @ 2026-04-21 11:49  刘sir金牌讲师  阅读(7)  评论(0)    收藏  举报