《MySQL——连接查询》
生活随笔
收集整理的这篇文章主要介绍了
《MySQL——连接查询》
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
内连接:
inner join 或者 join
外连接
1、左连接 left join 或 left outer join
2、右连接 right join 或 right outer join
3、完全外连接 full join 或 full outer join
图示理解
全连接
创建person表和card表
CREATE DATABASE testJoin;CREATE TABLE person (id INT,name VARCHAR(20),cardId INT );CREATE TABLE card (id INT,name VARCHAR(20) );插入数据
INSERT INTO card VALUES (1, '饭卡'), (2, '建行卡'), (3, '农行卡'), (4, '工商卡'), (5, '邮政卡'); SELECT * FROM card; +------+-----------+ | id | name | +------+-----------+ | 1 | 饭卡 | | 2 | 建行卡 | | 3 | 农行卡 | | 4 | 工商卡 | | 5 | 邮政卡 | +------+-----------+INSERT INTO person VALUES (1, '张三', 1), (2, '李四', 3), (3, '王五', 6); SELECT * FROM person; +------+--------+--------+ | id | name | cardId | +------+--------+--------+ | 1 | 张三 | 1 | | 2 | 李四 | 3 | | 3 | 王五 | 6 | +------+--------+--------+分析两张表,person 表并没有为 cardId 字段设置一个在 card 表中对应的 id 外键。如果设置了的话,person 中 cardId 字段值为 6 的行就插不进去,因为该 cardId 值在 card 表中并没有。
inner join 查询
要查询这两张表中有关系的数据,可以使用 INNERJOIN ( 内连接 ) 将它们连接在一起。
-- INNER JOIN: 表示为内连接,将两张表拼接在一起。 -- on: 表示要执行某个条件(连接条件)。 SELECT * FROM person INNER JOIN card on person.cardId = card.id; +------+--------+--------+------+-----------+ | id | name | cardId | id | name | +------+--------+--------+------+-----------+ | 1 | 张三 | 1 | 1 | 饭卡 | | 2 | 李四 | 3 | 3 | 农行卡 | +------+--------+--------+------+-----------+ --card 的整张表被连接到了右边。内连查询,其实就是两张表中的数据通过某个字段相对应,查询出相关记录数据。
inner去掉也是一样的。
left join 查询
完整显示左边的表 ( person ) ,右边的表如果符合条件就显示,不符合则补 NULL 。
SELECT * FROM person LEFT JOIN card on person.cardId = card.id; +------+--------+--------+------+-----------+ | id | name | cardId | id | name | +------+--------+--------+------+-----------+ | 1 | 张三 | 1 | 1 | 饭卡 | | 2 | 李四 | 3 | 3 | 农行卡 | | 3 | 王五 | 6 | NULL | NULL | +------+--------+--------+------+-----------+right join 查询
完整显示右边的表 ( card ) ,左边的表如果符合条件就显示,不符合则补 NULL 。
SELECT * FROM person RIGHT JOIN card on person.cardId = card.id; +------+--------+--------+------+-----------+ | id | name | cardId | id | name | +------+--------+--------+------+-----------+ | 1 | 张三 | 1 | 1 | 饭卡 | | 2 | 李四 | 3 | 3 | 农行卡 | | NULL | NULL | NULL | 2 | 建行卡 | | NULL | NULL | NULL | 4 | 工商卡 | | NULL | NULL | NULL | 5 | 邮政卡 | +------+--------+--------+------+-----------+full join 查询
MySQL 不支持这种语法的全外连接:
SELECT * FROM person FULL JOIN card on person.cardId = card.id;这样会报错:
ERROR 1054 (42S22): Unknown column 'person.cardId' in 'on clause'MySQL的全连接是通过left join和right join合在一起。
SELECT * FROM person LEFT JOIN card on person.cardId = card.id UNION SELECT * FROM person RIGHT JOIN card on person.cardId = card.id; +------+--------+--------+------+-----------+ | id | name | cardId | id | name | +------+--------+--------+------+-----------+ | 1 | 张三 | 1 | 1 | 饭卡 | | 2 | 李四 | 3 | 3 | 农行卡 | | 3 | 王五 | 6 | NULL | NULL | | NULL | NULL | NULL | 2 | 建行卡 | | NULL | NULL | NULL | 4 | 工商卡 | | NULL | NULL | NULL | 5 | 邮政卡 | +------+--------+--------+------+-----------+参考
一天学会MySQL
某Github
总结
以上是生活随笔为你收集整理的《MySQL——连接查询》的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 《MySQL——38道查询练习(无连接查
- 下一篇: 《MySQL——事务》