数据库——SQL数据连接查询
连接查询
查询结果或条件涉及多个表的查询称为连接查询
SQL中连接查询的主要类型
广义笛卡尔积
等值连接(含自然连接)
自身连接查询
外连接查询
一、广义笛卡尔积
不带连接谓词的连接
很少使用
例:
SELECT *
FROM Student, SC
二、等值与非等值连接查询
[例32] 查询每个学生及其选修课程的情况。
用WHERE子句指定连接条件:
SELECT *
FROM Student,SC
WHERE Student.Sno = SC.Sno;
结果表
Student.Sno Sname Ssex Sage Sdept SC.Sno Cno Grade
95001 李勇 男 20 CS 95001 1 92
95001 李勇 男 20 CS 95001 2 85
95001 李勇 男 20 CS 95001 3 88
95002 刘晨 女 19 IS 95002 2 90
95002 刘晨 女 19 IS 95002 3 80
或,用FROM子句指定连接条件:
SELECT *
FROM Student JOIN SC ON Student.Sno=SC.Sno;
不建议使用JOIN方式。
前例是一种等值连接
等值连接: 连接运算符为 = 的连接操作
SELECT *
FROM Student,SC
WHERE Student.Sno = SC.Sno;
引用两表中同名属性时,必须加表名前缀区分。
将等值连接的目标列中重复的属性列去掉,就是自然连接。
[例33] 对[例32]用自然连接完成。
SELECT Student.Sno,Sname,Ssex,Sage, Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno = SC.Sno;
带有选择条件的连接查询
[例补充]查询选1号课的学生号, 学生名,成绩
SELECT Student.Sno,Sname,Grade
FROM Student,SC
WHERE Student.Sno = SC.Sno /* 连接条件*/
AND Cno=;/* 选择条件 */
或:
SELECT Student.Sno,Sname,Grade
FROM Student JOIN SC ON Student.Sno=SC.Sno;
WHERE Cno=;
[例35]查询选修2号课程且成绩在90分以上的所有学生的学号、姓名
SELECT Student.Sno, Student.Sname
FROM Student, SC
WHERE Student.Sno = SC.Sno /* 连接条件*/
AND Cno= /* 选择条件 */
AND Grade > ; /* 选择条件 */
三、自身连接
一个表与其自己进行连接,称为表的自身连接

