MySQL基础关键_005_DQL(四)

目  录

一、分组函数

1.说明

2.max/min

3.sum/avg/count

 二、分组查询

1.说明

2.实例

(1)查询岗位和平均薪资

(2)查询每个部门编号的不同岗位的最低薪资

 3.having

(1)说明

(2)查询除部门编号为 20,其余部门的平均薪资。

(3)计算每个部门平均薪资,查询平均薪资 2000 以上的部门

4.组内排序

(1)利用 substring_index 截取字串

(2)利用 group_concat 拼接字符串

(3)查询每个职位薪资最高的两个员工

三、单表 DQL 执行次序总结

四、连接查询

1.说明

2.笛卡尔积

3.内连接

(1)等值连接 

(2)非等值连接

(3)自连接

4.外连接

(1)左外连接(左连接)

(2)右外连接 (右连接)

5.全连接

6.多表连接查询


一、分组函数

1.说明

  1. 执行原则:先分组,然后对每一组执行分组函数。若没有 group by 分组语句,整张表数据自成一组;
  2. 分组函数也称多行处理函数,因为有多个输入,一个输出;
  3. 分组函数自动忽略 null
  4. 因为执行次序,from --> where --> group by --> select --> order by。所以分组函数不能用于 where 之后;
  5. 以下分组函数可以组合使用

2.max/min

        查询员工的最高薪资和最低薪资。 

# 最高薪资
select max(salary) from employees;# 最低薪资
select min(salary) from employees;


3.sum/avg/count

  • 查询全体员工的总薪资、平均薪资;
  • 查询总员工数、有津贴的员工数。
# 总薪资
select sum(salary) from employees;# 平均薪资
select avg(salary) from employees;# 总员工数
select count(emp_no) from employees;# 有津贴的员工数
select count(commission) from employees;

  1. count(*) 和 count(1) 都是统计该组中总记录行数,效果一致;
  2. count(字段) 统计的是该字段中不为 null 的总个数。 

 二、分组查询

1.说明

  1. 语法格式:【group by 字段1, 字段2, 字段3……】;
  2. group by 的执行次序是在 where 之后;
  3. 当 select 语句中存在 group by,则 select 后只能有 参加分组的字段分组函数

2.实例

(1)查询岗位和平均薪资

select job_title, avg(salary) from employees group by job_title;


(2)查询每个部门编号的不同岗位的最低薪资

select dept_no, job_title, min(salary) from employees group by dept_no, job_title;


 3.having

(1)说明

  1. having 在 group by 之后,可以对分组之后的数据进行过滤;
  2. 只有存在 group by,才能使用 having
  3. 区别 where 过滤:where 是在分组之前过滤;
  4. 尽量使用 where 过滤,也就是越早过滤越好

(2)查询除部门编号为 20,其余部门的平均薪资。

# having
select dept_no, avg(salary) from employees group by dept_no having dept_no != 20;# where(效率高,尽量使用)
select dept_no, avg(salary) from employees where dept_no != 20 group by dept_no;


(3)计算每个部门平均薪资,查询平均薪资 2000 以上的部门

select dept_no, avg(salary) from employees group by dept_no having avg(salary) > 2000;


4.组内排序

(1)利用 substring_index 截取字串

select substring_index('I Miss You! I Miss You! I Miss You!', '!', 1);
-- 截取到第一次出现“!”的位置


(2)利用 group_concat 拼接字符串

select group_concat('I ', 'Love ', 'You!');


(3)查询每个职位薪资最高的两个员工

select substring_index(group_concat(emp_name, salary order by salary desc), ',', 2) from employees group by job_title; 


三、单表 DQL 执行次序总结

  1. from;
  2. where;
  3. group by;
  4. having;
  5. select;
  6. order by。

四、连接查询

 1.说明

  1. 从一张表中查数据称为单表查询。从两张以上的表查数据称为多表查询、连接查询;
  2. 分类
    1. 语法出现时间
      1. SQL 92(较少使用);
      2. SQL 99。
    2. 连接方式
      1. 内连接:
        1. 等值连接;
        2. 非等值连接;
        3. 自连接。
      2. 外连接:
        1. 左外连接;
        2. 右外连接。
      3. 全连接(MySQL 不支持)。

2.笛卡尔积

  1. 当两张表进行连接查询时,若没有任何条件进行过滤,最终的查询结果是两张表数据条数的乘积,这就是笛卡尔积;
  2.  为了避免笛卡尔积现象的发生,就需要添加条件进行过滤;
  3. 但是,添加条件进行过滤后,匹配的次数并没有减少
  4. 为提高执行效率和语句的可读性,建议为表起别名

