sql多表查询(单表查询略过)

表library:                                                                                                                            

表borrow:

表reader:

1、等值连接:(常用)

  原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积)。

  语法:select * from 表A,表B where 表A.主键=表B.外键 and 查询条件。

  步骤:①明确来源于哪几张表;②找到关联字段;③添加条件;④合并语句。

  优点:简单方便。

  缺点:查询效率低,查询记录快速增长。

  适用范围:不适用于海量数据的查询。

  例子:

    找出李某所借图书的所有图书的书名及借书日期。          

    SELECT

      full_name,

      book_name,

      borrowdate

    FROM

      library,

      borrow,

      reader

    WHERE

      library.mastr_serial_number = borrow.mastr_serial_number

      AND borrow.library_card_number = reader.library_card_number

      AND full_name LIKE '李%'

2、嵌套查询:(常用)

  原理:将多个单表查询结果拼接在一起。

  步骤:①依据需求,拆分多个单表查询;②针对每一个单表查询编写sql语句(每写完一条执行,检查是否正确);③合并sql语句(单表查询结果单个:=、!=、>、<、>=、<=;多个查询结果:in、not in)。

  优点:查询效率高,记录不会增加。

  缺点:复杂、逻辑性强,表结构要清晰

  例子:

    查询1997年10月以后借书的读者借书证号、姓名和单位。

    SELECT

      full_name,

      unit,

           library_card_number

      FROM

      reader

    WHERE

      library_card_number in (

      SELECT

        library_card_number

      FROM

        borrow

      WHERE

        borrowdate > '1997-10-31')

 3.内连接:(不常用)

  特点:先判断再组合

  语法:inner join ... on

                两张表:select * from 表A inner join 表B on 表A.主键=表B.外键 where 查询条件

                三张表:select * from 表A inner join 表B on 表A.主键=表B.外键 inner join 表C on 表C.主键=表B.外键 where 查询条件

4.外连接:(不常用)

  分为左外连接右外连接

原文地址:https://www.cnblogs.com/njcb/p/7992194.html