zoukankan      html  css  js  c++  java
  • 数据库系列之查询(5)

    内连接

    1 语法

    SELECT <列名>
    FROM 表1 
    INNER  JOIN  表2 ON 表1.列名  条件运算符  表2.列名
    [WHERE 条件]
    [ORDER BY  排序列]
    其中“ON 表1.列名  条件运算符  表2.列名” 中,条件运算符常用的是:=、<>。
    表1.列名和表2.列名,分别是两个表的公共列。
    内连接查询出的是两个表公共列共有的记录。

    2 示例

    (1)Books与Authors内连接SQL语句

    SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books as b
    INNER JOIN Authors as a ON b.AuthorID = a.AuthorID


    (2)内连接另外一种写法

    SQL Server2005还兼容以前版本的内连接语法,即使用WHERE子句进行内连接。 
    SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books b,  Authors a
    WHERE b.AuthorID = a.AuthorID

    3 多表内连接语法

    SELECT <列名>
    FROM 表1 
    INNER  JOIN  表2 ON 表1.列名  条件运算符  表2.列名
    INNER JOIN  表3 ON 表1.列名  条件运算符  表3.列名
    ……
    [WHERE 条件]
    [ORDER BY  排序列]

    4 示例

    SELECT b.BookCode as 图书编号, c.PublisherName as 出版商名,
                   b.BookName as 图书名称,a.AuthorName as 作者姓名
    FROM  Books b INNER JOIN  Authors a ON b.AuthorID=a.AuthorID 
    INNER JOIN Publisher c ON b.PublisherID=c.PublisherID

    外连接

    左外连接语法

    SELECT <列名>
    FROM 左表 
    LEFT  [OUTER] JOIN  右表 ON 左表.列名  条件运算符  右表.列名
    [WHERE 条件]
    [ORDER BY  排序列]

    示例

    使用左外连接查询Books与Authors表中的数据

    SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books b 
    LEFT JOIN  Authors a ON b.AuthorID=a.AuthorID

    左外连接是以左表为主表,去关联右表(从表),结果集中包含主表所有数据行,如果主表的某行在从表中没有匹配行时,则从表的选择列为NULL值。

    右外连接语法

    SELECT <列名>
    FROM 左表  RIGHT  [OUTER] JOIN  右表
    ON 左表.列名  条件运算符  右表.列名
    [WHERE 条件]
    [ORDER BY  排序列]

    示例

    使用右外连接查询Books与Authors表中的数据
    SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books b
    RIGHT JOIN  Authors a ON b.AuthorID=a.AuthorID
    右外连接是以右表为主表,去关联左表(从表),结果集中包含主表所有数据行,如果主表的某行在从表中没有匹配行时,则从表的选择列为NULL值。

    完全连接

    语法 

    SELECT <列名>
    FROM 左表 
    FULL  [OUTER] JOIN  右表 ON 左表.列名  条件运算符  右表.列名
    [WHERE 条件]
    [ORDER BY  排序列]
    完全连接左表和右表中所有行,当某行数据在另一个表中没有匹配时,则另一个表的选择列值为NULL

    示例

    使用完全连接查询Books与Authors表中的数据

    SELECT b.BookCode as 图书编号, b.BookName as 图书名称, a.AuthorName as 作者姓名
    FROM Books b 
    FULL JOIN  Authors a ON b.AuthorID=a.AuthorID

    交叉联接


    概念:没有用where子句的交叉连接将产生连接所涉及的笛卡尔积第一个表的行数乘以第二个表的行数等于笛卡尔积和结果集的大小

    交叉连接: Cross join(不带条件where,如果带返回或显示的是匹配的行数)

    SQL语法:select * from  Books cross join Books

    如果有条件(whereselect * from Books cross join Authors where Books.AuthorID= Authors.AuthorID
    等价于
    select * from Books ,Authors --(不带where)
  • 相关阅读:
    面对诱惑我们应有的态度
    TED 停止寻找你的热情
    C字符数组的处理
    对Linux(Unix)的基础知识归纳
    对Hadoop体系的一点认识
    Android开发涉及有点概念&相关知识点(待写)
    IOS开发涉及有点概念&相关知识点
    对CLR基本原理概念&垃圾回收机制的简单理解
    含有指针变量的类需要重写拷贝构造函数,拷贝赋值函数,析构函数
    malloc分配内存的结构
  • 原文地址:https://www.cnblogs.com/cmhunter/p/4279003.html
Copyright © 2011-2022 走看看