MySQL数据库中的多表查询含义以及练习

  • 一. 多表查询含义
  • 二. 多表查询练习
    • 1. 已知表
    • 2. 需求And代码

一. 多表查询含义

查询语法:

 select列名列表from表名列表where条件

笛卡尔积:

  • 有两个集合A和B,取这两个集合的所有组成情况。
  • 要完成多表查询,需要消除无用的数据。

分类:

  • 内连接查询—隐式内连接And显式内连接
  • 外连接查询—左外连接And右外连接
  • 子查询—单行单列,多行单列And多行多列

二. 多表查询练习

1. 已知表

  -- 部门表CREATE TABLE dept (id INT PRIMARY KEY PRIMARY KEY, -- 部门iddname VARCHAR(50), -- 部门名称loc VARCHAR(50) -- 部门所在地);               -- 添加4个部门INSERT INTO dept(id,dname,loc) VALUES (10,'教研部','北京'),(20,'学工部','上海'),(30,'销售部','广州'),(40,'财务部','深圳');
-------------------------------------------------------------------------- 职务表,职务名称,职务描述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, '文员', '使用办公软件');-- 员工表CREATE TABLE emp (id INT PRIMARY KEY, -- 员工idename VARCHAR(50), -- 员工姓名job_id INT, -- 职务idmgr 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);
-------------------------------------------------------------------------- 工资等级表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. 需求And代码

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

/*分析:1.员工编号,员工姓名,工资,需要查询emp表  职务名称,职务描述 需要查询job表2.查询条件 emp.job_id = job.id
*/SELECT t1.`id`, -- 员工编号t1.`ename`, -- 员工姓名t1.`salary`,-- 工资t2.`jname`, -- 职务名称t2.`description` -- 职务描述FROM emp t1, job t2WHERE t1.`job_id` = t2.`id`;

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

/* 分析:1. 员工编号,员工姓名,工资 emp  职务名称,职务描述 job  部门名称,部门位置 dept2. 条件: emp.job_id = job.id and emp.dept_id = dept.id
*/SELECT t1.`id`, -- 员工编号t1.`ename`, -- 员工姓名t1.`salary`,-- 工资t2.`jname`, -- 职务名称t2.`description`, -- 职务描述t3.`dname`, -- 部门名称t3.`loc` -- 部门位置FROM emp t1, job t2,dept t3WHERE t1.`job_id` = t2.`id` AND t1.`dept_id` = t3.`id`;

3.查询员工姓名,工资,工资等级

/*
分析:1.员工姓名,工资 emp  工资等级 salarygrade2.条件emp.salary >= salarygrade.losalary and emp.salary <= salarygrade.hisalaryemp.salary BETWEEN salarygrade.losalary and salarygrade.hisalary
*/SELECT t1.ename ,t1.`salary`,t2.*FROM emp t1, salarygrade t2WHERE t1.`salary` BETWEEN t2.`losalary` AND t2.`hisalary`;

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

/*
分析:1. 员工姓名,工资 emp , 职务名称,职务描述 job 部门名称,部门位置,dept  工资等级 salarygrade2. 条件: emp.job_id = job.id and emp.dept_id = dept.id and emp.salary BETWEEN salarygrade.losalary and salarygrade.hisalary
*/SELECT t1.`ename`,t1.`salary`,t2.`jname`,t2.`description`,t3.`dname`,t3.`loc`,t4.`grade`FROM emp t1,job t2,dept t3,salarygrade t4WHERE t1.`job_id` = t2.`id` AND t1.`dept_id` = t3.`id`AND t1.`salary` BETWEEN t4.`losalary` AND t4.`hisalary`;

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

/*
分析:1.部门编号、部门名称、部门位置 dept 表。 部门人数 emp表2.使用分组查询。按照emp.dept_id完成分组,查询count(id)3.使用子查询将第2步的查询结果和dept表进行关联查询
*/SELECT t1.`id`,t1.`dname`,t1.`loc` , t2.totalFROM dept t1,(SELECTdept_id,COUNT(id) totalFROM emp  GROUP BY dept_id) t2WHERE t1.`id` = t2.dept_id;

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

/*
分析:1.姓名 emp, 直接上级的姓名 emp * emp表的id 和 mgr 是自关联2.条件 emp.id = emp.mgr3.查询左表的所有数据,和 交集数据 * 使用左外连接查询
*/SELECT t1.ename,t1.mgr,t2.`id`,t2.`ename`FROM emp t1LEFT JOIN emp t2ON t1.`mgr` = t2.`id`;

~喜欢的点赞关注,评论区留下宝贵的意见-谢谢呐♥♥♥~


相关推荐:Aimee.洁的 《MySQL数据库中的多表之间关系的设计实现小案例》And 《MySQL技术数据库基础操作命令大全》And 《笔记本USB接口案例-接口多态的综合案例》


