SQL的高级查询练习知识点中(day25)

news2024/9/20 0:57:24

 1 学习目标

  1. 重点掌握聚合函数的使用
  2. 重点掌握字段别名
  3. 重点掌握分组查询的语法
  4. 重点掌握having的使用方法
  5. 了解子查询的语法
  6. 重点掌握排序查询语法

2 排序查询

2.1 语法

SELECT
	要查询的东西
FROM
	表
WHERE 
	条件
ORDER BY 排序的字段|表达式|函数|别名 [ASC|DESC]
  • ASC 升序(默认)(从小到大) ascend
  • DESC 降序(从大到小) descend

2.2 例子

①员工薪水升序排列

SELECT employee_id, first_name, salary
FROM employees
ORDER BY salary;

②按部门升序,相同部门按工资降序

SELECT employee_id, first_name, salary, department_id
FROM employees
ORDER BY department_id ASC, salary DESC;

2.3 小练习

①50部门的员工,按工资降序排列

SELECT employee_id,first_name,salary,department_id
FROM employees
WHERE department_id = 50 
ORDER BY salary DESC;

②岗位后缀是'CLERK',按主管id排序,相同主管按工资降序

SELECT employee_id,first_name,salary,job_id,manager_id
FROM employees
WHERE job_id LIKE '%CLERK'
ORDER BY manager_id ASC, salary DESC;

3 别名

3.1 表别名

3.1.1 特点

  • 使用 MySQL 查询时,当表名很长或者执行一些特殊查询的时候,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名代替表原来的名称。

  • 在为表取别名时,要保证不能与数据库中的其他表的名称冲突

3.1.2 语法格式

<表名> [AS] <别名>
  • <表名>:数据中存储的数据表的名称
  • <别名>:查询时指定的表的新名称
  • AS:关键字为可选参数

3.1.3 例子

①查询出部门信息

SELECT d.department_id,d.department_name,d.location_id,d.manager_id 
FROM departments AS d;
或者
SELECT d.department_id,d.department_name,d.location_id,d.manager_id 
FROM departments d;

3.2 字段别名

3.2.1 特点

  • 在使用 SELECT 语句显示查询结果时,MySQL 会显示每个 SELECT 后面指定输出的列,在有些情况下,显示的列名称会很长或者名称不够直观,MySQL 可以指定列的别名,替换字段或表达式
  • 在where 中不能使用字段别名
  • order by 可以使用字段别名

3.2.2 语法格式

<列名> [AS] <列别名>
  • <列名>:为表中字段定义的名称。
  • <列别名>:字段新的名称。
  • AS:关键字为可选参数

3.2.3 例子

①计算出每个员工的年薪

SELECT employee_id 员工id,first_name 姓,salary 薪资,salary*12 年薪
FROM employees
WHERE salary*12>=120000
ORDER BY 年薪 DESC;

4 多行函数(聚合函数)

4.1 特点

  • 多行数据,运算产生一行结果

image-20221121132920342

  • 多行函数,不能和其他普通字段一起查询

    • 其他数据库会禁止执行
    • mysql可以执行,只是把第一条数据显示出来
  • 多行函数可以一起查询

  • 多行函数会忽略null值

  • count(a)对指定字段的值计数,重复值会重复计数

  • 可以用distinct去除重复

  • count() 计算行数

  • count(*) 数据量大时(千万),效率低

4.2 例子

①查询全体员工的平均薪资

SELECT AVG(salary) 平均薪资 FROM employees;

​ 注意:但是注意,不能和其他字段一起查询

SELECT AVG(salary),employee_id,first_name FROM employees;

​ mysql可以执行,只是把第一条数据显示出来,容易造成误解

image-20221121133229376

②查询全体员工的薪资总和,平均薪资,最大薪资,最低薪资,人员数量(多行函数可以一起查询)

