DQL:数据查询语言(多表)

2018-09-29  本文已影响7人  别动我名字呀

一、合并结果集

合并结果集就是把两个select语句的查询结果合并到一起,注意被合并的两个表:列、列类型必须相同

合并结果集的两种方式:

  1. union(合并时去除重复记录)
select * from A 
  union 
select * from B
  1. union all(合并时不去除重复记录)
select * from A
  union all 
select * from B

二、连接查询(也叫跨表查询,需要关联多个表查询)

同时查询两张表,出现的就是笛卡尔集结果。隐士的去笛卡尔集就是在查询时保持主键和外键的一致,主表当中的数据参照子表当中的数据

1.多表连查:起别名

select * from stu st , score sc;
  1. 99连接查询(隐士连接): 两者满足相同条件的数据,不相等的不要
select * from 
    stu st, score sc
    where 
    st.id=sc.id;
  1. 内连接
1. inner join 等值连接:
查询两者满足相同条件的数据,与99连接查询主外键是一样的,
只是换了一种写法。on 后面只写主外键
SELECT * FROM  stu st , score WHERE st.id =sc.sid
SELECT * FROM  stu st INNER JOIN score sc ON st.id=sc.sid  
以上两种结果一致,INNER可以省略

2.多表连接
select * from stu st 
    join score sc on st.id = sc.sid
    join course c on sc.cid=c.cid;

3.非等值连接(后面不一定是等于,可能是 < 或者 >)
select * from 
      emp e, dept d,  salgrade g
where e.deptno = d.deptno
      and e.salary >= g.lowSalary and e.salary<=g.highSalary;

select * from emp e
     JOIN dept d ON e.deptno = d.deptno
     JOIN  salgrade g ON e.salary >= g.lowSalary and e.salary<=g.highSalary;


4.外连接

1. LEFT JOIN (左连接)
查询两表满足相同条件的数据,如果左边表中有不相同的数据,也把左边表中的数据查出来
左边表中的数据全部查出来,右边表中指查满足条件的内容
SELECT * FRM stu st LEFT JOIN score ON st.id = sc.sid

2.RIGHT JOIN (右连接)
右边表中的数据全部查出来,左边表中指查满足条件的内容
SELECT * FRM stu st RIGHT JOIN score ON st.id = sc.sid

5.自然连接(两张连接的表中列名和类型完全一致的列作为条件,会去除相同的列)

select * from stu NATIRAL JOIN score;

三、子查询

一个select语句中包含另一个完整的select语句,或者两个select语句;就是子查询
where后面:把select查询的结果当成另一个select的条件值

from后面:把查询结果当作一张新表

1.查询跟张三同一个部门的员工
select * from emp dep=(select dep from where ename='张三')

2.查询30号部门薪资大于两千的员工
select ename,salary from
  (select ename,salary from emp dep=30) s
  where s.salary>2000;

3.查询工资与名字都与李四相同的员工

select * from  emp e ,(select name,salary from emp where name='李四') r
  where e.name= r.name AND e.salary= r.salary;

四、自连接

自己连接自己 ;起别名

求员工编号为732的姓名、经理编号、经理姓名
select  e1.empN,e.name, e2.mgr,e2.name from emp e1, emp e2
  where e1.empNo=e2.mgr
   ADN e1.empNo=732;
上一篇下一篇

猜你喜欢

热点阅读