各种查询sql介绍

120f21c6ca7d4b06944a50dcf3c30238.jpg

 

 

1. 关联查询(JOIN)

 

关联查询用于从多个表中检索数据。它基于两个或多个表之间的共同字段(通常是主键和外键)来组合数据。

 

内连接(INNER JOIN):

 

sql

SELECT a.name, b.order_date

FROM customers a

INNER JOIN orders b ON a.customer_id = b.customer_id;

 

这个查询会返回所有在orders表中有对应订单的客户名称和订单日期。

 

左连接(LEFT JOIN):

 

sql

SELECT a.name, b.order_date

FROM customers a

LEFT JOIN orders b ON a.customer_id = b.customer_id;

 

这个查询会返回所有客户的名称,即使他们没有订单。对于没有订单的客户,order_date字段将为NULL。

 

**右连接(RIGHT JOIN)和全连接(FULL JOIN)**也是常见的关联类型,但使用较少。

 

2. 子查询(Subquery)

 

子查询是嵌套在另一个查询中的查询。它们可以用于在WHERE、FROM或SELECT子句中。

 

在WHERE子句中使用子查询:

 

sql

SELECT name

FROM customers

WHERE customer_id IN (SELECT customer_id FROM orders WHERE order_date > '2023-01-01');

 

这个查询会返回在2023年1月1日之后有订单的所有客户的名称。

 

在SELECT子句中使用子查询:

 

sql

SELECT name, (SELECT COUNT(*) FROM orders WHERE orders.customer_id = customers.customer_id) AS order_count

FROM customers;

 

这个查询会返回每个客户的名称和他们的订单数量。

 

3. 聚合查询(Aggregate Queries)

 

聚合查询使用聚合函数(如SUM、AVG、COUNT、MAX、MIN)来计算数据的统计信息。

 

sql

SELECT department, COUNT(*) AS employee_count, AVG(salary) AS average_salary

FROM employees

GROUP BY department;

 

这个查询会返回每个部门的员工数量和平均工资。

 

4. HAVING子句

 

HAVING子句用于过滤聚合查询的结果。它类似于WHERE子句,但用于聚合函数的结果。

 

sql

SELECT department, AVG(salary) AS average_salary

FROM employees

GROUP BY department

HAVING AVG(salary) > 50000;

 

这个查询会返回平均工资超过50000的部门。

 

5. 多表聚合查询

 

有时,你可能需要对多个表进行聚合查询,这通常涉及关联查询和聚合函数的组合。

 

sql

SELECT a.product_id, a.product_name, SUM(b.quantity) AS total_quantity_sold

FROM products a

JOIN sales b ON a.product_id = b.product_id

GROUP BY a.product_id, a.product_name;

 

这个查询会返回每个产品的ID、名称和总销售量。

 

6. 窗口函数(Window Functions)

 

窗口函数允许你在查询的结果集中执行计算,这些计算类似于聚合函数,但它们是针对结果集的每一行进行的,并且保留行的详细信息。

 

sql

SELECT employee_id, salary,

       AVG(salary) OVER (PARTITION BY department_id) AS avg_department_salary,

       RANK() OVER (ORDER BY salary DESC) AS salary_rank

FROM employees;

 

这个查询会返回每个员工的ID、薪水、他们所在部门的平均薪水和在整个公司中的薪水排名。

 

7. 递归查询(Recursive Queries)

 

递归查询用于处理层次结构数据,如组织结构图、分类目录等。在SQL中,这通常通过公用表表达式(CTE)来实现。

 

sql

WITH RECURSIVE EmployeeHierarchy AS (

    SELECT employee_id, name, manager_id

    FROM employees

    WHERE manager_id IS NULL

    UNION ALL

    SELECT e.employee_id, e.name, e.manager_id

    FROM employees e

    INNER JOIN EmployeeHierarchy eh ON e.manager_id = eh.employee_id

)

SELECT * FROM EmployeeHierarchy;

 

这个查询会返回整个公司的员工层次结构,从顶层管理者开始,一直到每个

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git add操作,文件数量太多卡咋办呢,

git add介绍 Git的add命令是用于将文件或目录添加到暂存区(也就是索引库),以便在后续的提交(commit)操作中一并上传到版本库的。具体来说,git add命令有以下几种常见用法: 添加单个文件&#…

【每日一题】24.10.14 - 24.10.20

10.14 直角三角形1. 题目2. 解题思路3. 代码实现(AC_Code) 10.15 回文判定1. 题目2. 解题思路3. 代码实现(AC_Code) 10.16 二次方程1. 题目2. 解题思路3. 代码实现(AC_Code) 10.17 互质1. 题目2. 解题思路3…

基于单片机的多功能鱼缸控制系统设计

本设计以STC12C5A60S2单片机为核心的多功能鱼缸控制系统,该系统可分别利用温度传感器、水位传感器和浑浊度传感器来检测鱼缸内部的水温、液体高度和浑浊程度,并在显示屏上进行显示。若检测结果超出阈值范围,则继电器工作从而控制内部环境。通…

Golang | Leetcode Golang题解之第482题秘钥格式化

