这篇文章讲述了多表之间连接,包括内连接、外连接,如有错误或者不妥之处,还请各位大佬批评指正。

连表

SQL中操作多个表,以便可以查询到所需数据,其中包括内连接、外链接、等值连接、非等值连接、左连接、右连接。

  • 两种写法:
    1. 使用逗号隔开两表再用where判断。
    2. 使用join语法,注意条件之间不加逗号。

数据说明

有五个表:学生表,老师表,课程表,学院表,课程成绩表。

表结构

初始数据

  1. 学生表
  2. 老师表
  3. 课程表
  4. 学院表
  5. 课程成绩表

内连接

内连接查询操作列出与连接条件匹配的数据行,结果集中不包括一个表与另一个表不匹配的行。

等值连接

  • 查询学生’叶清逸’名称,学院名称,老师名称,课程姓名
select s_id , s_name , c_name , t_name , d_name
from t_student , t_teacher , t_department ,t_course
where s_name = '叶清逸' ;--join写法:
select s_id , s_name , d_name
from t_student cross join t_department
where s_name = '叶清逸'

查询结果:

由结果可见,将t_student , t_teacher , t_department ,t_course这几个表做笛卡尔积之后选出名字叫‘叶清逸’的结果显然不是我们希望得到的结果。

  • 加入判断条件改进:
select s_id , s_name , t_name , d_name, c_name ,score
from t_student , t_teacher , t_department ,t_course ,t_grade
where t_grade.student_id = t_student.s_idand t_grade.course_id = t_course.c_idand t_student.department_id = t_department.d_idand t_student.teacher_id = t_teacher.t_idand s_name = '叶清逸' ;
--join写法
select s_id , s_name ,t_name , d_name ,c_name , score
from t_grade natural join t_studentt_grade natural join t_courset_student natural join t_departmentt_student natural join t_teacher
where s_name = '叶清逸'

查询结果:

注:连接n个表,至少需要n-1个条件,否则会出现笛卡尔积错误的情况。

非等值连接

  • 查询成绩在60-90间学生的学号、姓名、课程名、成绩
select s_id , s_name , c_name , score
from t_student s , t_course c , t_grade g
where g.student_id = s.s_idand g.course_id = c.c_idand score between 60 and 90 ;
--join写法
select s_id , s_name ,t_name , d_name ,c_name , score
from t_grade natural join t_studentt_grade natural join t_courset_student natural join t_departmentt_student natural join t_teacher
where score between 60 and 90 ;

查询结果:

外连接

两个表在查询时,不仅包括与条件相满足的行,还包括左或右与条件不满足的结果,称之为左连接或者右连接。

添加数据

为了演示的方便,在t_student中添加一个没有分配学院的学生‘刘八’,在t_department中添加一个没有学生的学院‘马克思主义学院’

左连接

  • 查询所有学生所在学院,显示未分配学院的学生(左连接)
select s_id , s_name , d_name
from t_student s , t_department d
where s.department_id = d.d_id(+)--join写法select s_id , s_name , d_name
from t_student left outer join t_department
using (d_id)--或者(on写法更为灵活)select s_id , s_name , d_name
from t_student s left outer join t_department d
on s.d_id = d.d_id

查询结果:

  • 查询所有学生所在学院,显示未分配学生的学院(右连接)
select s_id , s_name , d_name
from t_student s , t_department d
where s.department_id(+) = d.d_id--join写法select s_id , s_name , d_name
from t_student s right outer join t_department d
on s.d_id = d.d_id
--或 using (d_id)

查询结果:

左右连接(全连接)

  • 查询所有学生所在学院,显示未分配学院的学生和未分配学生的学院(左右连接)
select s_id , s_name , d_name
from t_student s full outer join t_department d
on s.d_id = d.d_id
--或 using (d_id)

查询结果:

