MYSQL数据库的连表操作

100人浏览   2025-02-28 00:46:24

在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;

全连接

下面是笛卡尔积图:

笛卡尔积

相关推荐