SQL的连接(外连接、内连接、交叉连接和自连接)

  在查询多个表时,我们经常会用到连接查询,连接是关系型数据库的主要特点,也是它区别于其他类型的数据库管理系统的一个标志。

一、什么是连接查询

  连接查询:根据两个表或者多个表的列之间的关系,来从这些表中查询数据。

  它的目的只要是实现多个表的查询操作。一共分为六种连接,分别为:外连接、内连接、交叉连接和自连接。

其中,外连接分为:左连接(做外链接),右连接(右外连接)、全连接(全外连接)。

  内连接分为:等值连接和不等连接。

一般是用作关联两张或两张以上的数据表时用的。看起来有点抽象,我们举个例子,做两张表:学生表(T_student)和班级表(T_class)。

T_student                                                                             T_class

           

下面我们来具体说一下这几种连接

二、外连接

  外连接分为左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)、右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN)、全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。我们就简单的叫:左连接、右连接和全连接。

  1、左连接

  返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。

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

 结果是:
                

  2、右连接

  恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。

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

  结果是:

    总结:右连接恰与左连接相反,显示右表全部行,和左表与右表相同行。

  3、全连接

  返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值

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

   结果是:

   总结:返回左表和右表中的所有行。

三、内连接(INNER JOIN)

   使用比较运算符(包括=、>、<、<>、>=、<=、!>和!<)进行表间的比较操作,查询与连接条件相匹配的数据。根据比较运算符不同,内连接分为等值连接和不等连接两种。

  1、等值连接

  在连接条件中使用等于号(=)运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列。

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

   结果是:

  2、不等连接

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

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

     结果是:

四、交叉连接(CROSS JOIN):也称迪卡尔积

  不带where条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积(例如:T_student和T_class,返回4*4=16条记录),如果带where,返回或显示的是匹配的行数。

  1、不带WHERE

 select *from T_student cross join T_class  

  与其相等的普通SQL语句为:

select *from T_student, T_class

  结果是:

总结:相当与笛卡尔积,左表和右表组合。

  2、有WHERE子句(往往会先生成两个表行数乘积的数据表,然后才根据where条件从中选择)

select * from T_student s cross join T_class c where s.classId = c.classId   

  需要注意的是:cross join后面只能用where不能使用on

其查询结果跟等值连接的查询结果是一样。

五、自连接

给自己取个别名,一个表当两个表来使用。

参考:http://blog.csdn.net/jiuqiyuliang/article/details/10474221

时间: 2024-10-08 19:34:57

SQL的连接(外连接、内连接、交叉连接和自连接)的相关文章

oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! oracle连接总结(内连接.外连接.自然连接,交叉连接,自连接) 1.简述  1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的.用来连接两张表的表达式组成了连接条件.当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结果集 2) 有5种基本类型的的连接,inner,outer,natural,cross连接,自连接. 2.说明与例子 1)内连接 (inner join (可简写为j

4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)

 mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,执行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- 选择数据库 use mydb61; -- 增加 dbuser1 用户 --     创建用户'dbuser61'密码为 'dbuser61'拥有操作数据库mydb61的所有权限 GRANT ALL ON mydb61.* TO dbuser61 IDENTIFIED BY "dbuser61&quo

SQL中的连接可以分为内连接,外连接,以及交叉连接 。

1. 交叉连接CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积: 举例,下列A.B.C 执行结果相同,但是效率不一样: A:SELECT * FROM table1 CROSS JOIN table2 B:SELECT * FROM table1,table2 C:select * from table1 a inner join table2 b A:select a.*,b.* from table1 a,table2

sas中的sql(4) 多表操作,内连接,外连接(left | right | full/join),In-Line Views

Understanding Joins 1.Joins combine tables horizontally (side by side) by combining rows. The tables being joined are not required to have the same number of rows or columns. (被join的表不需要行或列与join表的相同) 2.When any type of join is processed, PROC SQL sta

浅谈表的连接方式(内连接,外连接,交叉连接,自连接)

前言 连接类型分为三类:内连接,外连接,交叉连接.内连接使用INNER JOIN关键字,INNER JOIN在两个表中匹配共同的值,只有满足联结条件的行才会被用来构建结果集,INNER JOIN是默认的JOIN类型,可以仅使用JOIN关键字替代. 外连接有三种类型:LEFT OUTER JOIN,RIGHT OUTER JOIN和FULL OUTER JOIN,和INNER JOIN不同的是,LEFT OUTER JOIN也返回对第一个表不匹配的行,RIGHT OUTER JOIN也返回对第二个

SQL SERVER 多表操作 内连接、外连接

MSSQL 数据库分为 自然连接.内连接.外连接 1.自然连接和内连接基本相同.不同之处在于,自然连接“=”两侧的列属性值必须相同,内连接可以不同,只要读取数据相同即可. 自然连接 eg. select worker.职工号,depart.部门 from worker,depart where worker.部门编号 = depart.部门编号 2.内连接.一般使用INNER JOIN 关键字来表示内连接,INNER不是必须的可以不写.除了JOIN 关键字,还必须使用ON 或者using关键字

Hibernate迫切左外连接和迫切内连接

•迫切左外连接: •LEFT JOIN FETCH 关键字表示迫切左外连接检索策略. –list() 方法返回的集合中存放实体对象的引用, 每个 Department 对象关联的 Employee  集合都被初始化, 存放所有关联的 Employee 的实体对象. –查询结果中可能会包含重复元素, 可以通过一个 HashSet 来过滤重复元素 •左外连接: –LEFT JOIN 关键字表示左外连接查询. –list() 方法返回的集合中存放的是对象数组类型 –根据配置文件来决定 Employee

Oracle表与表之间的连接方式(内连接:inner join 、外连接 全连接: full outer join、左连接:left outer join 、右连接:right outer join、自然连接:natural join)

1 --内连接:INNER JOIN 它表示返回两个表或记录集连接字段的匹配记录,表示两个表中相互包含的部分 2 select * from student inner join sc on student.sno=sc.sno; 3 --外连接(全连接):包含左.右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行.不符合条件的,以空值代替. 4 --全连接:表示两个表组合在一起,左右不相匹配时使用空值替换 5 select * from student full outer join

SQL连接:内连接、外连接、交叉连接。

SQL连接可以分为内连接.外连接.交叉连接. 数据库数据:             book表                                          stu表 1.内连接 1.1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列. 1.2.不等值连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值.这些运算符包括>.>=.<=.<.!>.!<和<&g

SQL:内连接、左外连接、右外连接、全连接、交叉连接区别

有两个表A和表B.表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据情况,即用select * from A出来的记录情况如下图1所示: 图1:A表数据表B结构如下: Bid:int:标识种子,主键,自增ID Bnameid:int 数据情况,即用select * from B出来的记录情况如下图2所示: 图2:B表数据为 了把Bid和Aid加以区分,不让大家有误解,所以把Bid的起始种子设置为100.有SQL基本知识的人都知道,两个表要做连接,就必须有个