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;