初始MySQL(四)(查询加强练习,多表查询)

news2024/9/24 9:27:09

目录

查询加强

where加强

order by加强

group by

分页查询

总结

多表查询(重点)

笛卡尔集及其过滤

自连接

子查询

子查询当作临时表

all/any

多列子查询

#先创建三张表
#第一张表
CREATE TABLE dept(
    deptno MEDIUMINT NOT NULL DEFAULT 0,
    dname VARCHAR(20) NOT NULL DEFAULT '',
    loc VARCHAR(13) NOT NULL DEFAULT ''
);
INSERT INTO dept VALUES(10,'ACCOUNTING','NEW YORK'),
    (20,'RESEARCH','DALLAS'),
    (30,'SALES','CHICAGO'),
    (40,'OPERATIONS','BOSHTON');  
SELECT * FROM dept;
#第二张表
CREATE TABLE emp(
empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,-- 编号
ename VARCHAR(20) NOT NULL DEFAULT "",-- 名字
job VARCHAR(9) NOT NULL DEFAULT "", -- 工作
mgr MEDIUMINT UNSIGNED,-- 上级编号
hiredate DATE NOT NULL,-- 入职日期
sal DECIMAL(7,2) NOT NULL,-- 工资
comm DECIMAL(7,2),-- 奖金
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 -- 部门编号
);
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1990-12-17',800.00,NULL,20),
    (7499,'ALLEN','SALESMAN',7698,'1991-2-20',1600.00,300.00,30),
    (7521,'WARD','SALESMAN',7968,'1991-2-22',1250.00,500.00,30),
    (7566,'JONES','MANAGER',7839,'1991-4-2',2975.00,NULL,20),
    (7654,'MARTIN','SALESMAN',7968,'1991-9-28',1250.00,1400.00,30),
    (7698,'BLAKE','MANAGER',7839,'1991-5-1',2850.00,NULL,30),
    (7782,'CLARK','MANAGER',7839,'1991-6-9',2450.00,NULL,10),
    (7788,'SCOTT','ANALYST',7566,'1991-4-19',3000.00,NULL,20),
    (7839,'KING','PRESIDENT',NULL,'1991-11-17',5000.00,NULL,10),
    (7844,'TURNER','SALESMAN',7698,'1991-9-8',1500.00,NULL,30),
    (7900,'JAMES','CLERK',7698,'1991-12-3',950.00,NULL,30),
    (7902,'FORD','ANALYST',7566,'1991-12-3',3000.00,NULL,20),
    (7934,'MILLER','CLERK',7782,'1991-1-23',1300.00,NULL,10);
SELECT * FROM emp;
#第三张表
CREATE TABLE salgrade(
    grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
    losal DECIMAL(17,2) NOT NULL, -- 该级别的最低工资
    hisal DECIMAL(17,2) NOT NULL  -- 该级别的最高工资
);
INSERT INTO salgrade VALUES(1,700,1200),
    (2,1201,1400),
    (3,1401,2000),
    (4,2001,3000),
    (5,3001,9999)
SELECT * FROM salgrade;

查询加强

where加强


SELECT * FROM emp;
SELECT * FROM dept;
SELECT * FROM salgrade;
-- 查询加强
#使用where子句如何插叙1992.1.1后入职的员工
SELECT * FROM emp
       WHERE hiredate > '1992-01-01'
#如何使用like操作符(模糊查询)
         -- %: 表示0 到多个任意字符              _: 表示单个任意字符
         -- 如何显示首字符为s的员工的姓名和工资
SELECT ename,sal FROM emp
       WHERE ename LIKE 'S%'

-- 如何显示首字符为s的员工姓名和工资
SELECT ename,sal FROM emp
       WHERE ename LIKE '__O%'
       
-- 如何显示没有上级的雇员的情况
SELECT * FROM emp
       WHERE mgr IS NULL; -- 判断一个值是不是为NULL,用IS,不用 = 
-- 查询表的结构
DESC emp

order by加强

-- 使用order by子句
-- 如何按照工资从低到高的顺序[升序],显示雇员的信息
SELECT * FROM emp
     ORDER BY sal;
-- 按照部门号升序工资降序排序,显示雇员信息
SELECT * FROM emp
     ORDER BY  deptno ASC , sal DESC;

