sql语句联合查询详解

转载 2013年12月06日 00:10:23

http://phpweb.blog.163.com/blog/static/17970616220112165715708/

 

sql语句联合查询详解  

2011-03-01 18:58:22|  分类: mysql|字号 订阅

例子:

person表和user表没有约束
person表:

sql语句联合查询详解 - 京城圆梦 - 编程笔记
 
 
user表:
sql语句联合查询详解 - 京城圆梦 - 编程笔记
 
 

 

有以下几种关联

1.UNION

 

格式:
查询语句

UNION [ALL] 查询语句

[UNION [ALL] 查询语句][…n]

说明:
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3) 
执行:select id,name from user UNION select id,name from person;

sql语句联合查询详解 - 京城圆梦 - 编程笔记
 
注意:sql句子栏目数必须是相同的,字段可以随意
 
2.JOIN

JOIN用于按照ON条件联接两个表,主要有四种:

(一)内连接

INNER JOIN:内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。(表示交集)

(二)外连接

LEFT JOIN / LEFT OUTER JOIN:外部联接两个表中的记录,并包含左表中的全部记录。如果左表的某记录在右表中没有匹配记录,则在相关联的结果集中右表的所有选择列表列均为空值。理解为即使不符合ON条件,左表中的记录也全部显示出来,且结果集中该类记录的右表字段为空值。(差集)

RIGHT JOIN / RIGHT OUTER JOIN:外部联接两个表中的记录,并包含右表中的全部记录。简单说就是和LEFT JOIN反过来。(差集)

FULL JOIN / FULL OUTER JOIN: 完整外部联接返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合并,左右两表的数据都全部显示。(并集)

(三)交叉连接

交叉连接(cross join)不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

JOIN的基本语法(注意结果对比):

1.执行 select * from user as A join person as B on A.id=B.id;
select * from user as A inner join person as B on A.id=B.id;


结果如下:
sql语句联合查询详解 - 京城圆梦 - 编程笔记
 
 
 
2.执行 select A.* from user as A join person as B on A.id=B.id;
sql语句联合查询详解 - 京城圆梦 - 编程笔记
 
3.执行select * from user as A left join person as B on A.id=B.id;
sql语句联合查询详解 - 京城圆梦 - 编程笔记
 
 
4.select * from person as A right join user as B on A.id=B.id;
 
sql语句联合查询详解 - 京城圆梦 - 编程笔记
 
 
5.full join  
mysql 5不支持full join 所以用左关联和右关联进行联合
SELECT * FROM user
LEFT JOIN money ON user.id=money.id
UNION
SELECT * FROM user
RIGHT JOIN money ON user.id=money.id

6.执行 select * from user CROSS JOIN person;
sql语句联合查询详解 - 京城圆梦 - 编程笔记
 
 
 巧记
select * from A left join  B where   条件
 
其一:  表以from最近表为准则(A表)
其二: join B要放在表A  left  (其中对面中的左右以自身的左右正好相反)
其三:from A表为准则时,Join表有多字段内容,少则为空值NULL
 
right join正好相反
select * from A right join  B where   条件

 

 

SQL语句多表联合查询

本周之前,对于数据库的使用仅限于简单的增删改查(insert、delete、updata、select),而这一周由于工作需要,对一些sql函数、sql语句多表联合查询、T-SQL语句基本语法、存储过...
  • qq_20828983
  • qq_20828983
  • 2017年03月18日 12:25
  • 2168

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

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

SQL三表连接查询与集合的并、交、差运算查询

use db_sqlserver2   select 姓名, 工资, 面积, 金额, (工资+金额/1000) as 实发工资 from 职工,仓库, 订购单       where 职工.职工号...
  • u011854789
  • u011854789
  • 2016年08月15日 11:16
  • 9255

关于多表查询sql常用的连接语句:左外连接、右外连接、内连接

1)内联接:    内联接使用比较运算符(使用像 =  或 )根据每个表共有的列的值匹配两个表中的行,根据这两张表中相同列的条件,得出其交集。例如:  检索 students和courses表中学生...
  • wanghang88
  • wanghang88
  • 2016年08月10日 10:04
  • 21398

sql嵌套查询和多表联合查询之间的差别

sql语句多表嵌套查询和多表关联查询的差别
  • keke921231
  • keke921231
  • 2017年01月18日 11:16
  • 3289

三表联合的SQL语句

有这样的3个表Table  A  结构ID     班级名   教师名1         3               liu2         4           ...
  • liuwenfang777
  • liuwenfang777
  • 2007年03月23日 17:26
  • 382

在Hibernate中使用HibernateTemplate来进行包含sql语句的查询

代码示例: /** * 使用sql语句进行查询操作 * @param sql * @return */ public List queryWithSq...
  • woshisap
  • woshisap
  • 2011年09月02日 16:12
  • 8541

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

原来一直以为join后面写个查询语句,sql server会自己生成一个worktable,然后再进行联合查询,但是今天的三观被刷新了一次。 book_month_deli是一张统计每月信息的表,bo...
  • Magic_3F
  • Magic_3F
  • 2016年11月20日 20:00
  • 1548

linq To SQl之多表联合查询

方法一:数据控件绑定    protected void LinqServerModeDataSource1_Selecting(object sender, DevExpress.Data.Linq...
  • longer123123
  • longer123123
  • 2009年03月03日 22:24
  • 13149

sql 多表联合查询并计数

SELECT Organ.OrganName, SOSAlarm.TermName,COUNT(*)as counts from Organ,Users,SOSAlarm WHERE Users....
  • lovemuchcode
  • lovemuchcode
  • 2016年11月15日 10:37
  • 956
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql语句联合查询详解
举报原因:
原因补充:

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