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

目录

查询加强

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 empWHERE hiredate > '1992-01-01'
#如何使用like操作符(模糊查询)-- %: 表示0 到多个任意字符              _: 表示单个任意字符-- 如何显示首字符为s的员工的姓名和工资
SELECT ename,sal FROM empWHERE ename LIKE 'S%'-- 如何显示首字符为s的员工姓名和工资
SELECT ename,sal FROM empWHERE ename LIKE '__O%'-- 如何显示没有上级的雇员的情况
SELECT * FROM empWHERE mgr IS NULL; -- 判断一个值是不是为NULL,用IS,不用 = 
-- 查询表的结构
DESC emp

order by加强

-- 使用order by子句
-- 如何按照工资从低到高的顺序[升序],显示雇员的信息
SELECT * FROM empORDER BY sal;
-- 按照部门号升序工资降序排序,显示雇员信息
SELECT * FROM empORDER 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 empORDER BY empnoLIMIT 0, 2
#第二页
SELECT * FROM empORDER BY empnoLIMIT 2, 2
-- 推到一个公式
SELECT * FROM empORDER BY empnoLIMIT 每一页显示的记录数*(页数-1),每一页显示的记录数-- 按雇员的empno号降序取出,每页显示5条记录,请分别显示 第3页 ,第5页, 对应的sql语句
-- 第三页
SELECT * FROM empORDER BY empno ASCLIMIT 10,5;
-- 第五页
SELECT * FROM empORDER BY empno ASCLIMIT 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 empGROUP BY deptnoHAVING AVG(sal)>1000ORDER BY AVG(sal) DESCLIMIT 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,deptSELECT ename,sal,dept.deptnoFROM emp,deptWHERE emp.deptno=dept.deptno-- 如何显示部门号为10的部门名,员工名和工资
SELECT dname,ename,sal,emp.deptnoFROM emp,deptWHERE emp.deptno = 10 AND emp.deptno=dept.deptno;-- 显示各个员工的姓名,工资,及其工资的级别
SELECT * FROM emp,salgradeWHERE sal BETWEEN losal AND hisal

自连接

将同一张表看作两张表

子查询

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

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

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

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

子查询当作临时表

all/any

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

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

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

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

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

多列子查询

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据结构:字典(dict)详解

1.字典概念 字典在其他语言中可能会被称为“关联存储”或“关联数组”。   在Python中,字典(Dictionary)是一种可变、无序且键值对(key-value pairs)唯一的数据结构。   字典也是一种标准映射类型,mapp…

【嵌入式设计】Main Memory:SPM 便签存储器 | 缓存锁定 | 读取 DRAM 内存 | DREM 猝发(Brust)

目录 0x00 便签存储器(Scratchpad memory) 0x01 缓存锁定(Cache lockdown) 0x02 读取 DRAM 内存 0x03 DREM Banking 0x04 DRAM 猝发(DRAM Burst) 0x00 便签存储器(Scratchpad memory&#…

OpenCV颜色识别及应用

OpenCV是一个开源计算机视觉库,提供了丰富的图像处理和计算机视觉算法,其中包括颜色识别。本文首先介绍了OpenCV库,然后着重描述了颜色识别的基本原理和方法,包括颜色空间的转换、阈值处理、颜色检测等技术。接下来详细探讨了Open…

【验证码逆向专栏】百某网数字九宫格验证码逆向分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未…

修改ubuntu终端目录背景颜色

Ubuntu终端上有部分目录是黄绿色底色,看着很不舒服。如下图所示: 这是由于修改用户权限导致的问题。 通过下面指令可以看到 echo $LS_COLORS | grep "ow" ​ 可以看到ow的默认参数是34:42ow:OTHER_WRITABLE,即其他用户可写权限 …

分类预测 | Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据多输入分类预测

分类预测 | Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据多输入分类预测 目录 分类预测 | Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-GRU粒子群算法优化门控循环单元的数据…

『亚马逊云科技产品测评』活动征文|阿里云服务器亚马逊服务器综合评测

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 文章目录 引言一、亚马逊&阿里云发展历史介绍1.1 亚马逊发展历史1.2…

腾讯云CVM服务器5年可选2核4G和4核8G配置

腾讯云服务器网整理五年云服务器优惠活动 txyfwq.com/go/txy 配置可选2核4G和4核8G,公网带宽可选1M、3M或5M,系统盘为50G高性能云硬盘,标准型S5实例CPU采用主频2.5GHz的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器,…

基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.15)

1.任务所需实现基本功能 关机状态时白灯亮蓝灯灭,此时长按按键无反应,白灯亮度降低的状态,蓝灯保持灭的状态。点按按键一次,白灯熄灭,蓝灯亮此时W引脚控制的灯亮。继续点按按键。蓝灯亮,此时W引脚控制的灯…

iOS 设置图标和upload包时显示错误

右键-show in finder-AppIcon.appiconset-然后替换图片 然后遇到个问题 就是图片不能有alpha [Xcode]应用图标:ERROR ITMS-90717: “Invalid App Store Icon. The App Store Icon in the asset catalog in x… 具体操作:只需确保【AppIcon】图片集中不…

【评论送书】十本架构师成长和软件架构技术相关的好书(可以任选)

正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 参与规则 本次送书1~5本参与方式:关注博主、点赞、收藏、评论(从评论区…

基础课4——客服中心管理者面临的挑战

客服管理者在当今的数字化时代也面临着许多挑战。以下是一些主要的挑战: 同行业竞争加剧:客服行业面临着来自同行业的竞争压力。为了获得竞争优势,企业需要不断提高自身的产品和服务质量,同时还需要不断降低成本、提高效率。然而…

Linux下SPI环回测试

文章目录 前言一、回环测试代码1.1 头文件 spidev.h2.2 c代码 spidev_test.c 二、 编译验证2.1 交叉编译2.2 测试 前言 linux下做spi回环测试 一、回环测试代码 1.1 头文件 spidev.h /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /** include/linux/spi…

蓝桥杯 插入排序

插入排序的思想 插入排序是一种简单直观的排序算法,其基本思想是将待排序的元素逐个插入到已排序序列 的合适位置中,使得已排序序列逐渐扩大,从而逐步构建有序序列,最终得到完全有序的序 列。 它类似于我们打扑克牌时的排序方式&…

竞赛 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

探索未来,开启无限可能:打造智慧应用,亚马逊云科技大语言模型助您一臂之力

文章目录 什么是大模型?大模型训练方法亚马逊云科技推出生成式AI新工具 —— aws toolkit使用教程 总结 什么是大模型? 近期,生成式大模型是人工智能领域的研究热点。这些生成式大模型,诸如文心一言、文心一格、ChatGPT、Stable …

Linux 系统目录结构

Linux 系统目录结构 登录系统后,在当前命令窗口下输入命令: ls / 你会看到如下图所示: 以下是对这些目录的解释: /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放…

【Java 进阶篇】JQuery 案例:优雅的隔行换色

在前端的设计中,页面的美观性是至关重要的。而其中一个简单而实用的设计技巧就是隔行换色。通过巧妙地使用 JQuery,我们可以轻松地实现这一效果,为网页增添一份优雅。本篇博客将详细解析 JQuery 隔行换色的实现原理和应用场景,让我…

python数据处理作业11:建一个5*3的随机数组和一个3*2的数组,其元素为1,2,3,4,5,6,求两矩阵的积

每日小语 打碎的杯子,烫伤的手,对菩萨是堪忍,因为他在里面得悟甚深之法,心生欢喜。 可是对一般人来说,一生何止打破千百个杯子?何止烫伤过千百次手?他只是痛苦地忍受,只记得下次要…