SELECT SUM(salary) 薪资总和,AVG(salary) 平均薪资,MAX(salary) 最大薪资,MIN(salary) 最低薪资,COUNT(salary) 人员数量 
FROM employees;

③查询commission_pct字段非null值的总数(多行函数会忽略null值)

SELECT COUNT(commission_pct),COUNT(*) 
FROM employees;

④共有多少个工作岗位(可以用distinct去除重复)

SELECT COUNT(DISTINCT job_id) 
FROM employees;

⑤50部分的人数

SELECT COUNT(*) 
FROM employees 
WHERE department_id=50;

5 分组查询

5.1 含义

  • 按指定字段,相同的值,分组计算

5.2 语法

SELECT 查询的字段,分组函数
FROM 表
GROUP BY 分组的字段

5.3 特点

  • 可以按单个字段分组
  • 和分组函数一同查询的字段最好是分组后的字段
  • 可以按多个字段分组,字段之间用逗号隔开
  • 可以支持排序

image-20221121142004103

5.4 例子

①每个部门的人数(分组字段,可以和多行函数一起查询)

SELECT department_id, COUNT(*)
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id;

②每个工作岗位的最高工资

SELECT job_id,MAX(salary)
FROM employees
GROUP BY job_id;

③每个部门中,每个岗位的人数,按人数排序

SELECT department_id,job_id,COUNT(*) c
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id,job_id
ORDER BY c;

6 HAVING

6.1 含义

  • having对分组求出的多行函数结果进行过滤

6.2 where和having

  • where最先执行,只能过滤普通条件
  • having分组计算完多行函数之后,执行过滤
  • having也可以过滤普通条件,但不应该这样做
针对的表位置关键字
分组前筛选原始表group by的前面where
分组后筛选分组后的结果集group by的后面having

6.3 例子

①只有一个人的部门

SELECT department_id, COUNT(*) c
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id
HAVING c=1;

②平均工资大于8000的工作岗位

SELECT job_id,AVG(salary) s
FROM employees
GROUP BY job_id
HAVING s>8000
ORDER BY s DESC;

7 子查询

7.1 含义

  • 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询 在外面的查询语句,称为主查询或外查询,简单理解,就是将一个查询的结果,作为另一个查询的过滤条件

7.2 特点

  • 子查询都放在小括号内
  • 子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
  • 子查询优先于主查询执行,主查询使用了子查询的执行结果
  • 子查询根据查询结果的行数不同分为单行子查询和多行子查询

7.3 单行子查询

7.3.1 特点

  • 结果集只有一行
  • 一般搭配单行操作符使用:> < = <> >= <=
  • 非法使用子查询的情况:
  • 子查询的结果为一组值
  • 子查询的结果为空

7.3.2 例子

①拿最低工资的所有员工

SELECT employee_id,first_name,salary
FROM employees
WHERE salary=(
    SELECT MIN(salary) FROM employees
);

②工资低于平均工资的员工

SELECT employee_id, first_name, salary
FROM employees
WHERE salary<(
    SELECT AVG(salary) FROM employees
)
ORDER BY salary DESC;

7.4 多行子查询

7.4.1 特点

  • 结果集有多行
  • in: 属于子查询结果中的任意一个就行

7.4.2 例子

①只有一个人的部门中的员工

SELECT employee_id,first_name,salary,department_id
FROM employees
WHERE department_id IN(
    SELECT department_id
    FROM employees
    WHERE department_id IS NOT NULL
    GROUP BY department_id
    HAVING COUNT(*)=1
);

②每个部门中,拿最低工资的员工

SELECT employee_id,first_name,department_id,salary
FROM employees
WHERE (department_id,salary) IN(
    SELECT department_id,MIN(salary)
    FROM employees
    WHERE department_id IS NOT NULL
    GROUP BY department_id
)
ORDER BY department_id;

