MySQL案例——多表查询以及嵌套查询

这篇具有很好参考价值的文章主要介绍了MySQL案例——多表查询以及嵌套查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

MySQL笔记——表的修改查询相关的命令操作

MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明

文章目录

系列文章目录

前言

一 创建数据库

1.1 创建一个部门表

1.2 建一个职务表

1.3 创建一个员工表

1.4 创建一个工资等级表

二 对表进行查询操作

2.1 查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述

2.2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置

​编辑2.3 查询员工姓名,工资,工资等级

2.4 查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级

2.5 查询出部门编号、部门名称、部门位置、部门人数

2.6 查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询

总结


前言

本文主要讲解一个具体MySQL案例,多表查询以及嵌套查询。

一 创建数据库

1.1 创建一个部门表

CREATE TABLE dept (
  id INT PRIMARY KEY PRIMARY KEY, -- 部门id
  dname VARCHAR(50), -- 部门名称
  loc VARCHAR(50) -- 部门所在地
);

添加数据:

-- 添加4个部门
INSERT INTO dept(id,dname,loc) VALUES 
(10,'教研部','北京'),
(20,'学工部','上海'),
(30,'销售部','广州'),
(40,'财务部','深圳');

1.2 建一个职务表

-- 职务表,职务名称,职务描述
CREATE TABLE job (
  id INT PRIMARY KEY,
  jname VARCHAR(20),
  description VARCHAR(50)
);
-- 添加4个职务
INSERT INTO job (id, jname, description) VALUES
(1, '董事长', '管理整个公司,接单'),
(2, '经理', '管理部门员工'),
(3, '销售员', '向客人推销产品'),
(4, '文员', '使用办公软件');

1.3 创建一个员工表

-- 员工表
CREATE TABLE emp (
  id INT PRIMARY KEY, -- 员工id
  ename VARCHAR(50), -- 员工姓名
  job_id INT, -- 职务id
  mgr INT , -- 上级领导
  joindate DATE, -- 入职日期
  salary DECIMAL(7,2), -- 工资
  bonus DECIMAL(7,2), -- 奖金
  dept_id INT, -- 所在部门编号
  CONSTRAINT emp_jobid_ref_job_id_fk FOREIGN KEY (job_id) REFERENCES job (id),
  CONSTRAINT emp_deptid_ref_dept_id_fk FOREIGN KEY (dept_id) REFERENCES dept (id)
);

添加数据

-- 添加员工
INSERT INTO emp(id,ename,job_id,mgr,joindate,salary,bonus,dept_id) VALUES 
(1001,'孙悟空',4,1004,'2000-12-17','8000.00',NULL,20),
(1002,'卢俊义',3,1006,'2001-02-20','16000.00','3000.00',30),
(1003,'林冲',3,1006,'2001-02-22','12500.00','5000.00',30),
(1004,'唐僧',2,1009,'2001-04-02','29750.00',NULL,20),
(1005,'李逵',4,1006,'2001-09-28','12500.00','14000.00',30),
(1006,'宋江',2,1009,'2001-05-01','28500.00',NULL,30),
(1007,'刘备',2,1009,'2001-09-01','24500.00',NULL,10),
(1008,'猪八戒',4,1004,'2007-04-19','30000.00',NULL,20),
(1009,'罗贯中',1,NULL,'2001-11-17','50000.00',NULL,10),
(1010,'吴用',3,1006,'2001-09-08','15000.00','0.00',30),
(1011,'沙僧',4,1004,'2007-05-23','11000.00',NULL,20),
(1012,'李逵',4,1006,'2001-12-03','9500.00',NULL,30),
(1013,'小白龙',4,1004,'2001-12-03','30000.00',NULL,20),
(1014,'关羽',4,1007,'2002-01-23','13000.00',NULL,10);
INSERT INTO emp(id,ename,job_id,mgr,joindate,salary,bonus,dept_id) VALUES 
(10015,'白素贞',4,1005,'2000-12-17','8000.00',NULL,40),
(10017,'吴磊',3,1006,'2001-02-20','16000.00','8000.00',40),
(10016,'林三娘',3,1005,'2001-02-26','12500.00','17000.00',40);

1.4 创建一个工资等级表

-- 工资等级表
CREATE TABLE salarygrade (
  grade INT PRIMARY KEY,   -- 级别
  losalary INT,  -- 最低工资
  hisalary INT -- 最高工资
);

添加数据:

