共计 1625 个字符,预计需要花费 5 分钟才能阅读完成。
sql 语句中怎么实现联合查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
sql 语句联合查询详解
2011-03-01 18:58:22| 分类: mysql| 字号 订阅
例子:
person 表和 user 表没有约束
有以下几种关联
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 句子栏目数必须是相同的,字段可以随意 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;
结果如下:
2. 执行 select A.* from user as A join person as B on A.id=B.id;
3. 执行 select * from user as A left join person as B on A.id=B.id;
4.select * from person as A right
join user as B on A.id=B.id;
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;
巧记 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 语句中怎么实现联合查询问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。