数据库——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 两张表直接连接,不需要任何的关联条件,产生 ...
随机推荐
- 读高性能JavaScript编程 第四章 Conditionals
if else 和 switch && 递归 if else 和 switch 一般来说,if-else 适用于判断两个离散的值或者判断几个不同的值域.如果判断多于两个离散 ...
- jdk1.7环境配置
JDK1.7的环境配置(我的是jdk1.7,文件名写快了,忽略忽略) 官网下载自己需要的版本(ps:我这是朋友发给我的就不提供官网地址,去百度搜jdk就可以了) 下载下来除了改存放路径还有记得再jdk ...
- 水壶-[Kruskal重构树] [解题报告]
水壶 本来从不写针对某题的题解,但因为自己实在是太蠢了,这道题也神TM的恶心,于是就写篇博客纪念一下 H水壶 时间限制 : 50000 MS 空间限制 : 565536 KB 评测说明 : 2s,51 ...
- python open 关于读、写、追加的总结
# -*- coding: utf-8 -*- # 测试文件名为: # text.txt # 测试文件内容为: # abcdefg # 每次操作后将文件复原 # r # 以只读方式打开文件,文件不可写 ...
- Netty入门(二)时间服务器及客户端
在这个例子中,我在服务器和客户端连接被创立时发送一个消息,然后在客户端解析收到的消息并输出.并且,在这个项目中我使用 POJO 代替 ByteBuf 来作为传输对象. 一.服务器实现 1. 首先我们 ...
- [C++] stack和queue的常用函数
参考资料: STL 在 OI 中的应用 stack stack 后入先出(LIFO)栈 头文件: #include<stack> 定义: stack<int> s; 函数: 函 ...
- Oracle rdbms Brush password
Restore database user history account password 1. 用户状态 select * from user_astatus_map; select * from ...
- 【2018暑假集训模拟一】Day2题解
T1 园艺工人的求助 [题目描述]终于,在一段繁忙的训练之后,到了NOIP 的举办的时候.同学们坐上了大巴车,享受着沿途的风光,讨论着未解决的问题,憧憬着NOIP 赛场上切题的样子.很快,大巴车到了大 ...
- JMX RMI 攻击利用
攻击者通过构造恶意的MBean,调用 getMBeansFromURL 从远程服务器获取 MBean,通过MLet标签提供恶意的MBean对象下载. 前提条件: 允许远程访问,没有开启认证 (com. ...
- CentOS7.5服务器安装(并添加用户) anaconda3 并配置 PyTorch1.0
===========================================================================================[admin@lo ...