mysql3

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张表来看)

你可能感兴趣的:(mysql3)