select * from emp
select * from dept
-- 多表查询
--查询员工表中的员工编号、姓名、职位、部门的编号、部门的名称
--A{a,b,c}
--B{d,e,f,g}
--A*B={ad,ae,af,ag,bd,be,bf,bg,cd,ce,ef,cg}
-- 等值连接(查询出符合条件的数据 13条记录 因为emp表中1006 deptno为空)
select empno,ename,job,e.deptno,dname
from emp e,dept d
where e.deptno=d.deptno
-- oracle数据库的外连接的写法
select empno,ename,job,e.deptno,dname
from emp e,dept d
where e.deptno(+)=d.deptno右外连接(左右外连接与mysql相反 其余写法一样)
e.deptno=d.deptno(+)左外连接
select empno,ename,job,emp.deptno(两张表都有 前面加表名.),dname
from emp,dept
where emp.deptno=dept.deptno
-- 内连接 Inner join SQL99规范(和上面结果一样) 在任何关系型数据中通用
-- 语法:
--SELECT column_name(s)
--FROM table_name1(表名)
--INNER JOIN table_name2
--ON table_name1.column_name=table_name2.column_name
select empno,ename,sal,job,e.deptno,dname
from emp e inner join dept d
ON e.deptno=d.deptno
where sal>3000
-- 查询员工的姓名,部门的名称,工作地点,地址
-- 等值连接
select e.ename,d.dname,d.loc,g.adress
FROM emp e, dept d,location g
where e.deptno=d.deptno and d.loc=g.locid 不是同名列 但数据相等
-- 内连接 inner 可以省略
select e.ename ,d.dname ,d.loc,g.adress
from emp e inner join dept d on e.deptno=d.deptno
inner join location g on d.loc=g.locid
-- 外连接
-- 1.left outer join 可以将左表(emp)中符合条件与不符合条件的数据查询出来
-- 2.right outer join 可以将右表(dept)中符合条件与不符合条件的数据查询出来
-- 3.full outer join 可以将左表(emp)以及右表(dept)中符合条件与不符合条件的数据查询出来
-- 等值连接(1,2) 内连接(1,2,3)
select e.ename,e.sal,d.dname
from emp e right OUTER JOIN dept d
on e.deptno= d.deptno
--自连接
--查询员工的编号,员工的姓名,经理的编号和经理的姓名
--要将一张表当两张表(1.员工表 e1 2.管理人员表 e2)
select e1.empno,e1.ename,e2.empno,e2.ename
from emp e1 left join emp e2
on e1.mgr=e2.empno
-- 总结:
-- MySQL多表查询方式有几种:
-- 1.等值连接 :就是使用 = 连接两个表的关联条件
-- select 表1.列名1,表2.列名2...
-- from 表1,表2
-- where 表1.列名=表2.列名 表1和表2的连接条件
SELECT * FROM emp,dept where emp.deptno=dept.deptno
-- 2.内连接 inner join
-- select 表1.列名1,表2.列名2...
-- from 表1 inner join 表2
-- on 表1.列名=表2.列名
select * from emp INNER JOIN dept on emp.deptno=dept.deptno
-- 3.外连接 (左外连接) (右外连接) (全外连接)
-- 使用的场景 等值连接/内连接只能查询出符合条件数据(某些员工没有显示部门),如果想要将符合条件与不符合条件的数据都查询出来就可以使用外连接
-- select 表1.列名1,表2.列名2...
-- from 表1(left/right/full) outer join 表2
-- on 表1.列名=表2.列名
SELECT * from emp LEFT OUTER JOIN dept on emp.deptno = dept.deptno
-- 4.自连接(表中的数据有一定的规律,将1张表当做2张表来看)