3.内连接

        查询两张表中满足条件的记录,即 求两张表的交集

(1)等值连接 

  • 连接时,条件为等量关系;
  • 实例: 查询所有员工所在的部门、职位。
select e.emp_name, e.job_title, d.dept_name from employees e inner join departments d on e.dept_no = d.dept_no;-- inner 可以省略不写
select e.emp_name, e.job_title, d.dept_name from employees e join departments d on e.dept_no = d.dept_no;


(2)非等值连接

  • 连接时,条件是非等量关系;
  • 实例:查询每个员工的姓名、薪资、薪资等级。
select e.emp_name, e.salary, s.grade from employees e join salary_grades s on e.salary between s.min_salary and s.max_salary;


(3)自连接

  • 连接时,一张表看作是两张表,自己和自己连接;
  • 实例: 查询每个员工的姓名、直属领导姓名。
select ee.emp_name as employee_name, er.emp_name as employer_name from employees ee join employees er on ee.manager_id = er.emp_no;


4.外连接

  1. 内连接是满足条件的记录,两张表的交集;
  2. 外连接是除了查询出满足条件的记录,再将其中的一张表的记录全部查询出来,若另一张表没有与之匹配的记录,则自动模拟 null 与之匹配
  3. 任何一个左连接都可以写成右连接,反之亦然

(1)左外连接(左连接)

        查询所有部门信息,并找出每个部门下的员工。

select d.*, e.emp_name from departments d left outer join employees e on d.dept_no = e.dept_no;-- outer 可以省略不写
select d.*, e.emp_name from departments d left join employees e on d.dept_no = e.dept_no;


(2)右外连接 (右连接)

        查询所有员工以及该员工的直属领导。

select ee.emp_name employee_name, er.emp_name employer_name from employees er right join employees ee on ee.manager_id = er.emp_no;


5.全连接

  1. 将两张表数据全部查询出来,没有匹配记录则各自为对方模拟 null 进行匹配;
  2. MySQL 不支持,Oracle 支持。

6.多表连接查询

        查询员工姓名、部门名称、薪资等级。

select e.emp_name, d.dept_name, s.grade from employees e join departments d on e.dept_no = d.dept_no join salary_grades s on e.salary between s.min_salary and s.max_salary;

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

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

相关文章

GAMES202-高质量实时渲染(Assignment 2)

目录 作业介绍环境光贴图预计算传输项的预计算Diffuse unshadowedDiffuse shadowedDiffuse Inter-reflection(bonus) 实时球谐光照计算 GitHub主页:https://github.com/sdpyy1 作业实现:https://github.com/sdpyy1/CppLearn/tree/main/games202 作业介绍 物体在不同…

2025年- H21-Lc129-160. 相交链表(链表)---java版

1.题目描述 2.思路 当pa!pb的时候,执行pa不为空,遍历pa链表。执行pb不为空,遍历pb链表。 3.代码实现 // 单链表节点定义 class ListNode {int val;ListNode next;ListNode(int x){valx;nextnull;}}public class H160 {// 主方法…

win10系统安卓开发环境搭建

一 安装jdk 下载jdk17 ,下载路径:https://download.oracle.com/java/17/archive/jdk-17.0.12_windows-x64_bin.exe 下载完毕后,按照提示一步步完成,然后接着创建环境变量, 在cmd控制台输入java -version 验证: 有上面的输出代表jdk安装并配置成功。 二 安装Android stu…

【算法基础】选择排序算法 - JAVA

一、算法基础 1.1 什么是选择排序 选择排序是一种简单直观的排序算法,它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小&#xf…

LabVIEW异步调用VI介绍

在 LabVIEW 编程环境里,借助结合异步 VI 调用,并使用 “Open VI Reference” 函数上的 “Enable simultaneous calls on reentrant VIs” 选项(0x40),达成了对多个 VI 调用执行效率的优化。以下将从多方面详细介绍该 V…

Leetcode刷题 | Day50_图论02_岛屿问题01_dfs两种方法+bfs一种方法

一、学习任务 99. 岛屿数量_深搜dfs代码随想录99. 岛屿数量_广搜bfs100. 岛屿的最大面积101. 孤岛的总面积 第一类DFS(主函数中处理第一个节点,DFS处理相连节点): 主函数中先将起始节点标记为已访问DFS函数中不处理起始节点&…

深入理解网络安全中的加密技术

1 引言 在当今数字化的世界中,网络安全已经成为个人隐私保护、企业数据安全乃至国家安全的重要组成部分。随着网络攻击的复杂性和频率不断增加,保护敏感信息不被未授权访问变得尤为关键。加密技术作为保障信息安全的核心手段,通过将信息转换为…

