首页 > 其他分享 >DQL语句(三)------- 多表查询

DQL语句(三)------- 多表查询

时间:2023-05-17 16:24:16浏览次数:51  
标签:ename 多表 sal union ------- emp DQL deptno select

9、多表查询

9.1 多表连接

  • select * from emp,dept; -- 直接两张表之间加逗号就会全连接

  • 如果没有任何条件去连接两张表,那么会产生一张很大的表,两张表记录相乘条记录

  • 设置条件用点 . 比如:emp.deptno=dept.deptno(员工表中deptno=部门表中的deptno)

  • 自然连接(natural join)

    • select * from emp natural join dept
      
  • using(等值)

    • select * from emp join dept using(deptno) where sal>2000
      
  • on(可以不等值也可以等值)

    • select * from emp join dept on(emp.deptno=dept.deptno) where sal>2000
      

9.2 左右外连接

  • 左连接(left)

    • select * from emp left join dept using(deptno)
      
    • 显示语句左边表中所有数据(包括不符合要求的)

  • 右连接(right)

    • select * from emp right join dept using(deptno)
      
    • 显示语句右边表中所有数据

9.3 union与全外连接

  • union

    • 把几次查询的结果放在一起

    • select ename,sal,deptno from emp where deptno=10 and ename like '%A%'
      union
      select ename,sal,deptno from emp where deptno=20 and sal>1000
      union
      select ename,sal,deptno from emp where deptno=30 and sal<2000
      
    • union在全部查询出来的数据中重复的数据会自动去重(不会有重复的数据)

    • 如果不想去重,可以写成union all

    • select ename,sal,deptno from emp where ename like '%A%'
      union all
      select ename,sal,deptno from emp where deptno=20 and sal>1000
      union all
      select ename,sal,deptno from emp where deptno=30 and sal<2000
      
    • union all的效率更高于union

  • 全外连接

    • 左连接union右连接

    • select * from emp left join dept using(deptno)
      union
      select * from emp right join dept using(deptno)
      

9.4 自连接

  • 我们要查询的两个字段同时处于一张表上,我们只能将一张表当作含义不同的两张表去处理

  • 给同一张表取不同的别名(建议按所代表的含义去取名)

  • -- 查询每个员工与其直属上司的名字
    select e.ename,m.ename from emp e,emp m where e.mgr=m.empno;
    select e.ename,m.ename from emp e join emp m on(e.mgr=m.empno);
    

9.5 子连接

  • 把一个sql语句的查询结果当作另外一个sql语句的查询条件

  • -- 查询公司中薪资最低的员工姓名
    select ename,sal from emp where sal=(select min(sal) from emp);
    

9.6 伪表查询

  • 当查询语句中需要用到别的sql语句时,如果有多个条件就要用到伪表(也就是说类似于在一张表后面加两列,只是在这条语句中加两列)

  • -- 查询高于自己部门内平均薪资的员工信息
    select e.ename,e.sal,e.deptno,d.avgsal from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d where e.deptno = d.deptno and e.sal > d.avgsal;
    

更多关于DQL查询语句参考上面两篇博客DQL(一)DQL(二)

标签:ename,多表,sal,union,-------,emp,DQL,deptno,select
From: https://www.cnblogs.com/dimension0116/p/17409146.html

相关文章

  • DML语句 ------- mysql增删改
    DML语句1、插入(insert)insertinto表values(数据)---------要求插入数据的数量,类型要和表的结构一致insertinto表(列名)values(数据)-----------要求插入的数据的数量顺序和表名后的列要一致insertinto表(列名)select------......
  • mysql 调优-sql 优化
    连接查询原理涉及到indexnested-loopjoin,blocknested-loopjoin,joinbuffersize,hashjoin(mysql8)等,感觉没必要记那么多需要知道会一次性把驱动表的数据加载到内存中(如果joinbuffersize放得下),然后循环每个驱动表去对比被驱动表的数据就好了保证被驱动表的JOIN字......
  • mysql 调优-索引失效
    范围条件放最后面,不管单列还是多列索引,把能过滤最多的索引放前面用不用索引最终都是优化器决定的,EXPLAINjson格式里的执行成本决定最左匹配,如果是联合索引,查找索引树的时候,只能根据第一个索引才能找到第二个第三个,如果顺序没对就不会走索引--联合索引(name,code,ad......
  • DQL语句(一) -----简单select查询
    DQL语句1、格式select列名*Nfrom表名where查询条件1and/or查询条件2groupby列Having分组条件Orderby排序2、规则sql在书写时除了查询条件外,大小写都可以select*fromuserwhereuname='zs';SELECT*FROMUSERWHEREUNAME='zs';要是在公司要看其他......
  • selenium获取user-agent
    网上找了好多资料,都是说怎么设置请求头的信息。却没有说怎么获取由selenium提交的请求头。尝试了好久,总结了一个办法,下面上代码:fromseleniumimportwebdriverdriver_path=r'F:\driver\chromedriver.exe'#这是chrome驱动路径#自定义代理IP及请求头。chromeOpt......
  • 关于拉取nvidia官方镜像所有支持的镜像名称+cuda版本-官方定时更新
    https://gitlab.com/nvidia/container-images/cuda/blob/master/doc/supported-tags.md更新至cuda12.1以12.1.1-base-ubuntu22.04为例,在拉取镜像时,镜像名称为nvidia/cuda:12.1.1-base-ubuntu22.04SupportedtagsAfulllistoftagsthataresupportedwithCUDA,cuDNN,an......
  • linux-cmd-kill
    kill命令介绍kill命令用了关闭执行中的进程。是通过向进程id发送信号来工作。默认的信号为SIGTERM(15),通知进程关闭。语法参数语法:kill[-ssignal|-p][--]pid...kill-l[signal]常用参数:-l<信息名或数字>:默认-l参数会列出全部的信号名称,指定信......
  • linux-cmd-nc端口测试
    nc命令检测端口监听TCP端口33333nc-l33333检测TCP端口连通性172.20.0.1端口33333nc-vz172.20.0.133333检测UDP端口连通性172.20.0.1端口40001nc-vzu127.0.0.140001......
  • mysql 调优-利用索引覆盖和下推
    回表只查询一次索引得不到想要的数据,典型的场景就是非聚簇索引查询:先拿到主键ID,再根据id查询一次得到数据(再次查询这就是回表)索引覆盖:根据普通索引查询不回表就能得到数据--联合索引(age,addr)selectage,addrfromt_userwhereage>10;--单列索引(不一定非要联合索引......
  • 郁金香初级班 5/17 15-20
    目录:16.call指令与ret指令的影响1718.x86环境 常见的六种参数调用约定传递与平栈19.C,C++条件表达式,逻辑运算符与判断语句20.-汇编指令test,cmp,jmp,jz,jnz内容16.call指令与ret指令的影响call指令拆解call0x123;moveip,0x123;push下一行指令的地址; ret指令......