[例34] 查询每一门课的先行课名
SELECT First.Cname 课名, Second.Cname 先行课名
FROM Course First,course Second
WHERE First.Cpno = Second.Cno;
课名 先行课名
数据库 数据结构
信息系统 数据库
。。。。。。。
自身连接注意问题:
1.需要给表起别名以示区别
2.由于所有属性名都是同名属性,因此必须使用别名前缀
四、外连接(Outer Join)
普通连接操作只输出满足连接条件的元组
SELECT * FROM Student,SC
WHERE Student.Sno = SC.Sno;
只输出满足Student.Sno = SC.Sno的行
外连接操作可以将指定表中不满足连接条件的元组一并输出
[例 33] 查询每个学生及其选修课程的情况
(包括没有选修课程的学生)
---用外连接操作
SELECT Student.Sno,Sname,Ssex, Sage,Sdept,Cno,Grade
FROM Student,SC
WHERE Student.Sno *= SC.Sno;
查询结果:
Student.Sno Sname Ssex Sage Sdept Cno Grade
95001 李勇 男 20 CS 1 92
95001 李勇 男 20 CS 2 85
95001 李勇 男 20 CS 3 88
95002 刘晨 女 19 IS 2 90
95002 刘晨 女 19 IS 3 80
95003 王敏 女 18 MA null null
95004 张立 男 19 IS null null
本例中将左边的学生关系不满足连接条件的行输出,称为左外连接
用FROM子句指定连接条件:
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROM Student LEFT OUTER JOIN SC ON Student.Sno = SC.Sno;
ORACLE: LEFT OUT JOIN
左外连接
将左边关系的不满足连接条件的行输出
WHERE 子句方式(*出现在左边):
WHERE R.A1 *= S.A1
FROM子句方式:
FROM R LEFT [OUTER] JOIN S ON R.A1=S.A1
右外连接
将右边关系的不满足连接条件的行输出
WHERE 子句方式(*出现在右边) :
WHERE R.A1 =* S.A1
FROM子句方式:
FROM R RIGHT [OUTER] JOIN S ON R.A1=S.A1
全外连接
将两边关系的不满足连接条件的行输出
WHERE 子句方式(*出现在两边) :
WHERE R.A1 *=* S.A1
FROM子句方式:
FROM R FULL [OUTER] JOIN S ON R.A1=S.A1
多表连接
[例36] 查询每个学生的学号、姓名、选修的课程名及成绩。
SELECT Student.Sno,Sname,Cname,Grade
FROM Student,SC,Course
WHERE Student.Sno = SC.Sno
AND SC.Cno = Course.Cno;
结果:
Student.Sno Sname Cname Grade
95001 李勇 数据库 92
95001 李勇 数学 85
....................................
多表连接+选择条件
[例:补充]查询CS系选数据库课成绩>90的学生的学号、姓名、成绩。
SELECT Student.Sno,Sname,Grade
FROM Student,SC,Course
WHERE Student.Sno = SC.Sno
AND SC.Cno = Course.Cno
AND Sdept='CS'
AND Cname='数据库'
AND Grade>;
数据库——SQL数据连接查询的更多相关文章
- SQL表连接查询(inner join、full join、left join、right join)
SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...
- [.NET] SQL数据分页查询
[.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...
- SQL表连接查询
SQL表连接查询(inner join.full join.left join.right join) 表的数据有: 一.内连接-inner jion : 最常见的连接查询可能是这样,查出学生的名字和 ...
- 浅谈sql之连接查询
SQL之连接查询 一.连接查询的分类 sql中将连接查询分成四类: 内链接 外连接 左外连接 右外连接 自然连接 交叉连接 二.连接查询的分类 数据库表如下: 1.学生表 2.老师表 3.班级表 表用 ...
- oracle (6)---SQL 数据关联查询
SQL 数据关联查询 Structure Query Language 从多(n)张表查询对应记录信息,必须有至少n-1个关联条件,否则会出现笛卡尔积的情况.1. 等值连接:没有连接关系的数据不会被查 ...
- 【SQL】各取所需 | SQL JOIN连接查询各种用法总结
前面 在实际应用中,大多的查询都是需要多表连接查询的,但很多初学SQL的小伙伴总对各种JOIN有些迷糊.回想一下,初期很长一段时间,我常用的似乎也就是等值连接 WHERE 后面加等号,对各种JOIN也 ...
- SQL各种连接查询详解(左连接、右连接..)
一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的.语句1:隐式 ...
- Access数据库多表连接查询
第一次在Access中写多表查询,就按照MS数据库中的写法,结果报语法错,原来Access的多表连接查询是不一样的 表A.B.C,A关联B,B关联C,均用ID键关联 一般写法:select * fro ...
- SQL Server连接查询之Cross Apply和Outer Apply的区别及用法(转载)
先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表: SELECT * FROM tableA CROSS APPLY tableB 两张表直接连接,不需要任何的关联条件,产生 ...
随机推荐
- Django商城项目笔记No.16用户部分-用户中心收货地址
首先完成省市区三级联动 新建areas应用 python ../../manage.py startapp areas 模型类代码 class Area(models.Model): "&q ...
- An Introduction to Protocol Oriented Programming in Swift
swift面向协议编程的根本原因在于值类型的存在:面向对象必须要有引用类型的支持: Protocol Oriented approach was introduced to resolve some ...
- 开发指南专题十四:JEECG微云高速开发平台MiniDao 介绍
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/27068645 开发指南专题十四:J ...
- Vue那些事儿之用visual stuido code编写vue报的错误Elements in iteration expect to have 'v-bind:key' directives.
当用vsc打开我们的vue代码时,在其他编辑器里面本来没有错误,到这个编辑器里面 v-for就出毛病了.如下图所示, 那是因为我们打开了对vue进行Eslint的检查. 搜索vetur.validat ...
- MYSQL一次千万级连表查询优化(一)
摘自网上学习之用 https://blog.csdn.net/Tim_phper/article/details/78344444 概述: 交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的 ...
- Unicode,GBK,GB2312,UTF-8概念基础(转载)
第一篇:JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础本部分采用重用,转载一篇文章来完成这部分的目标.来源:holen'blog 对字符编码与Unicode,IS ...
- pycharm2017自建注册服务器
root运行: wget http://home.ustc.edu.cn/~mmmwhy/jetbrain.sh && sh ./jetbrain.sh 注意:需要安装screen软件 ...
- PAT B1002 写出这个数
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...
- JAVA框架:hibernate(四)
一.绑定本地session 原理:之前connection实现事务一个道理,2种方法:1.变量下传.2.因为servlet是单线程,和本地当前线程绑定. 配置: 1)配置核心配置文件hibernate ...
- 1-安装MQTT服务器(Windows),并连接测试
对于不知道MQTT的肯定会问MQTT是干什么的....... 现在我有一个项目需求, 看到这个项目第一想法肯定需要一个服务器,所有的wifi设备和手机都去连接这个服务器,然后服务器进行信息的中转,类似 ...