【MySQL】多表查询

【MySQL】

文章目录


   实际开发中往往数据来自不同的表,所以需要多表查询。今天我们用一个简单的公司管理系统,有三张表 emp, dept, salgrade 来演示如何进行多表查询。


一、前期准备

1.1 导入数据库

MariaDB [(none)]> source scott_data.sql

   数据库下载:scott_data.sql 提取码:vrps

   数据库部分代码

DROP database  IF EXISTS `scott`;
CREATE database IF NOT EXISTS `scott` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

USE `scott`;

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `deptno` int(2) unsigned zerofill NOT NULL COMMENT '部门编号',
  `dname` varchar(14) DEFAULT NULL COMMENT '部门名称',
  `loc` varchar(13) DEFAULT NULL COMMENT '部门所在地点'
);

DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `empno` int(6) unsigned zerofill NOT NULL COMMENT '员工编号',
  `ename` varchar(10) DEFAULT NULL COMMENT '员工姓名',
  `job` varchar(9) DEFAULT NULL COMMENT '员工职位',
  `mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '员工领导编号',
  `hiredate` datetime DEFAULT NULL COMMENT '入职时间',
  `sal` decimal(7,2) DEFAULT NULL COMMENT '薪水',
  `comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',
  `deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号'
);

DROP TABLE IF EXISTS `salgrade`;
CREATE TABLE `salgrade` (
  `grade` int(11) DEFAULT NULL COMMENT '薪水级别',
  `losal` int(11) DEFAULT NULL COMMENT '此等级最低薪水',
  `hisal` int(11) DEFAULT NULL COMMENT '此等级最高薪水'
);


1.2 查看数据库内容

MariaDB [scott]> show tables;
+-----------------+
| Tables_in_scott |
+-----------------+
| dept            |
| emp             |
| salgrade        |
+-----------------+
3 rows in set (0.00 sec)

   可以看到该数据库有三张表dept、emp以及salgrade,它们的表结构是这样的。

MariaDB [scott]> desc dept;
+--------+--------------------------+------+-----+---------+-------+
| Field  | Type                     | Null | Key | Default | Extra |
+--------+--------------------------+------+-----+---------+-------+
| deptno | int(2) unsigned zerofill | NO   |     | NULL    |       |
| dname  | varchar(14)              | YES  |     | NULL    |       |
| loc    | varchar(13)              | YES  |     | NULL    |       |
+--------+--------------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
MariaDB [scott]> desc emp;
+----------+--------------------------+------+-----+---------+-------+
| Field    | Type                     | Null | Key | Default | Extra |
+----------+--------------------------+------+-----+---------+-------+
| empno    | int(6) unsigned zerofill | NO   |     | NULL    |       |
| ename    | varchar(10)              | YES  |     | NULL    |       |
| job      | varchar(9)               | YES  |     | NULL    |       |
| mgr      | int(4) unsigned zerofill | YES  |     | NULL    |       |
| hiredate | datetime                 | YES  |     | NULL    |       |
| sal      | decimal(7,2)             | YES  |     | NULL    |       |
| comm     | decimal(7,2)             | YES  |     | NULL    |       |
| deptno   | int(2) unsigned zerofill | YES  |     | NULL    |       |
+----------+--------------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
MariaDB [scott]> desc salgrade;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| grade | int(11) | YES  |     | NULL    |       |
| losal | int(11) | YES  |     | NULL    |       |
| hisal | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)

   三张表的结构如下图所示。

【MySQL】多表查询

二、多表查询

2.1 显示员工姓名、员工薪水以及所在的部门名称

   观察可知员工姓名和薪水是来自emp表,部门名称是来自dept表,因此单表查询对于实际开发是远远不够的,此时就需要用到多表查询。

select * from emp;

【MySQL】多表查询

select * from dept;

【MySQL】多表查询

select * from  emp,dept;

【MySQL】多表查询

   那么显示员工姓名、员工薪水以及所在的部门名称,只需要让emp.deptno=dept.deptno

select emp.ename, emp.sal, dept.dname from emp,dept where emp.deptno=dept.deptno;

2.2 显示部门编号为10的部门名称,员工姓名和薪水

select dept.dname, emp.ename, emp.sal from emp,dept where emp.deptno=dept.deptno and dept.deptno=10;

2.3 显示各个员工的姓名,薪水和工资级别

select ename,sal,grade from emp,salgrade where emp.sal between losal and hisal;

上一篇:直播类app开发,如何实现用户签到功能


下一篇:理解nth-child和nth-of-type