一般用法:
a. LEFT [OUTER] JOIN:
除了返回符合连接条件的结果之外,还需要显示左表中不符合连接条件的数据列,相对应使用NULL对应
b. RIGHT [OUTER] JOIN:
RIGHT与LEFT JOIN相似不同的仅仅是除了显示符合连接条件的结果之外,还需要显示右表中不符合连接条件的数据列,相应使用NULL对应
Tips:
on a.c1 = b.c1 等同于 using(c1)
INNER JOIN 和 , (逗号) 在语义上是等同的
当 MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。
如果 EXPLAIN 显示 MySQL 使用了可能的索引列表中错误的索引,这个特性将是很有用的。
通过指定 USE INDEX (key_list),你可以告诉 MySQL 使用可能的索引中最合适的一个索引在表中查找记录行。
可选的二选一句法 IGNORE INDEX (key_list) 可被用于告诉 MySQL 不使用特定的索引。如:
添加显示条件WHERE, ON, USING
1. WHERE子句
SELECT * FROM table1,table2 WHERE table1.id=table2.id; SELECT * FROM users, userinfos WHERE users.id=userinfos.user_id;2. ON
SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id; SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id; SELECT * FROM users LEFT JOIN articles ON users.id = articles.user_id; SELECT * FROM users LEFT JOIN userinfos ON users.id = userinfos.user_id LEFT JOIN articles ON users.id = articles.user_id;3. USING子句,如果连接的两个表连接条件的两个列具有相同的名字的话可以使用USING
例如:
SELECT FROM LEFT JOIN USING ()连接多于两个表的情况举例:
SELECT users.username, userinfos.name, articles.title FROM users LEFT JOIN userinfos ON users.id = userinfos.user_id LEFT JOIN articles ON users.id = articles.user_id;执行结果:
mysql> SELECT users.username, userinfos.name, articles.title FROM users LEFT JOIN userinfos ON users.id = userinfos.user_id LEFT JOIN articles ON users.id = articles.user_id; +----------+-------+------------+ | username | name | title | +----------+-------+------------+ | junxi | 君惜 | 中国有嘻哈 | | tangtang | 糖糖 | 星光大道 | | ceshi3 | 测试3 | 平凡的真谛 | | junxi | 君惜 | Python进阶 | | ceshi3 | NULL | NULL | | ceshi3 | NULL | NULL |或者
SELECT users.username, userinfos.name, articles.title FROM users LEFT JOIN userinfos ON users.id = userinfos.user_id LEFT JOIN articles ON users.id = articles.user_id WHERE (articles.user_id IS NOT NULL AND userinfos.user_id IS NOT NULL);执行结果:
mysql> SELECT users.username, userinfos.name, articles.title FROM users LEFT JOIN userinfos ON users.id = userinfos.user_id LEFT JOIN articles ON users.id = articles.user_id WHERE (articles.user_id IS NOT NULL AND userinfos.user_ id IS NOT NULL); +----------+-------+------------+ | username | name | title | +----------+-------+------------+ | junxi | 君惜 | 中国有嘻哈 | | tangtang | 糖糖 | 星光大道 | | ceshi3 | 测试3 | 平凡的真谛 | | junxi | 君惜 | python进阶 | +----------+-------+------------+或者
SELECT users.username, userinfos.name, articles.title FROM users LEFT JOIN userinfos ON users.id = userinfos.user_id LEFT JOIN articles ON users.id = articles.user_id WHERE (userinfos.name = '君惜');