一级目录
mysql 连接
我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。
如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。
JOIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
INNER JOIN(内连接,或等值连接)
首先要先准备两张表:
使用MySQL的INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)来连接以上两张表来读取runoob_tbl表中所有runoob_author字段在tcount_tbl表对应的runoob_count字段值:
通俗点说:就是找出两个表runoob_author字段相同的值
select a.runoob_id,a.runoob_author,b.runoob_count from runoob_tbl a inner join tcount_tbl b on a.runoob_author = b.runoob_author;
以上 SQL 语句等价于:
where子句:
select a.runoob_id,a.runoob_author,b.runoob_count from runoob_tbl a,tcount_tbl b where
a.runoob_author = b.runoob_author;
LEFT JOIN(左连接)
left join 与 join 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
以 runoob_tbl 为左表,tcount_tbl 为右表:
select a.runoob_id,a.runoob_author,b.runoob_count from runoob_tbl a left join tcount_tbl b on a.runoob_author = b.runoob_author;
使用了 LEFT JOIN,该语句会读取左边的数据表 runoob_tbl 的所有选取的字段数据,即便在右侧表 tcount_tbl中 没有对应的 runoob_author 字段值。
RIGHT JOIN(右连接)
同理:RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据。
以 runoob_tbl 为左表,tcount_tbl 为右表:
select a.runoob_id,a.runoob_author,b.runoob_author from runoob_tbl a right join tcount_tbl b on a.runoob_author = b.runoob_author;
RIGHT JOIN,该语句会读取右边的数据表 tcount_tbl 的所有选取的字段数据,即便在左侧表 runoob_tbl 中没有对应的runoob_author 字段值。
mysql NULL值处理
MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
- IS NULL: 当列的值是 NULL,此运算符返回 true。
- IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
- <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
mysql> select * from runoob_tbl where submission_date=NULL;
Empty set (0.00 sec)
=NUll 或 !=NUll都是不可行的
select * from runoob_tbl where submission_date is NULL;
select * from runoob_tbl where submission_date is not NULL;