• SQlserver表连接


    连接是两元运算,可以对两个或多个表进行查询,结果通常是含有参加连接运算的两个表或多个表的指定列的表。

    在T-SQL中,连接查询有两类:

    第一类:符合SQL标准的连接谓词表示形式;

    第二类:T-SQL扩展的使用关键字JOIN的表示形式。

    下面对这两种连接进行讲解,下面是本次实验要用到的表:

    表一:学生表(学号,姓名,专业)

    表二:课程表(课程号,课程名,学分)

    表三:成绩表(学号,课程号,成绩)

    一、第一类:符合SQL标准的连接谓词表示形式

    1、可以在Select 语句的where子句中使用比较运算符给出连接条件对表进行连接。

    如:将学生表和成绩表进行连接

    (1)select * from XSB,CJB where XSB.StuNum=CJB.StuNum;

    (2)select XSB.*,CJB.CourseNum,CJB.Chengji from XSB,CJB where XSB.StuNum=CJB.StuNum

    第一个连接为等值连接:即选取属性列值相等的记录,另外:连接谓词中的比较符还可以是<、<=、=、>、>=、!=、<>(不等于)、!<、!>,当比较符为“=”时即为等值连接。

    第二个连接为自然连接:即表一与表二做等值连接后,去掉重复属性列的结果。

    二、第二类:T-SQL扩展的使用关键字JOIN的表示形式。

    用join连接方式连接要比第一类谓词连接方式效率高。

    用join关键字指定的连接有三种类型:内连接、外连接、交叉连接。

    (1)内连接。Inner关键字指定连接类型,on关键字指定连接条件。内连接是系统默认的,故Inner可以省略。

      例1:select * from XSB inner join CJB on XSB.StuNum=CJB.StuNum;

    可以看出,所有选课的学生的信息被查询出来了,与上面等值连接结果一样。

    例2:连接多个表,查询选课学生的学号、姓名、课程名、成绩

       Select XSB.StuNum,Name,CourseName,Chengji

    from XSB join CJB join KCB

    on CJB.CourseNum = KCB.CourseNum 

    on XSB.StuNum=CJB.StuNum

    (2)外连接。用关键字Outer指定其类型,外连接的结果不但包含满足连接条件的行,还包括相应表中的所有行。外连接有三种:

            I、左外连接(left outer join),结果表中除了包括满足连接条件的行外,还包括左表中的所有行。常用。

            II、右外连接(right outer join),结果表中除了包括满足连接条件的行外,还包括右表中的所有行。不常用。

            III、完全外连接(full outer join),结果表中除了包括满足连接条件的行外,还包括两个表中的所有行。不常用。

      I.1  左外连接例子,查询每个学生的选课数目,由于学号为“1104”的学生没有选课,故不能用内连接

        Select * from XSB left outer join CJB on XSB.StuNum = CJB.StuNum 

         

    在上面等值连接的例子中,学号为“1104”的学生由于没有选课,结果集中也就没有他,在左连接中,左表的所有记录都会保留。

    这种连接是有实际价值的,如要找出每个同学的选课门数,其中既包括选了课的同学,也包括没有选课的同学。其查询如下:

     Select XSB.StuNum ,count(CJB.StuNum) as '选课门数'

    from XSB left outer join CJB

    on XSB.StuNum = CJB.StuNum 

    group by XSB.StuNum ,CJB.StuNum

    注意到第四个同学的选课门数为零,在这里也显示了,而如果用内连接,第四个同学就会被忽略掉。

    右外连接及完全外连接道理与此相同,在此不再详说。

    (3)交叉连接。实际上是将两个表做笛卡尔积运算。

    如:select * from XSB cross join CJB.

    小弟第一次写博客,经验也不足,有什么错误请大家多多包涵!

  • 相关阅读:
    [转]String.getBytes()和new String()
    [转]文件加密和数字签名技术概述
    [转]Java获取当前路径
    Jaxb笔记
    [转]Hibernate重要规则总结
    [转]Hibernate3如何解决n+1 selects
    将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网 (转)
    项目打包安装到未越狱的机器
    回调函数、消息和事件例程
    iPhone与iPad开发实战读书笔记
  • 原文地址:https://www.cnblogs.com/myboke/p/3693079.html
Copyright © 2020-2023  润新知