-- 添加5个工资等级
INSERT INTO salarygrade(grade,losalary,hisalary) VALUES 
(1,7000,12000),
(2,12010,14000),
(3,14010,20000),
(4,20010,30000),
(5,30010,99990);

二 对表进行查询操作

2.1 查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述

第一种方式:

使用“ inner join ... on 条件 ”显示查询

SELECT 
    emp.id,
    emp.ename,
    emp.salary,
    job.jname,
    job.description 
    FROM emp INNER JOIN job ON emp.job_id=job.id;

第二种方式:

使用where 隐式查询

SELECT 
    emp.id,
    emp.ename,
    emp.salary,
    job.jname,
    job.description 
    FROM emp,job
    WHERE emp.job_id=job.id;

MySQL案例——多表查询以及嵌套查询,Linux以及MySQL数据库实训笔记,数据库oracle、MySQL、SQLserver专栏,mysql,数据库,表的操作,linux,centos

2.2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置

第一种方式:

使用“ inner join ... on 条件 ”显示查询 

SELECT 
    emp.id,
    emp.ename,
    emp.salary,
    job.jname,
    job.description,
    dept.dname,
    dept.loc 
    FROM emp 
    INNER JOIN job ON emp.job_id=job.id
    INNER JOIN dept ON emp.dept_id=dept.id;

第二种方式:

使用where 隐式查询

SELECT 
    emp.id,
    emp.ename,
    emp.salary,
    job.jname,
    job.description,
    dept.dname,
    dept.loc 
    FROM emp,job,dept 
    WHERE emp.job_id=job.id AND emp.dept_id=dept.id;

2.3 查询员工姓名,工资,工资等级

第一种方式:

使用“ inner join ... on 条件 ”显示查询 

SELECT 
	emp.ename,
	emp.salary,
	salarygrade.grade
	FROM emp 
	JOIN salarygrade ON emp.salary 
	BETWEEN salarygrade.losalary AND salarygrade.hisalary;

第二种方式:

使用where 隐式查询

SELECT 
    emp.ename,
    emp.salary,
    t1.*
    FROM emp,
    salarygrade t1 
    WHERE emp.salary >= t1.losalary AND emp.salary <= t1.hisalary;

或者:

SELECT 
    emp.ename,
    emp.salary,
    salarygrade.grade
    FROM emp,salarygrade 
    WHERE emp.salary >= salarygrade.losalary AND emp.salary <= salarygrade.hisalary;

MySQL案例——多表查询以及嵌套查询,Linux以及MySQL数据库实训笔记,数据库oracle、MySQL、SQLserver专栏,mysql,数据库,表的操作,linux,centos

2.4 查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级

第一种方式:

使用“ inner join ... on 条件 ”显示查询 

SELECT 
    emp.ename,
    emp.salary,
    job.jname,
    job.description,
    dept.dname,
    dept.loc,
    salarygrade.grade
    FROM emp
    INNER JOIN job ON emp.job_id=job.id
    INNER JOIN dept ON emp.dept_id=dept.id
    INNER JOIN salarygrade ON emp.salary BETWEEN salarygrade.losalary AND alarygrade.hisalary;

第二种方式:

使用where 隐式查询

SELECT 
    emp.ename,
    emp.salary,
    job.jname,
    job.description,
    dept.dname,
    dept.loc,
    salarygrade.grade
    FROM emp,job,dept,salarygrade
    WHERE emp.job_id=job.id AND emp.dept_id=dept.id AND emp.salary BETWEEN salarygrade.losalary AND salarygrade.hisalary;

MySQL案例——多表查询以及嵌套查询,Linux以及MySQL数据库实训笔记,数据库oracle、MySQL、SQLserver专栏,mysql,数据库,表的操作,linux,centos

2.5 查询出部门编号、部门名称、部门位置、部门人数

 第一种方式:

使用“ inner join ... on 条件 ”显示查询 

SELECT 
    dept.id,
    dept.dname,
    dept.loc,
    COUNT(emp.id) AS '部门人数'
    FROM dept
    INNER JOIN emp ON emp.dept_id=dept.id
    GROUP BY id;

第二种方式:

使用where 隐式查询

SELECT
    dept.id,
    dept.dname,
    dept.loc,
    t1.count
FROM
    dept,(
        SELECT
            dept_id,
            COUNT(*) COUNT
        FROM
            emp
        GROUP BY
            dept_id
    ) t1
WHERE
    dept.id=t1.dept_id;

 MySQL案例——多表查询以及嵌套查询,Linux以及MySQL数据库实训笔记,数据库oracle、MySQL、SQLserver专栏,mysql,数据库,表的操作,linux,centos   

