您现在的位置是:首页 >

innerjoin怎么用 SQL实战新手入门:内联接(INNER JOIN)(2)

火烧 2022-11-11 11:31:28 1047
SQL实战新手入门:内联接 INNER JOIN (2)    内联接(INNER JOIN)( )  该查询从两个表(LOCATION表和BOOKS表)中获取数据 并且仅仅获取那些匹配的数据行 使用

SQL实战新手入门:内联接(INNER JOIN)(2)  

   内联接(INNER JOIN)( )

innerjoin怎么用 SQL实战新手入门:内联接(INNER JOIN)(2)

  该查询从两个表(LOCATION表和BOOKS表)中获取数据 并且仅仅获取那些匹配的数据行 使用等于操作符的INNER JOIN表示 仅获取匹配的行 匹配的规则是 LOCATION表中数据行的FK_BK_LOC列值必须与BOOKS表中BK_ID列的值相同

  试一试从RDBMS中提取联接的数据

  下面将对LIBRARY数据库中的图书按照关键词进行查询 目前 SEARCHTAGS表中包含了所有类型的关键词 这些关键词是在将图书添加到数据库中时创建的 中间表SEARCH_BOOKS用于在BOOKS表和要搜索的关键词之间建立关系 使用一个JOIN查询可以搜索出LIBRARY数据库中以关键词SQL标记的所有图书 下面将使用Microsoft SQL Server数据库引擎来实现该功能 对于其他任何RDBMS也可以运行这些代码

  ( ) 打开Microsoft SQL Server Management Studio 使用Windows身份验证连接到数据库

  ( ) 单击位于左上角的New Query按钮 输入下面的SQL查询

  SELECT

  bk_title AS title

  FROM books bk INNER JOIN search_books sb

  ON bk bk_id = sb bk_id

  INNER JOIN searchTags st

  ON sb tag_id = st tag_id

  WHERE st tag_value = SQL

  ( ) 单击工具栏上的Execute按钮 并观察返回的查询结果

  title

  

  SQL Bible

  Wiley Pathways: Introduction to Database Management

  Microsoft SQL Server Weekend Crash Course

  SQL Functions: Programmers Reference

  ( row(s) affected)

  示例说明

  该查询具有两个JOIN语句 第一个JOIN语句从BOOKS表和SEARCH_BOOKS表联接数据 第二个JOIN语句从SEARCH_BOOKS表和SEARCHTAGS表联接数据

  该查询将从所有表对中获取数据 并将其联接为一个单一的结果集 然后再对其应用筛选条件tag_value = SQL 最后 将所有满足条件的记录返回给客户端

  可以采用多种办法来获得相同的结果集 下面是使用嵌套子查询的一个例子

  SELECT bk_title as title FROM books where bk_id IN

  (SELECT bk_id FROM search_books WHERE tag_id IN

  (SELECT tag_id FROM searchTags where tag_value = SQL ))

  读者可以自行判断哪一种代码更容易理解 是使用JOIN的代码 还是使用子查询的代码?笔者认为前者更好理解一些

  在后面的小节中还将回到这一问题 并分析在结果集中包含空的书架或者包含未放置图书的情况 下面让我们来介绍使用相同的基本JOIN规则将更多的数据包含在最终的结果集中

  JOIN语法相对较新 尽管RDBMS已经认可JOIN语法很多年了 但数据库章中使用的任何查询都可以使用WHERE子句重写 RDBMS依然能理解这样的查询 例如

  SELECT

  loc_bookcase

   loc_shelf

   loc_position_left

   bk_title

  FROM location

  WHERE location fk_bk_loc = books bk_id

  使用新语法的动机是什么呢?首先 新语法已经被SQL标准委员会批准 目前本书中讨论的所有RDBMS都支持JOIN语法 其次 RDBMS仅仅是为了向后兼容而提供了对旧语法的支持 在以后的版本中有可能废弃该语法 可以看到 新语法增强了代码的可读性 可以预防某些常见的SQL错误 例如无意间产生笛卡尔积的查询 这将在本章后面讨论

      返回目录SQL实战新手入门

      编辑推荐

       Oracle索引技术

       高性能MySQL

lishixinzhi/Article/program/SQL/201311/16473  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码