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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. select * from emp; 2. select empno, ename, job from em...
    海纳百川_4d26阅读 1,963评论 0 4
  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 1,353评论 0 0
  • 引出 •请思考如下问题? –查询所有员工的每个月工资总和,平均工资? –查询工资最高和最低的工资是多少? –查询公...
    C_cole阅读 7,326评论 0 3
  • 查询是数据的一个重要操作。用户发送查询请求,经编译软件变异成二进制文件供服务器查询,后返回查询结果集给用户,查询会...
    产品小正阅读 1,467评论 0 2
  • 小说《八月未央》读后 安妮宝贝的小说《八月未央》是由主人公自叙的,就内容来说,这是一个非常悲惨的故事,但未央对往事...
    顾纪成阅读 739评论 0 3