MYSQL数据库的连表操作
在mysql中,有四种连表操作:
- 内连接
- 左连接
- 右连接
- 全连接
首先准备两个表的数据,员工表和部门表,这里的数据主要是做测试,所以两个表并没有搞外键关联
员工表(employee):
id | name | dep_id |
1 | 张三 | 300 |
2 | 李四 | 300 |
3 | 王五 | 301 |
4 | 赵起 | 302 |
5 | 李九 | 303 |
6 | 何八 | 305 |
部门表(dep):
id | name |
300 | 技术部 |
301 | 销售部 |
303 | 行政部 |
304 | 采购部 |
CREATE TABLE emp (id int primary key auto_increment,
name varchar(16) NOT NULL,
dep_id int )ENGINE=INNODB DEFAULT CHARSET='UTF8';
CREATE TABLE dep (id int primary key auto_increment,
name varchar(16) NOT NULL )ENGINE=INNODB DEFAULT CHARSET='UTF8';
插入数据:
INSERT INTO emp(name,dep_id) VALUES ('张三',300),('李四',300),('王五',301),('赵起',302),('李九',303),('何八',305);
INSERT INTO dep(id,name) VALUES (300,'技术部'),(301,'销售部'),(302,'行政部'),(304,'采购部'),(306,'人事部');
内联接(INNER JOIN)
只查询两个表都存在的数据,不存在的数据不显示
SELECT * FROM emp INNER JOIN dep ON emp.dep_id = dep.id;

内连接查询
左连接查询(LEFT JOIN)
左表对应的数据全部显示,与右边没有对应的数据应Null显示
SELECT * FROM emp LEFT JOIN dep ON emp.dep_id = dep.id;

左连接查询
右连接查询(RIGHT JOIN)
右表数据全部显示,与左表没有对应的数据NULL 显示;
SELECT * FROM emp RIGHT JOIN dep ON emp.dep_id = dep.id;

右连接查询
全连接(UNION)
左表和右边全部显示,没有对应的null显示
SELECT * FROM emp LEFT JOIN dep ON emp.dep_id = dep.id
UNION
SELECT * FROM emp RIGHT JOIN dep ON emp.dep_id = dep.id;

全连接
下面是笛卡尔积图:

笛卡尔积