Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 324|回复: 0

[数据库学习]学习SQL多表连接(2)多表连接

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-31 00:00:43 | 显示全部楼层 |阅读模式
       上面通过一个实例介绍了两表连接。实际上,SQL的SELECT语句中可以实现任意多个表的连接。创建连接的基本规则与已经介绍的两表连接相同,即在FROM子句中列出所要连接的表,在WHERE子句中指明连接关系。下面通过一个实例介绍一下多表连接应用。

    实例3 在WHERE子句中进行多表连接

        根据TEACHER表、COURSE表和STUDENT表,查询所有学生的姓名、所在系、所修课程、考试时间、课程成绩及授课教师姓名。实例代码:
    SELECT SNAME, STUDENT.DNAME, CNAME, CTEST, MARK, TNAME
    FROM   TEACHER, COURSE, STUDENT
    WHERE   STUDENT.CNO = COURSE.CNO
    AND  TEACHER.CNO = STUDENT.CNO
    ORDER BY   SNAME
       
      
       
       
         
       

         
       
      
        先看相关表:




    例:
    SELECT   SNAME, STUDENT.DNAME, CNAME, CTEST, MARK, TNAME  FROM   TEACHER, COURSE, STUDENT
    WHERE  STUDENT.CNO = COURSE.CNO  AND   TEACHER.CNO = STUDENT.CNO  ORDER BY  SNAME 运行结果如图9.3所示。


    例中,TEACHER表、COURSE表和STUDENT表的连接过程可按以下方式理解。
      从STUDENT表中得到学生姓名SNAME、所在系DNAME以及课程成绩MARK信息。通过课程号CNO与COURSE表相关联,从而从COURSE表中得到课程名称CNAME和考试时间CTEST信息,这些信息与STUDENT表中的课程号CNO对应。通过课程号CNO与TEACHER表相关联,从而从TEACHER表中得到STUDENT表中的课程号CNO对应的教师姓名TNAME信息。  语句“WHERE STUDENT.CNO = COURSE.CNO AND TEACHER.CNO = STUDENT.CNO”,该语句隐含的含义为:只有同时存在于TEACHER表、COURSE表和STUDENT表中的课程号CNO的信息才会作为结果表中的记录。不满足这个条件的记录,结果表中也就不会有。 注意 由于TEACHER表和STUDENT表中都存在字段“DNAME”,所以在SELECT子句中,查询DNAME字段时,一定要指明表名,否则系统会报错。 可见,创建表的基本连接,只要遵守下面的基本原则即可。
      FROM子句中应列出所有连接的表的表名。WHERE子句应定义连接的关联条件。
    当列名为多个表共有时,要指明列的所在表,即采用“tablename.columname”的形式。

    使用表别名
        在SQL中,使用AS关键字可为列起别名。同样,在SQL中也可以使用AS关键字给表取别名,它可以简化操作,同时在某些表的连接中,也是必须用到的,如下面要介绍的表的自连接。语法如下。 SELECT column FROM table AS table_alias

         说明:与给列定义别名相似,给表取别名,只需在表名后面接上AS关键字和要取的别名即可。在大多数实现方式中,AS关键字也不是必需的,只要新名称紧跟在实际表名之后即可。    说明 Oracle数据库系统不支持AS关键字,给表取别名只需在表名后直接接上别名即可。如语法中的table AS table_alias就可以表示为table table_alias。
      实例4 对实例3采用表别名
    实例代码: SELECT SNAME, S.DNAME, CNAME, CTEST, MARK, TNAME  FROM TEACHER AS T, COURSE AS C, STUDENT AS SWHERE S.CNO = C.CNOAND T.CNO = C.CNOORDER BY SNAME
      采用JOIN关键字建立连接
        前面介绍的表的连接,是通过FROM子句列出要连接的表、WHERE子句列出连接条件来实现的。也可以在FROM子句中,通过连接关键字实现表的连接,这样有助于将连接操作与WHERE的搜索条件区分开来。语法如下。 SELECT ?column  FROM ?join_table  JOIN_TYPE ?join_table  ON ?(join_condition)
      join_table指出参与连接操作的表名。
      JOIN_TYPE为连接类型,可分为4种:自然连接、内连接、外连接和交叉连接。其中:
    自然连接JOIN_TYPE的形式为:   NATURAL JOIN;
    内连接JOIN_TYPE的形式为:  INNER JOIN;
    外连接,又分为左外连接,JOIN_TYPE的形式为:   LEFT OUTER JOIN或LEFT JOIN;
    右外连接,JOIN_TYPE的形式为:   RIGHT OUTER JOIN或RIGHT JOIN;
    全外连接,JOIN_ TYPE的形式为:   FULL OUTER JOIN或FULL JOIN;
    交叉连接中JOIN_TYPE的形式为:   CROSS JOIN。

    ON (join_condition) 子句指出连接条件,由被连接表中的列和比较运算符、逻辑运算符等构成。
      在下节将详细介绍各种连接类型。
      

      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/10/31/000042734.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-19 01:09 , Processed in 0.430427 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表