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: 表示为内连接,将两张表拼接在一起 。-- on: 表示要执行某个条件 。SELECT * FROM person INNER JOIN card on person.cardId = card.id;+------+--------+--------+------+-----------+| id | name | cardId | id | name |+------+--------+--------+------+-----------+| 1 | 张三 | 1 | 1 | 饭卡 || 2 | 李四 | 3 | 3 | 农行卡 |+------+--------+--------+------+-----------+-- 将 INNER 关键字省略掉,结果也是一样的 。-- SELECT * FROM person JOIN card on person.cardId = card.id;注意:card 的整张表被连接到了右边 。- 左外连接
-- LEFT JOIN 也叫做 LEFT OUTER JOIN,用这两种方式的查询结果是一样的 。SELECT * FROM person LEFT JOIN card on person.cardId = card.id;+------+--------+--------+------+-----------+| id | name | cardId | id | name |+------+--------+--------+------+-----------+| 1 | 张三 | 1 | 1 | 饭卡 || 2 | 李四 | 3 | 3 | 农行卡 || 3 | 王五 | 6 | | |+------+--------+--------+------+-----------+- 右外链接
SELECT * FROM person RIGHT JOIN card on person.cardId = card.id;+------+--------+--------+------+-----------+| id | name | cardId | id | name |+------+--------+--------+------+-----------+| 1 | 张三 | 1 | 1 | 饭卡 || 2 | 李四 | 3 | 3 | 农行卡 || | | | 2 | 建行卡 || | | | 4 | 工商卡 || | | | 5 | 邮政卡 |+------+--------+--------+------+-----------+- 全外链接
-- MySQL 不支持这种语法的全外连接-- SELECT * FROM person FULL JOIN card on person.cardId = card.id;-- 出现错误:-- ERROR 1054 (42S22): Unknown column 'person.cardId' in 'on clause'-- MySQL全连接语法,使用 UNION 将两张表合并在一起 。SELECT * FROM person LEFT JOIN card on person.cardId = card.idUNIONSELECT * FROM person RIGHT JOIN card on person.cardId = card.id;+------+--------+--------+------+-----------+| id | name | cardId | id | name |+------+--------+--------+------+-----------+| 1 | 张三 | 1 | 1 | 饭卡 || 2 | 李四 | 3 | 3 | 农行卡 || 3 | 王五 | 6 | | || | | | 2 | 建行卡 || | | | 4 | 工商卡 || | | | 5 | 邮政卡 |+------+--------+--------+------+-----------+全文到这里撒花完结~【20000 字干货笔记,一天搞定 MySQL】
推荐阅读
- 淘宝店铺修改名字怎么改 淘宝店名能不能改
- 算法干货 | 朴素贝叶斯分类
- 用这5种写作变现方式,实现业余收入2000元:每一个字都赚钱
- 开淘宝店名字怎么起 淘宝开店怎么起名字起名
- 素食者十字口诀 让你不再担心营养不够
- 茶令之由来,茶叶茶字的由来和历史演变的介绍
- 店铺名字可以改吗 淘宝开店店名可以更改吗
- 开网店怎样取名字 网上取名开店什么名字最好
- 网上取名开店什么名字最好 根据什么起店铺名
- 一款强大的本地文件内容搜索软件,可搜索文件中的文字
