Mysql 集合链接查询

MySQL NULL 值处理  
  需求:我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。
 
为了处理这种情况,MySQL提供了三大运算符:
  • IS NULL: 当列的值是NULL,此运算符返回true。
  • IS NOT NULL: 当列的值不为NULL, 运算符返回true。
  • <=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。
  • 关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
  • 在MySQL中,NULL值与任何其它值的比较(即使是NULL)永远返回false,即 NULL = NULL 返回false。
  • MySQL中处理NULL使用IS NULL和IS NOT NULL运算符。

 

Mysql 连接(left join, right join, inner join ,full join)
  需求:我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。
  • 本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。
  • 你可以在SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:
  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

 

 


 

Mysql操作
 
例子:
A    B
-    -
1    3
2    4
3    5
4    6

 

Inner join(取出交集)

使用等价查询的内部连接将给出两个表的交集,即它们共有的两行。

mysql> select * from A inner join B on A.a = B.b;

mysql> select A.*,B.* from A,B where A.a=B.b;

注:select 字段 from 表1 inner join 表2 on 表1.字段 = 表2.字段;

注:select 表1.*,表2.* from A,B where A.a=B.b;
+---+---+
| a | b |
+---+---+
| 3 | 3 |
| 4 | 4 |
+---+---+
2 rows in set (0.00 sec)
测试

 

Left join(取出差集)
左连接将给出A中的所有行,加上B中的任何公共行。
mysql> select * from A left join B on A.a = B.b;
注:
select 字段 from 表1 left join 表2 on 表1.字段 = 表2.字段;
+---+------+
| a | b    |
+---+------+
| 3 |    3 |
| 4 |    4 |
| 1 | NULL |
| 2 | NULL |
+---+------+
4 rows in set (0.00 sec)
测试

 

Right join(反序排列差集)
一个右连接将给出B中的所有行,加上A中的任何公共行。
mysql> select * from A right join B on A.a = B.b;

注:select 字段 from 表1 right join 表2 on 表1.字段 = 表2.字段;
+------+---+
| a    | b |
+------+---+
|    3 | 3 |
|    4 | 4 |
| NULL | 5 |
| NULL | 6 |
| NULL | 7 |
+------+---+
5 rows in set (0.00 sec)
测试

 

left+right(求出并级)
select * from A left join B on A.a=B.b union select * from A right joinn B on A.a=B.b;

注:union 结合使用。

 

Full join(取出并集) (mysql不支持)
一个完整的外部连接将会给你一个A和B的结合,即A中的所有行和B中的所有行。
如果A中的某项在B中没有相应的数据,那么B部分是空的,反之亦然。
select* froma FULLJOINb ona.a = b.b;

 

 

posted @ 2018-01-20 17:40  kevin.Xiang  阅读(1094)  评论(0编辑  收藏