2.6 查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询

使用左外连接查询

SELECT
    emp.ename,
    IFNULL(t1.ename,'无') AS '直接上级领导'
    FROM emp
    LEFT JOIN emp t1 ON emp.mgr=t1.id;

MySQL案例——多表查询以及嵌套查询,Linux以及MySQL数据库实训笔记,数据库oracle、MySQL、SQLserver专栏,mysql,数据库,表的操作,linux,centos

总结

以上就是今天的内容~

欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

最后:转载请注明出处!!!文章来源地址https://www.toymoban.com/news/detail-613436.html

到了这里,关于MySQL案例——多表查询以及嵌套查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 在项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联

    2024年02月10日
    浏览(48)
  • 【JaveWeb教程】(22) MySQL数据库开发之多表查询:内连接、外连接、子查询 详细代码示例讲解(最全面)

    1.1.1 数据准备 SQL脚本: 1.1.2 介绍 多表查询:查询时从多张表中获取所需数据 单表查询的SQL语句:select 字段列表 from 表名; 那么要执行多表查询,只需要使用逗号分隔多张表即可,如: select 字段列表 from 表1, 表2; 查询用户表和部门表中的数据: 此时,我们看到查询结果中包

    2024年01月22日
    浏览(58)
  • MySQL表单查询以及多表查询

    1.单表查询 CREATE TABLE `emp`  (   `empno` int(4) NOT NULL,   `ename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,   `job` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,   `mgr` int(4) NULL DEFAULT NULL,   `hiredate` date NOT NULL,   `sai` int(255) NOT NULL,   `comm` int(255) NULL DEFAULT

    2024年02月13日
    浏览(42)
  • MySQL基础 — 多表查询以及事务管理

    一对一 ​ 多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率 ​ 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE) ​ 因为是一对一,所以需要设置唯一约束 一对多 ​ 在多的一方建立外键,指向一

    2024年02月07日
    浏览(47)
  • 数据库多表查询

    1、创建表格 2、插入数据 3.查询student表的所有记录 4.查询student表的第2条到4条记录 5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息 6.从student表中查询计算机系和英语系的学生的信息 7.从student表中查询年龄18~22岁的学生信息 由于表中没有年龄1

    2024年01月16日
    浏览(53)
  • 六、MySQL---综合练习题(单表、多表、分组函数以及等级查询)

    数据库:dept_emp 1. dept表 :deptno’部门编号’、dname’部门名称’、loc’地理位置’; 2. emp表 :empno ‘员工编号’、ename ‘员工名字’、job ‘职位’、mgr ‘上司’、hiredate ‘入职时间’、sal ‘基本工资’,comm ‘补贴’,deptno ‘所属部门编号’; 3. salgrade :grade ‘工资等级’

    2024年01月21日
    浏览(51)
  • 【MySQL探索之旅】数据库设计以及聚合查询

    📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点,相互学习进步! 数据库

    2024年04月09日
    浏览(53)
  • MySQL数据库:数据库的约束以及数据的聚合、联合查询

    目录 一.关系模型的简要概述 二.数据库的约束  2.1约束类型         2.2NULL约束 2.3 UNIQUE:唯一约束 2.4 默认约束 2.5 PRIMARY KEY:主键约束 2.6 FOREIGN KEY:外键约束 2.7 CHECK约束 三.高效率查询 3.1高效率查询的分类 3.2聚合查询 3.2.1聚合函数 3.2.2 GROUP BY子句 3.2.3HAVING 3.3.联合查询

    2024年02月10日
    浏览(67)
  • 数据库多表查询作业

    创建数据库 插入数据 1.查询student表的所有记录 2.查询student表的第2条到4条记录 3.从student表查询所有学生的学号(id)、姓名 (name)和院系(department)的信息 4.从student表中查询计算机系和英语系的学生的信息 5.从student表中查询年龄18~22岁的学生信息 6.从student表中查询每个院

    2024年02月16日
    浏览(47)
  • 数据库基础——7.多表查询

    这篇文章来讲一下数据库中的多表查询 目录 1. 一个案例引发的多表连接 1.1 案例说明 1.2 笛卡尔积(或交叉连接)的理解 1.3 案例分析与问题解决 2. 多表查询分类讲解 2.1 等值连接 vs 非等值连接 2.1.1等值连接 2.1.2 非等值连接 2.2 自连接 vs 非自连接  2.3 内连接 vs 外连接  3.实

    2024年02月06日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包