ORACLE中的多表连接查询相关推荐

  1. oracle中的多表连接

    2019独角兽企业重金招聘Python工程师标准>>> 简单连接: 简单连接仅仅是通过select子句和from子句来连接多个表,其查询结果是一个通过笛卡尔积所生成的表.在实际需求中 ...

  2. [Mysql] 多表连接查询

    在之前的学习当中,我们查询使用的都是一张表,而在实际的数据分析业务中,经常会使用多张表.将多张表连接起来就是多表连接(从一个表扩展为两个表,也可以更多个表) 多表连接查询 当查询结果的列来源于多张表时 ...

  3. Oracle练习:用表连接实现查询平均工资最高的部门信息

    Oracle练习 利用表连接查询平均工资最高的部门信息 当查询结果数据来自于多两张表时,需要使用特定的连接条件将两张表的记录连接在一起,这种语法"表链接". 在做查询平均工资最高的 ...

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

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

  5. Oracle数据库多表连接查询操作以及查询操作的补充

    文章目录 一.查询语句概述 1.查询语句基本语法格式 2.伪表和伪劣 二.单表查询 1.select子句 2.FROM子句 3.WHERE子句 4.DISTINCT关键字 5.GROUP BY子句与聚 ...

  6. 318分组聚合,关联查询(多表连接查询)(连接查询),连接查询oracle写法,集合运算ld

    ----------分组聚合:对表里面的数据进行各个维度/角度的统计 -------------统计:需要用 聚合函数 max(目标字段):求最大值 min(目标字段) :求最小值 avg(目标字段) ...

  7. Oracle数据库表连接查询并分页SQL语句提示未明确定义列

    Oracle数据库表连接查询并分页SQL语句提示未明确定义列 两张表中的字段: t_product t_category product_id category_id product_name cat ...

  8. Oracle查询所有序列;[oracle中如何创建表的自增ID(通过序列);oracle sql语句大全

    Oracle查询所有序列 oracle sql语句大全 oracle中如何创建表的自增ID(通过序列)

  9. mysql多表查询连接的种类_MySQL中基本的多表连接查询教程

    一.多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE ...

最新文章

  1. 2018最具就业前景的7大编程语言,Java、Python和JavaScript?
  2. SAP 电商云 Spartacus UI added-to-cart 的端到端测试源代码解析
  3. java项目加减乘除验证码_课堂Java小程序(加减乘除与验证码)
  4. Python代码这样写更优雅(转)
  5. C++算法三:选择排序
  6. 自动化数据增强:实践、理论和新方向
  7. hadoop hive集群_Hive的优化和压缩
  8. 互利网上数字金融典型场景: 网络营销
  9. 关于不使用web服务实现文本框自动完成扩展
  10. css3 水纹效果(仿写阿里云)
  11. 世界杯直播背后的黑科技 腾讯云极速高清技术驱动体育直播发展
  12. 使用Vundle管理配置Vim的插件
  13. html5考试总结300字,期中考试总结300字大全
  14. html 自动生产,HTML5 Three.js 3D人偶玩具自动化生产车间动画
  15. crc16modbus查表法_分别用定义法和查表法求取MODBUS_CRC16的值
  16. MyZip Mac一秒超快速解压/压缩
  17. (3)形态学:语言的词汇----NLP的语言学基础
  18. Jessi-记录工作问题
  19. linux定时运行命令
  20. 简单的网页制作期末作业——HTML+CSS+JavaScript小礼品购物商城网站

热门文章

  1. 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具nxpSecBoot用户指南
  2. visual studio code 如何编译运行html css js文件
  3. docker配置国内镜像加速器
  4. 坚果云android功能,坚果云-安卓版5大新功能,一次性解锁!
  5. 点乘叉乘坐标公式_向量点乘公式与叉乘公式的位置关系
  6. 百度地图只出现网格的问题
  7. 华为的市场份额大幅倒退,OPPO和vivo未能趁机抢占市场
  8. 推荐几个swift学习网站
  9. tcpdump命令详解(整理)
  10. C语言单个字符类型判断