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;