group by

SELECT * FROM emp;
SELECT * FROM dept;
SELECT * FROM salgrade;
-- mysql 表查询 - 加强
-- (1)显示每种岗位的雇员总数,平均工资
SELECT COUNT(*) ,AVG(empno),job 
               FROM emp 
               GROUP BY job;
-- (2)显示雇员总数,以及获取补助的雇员数 count(某一列) 如果该列的值是null,是不会统计的
SELECT COUNT(*),COUNT(comm) FROM emp;
-- 统计没有获得补助的雇员数量
SELECT COUNT(*),COUNT(IF(comm IS NULL , 1,NULL)) FROM emp;
-- 显示管理者的总人数
SELECT COUNT(IF(job = 'MANAGER',1,NULL)),job FROM emp GROUP BY job;
-- 显示雇员工资的最大差额
SELECT MAX(sal) - MIN(sal)
      FROM emp;

分页查询

1.按雇员的id号升序取出,每页显示3条记录,请分别显示 第1页 ,第2页 , 第3页

2.基本语法: select...limit start,rows

上面表示从start +1 行开始取,取出rows行,start从0开始计算

select ... limit 0,2 表示从第0+1行开始取,取出2行

SELECT * FROM emp;
SELECT * FROM dept;
SELECT * FROM salgrade;
-- 分页查询
-- 按雇员的id号升序取出,每页显示3条记录,请分别显示 第1页 ,第2页 , 第3页

#第一页
SELECT * FROM emp
        ORDER BY empno
        LIMIT 0, 2
#第二页
SELECT * FROM emp
        ORDER BY empno
        LIMIT 2, 2
-- 推到一个公式
SELECT * FROM emp
        ORDER BY empno
        LIMIT 每一页显示的记录数*(页数-1),每一页显示的记录数

-- 按雇员的empno号降序取出,每页显示5条记录,请分别显示 第3页 ,第5页, 对应的sql语句
-- 第三页
SELECT * FROM emp
         ORDER BY empno ASC
         LIMIT 10,5;
-- 第五页
SELECT * FROM emp
         ORDER BY empno ASC
         LIMIT 20,5;

总结

如果select语句同时包含有group by,havng ,limit,order by ,那么他们的顺序是 (1)group by ,(2)having,(3)order by,(3)limit

应用案例:请统计各个部门的平均工资,并且是大于1000的,而且按照平均工资从高到低排序,取出两行记录

-- 请统计各个部门的平均工资,并且是大于1000的,并且按照平均工资从高到低排序
-- 取出前两行记录
SELECT AVG(sal),deptno  FROM emp
        GROUP BY deptno
        HAVING AVG(sal)>1000
        ORDER BY AVG(sal) DESC
        LIMIT 0,2;

多表查询(重点)

笛卡尔集及其过滤

直接来举例子吧,还是上面的数据集

显示雇员名,雇员工资及所在部门的名字

先分析一下

1.雇员名,雇员工资都在上面的emp表中

2.所在部门dept部门当中

3.我们需要对emp和dept查询

SELECT * FROM emp,dept  这就是我们的笛卡尔集

这条指令出来时52行,52行咋出来的呢?

其实是我们的emp的行乘以dept的行的出来的,就是emp的每一行和dept的每一行相互匹配

我们看看是不是哈!!!

下面是我们创建的emp表,一共13行

下面是我们的dept表,一共是4行,和上面的emp表相互匹配,就会得出我们的52行了!!

我们需要加上过滤条件where语句就可以筛选出我们想要的数据来了

注意(1)

注意(2)

SELECT * FROM emp;
SELECT * FROM dept;
SELECT * FROM salgrade;
-- 显示雇员名,雇员工资及所在部门的名字

-- SELECT * FROM emp,dept

SELECT ename,sal,dept.deptno
        FROM emp,dept
        WHERE emp.deptno=dept.deptno

-- 如何显示部门号为10的部门名,员工名和工资
SELECT dname,ename,sal,emp.deptno
       FROM emp,dept
       WHERE emp.deptno = 10 AND emp.deptno=dept.deptno;

-- 显示各个员工的姓名,工资,及其工资的级别
SELECT * FROM emp,salgrade
         WHERE sal BETWEEN losal AND hisal
     

