SQL中的联合查询

原创 2012年03月26日 17:15:47

a表

aaa    bbb    ccc

 1a      1b      1c

 2a      2b      2c

 3a      3b      3c

b表

aaa   bbb    ddd

 1a     1b       1d

 4a     4b       4d

1、union

union [all]

all:表示将查询的所有结果都合并到结果集中,若不加all会将重复的行只保留一行

select * from a union select * from b
结果:(查询的字段数相同)

select aaa,bbb from a union select aaa,bbb from b

结果:(重复的记录被覆盖)



select aaa,bbb from a union all select aaa,bbb from b
结果:(加上all,允许重复的行)

2、join

连接分为内连接、外连接、交叉连接

2.1、内连接 inner join (默认的连接方式)

只有至少有(指定的字段)一行的记录在两个查询表中都有记录,此时才有结果集。即返回两个表之间的交集(相同字段的记录)

SELECT * FROM  `a` INNER JOIN b ON a.aaa = b.aaa
结果:(两表有相同的字段的值的记录,会将字段连接起来,而不是union,将结果追加到记录的结果集后)

2.2、外连接

a、left join 左连接

返回查询表的记录,包含左边表的所有记录,如果左边表中的记录在右边表中没有对应的记录,则所返回右边表的字段结果为空(差集)

SELECT * FROM  `a` LEFT JOIN `b` ON a.aaa = b.aaa
结果:(b表没有的字段的值为空NULL)

b、right join 右连接

与left join相反,查询的记录包含右边表的所有记录,如果右边表中的记录在左边表中没有对应的记录,则返回左边表的字段值为空(差集)

SELECT * FROM `b` LEFT JOIN `a` ON a.aaa = b.aaa

结果:(a表没有的字段值为空NULL)


c、full join 全连接

返回左表和右表中的所有记录,即两表的数据全部显示

select * from a full join b

结果:(返回所有的记录)


3、cross in 交叉连接

不带where子句,返回两个表中所有笛卡尔积,记录数为a表和b表记录数的积

SELECT * FROM  `b` CROSS JOIN `a`
结果:


SELECT * FROM  `a` CROSS JOIN `b`
结果:


SQL使用(一)-----联合查询

本文主要对内连接(inner Join 或 Join)、外连接(outer Join) 、左外连接(left outer Join 或 left Join)、右外连接(right outer Join...
  • u012999796
  • u012999796
  • 2017年03月15日 17:40
  • 16759

MySQL中,关联查询的3种写法(USING/ON)

看看下面三个关联查询的 SQL 语句有何区别? SELECT * FROM score, student WHERE score.id = student.id ... SELECT * FROM ...
  • gaojinshan
  • gaojinshan
  • 2014年03月19日 17:30
  • 43290

SQL(基础查询)、SQL(关联查询)

1. SQL(基础查询) 1.1. 基本查询语句 1.1.1. FROM子句 SQL查询语句的语法如下: copytextpop-up SELECT column [ali...
  • kuangzhixuan
  • kuangzhixuan
  • 2017年07月04日 11:30
  • 51255

关联查询sql性能

声明-------      A:大表         B:小表 第一种写法. select * from A a,B b where  b.id = a.b_id ...
  • baidu_27701525
  • baidu_27701525
  • 2015年04月25日 14:41
  • 1064

sql自关联查询

1、子查询关联 select t.*, (select parent_name from table where id=t.parent_id) from table t where ... ...
  • a381831810
  • a381831810
  • 2015年04月27日 14:50
  • 3583

sql 多表关联查询

内部连接 inner join 两表都满足的组合 full outer--全连.两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有 A表没有的显示为(null) A表 l...
  • justjackwang
  • justjackwang
  • 2013年05月03日 10:40
  • 20967

sql联合查询(内联、左联、右联、全联)

继上篇《sql内联查询》 引言        上篇谈到了sql内联查询是联合查询的一种,接下里这篇博客就介绍一下其它的查询方法,分别为左联、右联、全联。        还是用上篇博客提到的例子: s...
  • u013037201
  • u013037201
  • 2016年04月15日 14:09
  • 5976

sql关联查询和连接查询

1 取得表中第6到第10条记录的值  1.1 第一种方法,使用minus语句  假设ddl语句如下:  CREATE TABLE T(ID VARCHAR2(4) PRIMARY KEY, VALUE...
  • tt39635552
  • tt39635552
  • 2009年09月14日 17:48
  • 3193

sql关联查询

inner join(等值连接)只返回两个表中联结字段相等的行 left join(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接)返回包括右...
  • sy_shu
  • sy_shu
  • 2012年09月21日 20:22
  • 21243

sql server联合查询内使用子查询

原来一直以为join后面写个查询语句,sql server会自己生成一个worktable,然后再进行联合查询,但是今天的三观被刷新了一次。 book_month_deli是一张统计每月信息的表,bo...
  • Magic_3F
  • Magic_3F
  • 2016年11月20日 20:00
  • 1425
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL中的联合查询
举报原因:
原因补充:

(最多只允许输入30个字)