当前位置: 首页 > news >正文

SQL语法:浅析select之七大子句

Mysql版本:8.0.26
可视化客户端:sql yog


目录

  • 一、七大子句顺序
  • 二、演示
    • 2.1 from语句
    • 2.2 on子句
    • 2.3 where子句
    • 2.4 group by子句
      • 2.4.1 WITHROLLUP,加在group by后面
      • 2.4.2 是否可以按照多个字段分组统计?
      • 2.4.3 分组统计时,select后面字段列表的问题
    • 2.5 having子句
    • 2.6 order by子句
    • 2.7 limit子句


提示:以下是本篇文章正文内容,下面案例可供参考

一、七大子句顺序

(1) from: 从哪些表中筛选。

(2) inner l left | right … on: 关联多表查询时,去除笛卡尔积

(3) where: 从表中筛选的条件

(4) group by: 分组依据

(5) having: 在分组统计结果中再次筛选 (with rollup)

(6) order by: 排序

(7) limit: 分页

注意:必须按照 (1) - (7) 的顺序编写子句。

二、演示

测试数据准备如下:

①创建数据表 t_department:


CREATE TABLE `t_department` (`did` int NOT NULL AUTO_INCREMENT COMMENT '部门编号',`dname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '员工名称',`description` varchar(200) DEFAULT NULL COMMENT '员工简介',PRIMARY KEY (`did`),UNIQUE KEY `dname` (`dname`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

在这里插入图片描述

②创建数据表t_employee

CREATE TABLE `t_employee` (`eid` int NOT NULL AUTO_INCREMENT COMMENT '员工编号',`ename` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '员工姓名',`salary` double NOT NULL COMMENT '薪资',`commission_pct` decimal(3,2) DEFAULT NULL COMMENT '奖金比例',`birthday` date NOT NULL COMMENT '出生日期',`gender` enum('男','女') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '男' COMMENT '性别',`tel` char(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '手机号码',`email` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '邮箱',`address` varchar(150) DEFAULT NULL COMMENT '地址',`work_place` set('北京','深圳','上海','武汉') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '北京' COMMENT '工作地点',`hiredate` date NOT NULL COMMENT '入职日期',`job_id` int DEFAULT NULL COMMENT '职位编号',`mid` int DEFAULT NULL COMMENT '领导编号',`did` int DEFAULT NULL COMMENT '部门编号',PRIMARY KEY (`eid`),KEY `job_id` (`job_id`),KEY `did` (`did`),KEY `mid` (`mid`),CONSTRAINT `t_employee_ibfk_1` FOREIGN KEY (`job_id`) REFERENCES `t_job` (`jid`) ON DELETE SET NULL ON UPDATE CASCADE,CONSTRAINT `t_employee_ibfk_2` FOREIGN KEY (`did`) REFERENCES `t_department` (`did`) ON DELETE SET NULL ON UPDATE CASCADE,CONSTRAINT `t_employee_ibfk_3` FOREIGN KEY (`mid`) REFERENCES `t_employee` (`eid`) ON DELETE SET NULL ON UPDATE CASCADE,CONSTRAINT `t_employee_chk_1` CHECK ((`salary` > 0)),CONSTRAINT `t_employee_chk_2` CHECK ((`hiredate` > `birthday`))
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

在这里插入图片描述

③创建数据表t_job

CREATE TABLE `t_job` (`jid` int NOT NULL AUTO_INCREMENT COMMENT '职位编号',`jname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '职位名称',`description` varchar(200) DEFAULT NULL COMMENT '职位简介',PRIMARY KEY (`jid`),UNIQUE KEY `jname` (`jname`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

在这里插入图片描述

2.1 from语句

👉功能:

表示从某个表中筛选数据

案例:查询t_department表的所有欣喜

代码演示如下:

select * 
from t_department  #表示从某个表中筛选数据

在这里插入图片描述

2.2 on子句

👉特点:

(1)on必须配合join使用

(2)on后面只写关联条件
所谓关联条件是两个表的关联字段的关系

例如:t_employee表和t_department表关联,t_employee.did=t_department.did

(3)有n张表关联,就有n-1个关联条件

两张表关联,就有1个关联条件
三张表关联,就有2个关联条件

案例:#查询员工的编号,姓名,职位编号,职位名称,部门编号,部门名称,需要t_employee员工表,t_department部门表,t_job职位表。

代码如下(示例):

SELECT eid,ename,t_job.job_id,t_job.job_name, `t_department`.`did`,`t_department`.`dname`
FROM t_employee INNER JOIN t_department INNER JOIN t_job
ON t_employee.did = t_department.did AND t_employee.job_id = t_job.job_id;

在这里插入图片描述

2.3 where子句

👉功能:

在查询结果中筛选

案例:#查询所有男员工的姓名和部门名称

代码演示如下:

SELECT ename,dname 
FROM t_department RIGHT JOIN t_employee ON t_employee.`did`=t_department.`did`
WHERE t_employee.`gender`='男';

在这里插入图片描述

2.4 group by子句

👉功能:

分组依据

案例:#查询每一个部门的平均薪资

代码演示如下:

SELECT dname,AVG(salary) AS 平均薪资
FROM t_department RIGHT JOIN t_employee ON t_department.`did`=t_employee.`did`
GROUP BY t_department.`dname`; 

在这里插入图片描述

案例:#查询每一个部门所有男员工的平均薪资

SELECT t_employee.did,dname,AVG(salary) AS 平均薪资
FROM t_employee RIGHT JOIN t_department ON t_department.`did`=t_employee.`did`
WHERE gender='男'
GROUP BY t_employee.`did`;

在这里插入图片描述

2.4.1 WITHROLLUP,加在group by后面

WITHROLLUP在group分组字段的基础上再进行统计数据。

案例:#按照部门统计人数,并合计总数

代码演示如下:

SELECT IFNULL(did,'合计') AS "部门编号" , COUNT(*)  AS "人数" FROM t_employee GROUP BY did WITH ROLLUP;

在这里插入图片描述

2.4.2 是否可以按照多个字段分组统计?

案例:#分别统计查询每一个部门男、女员工的平均薪资

代码演示如下:

SELECT t_employee.did,dname,gender,AVG(salary) AS 平均薪资
FROM t_employee RIGHT JOIN t_department ON t_department.`did`=t_employee.`did`
GROUP BY t_employee.`did`,gender;

在这里插入图片描述

2.4.3 分组统计时,select后面字段列表的问题

案例:统计每个部门的人数

代码演示如下:

SELECT eid,ename, did, COUNT(*) FROM t_employee; 

在这里插入图片描述

分析:不符合案例需求,案例需求只要统计各部门的总人数,而不是统计总人数,况且加上count(*)【count(),它的功能是统计记录数,,又是分组函数,即函数执行完后,得到结果的行数可能会变少,有可能是1行,也可能是几行】,如果不加分组条件,此查询语句会查询所有的人数+带返回第一个员工的员工编号和姓名以及部门编号。

代码改善如下:

SELECT eid,ename, did, COUNT(*) FROM t_employee GROUP BY did; 

在这里插入图片描述

分析:虽然加了group by did,即按部门编号分组,但整个查询语句返回的”eid“和”ename“等字段下的记录有歧义,如下所示:

在这里插入图片描述

红圈勾出的记录是在表达,部门编号为1的部门下有14个员工编号为1,名为"孙洪亮"的员工吗?,显然不对,不符合逻辑,古往今来,没有十四胞胎,且一模一样的人。

正确代码如下:

SELECT  did, COUNT(*) FROM t_employee GROUP BY did;

在这里插入图片描述

分组统计时,select后面只写和分组统计有关的字段,其他无关字段不要出现,否则会引起歧义

2.5 having子句

👉功能:

在分组统计结果中再次筛选

案例:#分别统计查询每一个部门男、女员工的平均薪资,只显示平均薪资在10000元以上的记录

代码演示如下:

SELECT t_employee.did,dname,gender,AVG(salary) AS 平均薪资
FROM t_employee RIGHT JOIN t_department ON t_department.`did`=t_employee.`did`
GROUP BY t_employee.`did`,gender
HAVING 平均薪资>10000;

在这里插入图片描述
where和having的区别别?

  • where是针对原表的原始数据筛选后面不能接分组函数(avg,sum,count,max,min)等

  • having是针对分组统计结果的再次筛选,后面可以接分组函数,还可以使用统计结果的别名

2.6 order by子句

👉功能:

升序和降序,默认是升序
asc代表升序【从小到大】
desc 代表降序【从大到小】

案例:#查询所有员工的姓名和薪资,按照薪资从高到低排序

代码演示如下:

SELECT ename,salary
FROM t_employee
ORDER BY salary DESC; #默认是升序,降序要加desc,升序可以加asc

在这里插入图片描述

案例:#查询所有员工的姓名和薪资、出生日期,按照薪资从高到低排序 。如果薪资相同的,按照出生日期从小到大。

代码演示如下:

SELECT ename,salary,birthday
FROM t_employee
ORDER BY salary DESC,birthday ASC;

在这里插入图片描述

2.7 limit子句

👉功能:分页显示结果。

注意:

limit m,n
n:表示最多该页显示几行
m:表示从第几行开始取记录,第一个行的索引是0
m = (page-1)×n
page表示第几页

每页最多显示5条,n=5
第1页,page=1,m = (1-1)*5 = 0; limit 0,5
第2页,page=2,m = (2-1)*5 = 5; limit 5,5
第3页,page=3,m = (3-1)*5 = 10; limit 10,5

每页显示20条,n=20
第6页,page=6,m = (6-1)*20;limit 100,20

案例:#查询员工信息,按照每页显示5条的规则,查询第1页

代码演示如下:

SELECT * 
FROM t_employee
LIMIT 0,5;

在这里插入图片描述

案例:#查询员工信息,按照每页显示5条的规则,查询第2页

代码演示如下:

SELECT * 
FROM t_employee
LIMIT 10,5;

在这里插入图片描述


相关文章:

SQL语法:浅析select之七大子句

Mysql版本:8.0.26 可视化客户端:sql yog 目录一、七大子句顺序二、演示2.1 from语句2.2 on子句2.3 where子句2.4 group by子句2.4.1 WITHROLLUP,加在group by后面2.4.2 是否可以按照多个字段分组统计?2.4.3 分组统计时&#xff0c…...

中国人民大学与加拿大女王大学金融硕士——去有光的地方,并成为自己的光

光是我们日常生活中一个重要的元素,试想一下如果没有光,世界将陷入一片昏暗。人生路亦是如此,我们从追逐光、靠近光、直到自己成为光。人民大学与加拿大女王大学金融硕士项目是你人生路上的一束光吗 渴望想要成为一个更好的人,就…...

Python数据结构与算法篇(五)-- 二分查找与二分答案

1 二分法介绍 1.1 定义 二分查找又称折半查找、二分搜索、折半搜索等,是一种在静态查找表中查找特定元素的算法。 所谓静态查找表,即只能对表内的元素做查找和读取操作,不允许插入或删除元素。 使用二分查找算法,必须保证查找表中…...

小游戏也要讲信用

当下,小游戏鱼龙混杂,官方为能更好地保护用户、开发者以及平台的权益,近日宣布7月1日起试行小游戏主体信用分机制。 主体信用分是什么呢?简单来说,这是针对小游戏主体下所有小游戏帐号行为,对开发者进行评…...

贪心算法11

1. 贪心算法的概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心…...

【并发编程】JUC并发编程(彻底搞懂JUC)

文章目录一、背景二、什么是JUC?三、JUC框架结构四、JUC框架概述五、JUC中常用类汇总六、相关名词进程和线程进程线程创建线程的几种常见的方式并发和并行用户线程和守护线程七、synchronized 作用范围:八、Lock锁(重点)什么是 Lock锁类型Lock接口lock()…...

Compose 动画 (七) : 高可定制性的动画 Animatable

1. Animatable和animateDpAsState的区别是什么 Animatable是Android Compose动画的底层API,如果我们查看源码,可以发现animateDpAsState内部是调用的animateValueAsState,而animateValueAsState内部调用的是Animatable animateDpAsState比A…...

vue3组件传值

1.父向子传值 父组件 引入子组件 import Son from ./components/Son.vue 设置响应式数据 const num ref(99) 绑定到子组件 <Son :num"num"></Son> 子组件 引入defineProps import { defineProps } from vue; 生成实例接收数据 type设置接收类…...

小白开发微信小程序00--文章目录

一个小白&#xff0c;一个老牛&#xff0c;空手能不能套白羊&#xff0c;能不能白嫖&#xff1f;我告诉你&#xff0c;一切都so easy&#xff0c;这个系列从0到106&#xff0c;屌到上天&#xff0c;盖过任何一个&#xff0c;试问&#xff0c;网上讲微信小程序开发的&#xff0c…...

随手记录第九话 -- Java框架整合篇

框架莫过于Spring了&#xff0c;那就以它为起点吧。 本文只为整理复习用&#xff0c;详细内容自行翻看以前文章。 1.Spring 有人说是Spring成就Java&#xff0c;其实也不是并无道理。 1.1 Spring之IOC控制反转 以XML注入bean的方式为入口&#xff0c;定位、加载、注册&…...

电影《铃芽之旅》观后感

这周看了电影《铃芽之旅》&#xff0c;整部电影是新海诚的新作。电影讲述的是女主铃芽为了关闭往门&#xff0c;在日本旅行中&#xff0c;遭遇灾难的故事。 &#xff08;1&#xff09;往昔记忆-往昔之物 电影中&#xff0c;有很多的“往门”&#xff0c;换成中国的话说&#xf…...

Web自动化测试(二)(全网最给力自动化教程)

欢迎您来阅读和练手&#xff01;您将会从本章的详细讲解中&#xff0c;获取很大的收获&#xff01;开始学习吧&#xff01; 2.4 CSS定位2.5 SeleniumBuilder辅助定位元素2.6 操作元素&#xff08;键盘和鼠标事件&#xff09; 正文 2.4 CSS定位 前言 大部分人在使用selenium定…...

【C语言经典例题!】逆序字符串

目录 一、题目要求 二、解题步骤 ①递归解法 思路 完整代码 ②循环解法 思路 完整代码 嗨大家好&#xff01; 本篇博客中的这道例题&#xff0c;是我自己在一次考试中写错的一道题 这篇博客包含了这道题的几种解法&#xff0c;以及一些我自己对这道题的看法&#xff…...

21 - 二叉树(三)

文章目录1. 二叉树的镜像2. 判断是不是完全二叉树3. 完全二叉树的节点个数4. 判断是不是平衡二叉树1. 二叉树的镜像 #include <ctime> class Solution {public:TreeNode* Mirror(TreeNode* pRoot) {// write code hereif (pRoot nullptr) return pRoot;//这里记得要记得…...

【A-Star算法】【学习笔记】【附GitHub一个示例代码】

文章目录一、算法简介二、应用场景三、示例代码Reference本文暂学习四方向搜索&#xff0c;一、算法简介 一个比较经典的路径规划的算法 相关路径搜索算法&#xff1a; 广度优先遍历&#xff08;BFC&#xff09;深度优先遍历&#xff08;DFC&#xff09;Di jkstra算法&#…...

纽扣电池澳大利亚认证的更新要求

澳大利亚强制性安全和信息标准草案具体规定了对含有纽扣电池和纽扣电池以 及纽扣电池和纽扣电池本身的消费品的要求&#xff0c; 适用范围 1.本法规适用于: 纽扣锂电池(任何尺寸和类型); 直径为16毫米或以上的纽扣锂电池: 一起提供的纽扣电池(未预先安装在产品中)。 2.但是&…...

零代码零距离,明道云开放日北京站圆满结束

文/麦壁瑜 编辑/李雨珂 2023年3月17日&#xff0c;为期一天的明道云开放日北京站圆满结束。本次开放日迎来超过100名伙伴和客户现场参会&#xff0c;其中不乏安利、通用技术集团、民生银行、迈外迪、DELSK集团、中国人民养老保险、北京汽车等知名企业代表。北京大兴机场、作业…...

第五章Vue路由

文章目录相关理解vue-router的理解对SPA应用的理解路由的理解基本路由几个注意点嵌套路由——多级路由路由query参数命名路由路由的params参数路由的props配置路由跳转的replace方法编程式路由导航缓存路由组件路由组件独有的生命钩子activated和deactivated路由守卫全局路由守…...

Git常用指令

Git是什么&#xff1a; Git是分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称 DVCS&#xff09;&#xff0c;分为两种类型的仓库&#xff1a; 本地仓库和远程仓库 第一步先新建仓库&#xff0c;本地 init ,然后提交分枝 链接仓库&#xf…...

Java每日一练(20230329)

目录 1. 环形链表 II &#x1f31f;&#x1f31f; 2. 基础语句 ※ 3. 最小覆盖子串 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 环形…...

【面试题】JS的一些优雅写法 reduce和map

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 JS的一些优雅写法 reduce 1、可以使用 reduce 方法来实现对象数组中根据某一key值求和 …...

【蓝桥杯真题】包子凑数(裴蜀定理、动态规划、背包问题)

题意 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼&#xff0c;其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。 每当有顾客想买X个包子&#xff0c;卖包子的大叔就会迅速选出若干笼包子来&#xff0c;使得这若干…...

一种免费将PDF转word的方式

pdf转word的需求对我来说很重要&#xff0c;我经常会有PDF转word的方式&#xff0c;但是网上搜索到的方式&#xff0c;要么收费、要么限制pdf大小或者限制转换次数。这里我分享一种免费转换的方式&#xff1a;用Acrobat Pro 来做转换。Adobe Acrobat Pro拥有强大的功能&#xf…...

MyBatis-面试题

文章目录1.什么是MyBatis?2.#{}和${}的区别是什么&#xff1f;3.MyBatis的一级、二级缓存4.MyBatis的优缺点5.当实体类中的属性名和表中的字段名不一样 &#xff0c;怎么办 &#xff1f;6.模糊查询like语句该怎么写?7.Mybatis是如何进行分页的&#xff1f;分页插件的原理是什…...

jQuery一些问题和ajax操作

jQuery语法&#xff1a; 文档就绪事件&#xff1a;文档加载之后运行jQuery代码&#xff0c;相当于jQuery的入口函数。 $(document).ready(function(){// 开始写 jQuery 代码...}); 简写&#xff1a; $(function(){// 开始写 jQuery 代码...}); jQuery选择器&#xff1a; …...

Pytorch构建自己的数据集

1.Pytorch内置的Dataset Pytorch中内置了许多数据集&#xff0c;我们可以从torchvision库中进行导入。比如&#xff0c;我们可以导入Fashion-MNIST数据集 import torch from torch.utils.data import Dataset from torchvision import datasets from torchvision.transforms …...

信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)

文章目录 引言I 纠错1.1 信息纠错的前提:信息冗余1.2 发现抄写错误的方法1.3 计算机的信息校验原理:奇偶校验1.4 有效的纠错编码II 案例2.1 例子1:自身DNA的编码2.2 例子2:海明码引言 预则立,不预则废:不确定性是我们这个世界自然的属性,在解决问题之前,要考虑到世界的不…...

MySQL执行计划(explain)

MySQL执行计划(explain) 1.什么是执行计划 2.如何分析执行计划 执行计划一共有12列,每一列都有着特殊的含义&#xff0c;接下来我们逐一分析 id select语句的查询顺序,包含一组数字&#xff0c;如果数字相同则从上到下&#xff0c;如果数字不同则从大到小。 select_type …...

思必驰回复第二轮审核问询,如何与科大讯飞、阿里巴巴“虎口夺食”?

‍数据智能产业创新服务媒体——聚焦数智 改变商业3月21日&#xff0c;思必驰科技股份有限公司&#xff08;以下简称“思必驰”&#xff09;更新上市申请审核动态&#xff0c;已回复上交所第二轮审核问询函&#xff0c;回复了涵盖关于实际控制人的认定、关于预计持续亏损及关于…...

基于Spring、SpringMVC、MyBatis的汽车租赁系统设计

文章目录 项目介绍主要功能截图:前台首页汽车信息列表汽车租赁留言反馈个人信息管理后台汽车类型管理汽车信息管理租赁信息管理用户管理续租信息管理归还信息管理保险信息管理违章登记管理部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创…...

西双版纳网站建设/百度应用下载安装

计算机网络&#xff08;第一章&#xff09; 互联网 特指Interenet,起源于美国&#xff0c;现已发展称为世界上最大的、覆盖全球的计算机网络 计算机网络&#xff08;简称网络&#xff09; 由若干结点&#xff08;node&#xff09;和连接这些结点的链路&#xff08;link&…...

色一把做最好的网站/seo外链怎么发

2015年加入去哪儿网机票事业部-用户产品部&#xff0c;从事Android客户端和基于ReactNative泛前端上的机票业务研发工作。有复杂业务的ReactNative项目架构设计、Redux/Mobx数据流管理方案设计、性能优化等经验&#xff0c;专注于可快速迭代和扩展的技术方案的研究。 1. 前言 &…...

建一个电商网站多少钱/2020年关键词排名

首先呢&#xff0c;我承认上一次我理解的有误。 1.构造方法的作用&#xff1a;是初始化一个对象&#xff0c;而不是成员变量&#xff0c;它和get和set方法都有给成员变量赋值的功能。 2.下来说一下JVM调用main方法的过程&#xff1a; a.静态变量赋初值&#xff0c;静态的成员方…...

做服务的网站起名/原画培训机构哪里好

发现Mathematica中应用Inverse求逆时出错。转载于:https://www.cnblogs.com/zdwt/p/9289103.html...

广州做网站哪家公司最好/湖南搜索引擎推广平台

导读正在犹豫入坑Linux学习的同学或者已经入坑的同学&#xff0c;经常会问到这样八个问题。今天&#xff0c;这些问题我都会一一解答&#xff0c;希望我的看法能帮助各位同学。常言道“好的开始是成功的一半”&#xff0c;如果你明白了以下八个问题&#xff0c;就能有一个很好的…...

做京挑客的网站/网页入口网站推广

windows10版本参见&#xff08;鸣谢下文作者&#xff09;https://www.cnblogs.com/weiBlog/p/10013531.html docker 安装完&#xff0c;接下来安装k8s 运行下列脚本可以从阿里云镜像服务下载Kubernetes安装所需Docker镜像&#xff0c;您也可以通过修改 images.properties 文件…...