mysql多表查询临时表_MySQL 之多表查询

本文详细介绍了MySQL中多表查询的相关概念和操作,包括使用临时表、内连接、左连接、右连接以及全连接查询。通过具体的创建表和数据示例,展示了如何在员工和部门表之间进行各种类型的查询操作,帮助读者理解如何有效地进行多表数据整合。
摘要由CSDN通过智能技术生成

阅读目录

一.多表联合查询

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#创建部门CREATE TABLE IF NOT EXISTSdept (

didint not null auto_increment PRIMARY KEY,

dnameVARCHAR(50) not null COMMENT '部门名称')ENGINE=INNODB DEFAULTcharset utf8;

#添加部门数据INSERT INTO `dept` VALUES ('1', '教学部');INSERT INTO `dept` VALUES ('2', '销售部');INSERT INTO `dept` VALUES ('3', '市场部');INSERT INTO `dept` VALUES ('4', '人事部');INSERT INTO `dept` VALUES ('5', '鼓励部');--创建人员

DROP TABLE IF EXISTS`person`;CREATE TABLE`person` (

`id`int(11) NOT NULLAUTO_INCREMENT,

`name`varchar(50) NOT NULL,

`age`tinyint(4) DEFAULT '0',

`sex` enum('男','女','人妖') NOT NULL DEFAULT '人妖',

`salary`decimal(10,2) NOT NULL DEFAULT '250.00',

`hire_date` dateNOT NULL,

`dept_id`int(11) DEFAULT NULL,PRIMARY KEY(`id`)

) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;--添加人员数据

--教学部

INSERT INTO `person` VALUES ('1', 'alex', '28', '人妖', '53000.00', '2010-06-21', '1');INSERT INTO `person` VALUES ('2', 'wupeiqi', '23', '男', '8000.00', '2011-02-21', '1');INSERT INTO `person` VALUES ('3', 'egon', '30', '男', '6500.00', '2015-06-21', '1');INSERT INTO `person` VALUES ('4', 'jingnvshen', '18', '女', '6680.00', '2014-06-21', '1');--销售部

INSERT INTO `person` VALUES ('5', '歪歪', '20', '女', '3000.00', '2015-02-21', '2');INSERT INTO `person` VALUES ('6', '星星', '20', '女', '2000.00', '2018-01-30', '2');INSERT INTO `person` VALUES ('7', '格格', '20', '女', '2000.00', '2018-02-27', '2');INSERT INTO `person` VALUES ('8', '周周', '20', '女', '2000.00', '2015-06-21', '2');--市场部

INSERT INTO `person` VALUES ('9', '月月', '21', '女', '4000.00', '2014-07-21', '3');INSERT INTO `person` VALUES ('10', '安琪', '22', '女', '4000.00', '2015-07-15', '3');--人事部

INSERT INTO `person` VALUES ('11', '周明月', '17', '女', '5000.00', '2014-06-21', '4');--鼓励部

INSERT INTO `person` VALUES ('12', '苍老师', '33', '女', '1000000.00', '2018-02-21', null);

创建表和数据

#多表查询语法

select 字段1,字段2... from 表1,表2... [where 条件]

注意: 如果不加条件直接进行查询,则会出现以下效果,这种结果我们称之为 笛卡尔乘积

#查询人员和部门所有信息

select * from person,dept

笛卡尔乘积公式 : A表中数据条数   *  B表中数据条数  = 笛卡尔乘积.

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

mysql> select * fromperson ,dept;+----+----------+-----+-----+--------+------+-----+--------+

| id | name | age | sex | salary | did | did | dname |

+----+----------+-----+-----+--------+------+-----+--------+

| 1 | alex | 28 | 女 | 53000 | 1 | 1 | python |

| 1 | alex | 28 | 女 | 53000 | 1 | 2 | linux |

| 1 | alex | 28 | 女 | 53000 | 1 | 3 | 明教 |

| 2 | wupeiqi | 23 | 女 | 29000 | 1 | 1 | python |

| 2 | wupeiqi | 23 | 女 | 29000 | 1 | 2 | linux |

| 2 | wupeiqi | 23 | 女 | 29000 | 1 | 3 | 明教 |

| 3 | egon | 30 | 男 | 27000 | 1 | 1 | python |

| 3 | egon | 30 | 男 | 27000 | 1 | 2 | linux |

| 3 | egon | 30 | 男 | 27000 | 1 | 3 | 明教 |

| 4 | oldboy | 22 | 男 | 1 | 2 | 1 | python |

| 4 | oldboy | 22 | 男 | 1 | 2 | 2 | linux |

| 4 | oldboy | 22 | 男 | 1 | 2 | 3 | 明教 |

| 5 | jinxin | 33 | 女 | 28888 | 1 | 1 | python |

| 5 | jinxin | 33 | 女 | 28888 | 1 | 2 | linux |

| 5 | jinxin | 33 | 女 | 28888 | 1 | 3 | 明教 |

| 6 | 张无忌 | 20 | 男 | 8000 | 3 | 1 | python |

| 6 | 张无忌 | 20 | 男 | 8000 | 3 | 2 | linux |

| 6 | 张无忌 | 20 | 男 | 8000 | 3 | 3 | 明教 |

| 7 | 令狐冲 | 22 | 男 | 6500 | NULL | 1 | python |

| 7 | 令狐冲 | 22 | 男 | 6500 | NULL | 2 | linux |

| 7 | 令狐冲 | 22 | 男 | 6500 | NULL | 3 | 明教 |

| 8 | 东方不败 | 23 | 女 | 18000 | NULL | 1 | python |

| 8 | 东方不败 | 23 | 女 | 18000 | NULL | 2 | linux |

| 8 | 东方不败 | 23 | 女 | 18000 | NULL | 3 | 明教 |

+----+----------+-----+-----+--------+------+-----+--------+

笛卡尔乘积示例

#查询人员和部门所有信息

select * from person,dept where person.did = dept.did;

#注意: 多表查询时,一定要找到两个表中相互关联的字段,并且作为条件使用

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

mysql> select * from person,dept where person.did =dept.did;+----+---------+-----+-----+--------+-----+-----+--------+

| id | name | age | sex | salary | did | did | dname |

+----+---------+-----+-----+--------+-----+-----+--------+

| 1 | alex | 28 | 女 | 53000 | 1 | 1 | python |

| 2 | wupeiqi | 23 | 女 | 29000 | 1 | 1 | python |

| 3 | egon | 30 | 男 | 27000 | 1 | 1 | python |

| 4 | oldboy | 22 | 男 | 1 | 2 | 2 | linux |

| 5 | jinxin | 33 | 女 | 28888 | 1 | 1 | python |

| 6 | 张无忌 | 20 | 男 | 8000 | 3 | 3 | 明教 |

| 7 | 令狐冲 | 22 | 男 | 6500 | 2 | 2 | linux |

+----+---------+-----+-----+--------+-----+-----+--------+

7 rows in set

示例

93c194e94f649cd566f713f965d86a62.png

二 多表连接查询

#多表连接查询语法(重点)

SELECT 字段列表

FROM 表1 INNER|LEFT|RIGHT JOIN 表2

ON 表1.字段 = 表2.字段;

1 内连接查询 (只显示符合条件的数据)

#查询人员和部门所有信息

select * from person inner join dept on person.did =dept.did;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值