• 内连接和外连接


    内连接

    内连接也叫连接,是最早的一种连接,最早被称为普通连接或自然连接。内连接是从结果中删除其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。

    内连接的语法:

    SELECT fieldlist

    FROM table1 [INNER] join table2

    ON table1.column=table2.column

    一个表中的行和与另外一个表中的行匹配连接。表中的数据决定了如何对这些行进行组合。从每一个表中选取一行,根据这些列的值是否相同,组合方式分为一对一、多对一和多对多的关系。

    1.一对一关系

    当连接的两个表,两个连接列的值完全相同,则两个表连接相当于一对一的关系。

    下面在“pubs”数据库中“titles”和“titleauthor”两个表中,根据相同列“title_id”进行内连接。在查询分析器中输入的SQL语句如下:

    use pubs

    select *

    from   titles

    inner join titleauthor

    on   titles.title_id= titleauthor.title_id

    实现的过程如图1所示。 

     

    1 内连接时一对一的关系

    说明:表“titles”和“titleauthor”都是SQL Server自带的数据库“pubs”的表。由于两个表中的title_id列都是具有惟一值的索引,所以两个表的内连接属于一对一的关系。

    2.多对一关系

    当连接的两个表,其中一个表要连接的列出现重复值,另外一个表的值是惟一的。这时连接的两个表之间的出现了多对一的关系。

    下面“student”表中的“学号”具有惟一值,而“grade”成绩表中的“学号”有重复值。现在实现这两个表的内连接。在查询分析器中输入的SQL语句如下:

    use student

    select *

    from grade

    join student

    on student.学号=grade.学号  

    实现的过程如图2所示。

    2 内连接时多对一的关系

    3.多对多关系

    当连接的两个表,要连接的列都出现重复值,这时连接的两个表之间出现多对多的关系。

    本例是SQL Server自带的数据库“pubs”,其中的两个表“titles”和“roysched”中的“royalty”列都有重复值,现在实现这两个表的内连接。在查询分析器中输入的SQL语句如下:

    use pubs

    select *

    from titles

    inner join roysched

    on titles.royalty=roysched.royalty  

    实现的过程如图3所示。

    3 内连接时多对多的关系

     

    外连接则扩充了内连接的功能,会把内连接中删除表源中的一些保留下来,由于保留下来的行不同,把外连接分为左外连接、右外连接和全外连接这3种连接。

    1.左外连接

    左外连接保留了第一个表的所有行,但只包含第二个表与第一表匹配的行。第二个表相应的空行被放入NULL值。

    左外连接的语法:

    use student

    SELECT fieldlist

    FROM table1 left join table2

    ON table1.column=table2.column

    下面把“student”表和“grade”表左外连接,第一个表“student”有不满足连接条件的行。在查询分析器中输入的SQL语句如下:

    use student

    select *

    from student

    left join grade

    on student.学号=grade.学号

    实现的过程如图1所示。

    2.右外连接

    右外连接保留了第二个表的所有行,但只包含第一个表与第二个表匹配的行。第一个表相应空行被入NULL值。

    右外连接的语法:

    use student

    SELECT fieldlist

    FROM table1 right join table2

    ON table1.column=table2.column

    下面把“grade”表和“course”表右外连接,第二个表“course”有不满足连接条件的行。在查询分析器中输入的SQL语句如下:

    use student

    select *

    from grade

    right join course

    on course.课程代号=grade.课程代号

    实现的过程如图2所示。

    2 右外连接

     

    通俗的讲:  
      A   left   join   B   的连接的记录数与A表的记录数同  
      A   right   join   B   的连接的记录数与B表的记录数同    
      A   left   join   B   等价B   right   join   A  

    3.全外连接

    全外连接会把两个表所有的行都显示在结果表中。

    全外连接的语法:

    use student

    SELECT fieldlist

    FROM table1 full join table2

    ON table1.column=table2.column

    把“grade”表和“course”表实现全连接,两个表都有不满足连接条件的行。在查询分析器中输入的SQL语句如下:

    use student

    select * from

    grade full

    join course

    on course.课程代号=grade.课程代号

    实现的过程如图3所示。

     

  • 相关阅读:
    2020.8.20收获
    2020.8.19
    2020.8.21收获
    2020.8.24收获
    UIScrollView滑动动作结束的侦听函数
    iphone 自定义UISwitch
    总结SQLite不支持的SQL语法有哪些
    去除nsstring中的空格
    ObjectiveC中判断字符串是否包含其他字符串
    设置IPHONE顶部的状态栏的样式
  • 原文地址:https://www.cnblogs.com/ITwangy/p/1678391.html
Copyright © 2020-2023  润新知