旧版本NotionNext图片失效最小改动解决思路

旧版本NotionNext图片失效最小改动解决思路 契机 好久没写博客了,最近在notion写博客的时候发现用notionNext同步到个人网站时,图片无法预览。猜测是notion加了防盗链措施,去notionNext官方github上寻找解决方案,需要升级到4.8.…

深度学习笔记40_中文文本分类-Pytorch实现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 一、我的环境 1.语言环境:Python 3.8 2.编译器:Pycharm 3.深度学习环境: torch1.12.1cu113torchvision…

010302-oss_反向代理_负载均衡-web扩展2-基础入门-网络安全

文章目录 1 OSS1.1 什么是 OSS 存储?1.2 OSS 核心功能1.3 OSS 的优势1.4 典型使用场景1.5 如何接入 OSS?1.6 注意事项1.7 cloudreve实战演示1.7.1 配置cloudreve连接阿里云oss1.7.2 常见错误1.7.3 安全测试影响 2 反向代理2.1 正向代理和反向代理2.2 演示…

【 Node.js】 Node.js安装

下载 下载 | Node.js 中文网https://nodejs.cn/download/ 安装 双击安装包 点击Next 勾选使用许可协议,点击Next 选择安装位置 点击Next 点击Next 点击Install 点击Finish 完成安装 添加环境变量 编辑【系统变量】下的变量【Path】添加Node.js的安装路径--如果…

Python基本语法(自定义函数)

自定义函数 Python语言没有子程序,只有自定义函数,目的是方便我们重复使用相同的一 段程序。将常用的代码块定义为一个函数,以后想实现相同的操作时,只要调用函数名就可以了,而不需要重复输入所有的语句。 函数的定义…

OpenGL-ES 学习(11) ---- EGL

目录 EGL 介绍EGL 类型和初始化EGL初始化方法获取 eglDisplay初始化 EGL选择 Config构造 Surface构造 Context开始绘制 EGL Demo EGL 介绍 OpenGL-ES 是一个操作GPU的图像API标准,它通过驱动向 GPU 发送相关图形指令,控制图形渲染管线状态机的运行状态&…

极简5G专网解决方案

极简5G专网解决方案 利用便携式即插即用私有 5G 网络提升您的智能创新。为您的企业提供无缝、安全且可扩展的 5G 解决方案。 提供极简5G专网解决方案 Mantiswave Network Private Limited 提供全面的 5G 专用网络解决方案,以满足您企业的独特需求。我们创新的“…

html:table表格

表格代码示例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><!-- 标准表格。 --><table border"5"cellspacing&qu…

tkinter 电子时钟 实现时间日期 可实现透明

以下是一个使用Tkinter模块创建一个简单的电子时钟并显示时间和日期的示例代码&#xff1a; import tkinter as tk import time# 创建主窗口 root tk.Tk() root.overrideredirect(True) # 隐藏标题栏 root.attributes(-alpha, 0.7) # 设置透明度# 显示时间的标签 time_labe…

【报错问题】 macOS 的安全策略(Gatekeeper)阻止了未签名的原生模块(bcrypt_lib.node)加载

这个错误是由于 macOS 的安全策略&#xff08;Gatekeeper&#xff09;阻止了未签名的原生模块&#xff08;bcrypt_lib.node&#xff09;加载 导致的。以下是具体解决方案&#xff1a; 1. 临时允许加载未签名模块&#xff08;推荐先尝试&#xff09; 在终端运行以下命令&#x…

AI实现制作logo的网站添加可选颜色模板

1.效果图 LogoPalette.jsx import React, {useState} from react import HeadingDescription from ./HeadingDescription import Lookup from /app/_data/Lookup import Colors from /app/_data/Colors function LogoPalette({onHandleInputChange}) { const [selectOptio…

云原生后端架构的挑战与应对策略

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 随着云计算、容器化以及微服务等技术的快速发展,云原生架构已经成为现代软件开发和运维的主流趋势。企业通过构建云原生后端系统,能够实现灵活的资源管理、快速的应用迭代和高效的系统扩展。然而,尽管云原…

【C++】模板为什么要extern?

模板为什么要extern&#xff1f; 在 C 中&#xff0c;多个编译单元使用同一个模板时&#xff0c;是否可以不使用 extern 取决于模板的实例化方式&#xff08;隐式或显式&#xff09;&#xff0c;以及你对编译时间和二进制体积的容忍度。 1. 隐式实例化&#xff1a;可以不用 ex…