题目: 题解: func licenseKeyFormatting(s string, k int) string {ans : []byte{}for i, cnt : len(s)-1, 0; i > 0; i-- {if s[i] ! - {ans append(ans, byte(unicode.ToUpper(rune(s[i]))))cntif cnt%k 0 {ans append(ans, -)}}}if len(ans) &…

汽车电子存储解决方案:IS61WV20488FALL

ISSI在SRAM领域的技术创新体现在采用高性能CMOS工艺制造,提供低功耗设计,以及支持宽温度范围的稳定运行。其产品集成了错误更正代码(ECC),增强了数据完整性和可靠性。ISSI的SRAM优化了数据处理速度,提供多访…

教你不用下载 maven,不用配置环境变量,在 idea 上创建 maven 项目

我的主页:2的n次方_ 1. Maven Maven是⼀个项⽬管理⼯具, 通过 pom.xml ⽂件的配置获取 jar 包,⽽不⽤⼿动去添加 jar 包,这样就大大的提高了开发效率 2. Maven 的核心功能 2.1. 项目构建 创建第一个 Maven 项目 Maven 提供了标准的…

CDC变更数据捕捉技术是什么?和ETL有什么不同?

一、什么是CDC技术? 变更数据捕获(Change Data Capture,简称 CDC)是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理: 1.监测数据源:CDC 工具会持续监测指定的数据源,如数据库表、文件系统…

Qt开发------容器控件(QWidget,QFrame、QMainWindow、QScrollArea)

目录 一、QWidget 二、QFrame 三、QMainWindow 四、QScrollArea(面板滚动) 层次结构如下: QObject└── QPaintDevice└── QWidget├── QMainWindow├── QDialog├── QFrame│ ├── QLabel│ ├── QSplitter│ …

react 中的hooks中的useState

(1). State Hook让函数组件也可以有state状态, 并进行状态数据的读写操作 (2). 语法: const [xxx, setXxx] React.useState(initValue) (3). useState()说明:参数: 第一次初始化指定的值在内部作缓存返回值: 包含2个元素的数组, 第1个为内部当前状态值, 第2个为更新状态值的…

关于SSD1306的OLED的显示的研究

文章目录 函数作用参数解释嵌套函数分析主代码分析逻辑流程总结 难点的解析:生成器的主要逻辑分解:每次生成的元组 (pixel_x, pixel_y, pixel_mask):生成器的整体流程举例总结 反转后的文本绘制竖直布局有问题的旋转180度旋转坐标轴绘制矩形绘…

Chromium form表单post提交过程分析c++

form表单get提交参考之前文章Chromium 前端form表单提交过程分析c-CSDN博客 一、表单post提交测试例子&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head&…

【火山引擎】AIGC图像风格化 | 风格实践 | PYTHON

目录 1 准备工作 2 实践 代码 效果图 1 准备工作 ① 服务开通 确保已开通需要访问的服务。您可前往火山引擎控制台,在左侧菜单中选择或在顶部搜索栏中搜索需要使用的服务,进入服务控制台内完成开通流程。

TWS蓝牙耳机发展史

目录 1&#xff1a;人类历史第一副耳机 2&#xff1a;第一台手持式耳机 3&#xff1a;第一台头戴式耳机 4&#xff1a;第一台动圈式耳机 5&#xff1a;第一台立体声耳机 6&#xff1a;第一台压耳式耳机 7&#xff1a;随身听 8&#xff1a;商用降噪耳机 9&#xff1a;i…

数据结构7——二叉树的顺序结构以及堆的实现

在上篇文章数据结构6——树与二叉树中&#xff0c;我们了解了树和二叉树的概念&#xff0c;接着上篇文章&#xff0c;在本篇文章中我们学习二叉树顺序结构的实现。 目录 1. 二叉树的顺序存储结构 2. 堆的概念及结构 1. 堆的概念 2. 堆的结构 3. 堆的实现 1. 堆节点 2. 交…

《献给阿尔吉侬的花束》

这是看过的错别字最多的一本书&#xff0c;错别字多并不是这本书的缺点&#xff0c;反而是一个亮点。全书以“近步抱告”的形式讲述了想变“聪明”的查理的故事。很治愈&#xff0c;也很虐心。聪明有聪明的代价&#xff0c;看到的感受到的越多&#xff0c;需要强大的内心去承受…

LeetCode 精选 75 回顾

目录 一、数组 / 字符串 1.交替合并字符串 &#xff08;简单&#xff09; 2.字符串的最大公因子 &#xff08;简单&#xff09; 3.拥有最多糖果的孩子&#xff08;简单&#xff09; 4.种花问题&#xff08;简单&#xff09; 5.反转字符串中的元音字母&#xff08;简单&a…

高性能 JSON 处理:为何选择 Fastjson?

一、关于Fastjson 1.1 简介 Fastjson 是由阿里巴巴集团开发的一个高性能的 JSON 处理库&#xff0c;它支持 Java 对象与 JSON 字符串之间的互相转换。Fastjson 自 2011 年发布以来&#xff0c;以其卓越的性能和丰富的功能在 Java 社区中获得了广泛的应用。 Alibaba Fastjson:…

RabbitMQ系列学习笔记(九)--路由模式

文章目录 一、路由模式原理二、多重绑定三、路由模式实战1、消费者代码2、生产者代码3、运行结果分析 本文参考 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、路由模式原理 使用发布订阅模式时&#x…

C++ -string -常见用法5

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【C】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 文章目录 &#x1f4a1;前言&#x1f4a1;非成员函数1.operator1.1函数原型1.2使用1.3注意 2.relational operators3.swap4.operator>>5.operator<<6.operator<…

Javascript算法(滑块窗口、螺旋矩阵)

滑块窗口 JS滑块窗口算法&#xff0c;即滑动窗口算法&#xff08;Sliding Window&#xff09;&#xff0c;在JavaScript中的应用场景主要集中在处理字符串和数组等数据结构中的子串或子数组问题。这种算法通过维护一个窗口&#xff0c;并移动窗口的两个边界&#xff08;左右指…