自连接

将同一张表看作两张表

子查询

子查询是指嵌入到其他sql语句中的select语句,页交嵌套查询

单行子查询:只返回一行数据的子查询语句

请思考: 如何显示与SMITH同一部门的所有员工.

#多行子查询
-- 多行子查询返回多行数据的子查询,使用关键字 in
-- 练习: 如何查询和部门10的工作相同的雇员的名字,岗位,工资,部门名,但是不含10的

子查询当作临时表

all/any

在多行子查询中使用all操作符

请思考:显示工资比部门30的所有员工的工资高的员工的姓名,工资和部门号

#请思考:显示工资比部门30的所有员工的工资高的员工的姓名,工资和部门号
#写法一:
SELECT * FROM emp;
SELECT MAX(sal)
           FROM emp
           GROUP BY deptno
           HAVING deptno = 30
SELECT ename,sal,deptno
            FROM emp
            WHERE sal>(SELECT MAX(sal)
           FROM emp
           GROUP BY deptno
           HAVING deptno = 30)
#写法二:
SELECT ename,sal,deptno
          FROM emp
          WHERE sal>ALL(
          SELECT sal FROM emp WHERE deptno = 30)     

请思考:显示工资比部门30的其中一个员工的工资高的员工的姓名,工资和部门号

#请思考:显示工资比部门30的所有员工的工资高的员工的姓名,工资和部门号
SELECT ename,sal,deptno
          FROM emp
          WHERE sal>ANY(
          SELECT sal FROM emp WHERE deptno = 30)  

多列子查询

多行子查询则是指查询返回多个列数据的子查询语句

请思考如何查询与smith的部门和岗位完全相同所有雇员(并不含smith本人)

(字段1 , 字段2) = (select 字段1 , 字段2 from ...)

前面的字段1必须和后面的字段1相匹配 , 前面的字段2和后面的字段2相匹配

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1201672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js随机生成颜色