8 总结

  • 什么是分组查询?

    按指定字段,相同的值,分组计算

  • 是什么是子查询?

    一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询

  • 将查询的结果进行排序怎么做?

    SELECT 要查询的东西
    FROM 表
    WHERE 条件
    ORDER BY 排序的字段|表达式|函数|别名 [ASC|DESC]

    上一篇文章:SQL的高级查询练习知识点(day24)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Z0412_J0103/article/details/141713435下一篇文章:SQL的高级查询练习知识点下(day26)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Z0412_J0103/article/details/141806035

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

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

相关文章

Mendix 10.14 版 – 新版本上线及新功能点介绍

Mendix 10.14版本的全部内容都是“连接点”——从简化Studio Pro中的编辑体验到用于连接到其他系统的强大更新。 Studio Pro已针对性能进行了优化&#xff0c;用户现在可以直接在属性窗格中更改样式。现在也可以在系统文本编辑器中使用Maia&#xff08;AI&#xff09;进行翻译…

Java中的类加载与卸载机制详解

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;类加载和类卸载机制是Java运行时环境的重要组成部分。理解类的加载与卸载不仅有助于深入掌握JVM的运行原理&#xff0c;还可以帮助开发者优化程序性能&#xff0c;特别是在内存管理和应用程序生命周期管理中起到关键作用…

通信过程天线的原理

文章目录 电场电场的作用 磁场电磁波电磁波怎么表示0与1 引用文章 电场 电场是电荷及变化磁场周围空间里存在的一种特殊物质。 静止电荷在其周围空间产生的电场&#xff0c;称为静电场&#xff1b; 电场的作用 电荷产生电场&#xff1a;任何电荷周围都存在电场。正电荷产生的…

C语言深入了解指针一(14)

文章目录 前言一、内存和地址内存究竟该如何理解编址 二、指针变量和地址取地址操作符&解引用操作符*指针变量的大小 总结 前言 终于来到指针啦&#xff01;如前篇末尾总结所说&#xff0c;这是你们马上要下大功夫的地方   但是&#xff0c;就像我们上初中的时候&#xf…

Netty权威指南:Netty总结-客户端创建

第十四章 客户端创建 14.1 Netty客户端创建流程分析 BootStrap是socket客户端创建工具类&#xff0c;通过Bootstrap可以方便地创建Netty客户端发起异步TCP连接操作 14.1.1 客户端创建时序图 14.1.2 客户端流程分析 用户线程创建BootStrap实例&#xff0c;通过API设置创建客…

Linux 网络基础概念

文章目录 一、初始协议1、理解2、协议分层3、软件分层4、OSI七层模型5、TCP/IP五层模型 二、再识协议1、为什么要有TCP/IP协议2、什么是TCP/IP协议3、TCP/IP协议与操作系统的关系&#xff08;宏观上&#xff0c;怎么实现的&#xff09; 三、网络传输基本流程1、mac地址2、TCP/I…

Django 模型索引的创建

在 Django 中&#xff0c;索引是优化数据库查询性能的重要工具。Django 提供了多种方式来为模型字段创建索引&#xff0c;比如通过字段选项或直接在模型的 Meta 类中定义。下面详细介绍如何在 Django 中为模型创建索引。 1、问题背景 在 Django 中&#xff0c;当我们需要对模型…

浅谈人工智能之Python调用AutoGen Studio SDK

浅谈人工智能之Python调用AutoGen Studio SDK 引言 在之前的文档中我们讲解了如何搭建AutoGen Studio环境以及基于AutoGen Studio构建AI Agent并且进行执行。 今天我们介绍如何通过Python调用AutoGen Studio提供的SDK来运行workflow,即AI Agent。 实例说明 第一步:我们使…

国产ERT/ECT工业电阻/电容层析成像系统在多相流领域的应用

层析成像技术&#xff0c;是通过射线扫描与反演计算&#xff0c;重建物体内部结构的图像&#xff0c;广泛应用于工业领域。其中&#xff0c;电学成像技术作为层析成像的重要分支&#xff0c;具备无辐射、响应快、成本低等优势。它通过对被测物体施加电学激励并检测边界测量值变…