*作者:Aimee.洁
*本文版权归作者和CSDN共有,欢迎转载,未经作者同意必须保留此版声明,否则保留追究法律责任的权利。

MySQL数据库中的多表查询含义以及练习~建议码友们点亮拇指+收藏呐~相关推荐

  1. 在mysql数据库中,多表查询,事务,DCL,

    多表查询: * 查询语法:select列名列表from表名列表where.... * 准备sql# 创建部门表CREATE TABLE dept(id INT PRIMARY KEY AUTO_INC ...

  2. MySQL数据库中的数据表

    1.创建数据表 创建数据表的,使用字符串应该遵循的原则 从速度方面考虑,要选择固定的列,可以使用CHAR类型 要节省空间,使用动态的列,可以使用VARCHAR类型 要将列中的内容限制为一种选择,可以使 ...

  3. 如何批量删除mysql的数据库_如何快速批量删除Mysql数据库中的数据表

    一个mysql数据库中,是可以同时安装几个网站程序的,在使用中,我们只需要用不同的数据库表前缀来区分就可以了.但随着我们不断调试,那么数据 库中的表,就会一天天的多起来,如一个一个的删除就很麻烦.很辛 ...

  4. Oracle数据库中的多表查询

    经验查询: 在日后的开发之中,很多人都肯定要接触到许多新的数据库和数据表,那么在这种时候有两种做法: 做法一:新人做法,上来就直接输入以下的命令 select * from 表名称; 如果此时数据量较 ...

  5. mysql 截断多个表_如何从MySQL数据库中截断所有表?

    好吧,我自己解决了这里是存储过程:) BEGIN DECLARE done BOOLEAN DEFAULT FALSE; DECLARE truncatestmnt TEXT; -- this is ...

  6. 在mysql数据库中,文章表设计有啥好的思路

    Q: 用mysql设计一张文章表,不知道有啥好的思路! 我是这样的,应为考虑附件和图片,所以我的文章表除了有varchar(1000)的文章内容,还设置了个Bolb接收附件和图片. 我用的是mysql ...

  7. mysql 文章 字段设计_在mysql数据库中,文章表设计有啥好的思路

    Q: 用mysql设计一张文章表,不知道有啥好的思路! 我是这样的,应为考虑附件和图片,所以我的文章表除了有varchar(1000)的文章内容,还设置了个Bolb接收附件和图片. 我用的是mysql ...

  8. MySQL数据库-DQL(单表查询)

    单表查询 数据准备 查询语法 查询全部 条件查询 (where) 查询条件分类 条件查询的语法 聚合函数查询 聚合函数介绍 聚合函数分类 聚合函数语法 案例学习 排序查询 (order by) 注意 ...

  9. 查询MYSQL数据库中所有的表

    SELECT CONCAT('truncate table ',TABLE_NAME,';') AS a FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHE ...

最新文章

  1. T-SQL中的GROUP BY GROUPING SETS
  2. fedora12下pppoe服务器的搭建
  3. Prime算法生成迷宫
  4. KinhDown_v2.4.42稳定版 百度云最新不限速下载工具
  5. 上海工程技术大学c语言试卷,上海工程技术大学2009-2010C语言试卷A.doc
  6. QThread使用方法
  7. oracle 排序_Oracle数据库中SQL之过滤和排序数据
  8. Leetcode 刷题笔记(二) —— 数组类型解题方法二:双指针法
  9. 电脑ping_电脑网络故障检测与维护—常用DOS命令
  10. 前端面试:经典面试题Foo与getName()
  11. 如何衡量每个特征的重要度?
  12. java异常类_java中常见的异常类
  13. 在湖北考取的交通类安全员B证可以调转河南省企业使用吗?
  14. 使用ALT+数字小键盘在文本文件中输入特殊字符
  15. 操作系统基本功能(操作系统)
  16. 职业解读 | 如何成为一名SQL开发人员
  17. 奥塔在线:Centos7下NTP服务的详细部署说明
  18. HTML5期末大作业:影视网站设计——“指环王:护戒使者(13页) TML+CSS+JavaScript 学生DWHTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作
  19. 银行排队叫号系统的模拟
  20. innerHTML与innerText与outHTML与outText 的区别。

热门文章

  1. 【GAMS与C++的交互】
  2. Dubbo invoke命令使用
  3. Shrec: Bandwidth-Efficient Transaction Relay in High-Throughput Blockchain Systems
  4. <android>音乐频谱显示效果 音乐播放动画 自定义view Visualizer 对接MediaPlayer 声音频率 动画效果
  5. 长短记忆型递归神经网络LSTM
  6. Mac OS X 10.11 EI Capitan 的iso镜像提取
  7. 华为鸿蒙啥时候上市,华为鸿蒙什么时候上市
  8. pay 和 put的用法
  9. python统计闰年的个数_闰年python_闰年 python_python 闰年数 - 云+社区 - 腾讯云
  10. CPDA 第 8 次课改,全新课程上线——暨上海第 46 期正式开课