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

本文深入解析SQL查询的多种高级技巧,包括合并结果集、连接查询、子查询及自连接等,助您提升数据处理效率。

一、合并结果集

合并结果集就是把两个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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值