zoukankan      html  css  js  c++  java
  • SQL Server中的连接查询(内连接、外连接、交叉连接)

           在数据库查询中,经常会用到两个有关联的表进行查询,需要把两个表中的数据按照某些条件查出来,这时就可以使用连接查询

           连接查询分为三种:内连接、外连接和交叉连接

      1. 内连接

           内连接inner join ,和join是一个东西,join是inner join的简写。 例如: select * from TestA a inner join TestB b on a.id = b.aId

           内连接是返回被连接表(a表和b表)中所有的列,包括重复列

           在实际使用中,可能连接查询会应用在a表与b表的数据关系是一对多(比如一个学生可以选择好多门课),b表对a表是一对一这样的关系查询中,此时,查询结果的行数是一对一那张表(b表)中符合查询条件的行数

      2. 外连接

           外连接分为: 左(外)连接、右(外)连接、全连接

           左(外)连接 left (outer) join,左连接是以左边表为主表,右边表为辅表,返回左表中的所有行,如果左表中的行在右表中没有匹配行,那么结果中右表的列返回空值。如果左表和右表的数据关系是一对多的关系,那么查询结果中,左表可能会有重复数据。

           右(外)连接 right (outer) join,右外连接和左外连接正好相反,右外连接是以右表为主表,左表为辅表,会返回右表中的所有行,如果右表中的行在左表中没有匹配行,那么结果中左表的列返回空值。如果右表与左表是一对多关系,那么查询结果中,右表可能有重复数据。

           全连接 full join,全连接就是把左表和右表的数据全部都查询出来,如果左表的行在右表中没有匹配行,那么结果中右表的列返回空值,如果右表的行在左表中没有匹配行,那么结果中左表中的列返回空值。

      3. 交叉连接

          交叉连接 cross join,使用交叉连接时,如果不带where条件,那么查询结果返回的就是著名的笛卡尔积,也就是左表中的每一条数据都会逐条与右表中每一条数据进行匹配,查询结果返回的行数是左表行数与右表行数的乘积。

         带where条件时,返回的就是符合条件的行数

         总结:

         左连接:以左表为主,左边表的数据肯定会完整展示(可能会有重复),右表没对应的就是null;

         右连接:以右表为主,右表数据肯定会完整展示(可能会有重复),左表没对应的就是null;

         全连接:两个表的数据都会完整展示(也可能会有重复数据);

         交叉连接:不带where条件时查询结果就是笛卡尔积

  • 相关阅读:
    介绍一种很好用的任务调度平台
    java中的进制与操作符
    类再生(合成、继承、final)
    初始化
    重新学习Spring2——IOC和AOP原理彻底搞懂
    重新学习Spring一--Spring在web项目中的启动过程
    JDK并发包
    java并行程序基础
    MVC模式
    访问者模式
  • 原文地址:https://www.cnblogs.com/haley24/p/10226313.html
Copyright © 2011-2022 走看看