封装一个函数 返回一个随机颜色 不传参数或者传true返回十六进制, 传false返回rgb模式 script>function Random(n, m) {if (n > m) {let temp nn mm temp}return Math.floor(Math.random() * (m - n 1)) n}function getRandomColor(flag true) {if (fl…

力扣第647题 回文子串 c++ 动态规划 双指针 附Java代码 注释解释版

题目 647. 回文子串 中等 相关标签 字符串 动态规划 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串…

【中国知名企业高管团队】系列66:老板ROBAM

昨天华研荟为您介绍了厨电领域的TOP企业——方太FOTILE的发展历程,以及作为企一代茅理翔和企二代茅忠群的创业故事。 今天为您介绍同处浙江的老板电器。 一、关于老板电器 以下内容来自老板电器官网介绍: 杭州老板电器股份有限公司创立于1979年&…

学校教的Python根本不够!来看看Python学习路线图

如果只靠学校学的东西去找工作,能找到工作吗? 今天给大家看一个粉丝的真实求职案例,想做Python方面的工作,投了二十几个简历却没人要,心态崩了。为什么没人要?我来告诉你答案。 然后我还会结合我的这些年的…

软件开发项目文档系列之十六如何撰写系统运维方案

前言 项目运维方案是为了确保项目的稳定运行和可持续发展而制定的指导性文档。本文将详细介绍项目运维方案的各个方面,包括硬件和软件基础设施、监控和警报、备份和恢复、安全性、团队组织和沟通等方面。本博客将提供示例和最佳实践,以帮助您更好地理解…

AIGC实战——自编码器(Autoencoder)

AIGC实战——自编码器 0. 前言1. 自编码器原理2. 数据集与模型分析2.1 Fashion-MNIST 数据集2.2 自编码器架构 3. 去噪自编码器3.1 编码器3.2 解码器3.3 连接编码器和解码器3.4 训练自编码器3.5 重建图像 4. 可视化潜空间5. 生成新图像小结系列链接 0. 前言 自编码器 (Autoenc…

【Recap教程】autodesk recap软件的安装、认识与使用

一、autodesk recap概述 1. recap介绍 Autodesk Recap是一款由Autodesk公司推出的三维扫描软件,它能够转换多种数据源(如点云、激光雷达、照片)为可视的三维模型。该软件的使用使得用户可以更容易地生成高质量、完整的三维模型。Autodesk Recap通常用于建筑、土木工程、汽…

④【数据查询】MySQL查询语句,拿来即用。

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ MySQL查询操作 ④【数据查询】MySQL查询语句&a…

【框架篇】统一异常处理

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! 1,统一异常处理的介绍 统⼀异常处理使⽤的是 ControllerAdvice ExceptionHandler 来…

2023-11-13 LeetCode每日一题(区域和检索 - 数组可修改)

2023-11-13每日一题 一、题目编号 307. 区域和检索 - 数组可修改二、题目链接 点击跳转到题目位置 三、题目描述 给你一个数组 nums ,请你完成两类查询。 其中一类查询要求 更新 数组 nums 下标对应的值另一类查询要求返回数组 nums 中索引 left 和索引 right…

一文读懂RestCloud AppLink

RestCloud AppLink是什么? RestCloud AppLink 是一种应用程序集成解决方案,它提供了一套工具和技术,用于实现不同应用程序之间的无缝集成和交互。平台旨在解决企业中应用程序之间数据孤岛、信息孤立和业务流程不畅的问题,提高企业…

Python - GFPGAN + MoviePy 提高人物视频画质

目录 一.引言 二.gif_to_png 三.gfp_gan 四.png_to_gif 五.总结 一.引言 前面我们介绍了 GFP-GAN 提高人脸质量 与 OCR 提取视频台词、字幕,前者可以提高图像质量,后者可以从视频中抽帧,于是博主便想到了将二者进行结合并优化人物 GIF …

matlab直线一级倒立摆lqr控制

1、内容简介 略 16-可以交流、咨询、答疑 matlab直线一级倒立摆lqr控制 2、内容说明 倒立摆是一个开环不稳定的强非线性系统,其控制策略与杂技运动员顶杆平衡表演的技巧有异曲同工之处,目的在于使得摆杆处于临界稳定状态,是进行控制理论研…

番外 1 : Java 环境下的 selenium 搭建

Java 环境下的 selenium 搭建 一 . 下载谷歌浏览器二 . 下载谷歌浏览器驱动2.1 查看谷歌浏览器版本2.2 下载对应版本的谷歌驱动2.3 解压下载好的驱动压缩包 , 将下载好的 chromedriver.exe 放到java 系统环境变量下 三 . 下载 Edge 浏览器的驱动3.1 查看 Edge 浏览器的版本3.2 …

欧易python控盘脚本(初级)

欧易python控盘脚本 文章目录 欧易python控盘脚本一、官网API使用介绍二、查看组1、查看市场行情2、查看账户余额3、订单查询 三、交易组1、市价购买2、限价购买 一、官网API使用介绍 https://www.okx.com/cn/help/how-can-i-do-spot-trading-with-the-jupyter-notebook 二、…

哨兵1号回波数据(L0级)产品目录介绍

1 数据包总览 哨兵1号L0级数据产品系列如下图所示,本文针对图中红框中的数据产品进行介绍(定标数据、噪声数据没下载到。。。)。 1.1 数据包名称 示例: S1A_S3_RAW__0SSV_20211230T105851_20211230T105907_041237_04E698_94F0.S…

Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用 Spring Cloud OpenFeign是一个声明式的服务调用框架,基于Feign并整合了Ribbon和…

Qt文档阅读笔记-Fetch More Example解析

Fetch More Example这个例子说明了如何在视图模型上添加记录。 这个例子由一个对话框组成,在Directory的输入框中,可输入路径信息。应用程序会载入路径信息的文件信息等。不需要按回车键就能搜索。 当有大量数据时,需要对视图模型进行批量增…

php在线审稿系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 php在线审稿系统是一套完善的web设计系统mysql数据库 ,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php在线审稿系统 代码 https://download.csdn.net/download/qq_41221322/885…

【教3妹学编程-算法题】重新排列后包含指定子字符串的字符串数目

3妹:1 8得8,2 816, 3 8妇女节… 2哥 : 3妹,在干嘛呢 3妹:双11不是过了嘛, 我看看我这个双十一买了多少钱, 省了多少钱。 2哥 : 我可是一分钱没买。 3妹:我买了不少东西, …