SQL内外左右交叉连接,交叉连接
分类:数据库

在查询多少个表时,大家平常会用“连接查询”。连接是关周全据库模型的首要特色,也是它有别于于其余种类数据库管理种类的一个注脚。

 

SQL左右连接中的on and和on where的区别

  

何以是一而再查询?

 

 

    概念:依照五个表或多少个表的列之间的涉及,从那么些表中查询数据。

 

    目标:完毕八个表查询操作。

 

诚如是用作关联两张或两张以上的多寡表时用的。看起来有个别抽象,大家举例,做两张表:学子表(T_student卡塔尔国和班级表(T_class)。

 

                     T_student                                   T_class

    图片 1   图片 2        图片 3

 

本来一向对SQL左右一连中的on and和on where的分别不是太精通,直到在网络看看了上边这段话才出现转机。
在运用left join时,on and和on where条件的分歧如下: 1、on条件是在改动不时表时使用的法则,它不管on中的条件是不是为真,都会再次回到左侧表中的笔录。 2、where条件是在权且表生成好后,再对有的时候表进行过滤的原则。那时候早就未有left join的含义(必得回到左侧表的笔录卡塔 尔(阿拉伯语:قطر‎了,条件不为真的就全体过滤掉,on后的规格用来生成左右表关联的有的时候表,where后的尺度对一时表中的记录实行过滤。

怎么是连连查询呢?

  

    概念:依据七个表或五个表的列之间的涉及,从那几个表中查询数据。

    指标:完结多个表查询操作。

 

接连几日来标准语法格式:

    SQL-92标准所定义的FROM子句的总是语法格式为:

    FROM  join_table join_type join_table[ON (join_condition)]

    其中join_table提出到场连接操作的表名,连接可以对同一个表操作,也能够对多表操作,对同二个表操作的连接又称做自连接。join_type 提出连接类型。join_condition指接连条件。

 

实行是查证真理的唯风流倜傥标准,接下去用试验来验证一下:
先上表结构以致数据:

知道了连接查询的定义之后,哪天用三回九转查询呢?

     

    经常是用作关联两张或两张以上的多寡表时用的。看起来有些抽象,我们比方,做两张表:学子表(T_student卡塔尔国和班级表(T_class)。

 

                                            T_student                                                                     T_class

       图片 4        图片 5

 

连天类型:

   

    连接分为三种:内接连、外接连、交叉连接。

 

[SQL内外左右交叉连接,交叉连接。sql] view plain copy
print?

连天标准语法格式:

    

    SQL-92规范所定义的FROM子句的三番一遍语法格式为:

    FROM  join_table join_type join_table[ON (join_condition)]

    其中join_table建议参加连接操作的表名,连接能够对同二个表操作,也能够对多表操作,对同三个表操作的接连几日又称做自连接。join_type 建议连接类型。join_condition指接连条件。

 

内连接(INNER JOIN)

   

    使用相比较运算符(包蕴=、>、<、<>、>=、<=、!>和!<卡塔尔进行表间的比较操作,查询与连接条件相相称的数据。依据相比运算符差异,内一连分为等值连接、自然连接和差别连接三种。

SQL> create table A (id int, type int);
SQL> select * from A;
ID TYPE

老是类型:

   

    连接分为二种:内连接、外接连、交叉连接。

 

1、等值连接

     概念:在连年条件中使用分别名(=卡塔尔运算符,其查询结果中列出被一而再表中的全数列,包含内部的重复列。

 

[sql]     

  1. select * from T_student s,T_class c where s.classId = c.classId   
  2.      等于  
  3. select * from T_student s inner join T_class c on s.classId = c.classId

       结果是:

                 图片 6

                 


内连接(INNER JOIN)

   

    使用相比较运算符(包罗=、>、<、<>、>=、<=、!>和!<卡塔尔举办表间的相比操作,查询与连接条件相相配的数量。依据相比运算符不一致,内接二连三分为等值连接和分裂连接二种。

2、不等一连

   概念:在接连条件中应用除等于号之外运算符(>、<、<>、>=、<=、!>和!<)

 

[sql]

  1. select * from T_student s inner join T_class c on s.classId <> c.classId 

       结果是:

                图片 7

     1          1  
     2          1  
     3          2  

1、等值连接

     概念:在三番五次条件中央银行使分小名(=卡塔 尔(英语:State of Qatar)运算符,其查询结果中列出被连接表中的全数列,包蕴内部的重复列。

 

        [sql] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-family:System;">       
  2. select * from T_student s,T_class c where s.classId = c.classId   
  3.      等于  
  4. select * from T_student s inner join T_class c on s.classId = c.classId</span></span>  

       结果是:

                 图片 8

                 

3、自然连接

 

     概念:连接条件和等值连接雷同,可是会去除连接表中的重复列。

     查询语句同等值连接基本雷同:

 

[sql] 

  1.     select s.*,c.className from T_student s inner join T_class c on s.classId = c.classId

      与等值连接比较:结果是少一个一列classId: 

           图片 9

        计算:内连接是只体现满意条件的!

  

SQL> create table B(id int ,class int);
SQL> select * from B;

2、不等连接

 

   概念:在一而再条件中运用除等于号之外运算符(>、<、<>、>=、<=、!>和!<)

 

         [sql] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-family:System;">       
  2.     select * from T_student s inner join T_class c on s.classId <> c.classId</span></span>  

       结果是:

 

                图片 10

外连接

   

    外连接分为左连接(LEFT JOIN卡塔尔国或左外连接(LEFT OUTE奇骏 JOIN卡塔 尔(英语:State of Qatar)、右连接(讴歌MDXIGHT JOIN卡塔 尔(英语:State of Qatar)或右外连接(EnclaveIGHT OUTEPAJERO JOIN卡塔 尔(阿拉伯语:قطر‎、全连接(FULL JOIN卡塔 尔(阿拉伯语:قطر‎或全外连接(FULL OUTEXC60 JOIN卡塔 尔(英语:State of Qatar)。大家就总结的叫:左连接、右连接和全连接。

 

    ID      CLASS  

 

1、左连接:

 

    概念:再次回到左表中的全体行,假使左表中行在右表中尚无相配行,则结果中右表中的列重临空值。

[sql] 

  1. select * from  T_student s left join T_class c on s.classId = c.classId

  结果是:
                图片 11

 

小结:左连接彰显左表全体行,和右表与左表相近行。

 


外连接

 

   

    外连接分为左连接(LEFT JOIN卡塔尔国或左外连接(LEFT OUTE福特ExplorerJOIN卡塔 尔(阿拉伯语:قطر‎、右连接(EscortIGHT JOIN卡塔尔国或右外连接(智跑IGHT OUTER JOIN卡塔尔、全连接(FULL JOIN卡塔 尔(英语:State of Qatar)或全外连接(FULL OUTEWranglerJOIN卡塔 尔(阿拉伯语:قطر‎。大家就归纳的叫:左连接、右连接和全连接。

 

2、右连接:

 

   概念:恰与左连接相反,再次回到右表中的全数行,借使右表中央银行在左表中绝非相称行,则结果中左表中的列重返空值。

[sql] 

  1. select * from  T_student s right join T_class c on s.classId = c.classId 

   结果是:

              图片 12

  总计:右连接恰与左连接相反,突显右表全体行,和左表与右表相似行。

 

     1          1  
     2          2  

1、左连接:

 

    概念:再次回到左表中的全数行,借使左表中央银行在右表中从未相称行,则结果中右表中的列再次来到空值。

 

         [sql] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-family:System;">      
  2.     select * from  T_student s left join T_class c on s.classId = c.classId</span></span>  

  结果是:
                图片 13

 

  计算:左连接展现左表全体行,和右表与左表相近行。

 

3、全连接:

 

  概念:重返左表和右表中的所有行。当某行在另一表中从未匹配行,则另一表中的列再次回到空值

 

[sql]    

  1.    select * from  T_student s full join T_class c on s.classId = c.classId

   结果是:

            图片 14

   总括:重回左表和右表中的全体行。

 

2、右连接:

 

   概念:恰与左连接相反,再次回到右表中的全体行,固然右表中央银行在左表中从未相配行,则结果中左表中的列再次回到空值。

         [sql] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-family:System;">     
  2.    select * from  T_student s right join T_class c on s.classId = c.classId</span></span>  

   结果是:

 

              图片 15

  总计:右连接恰与左连接相反,呈现右表全体行,和左表与右表近似行。

 

时断时续连接(CROSS JOIN卡塔 尔(英语:State of Qatar):也称迪卡尔积

 

    概念:不带WHERE条件子句,它将会回到被连接的多少个表的笛Carl积,重返结果的行数等于八个表行数的乘积(比如:T_student和T_class,返回4*4=16条记下卡塔尔国,若是带where,重回或突显的是协作的行数。

 

[sql] view plain copy
print?

3、全连接:

 

  概念:重回左表和右表中的全部行。当某行在另一表中并未有相配行,则另一表中的列再次来到空值

 

         [sql] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-family:System;">      
  2.    select * from  T_student s full join T_class c on s.classId = c.classId</span></span>  

   结果是:

 

            图片 16

   计算:再次回到左表和右表中的全部行。

 

1、不带where:

 

[sql]    

  1.    select *from T_student cross join T_class  
  2.   ‘等于  
  3.    select *from T_student, T_class

    

结果是:

                           图片 17

     

 总计:非凡与笛Carl积,左表和右表组合。

SQL> select * from A left join B on A.id = B.id where A.type = 1;

接力连接(CROSS JOIN卡塔 尔(英语:State of Qatar):也称迪Carl积

 

    概念:不带WHERE条件子句,它将会回来被接连的八个表的笛Carl积,再次回到结果的行数等于七个表行数的乘积(比方:T_student和T_class,返回4*4=16条记下卡塔尔国,假诺带where,再次回到或显示的是合营的行数。

 

2、有where子句,往往会先生成五个表行数乘积的数据表,然后才根据where条件从当中筛选。

[sql]

  1. select * from T_student s cross join T_class c where s.classId = c.classId   
  2.    (注:cross join后加条件只可以用where,无法用on)  

      查询结果跟等值连接的询问结果是相通。

      连接查询特别轻易,只必要在档案的次序中多么实施,不断总计。

    ID       TYPE         ID      CLASS  

1、不带where:

 

         [sql] view plain copy

 

  1. <span style="font-size:18px;"><span style="font-family:System;">     
  2.    select *from T_student cross join T_class  
  3.   ‘等于  
  4.    select *from T_student, T_class</span></span>  

    

结果是:

                           图片 18

       总括:特出与笛Carl积,左表和右表组合。

 


2、有where子句,往往会先生成多个表行数乘积的数据表,然后才依照where条件从当中筛选。

 

         [sql] view plain copy

 

  1. select * from T_student s cross join T_class c where s.classId = c.classId   
  2.    (注:cross join后加条件只可以用where,无法用on)  

 

 

      查询结果跟等值连接的询问结果是千篇一律。

 

 

      连接查询极其轻便,只须要在品种中多么实施,不断总计。

 

转载自:

     1          1          1          1  
     2          1          2          2  

根据上面这段话的分解,where字句是在扭转有时表今后再张开过滤的,相当于足以领悟为正是叁个左连接:select * from A left join B on A.id = B.id;
其运维结果如下:

[sql] view plain copy
print?

SQL> select * from A left join B on A.id = b.id;

    ID       TYPE         ID      CLASS  

     1          1          1          1  
     2          1          2          2  
     3          2  

然后加上where A.type = 1对一时表进行过滤,除掉A.type不为1的,明显结果正确。

[sql] view plain copy
print?

SQL> select * from A left join B on A.id = B.id and A.type = 1;

    ID       TYPE         ID      CLASS  

     1          1          1          1  
     2          1          2          2  
     3          2  

[sql] view plain copy
print?

SQL> select * from A left join B on A.id = B.id and B.class = 1;

    ID       TYPE         ID      CLASS  

     1          1          1          1  
     3          2  
     2          1  

基于上边这段话的讲授:on条件是在转换不时表时使用的条件,它不管on中的条件是还是不是为真,都会回去左侧表中的记录。明显左连接再增加新的规范化:B.class = 1筛选掉第二行记录,结果精确。

[sql] view plain copy
print?

SQL> select * from A left join B on A.id = B.id where B.class = 1;

    ID       TYPE         ID      CLASS  

     1          1          1          1  

原因通①。(①,②卡塔尔和(③,④卡塔 尔(英语:State of Qatar)便是首要词on and和on where的分别,但结果却浑然两样。综上四个例子,where是生成有时表未来再开展过滤,对左右表都举办筛选。而and后边的讲话纵然是对left join中的左表举行过滤将不起别的功用,对右表举行过滤的话,那么左表依旧回到全体行,只是右表会被过滤掉大器晚成部分行。

再来看看内接连inner join on and和 on where的界别:
由于刚先生早先表的数量不是太相符,所以先微微更新一下,那样更加好观看inner join和left join在and和where的不一致之处。

[sql] view plain copy
print?

SQL> update A set type = 2 where id = 1;

已更新 1 行。

SQL> select * from A;

    ID       TYPE  

     1          2  
     2          1  
     3          2  

SQL> select * from B;

    ID      CLASS  

     1          1  
     2          2  

先看看and的:⑤

[sql] view plain copy
print?

SQL> select * from A inner join B on A.id = B.id and A.type = 1;

    ID       TYPE         ID      CLASS  

     2          1          2          2  

引人瞩目输出结果与左连接的不黄金年代致,先与从不and的内接连相比一下:

[sql] view plain copy
print?

SQL> select * from A inner join B on A.id = B.id;

    ID       TYPE         ID      CLASS  

     1          2          1          1  
     2          1          2          2  

显明如若按左连接的逻辑,那个结果就是指鹿为马的。但这是Oracle输出的,并不是本人瞎打的,显明在内连接时与左连接分歧了。这里on and条件和on where条件相符对转移以后的一时表同样会被过滤。明显A表id为1的type不为1,所以它被过滤了。

再上几组来验证一下地点这么些估量是或不是是正确的:

再来看看内延续的where:

[sql] view plain copy
print?

SQL> select * from A inner join B on A.id = B.id where A.type = 1;

    ID       TYPE         ID      CLASS  

     2          1          2          2  

这么些也是和左连接同样生成有的时候表然后展开过滤,不作解释。⑦

[sql] view plain copy
print?

SQL> select * from A inner join B on A.id = B.id and B.class = 1;

    ID       TYPE         ID      CLASS  

     1          2          1          1  

[sql] view plain copy
print?

SQL> select * from A inner join B on A.id = B.id where B.class = 1;

    ID       TYPE         ID      CLASS  

     1          2          1          1  

相对来讲发现:(⑤,⑥卡塔 尔(阿拉伯语:قطر‎和(⑦,⑧卡塔尔结果都相符,也正是说内连接inner join on and 恐怕on where不管是对左表照旧右表实行过滤,实际都以在扭转有的时候表以后再拓展过滤的,何况对左表和右表都起效果,那与左连接left join有精气神的分别!!!
末尾上俩未有使用连接语句的例子:

[sql] view plain copy
print?

</pre><p style="margin-top: 14px; margin-bottom: 14px; padding-top: 0px; padding-bottom: 0px; word-break: normal; word-wrap: break-word; font-size: 16px; line-height: 28px; font-family: simsun; text-indent: 2em; color: rgb(51, 51, 51);"></p><pre name="code" class="sql" style="margin-top: 0px; margin-bottom: 0px; padding: 0px; color: rgb(51, 51, 51); font-size: 16px; line-height: 28px;">SQL> select * from A,B where A.id = B.id and A.type = 1;

    ID       TYPE         ID      CLASS  

     1          1          1          1  
     2          1          2          2  

SQL> select * from A,B where A.type = 1 and A.id = B.id;

    ID       TYPE         ID      CLASS  

     1          1          1          1  
     2          1          2          2  

比较容易,不作解释。

小结一下:

在接受left join时,on和where条件的区分如下:

1、on条件是在改造有时表时使用的尺码,它不管on中的条件是或不是为真,都会回到侧面表中的笔录。(实际上左连接中假若and语句是对左表实行过滤的,那么无论是真假都不起其余效率。假若是对右表过滤的,那么左表全数记录都回去,右表筛选之后再与左表连接重回卡塔尔

2、where条件是在权且表生成好后,再对一时表进行过滤的法规。那个时候早就远非left join的意义(必得再次回到左边表的笔录卡塔尔了,条件不为真的就全体过滤掉,on后的原则用来生成左右表关联的有的时候表,where后的尺度对有时表中的记录实行过滤。

在动用inner join时,不管是对左表照旧右表进行筛选,on and和on where都会对转移的临时表实行过滤。

本文由澳门新萄京发布于数据库,转载请注明出处:SQL内外左右交叉连接,交叉连接

上一篇:目录维护常用方法总括,SQLSEEscortVE宝马7系怎么着 下一篇:澳门新萄京及不分析,MySQL查询前天
猜你喜欢
热门排行
精彩图文
  • SQL内外左右交叉连接,交叉连接
    SQL内外左右交叉连接,交叉连接
    在查询多少个表时,大家平常会用“连接查询”。连接是关周全据库模型的首要特色,也是它有别于于其余种类数据库管理种类的一个注脚。   SQL左右连接
  • 目录维护常用方法总括,SQLSEEscortVE宝马7系怎么着
    目录维护常用方法总括,SQLSEEscortVE宝马7系怎么着
    意气风发. 索引概述 关于介绍索引,有豆蔻梢头种“文章太史,挥毫万字,一饮千钟”的豪迈感觉,因为索引须求讲的知识点太多。在每一种关系型数据
  • 澳门新萄京采用的恢复方法
    澳门新萄京采用的恢复方法
    set rowcount 20000 delete from UFSystem..ua_log set rowcount 0 原文地址: truncate 表之后,采用的恢复方法 作者: ban仙 一、sybase创建用户数据库的脚本。 设置  trunca
  • Mysql数据库备份工具,逻辑备份
    Mysql数据库备份工具,逻辑备份
          几天前收到某个业务项目,MySQL数据库逻辑备份mysqldump备份失败的邮件,本是在休假,但本着工作认真负责,7*24小时不间断运维的高尚职业情操,开
  • 澳门新萄京:创建数据库邮件,数据库邮件
    澳门新萄京:创建数据库邮件,数据库邮件
      本文转自: 原文: SQL Server数据库邮件使用 SMTP服务器转发邮件,允许用户配置数据库邮件,并通过存储过程 msdb.dbo.sp_send_dbmail 向特定的用户发送邮件,