(四)sql多表连接查询join on的用法总结

需要用到的表信息如下:
EMP职员表:

dept部门信息表和salgrade薪资等级表:

1. 多表连接
没有任何条件限制,即笛卡儿积,产生的记录数目为各表记录的乘积。
select * from table1,table2,table3…
select * from emp,dept

2. 等价连接
在所得的笛卡儿积中,筛选出有效的信息。在n张表之间,至少(n-1)个一个连接条件。例子如下:
select * from table1,table2 where table1.a=table2.a
SELECT * FROM emp as e ,deptl as d
WHERE e.DEPTNO=d.DEPTNO

3. 不等价连接
当某个值在某一范围中,需要求出此范围的级别时,可以应用不等价连接。
比如:显示员工姓名,工资,工资级别
SELECT e.ENAME,e.SAL,g.GRADE FROM emp e,salgrade g
WHERE e.SAL
BETWEEN g.LOW_SAL AND g.HIGH_SAL
注意:如果一步写不出来,可以分解开来。
首先,求出笛卡尔积,再从笛卡儿积中筛选条件添加到语句中。

4. 自然连接
自动的寻找2表中的(所有同名且属性相同的列作为连接条件。使用natural join子句来完成。
例如:A表中有列a,b,c,d B表中有a,b,x,z
自然连接会将A.a=B.a and A.b=B.b 作为连接条件
select * from A natural join B (natural 不可以省略)。他们所得的结果中,同名且属性相同的字段只显示一个。

5. using子句的用法
using用于2张表的join查询,using子句可以指定用几个相同的名字和数据类型的列作为连接条件。
select * from table1 join table2 using(列名) 。
SELECT * FROM emp join dept using (deptno)

6. using 子句和等价连接的区别
using也是将2个表中属性列名相同的字段连接起来,不同的是等价连接是将所有的相同的都连接,而using(字段名)是将需要的字段连接起来(可以不是全部相同的)。

7. 比较下面的几个语句。

1 SELECT * FROM emp JOIN dept

2 SELECT * FROM emp NATURAL JOIN DEPT

3 SELECT * FROM emp JOIN dept USING (DEPTNO)

4 SELECT * FROM emp JOIN dept on emp.DEPTNO = dept.DEPTNO
语句1 是笛卡儿积,所得结果为2张表的记录数乘积。 脑部结果。
语句2和3,这里都是同一个结果如图,但是当emp表和dept表中有2个相同的列时候,他们结果就不一样了。这里就不演示了。
语句4 是等价连接。结果如图,它没有去掉重复的列。

8. 左外连接 left outer join … on …
左边的表是基本表,将左边的表的信息全部显示(不论是否可以有匹配,即为空也显示)。
SELECT * from emp e LEFT outer join dept d on e.DEPTNO=d.DEPTNO

9. 右外连接 right outer join … on …
右边的表是基本表,将右边的表的信息全部显示(不论是否可以有匹配,即为空也显示)。
SELECT * from emp e right outer join dept d on e.DEPTNO=d.DEPTNO

10. group by 分组
写在前面,sql关键词的执行顺序 :
from>where>group by>having>select>order by
group by (字段)是将表中的字段按照需求进行分组。通常与分组函数进行联合使用。
一般来说,select语句中,除了5个分组函数,其余出现的列名必须在group by子句中。
group by 语句中的列名不一定要出现在select语句中。
如果条件需要用到分组函数,则条件需要写在having子句中。
分组条件一定要有意义。
查询出每个部门的最低最高工资
SELECT DEPTNO ,min(SAL),max(SAL) FROM emp GROUP BY DEPTNO
思考:查询出每个部门的最低最高工资,同时查出此人的姓名?
1 查出每个部门的最低工资
2 将emp表与其做连接
方法1
SELECT e.DEPTNO,e.ENAME,e.SAL FROM emp e JOIN (SELECT DEPTNO ,min(SAL) minsal FROM emp GROUP BY DEPTNO)a on (e.DEPTNO=a.DEPTNO and e.SAL=a.minsal)
方法2
SELECT * FROM emp WHERE (DEPTNO,SAL) in (SELECT DEPTNO,min(SAL) FROM emp GROUP BY DEPTNO) 2次匹配,第一次匹配deptno,第二次匹配sal。列的属性得与in()里面的列属性相同

11. having子句
having是用于筛选信息的,匹配。
Having关键字的作用则是,为聚合结果指定条件。

12. 分组查询的嵌套
注意:当使用嵌套时,不能出现其他列名

13. 子查询
注意子查询的结果到底是1个值还是多个值,多个值时候可以用any或者in或者all。
子查询优先于外部查询。
单行子查询:子查询结果只有一个值。一般使用> = < 。
多行子查询:子查询结果有多个值。使用any,in not in,all。

14. 试题练习
一、查询出最低工资是2000的部门是那个?以及下面3句的区别?
① SELECT DEPTNO,min(SAL) FROM emp
②SELECT DEPTNO,min(SAL) FROM emp GROUP BY DEPTNO
③SELECT DEPTNO,min(SAL) FROM emp GROUP BY DEPTNO HAVING min(SAL)=1000
①是查询出最低工资的部门是哪一个。
②是查询出每个部门的最低工资。
③是查询出那个部门的最低工资是1000的。
二、查询部门人数大于所有部门平均人数的的部门编号,部门名称,部门人数
SELECT d.DEPTNO,d.DNAME,COUNT(d.DEPTNO)
FROM
emp e join dept d on d.DEPTNO=e.DEPTNO
GROUP BY d.DEPTNO,d.DNAME
HAVING
count(d.DEPTNO) >
(SELECT (SELECT COUNT(*) FROM emp) / (SELECT count(*) FROM dept ) )

(四)sql多表连接查询join on的用法相关推荐

  1. SQL多表连接查询(具体实例)

    本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图例如以下: 表2:course  截图例如以下: (此时这样建表仅仅是为了演示连接SQL语句.当然实际开发中我们 ...

  2. SQL多表连接查询(详细实例)

    本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student 截图如下: 表2:course 截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表, ...

  3. SQL——多表连接查询

    若一个查询同时涉及两个或两个以上的表, 则称之为连接查询(在FROM子句中体现). 参与连接的表可有多个,但连接操作在两个表之间进行,即两两连接. 连接查询包括: 内连接 等值连接:用"=& ...

  4. MySQL笔记(四)多表连接查询

    这是我在学习Mysql之路上做的笔记,今天将它粘出来.这一篇主要是Mysql多表连接查询.有错误的欢迎大家指出... 数据库的创建参考我的另一篇博客 https://blog.csdn.net/csd ...

  5. Linq 多表连接查询join

    在查询语言中,通常需要使用联接操作.在 LINQ 中,可以通过 join 子句实现联接操作.join 子句可以将来自不同源序列,并且在对象模型中没有直接关系(数据库表之间没有关系)的元素相关联,唯一的 ...

  6. oracle表连接查询逗号隔开_Oracle多表连接查询

    连接:将一张表中的行按照某种条件和另一张表中的行连接起来形成一个新行的的过程. 根据连接查询返回的结果,分为3类: 内连接(inner join) 外连接(outer join) 交叉连接(cross ...

  7. server多笔记录拼接字符串 sql_第四章、SQL Server数据库查询大全(单表查询、多表连接查询、嵌套查询、关联子查询、拼sql字符串的查询、交叉查询)...

    4.1.查询的类型 declare @value as int set @value = 50 select  'age:'as age,2008 years,@valueas va --这种查询时跟 ...

  8. SQL数据库语言基础之SqlServer多表连接查询与INNER JOIN内连接查询

    文章目录 一.简单连接查询 二.多表连接查询 三.INNER JOIN 内连接查询 一.简单连接查询 1.直接连接:无连接规则连接两表,得到的是两个表的笛卡尔积. 连接后的行数=表1行数*表2行数 连 ...

  9. mysql 连接查询两个条件_MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习...

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节 ...

最新文章

  1. 谷歌Nexus 3开售时间曝光
  2. laravel Transformers中修改data键
  3. gimp 去掉一个颜色的背景_不用背景图,PPT也能做的高大上?网友:看完这页PPT,我信了...
  4. ImageView no longer exists. You should not use this PhotoViewAttacher any more
  5. WEBMIN里添加VSFTP控制模块
  6. 漫画 | 公司测试因提Bug不规范,锒铛入狱~
  7. Bad level value for property: .level
  8. QQ,MSN,SKYPE等在线状态代码
  9. Dapr牵手.NET学习笔记:可观测性-分布式跟踪
  10. Java中的责任链模式
  11. ArrayList源码阅读
  12. SEO策略几个常见现象
  13. 【入门篇】黑盒测试基础
  14. objective-c block 讲解
  15. Python入门深度学习完整指南
  16. vue 本地预览多图上传
  17. 手机和电脑如何快速传大文件
  18. 学术会议论文查重吗_会议论文查重吗
  19. qq令牌64位密钥提取_QQ令牌工具 活令牌查询动态密码(大哥牌)
  20. 互联网汽车信息娱乐系统基础框架

热门文章

  1. 5GNR漫谈4:CORESET与SearchSpace
  2. 【MySQL】数据类型
  3. Vs Code中Vue代码格式插件,Vetur、ESLint 、Prettier - Code formatter的介绍使用及相关配置
  4. VSCode 自动检查代码出错Vetur
  5. php根据某一标识获取所有上级id或所有下级id
  6. 在 Flutter 中自定义画笔 Painter
  7. 基于FPGA的Bubble 游戏开发
  8. 获奖感言和C语言的学习心得
  9. 韦东山老师的单片机核心课程学习笔记(一)
  10. 通过guest账户无法进入远程计算机,小经验|guest远程关机设置