连接查询

查询结果或条件涉及多个表的查询称为连接查询
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数据连接查询的更多相关文章

  1. SQL表连接查询(inner join、full join、left join、right join)

    SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...

  2. [.NET] SQL数据分页查询

    [.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...

  3. SQL表连接查询

    SQL表连接查询(inner join.full join.left join.right join) 表的数据有: 一.内连接-inner jion : 最常见的连接查询可能是这样,查出学生的名字和 ...

  4. 浅谈sql之连接查询

    SQL之连接查询 一.连接查询的分类 sql中将连接查询分成四类: 内链接 外连接 左外连接 右外连接 自然连接 交叉连接 二.连接查询的分类 数据库表如下: 1.学生表 2.老师表 3.班级表 表用 ...

  5. oracle (6)---SQL 数据关联查询

    SQL 数据关联查询 Structure Query Language 从多(n)张表查询对应记录信息,必须有至少n-1个关联条件,否则会出现笛卡尔积的情况.1. 等值连接:没有连接关系的数据不会被查 ...

  6. 【SQL】各取所需 | SQL JOIN连接查询各种用法总结

    前面 在实际应用中,大多的查询都是需要多表连接查询的,但很多初学SQL的小伙伴总对各种JOIN有些迷糊.回想一下,初期很长一段时间,我常用的似乎也就是等值连接 WHERE 后面加等号,对各种JOIN也 ...

  7. SQL各种连接查询详解(左连接、右连接..)

    一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的.语句1:隐式 ...

  8. Access数据库多表连接查询

    第一次在Access中写多表查询,就按照MS数据库中的写法,结果报语法错,原来Access的多表连接查询是不一样的 表A.B.C,A关联B,B关联C,均用ID键关联 一般写法:select * fro ...

  9. SQL Server连接查询之Cross Apply和Outer Apply的区别及用法(转载)

    先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表: SELECT * FROM tableA CROSS APPLY tableB 两张表直接连接,不需要任何的关联条件,产生 ...

随机推荐

  1. burpsuite联合sqlmap扫描注入点

    其实我们在众测的时候完全可以使用burpsuite联合sqlmap测试目标的注入漏洞.对get和post型注入都支持. 先来记录proxy的log , 记住路径     把proxy拦截关掉 接下来浏 ...

  2. POJ3801 Crazy Circuits

    嘟嘟嘟 上下界网络流之最小流. 建图不说啦,裸的. 在有附加源\(S\)和附加汇\(T\)的图上跑完后,删除和\(S, T\)相连的边.然后因为可能流多了,所以现在应该退流,于是我们从\(t\)到\( ...

  3. 前后端交互之封装Ajax+SpringMVC源码分析

    为什么需要封装呢?因为用的多,我想将其封装成函数,当我想用它时,只需将那个函数对应的js文件引入即可,而不要重复写很多相同代码,利于开发效率的提高. 无论是$.ajax或$.post.$.get等,在 ...

  4. /bin/ls: Permission denied

    [root@test_node1 ~]# crontab -lno crontab for root[root@test_node1 ~]# cd /home/[root@test_node1 hom ...

  5. docker镜像的创建方法docker file方式

    什么是docker file文件? 简单来说,docker file文件就是一个命令文本集合,容来记录创建docker镜像的步骤 快速入门: 1.新建一个docker file文件dockerfile ...

  6. opencv——对象提取与测量

    #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...

  7. (三) DRF 序列化

    一.单表的GET和POST: 使用serializers序列化,针对每一个表,需要单独写函数.一般会写在views.py里面,但是这样做,会导致整个文件代码过长.需要分离出来! 在app01(应用名) ...

  8. Mapnik初学笔记

    前言:夏天总是感觉想要睡觉,一心想颓废的我却要一周六天都要处于工作状态,但有些事虽然麻烦,但还是要去做,不由得想起火影忍者里面鹿丸这一个角色,有时候真能理解他的心理状态,或许我应该向他学习:善于思考的 ...

  9. Spring3 访问静态资源

    <mvc:resources location="/jquery/" mapping="/jquery/**"/> <mvc:resource ...

  10. 20155234 exp4 恶意代码分析

    实验4 恶意代码分析 系统运行监控 Schtasks 先建立一个netstat20155234.txt文件,在文件中输入 date /t >> c:\netstat20155234.txt ...