计算机专业选题推荐-基于uniapp的共享电子图书管理微信小程序

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于uniapp的共享电子图书管…

linux驱动学习笔记(linux驱动头文件说明) include asm等目录下头文件功能_在linux中文件中的include表示什么

#include<linux/device.h>//包含了device、class 等结构的定义 #include <linux/io.h>//包含了ioremap、iowrite等内核访问IO内存等函数的定义。 #include<linux/miscdevice.h>//包含了miscdevice结构的定义及相关的操作函数。 #include<linux/interru…

NLTK:一个强大的自然语言处理处理Python库

我是东哥&#xff0c;一名热爱技术的自媒体创作者。今天&#xff0c;我将为大家介绍一个非常有趣且强大的Python库——NLTK。无论你是刚刚接触Python的小白&#xff0c;还是对自然语言处理&#xff08;NLP&#xff09;有些许了解的朋友&#xff0c;NLTK都是一个值得学习的工具。…

web项目如何部署到服务器上并运行呢?——使用Tomcat插件

三、使用Tomcat插件 这种方式是在web项目种集成tomcat&#xff0c;所以不用部署web项目了&#xff0c;只需要直接启动服务器就可以了。 1、集成tomcat插件 &#xff08;1&#xff09;在pom.xml文件中添加tomcat插件&#xff1a; <build><plugins><!--Tomcat…

2024 全新智能识别 API 接口震撼登场

近年来&#xff0c;随着人工智能技术的快速发展&#xff0c;智能识别技术逐渐成为了各个领域的热门应用。在这个大背景下&#xff0c;2024 年的全新智能识别 API 接口横空出世&#xff0c;为我们的生活带来了更多的便利。本文将为大家详细介绍这个全新智能识别 API 接口&#x…

Linux之Shell命令

Shell 是一个 C 语言编写的脚本语言&#xff0c;它是用户与 Linux 的桥梁&#xff0c;用户输入命令交给 Shell 处理&#xff0c;Shell 将相应的操作传递给内核&#xff08;Kernel&#xff09;&#xff0c;内核把处理的结果输出给用户。 程序执行方式&#xff1a;编译、解释 Sh…

vue国际化vue-i18n搭配i18n-ally实现多语言国际化

i18n-ally 是一款 VS Code 插件&#xff0c;为开发者提供了一套强大而简便的工具&#xff0c;以轻松实现国际化&#xff08;i18n&#xff09;。本文将介绍如何使用 i18n-ally 插件&#xff0c;实现应用程序的多语言支持。 一:安装vscode插件。 首先&#xff0c;在 Visual Stu…

JVM 体系与结构

目录 一次编译导出运行 JVM不只是虚拟机, 更是一个平台 虚拟机? Java虚拟机? JVM在计算机系统中所处的位置 JVM的体系结构 Java代码的执行流程 JVM生命周期 一次编译导出运行 在以前, java是编程语言里面的巨头: 在tiobe里面的排名如下: 但是随着大数据以及人工…

【南京工业大学主办,JPCS出版】自动化、电气控制系统与设备

&#x1f308;2024年自动化、电气控制系统与设备国际学术会议&#xff08;AECSE 2024&#xff09;是致力于将“自动化与电气”领域的专家学者、研发者和技术人员汇集一堂的国际盛会。会议将于2024年10月18-20日在中国南京举行。 &#x1f308;会议的主旨是为相关领域的从业者及…

算法练习题19——leetcode141环形链表

题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

利用R语言进行头条主页内容的自动化下载

对于互联网内容的自动化抓取&#xff0c;R语言提供了强大的工具和库来帮助我们实现这一目标。本文将介绍如何使用R语言进行头条主页内容的自动化下载&#xff0c;包括必要的库安装、代理服务器的配置、HTTP请求的发送、内容的解析和保存。 R语言简介 R语言是一种用于统计计算…