Select之多表查询

本文深入探讨了MySQL的多表查询,包括为何需要多表查询,通过实例展示了如何使用JOIN、子查询和自连接进行查询。内容涵盖单表查询复习,如按条件、排序和分页查询,接着详细讲解了多表查询,如通过DEPT和EMP表查询雇员和部门信息,以及自连接查询上级领导。还介绍了子查询的多种用法,如单行、多行、多列和多表子查询。此外,讨论了自我复制表以生成大规模数据进行性能测试,并展示了如何删除重复记录和使用UNION合并查询结果。最后提到了外键在消除冗余数据中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们讲解的mysql表的查询都是对一张表进行查询,链接为这里写链接内容

今天来学习多表查询。
我们用一个简单的公司管理系统,有三张表EMP ,DEPT,SALGRADE来演示如何进行多表查询。
表内容如下:
创建部门表
drop table if exists dept;
create table if not exists dept
(
deptno INT(2) zerofill not null comment ‘部门编号’,
dname VARCHAR(14) comment ‘部门名称’,
loc VARCHAR(13) comment ‘部门所在地点’
);
创建雇员表
drop table if exists emp;
create table if not exists emp
(
empno INT(6) zerofill not null comment ‘雇员编号’,
ename VARCHAR(10) comment ‘雇员姓名’,
job VARCHAR(9) comment ‘雇员职位’,
mgr INT(4) zerofill comment ‘雇员领导编号’,
hiredate DATETIME comment ‘雇佣时间’,
sal DECIMAL(7,2) comment ‘工资月薪’,
comm DECIMAL(7,2) comment ‘奖金’,
deptno INT(2) zerofill comment ‘部门编号’
);

创建薪资等级表
drop table if exists salgrade;
create table if not exists salgrade
(
grade INT comment ‘等级’,
losal INT comment ‘此等级最低工资’,
hisal INT comment ‘此等级最高工资’
);

插入部门数据
insert into dept (deptno, dname, loc) values (10, ‘ACCOUNTING’, ‘NEW YORK’);
insert into dept (deptno, dname, loc) values (20, ‘RESEARCH’, ‘DALLAS’);
insert into dept (deptno, dname, loc) values (30, ‘SALES’, ‘CHICAGO’);
insert into dept (deptno, dname, loc) values (40, ‘OPERATIONS’, ‘BOSTON’);
插入雇员数据
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7369, ‘SMITH’, ‘CLERK’, 7902, ‘1980-12-17’, 800, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7499, ‘ALLEN’, ‘SALESMAN’, 7698, ‘1981-02-20’, 1600, 300, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7521, ‘WARD’, ‘SALESMAN’, 7698, ‘1981-02-22’, 1250, 500, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7566, ‘JONES’, ‘MANAGER’, 7839, ‘1981-04-02’, 2975, null, 20);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7654, ‘MARTIN’, ‘SALESMAN’, 7698, ‘1981-09-28’, 1250, 1400, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7698, ‘BLAKE’, ‘MANAGER’, 7839, ‘1981-05-01’, 2850, null, 30);

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7782, ‘CLARK’, ‘MANAGER’, 7839, ‘1981-06-09’, 2450, null, 10);

insert into emp (empno, ename, job, mgr, hiredat

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值