常用SQL查询方法与实例

目录

SELECT查询

INSERT查询

UPDATE查询

DELETE查询

JOIN查询

GROUP BY查询

HAVING查询

窗口函数

公共表表达式(CTEs)

递归查询

透视表

分析函数

解透视

条件聚合

日期函数

合并语句

 情况语句


常用SQL查询方法有以下几种:

  1. SELECT:用于从数据库表中检索数据。
  2. WHERE:用于过滤结果集,只返回满足指定条件的记录。
  3. ORDER BY:用于对结果集进行排序。
  4. GROUP BY:用于将结果集按照一个或多个列进行分组。
  5. HAVING:用于过滤分组后的结果集,只返回满足指定条件的分组。
  6. JOIN:用于连接两个或多个表,根据指定的条件返回匹配的记录。
  7. UNION:用于合并两个或多个SELECT语句的结果集。
  8. LIMIT:用于限制返回的结果集数量。
  9. OFFSET:用于指定返回结果集的起始位置。

SELECT查询

用于从数据表中选择数据。

SELECT first_name, last_name  
FROM employees  
WHERE department = 'HR';

INSERT查询

用于向数据表中插入新数据。

INSERT INTO customers (first_name, last_name, email)  
VALUES ('John', 'Doe', 'john.doe@example.com');

UPDATE查询

用于更新数据表中的数据。

UPDATE employees  
SET salary = 5000  
WHERE employee_id = 1;

DELETE查询

用于从数据表中删除数据。

DELETE FROM orders  
WHERE order_id = 1001;

JOIN查询

用于从多个表中检索相关数据。

SELECT customers.first_name, orders.order_date  
FROM customers  
JOIN orders ON customers.customer_id = orders.customer_id  
WHERE order_date >= '2023-01-01';

GROUP BY查询

用于根据一个或多个列对结果集进行分组。

SELECT department, COUNT(*) as number_of_employees  
FROM employees  
GROUP BY department;

HAVING查询

用于对GROUP BY子句的结果进行过滤。

SELECT department, AVG(salary) as average_salary  
FROM employees  
GROUP BY department  
HAVING average_salary > 5000;

选择所有列

SELECT * FROM students;
这将从students表中选择所有记录的所有列。

选择特定列并重命名

SELECT name AS 姓名, age FROM students;
此查询仅选择name和age列,并将name列在结果集中重命名为姓名。

条件查询(等于)

SELECT * FROM students WHERE age = 20;
查询年龄为20岁的学生的所有信息。

条件查询(范围)

SELECT * FROM students WHERE age BETWEEN 20 AND 30;
查询年龄在20到30岁之间的所有学生信息。

模糊查询(LIKE关键字)

SELECT * FROM students WHERE name LIKE '李%';
查找所有名字以“李”开头的学生信息。

使用IN关键字限定多个值

SELECT * FROM students WHERE native IN ('湖南', '四川');
查找来自湖南或四川的学生的所有信息。

连接查询

SELECT s.id, s.name, c.course_name 
FROM students AS s 
LEFT JOIN courses AS c ON s.course_id = c.id;
连接students和courses表,显示每个学生的ID、姓名及其选修的课程名称。

空值判断

SELECT * FROM students WHERE gender IS NULL;
查找gender字段为空的所有学生记录。

排序查询

SELECT name, age FROM students ORDER BY age DESC;
查询所有学生的名字和年龄,并按年龄降序排列。

分组与聚合查询

SELECT gender, COUNT(*) as total_students 
FROM students 
GROUP BY gender;

窗口函数

窗口函数是指在SQL查询中对一组相关行进行聚合或运算操作的函数。窗口函数可以在不改变基本表的情况下,为查询结果添加额外的计算列。举个例子,使用SUM()函数与OVER()子句计算销售额的运行总和。

SELECT date, sales,
       SUM(sales) OVER (ORDER BY date) AS running_total
FROM sales_data;

公共表表达式(CTEs)

CTE(Common Table Expressions,公共表表达式)是一种在SQL查询中创建临时结果集的方法,可以被多次引用,提高查询的可读性和可维护性。以下是如何使用CTE计算每个产品类别的总收入的示例。

WITH category_revenue AS (
    SELECT category, SUM(revenue) AS total_revenue
    FROM sales
    GROUP BY category
)
SELECT * FROM category_revenue;

递归查询

递归查询能够帮助分析师遍历层次化数据结构,如组织图或物料清单。假设这里有一个表示员工关系的表,想查找某个经理的所有下属:

WITH RECURSIVE subordinates AS (
    SELECT employee_id, name, manager_id
    FROM employees
    WHERE manager_id = 'manager_id_of_interest'
    UNION ALL
    SELECT e.employee_id, e.name, e.manager_id
    FROM employees e
    JOIN subordinates s ON e.manager_id = s.employee_id
)
SELECT * FROM subordinates;

透视表

透视表将行转换为列,以表格形式汇总数据。比如,有一个包含销售数据的表格,想通过数据透视来显示每个产品在不同月份的总销售额:

SELECT *
FROM (
    SELECT product, month, sales
    FROM sales_data
) AS source_table
PIVOT (
    SUM(sales)
    FOR month IN ('Jan', 'Feb', 'Mar', 'Apr', 'May')
) AS pivot_table;

分析函数

分析函数根据一组记录计算汇总值。例如,可以使用 ROW_NUMBER() 函数为数据集中的每条记录分配唯一的行号。

SELECT customer_id, order_id,
       ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS order_rank
FROM orders;

解透视

解透视是透视操作的反向操作,解透视是将一张表中的列转换为行,而透视是将行转换为列。比如,这里有一个按月汇总销售数据的表格,想取消透视以分析随时间变化的趋势。

SELECT product, month, sales
FROM (
    SELECT 'Jan' AS month, product, sales_jan AS sales FROM sales_data
    UNION ALL
    SELECT 'Feb' AS month, product, sales_feb AS sales FROM sales_data
    UNION ALL
    SELECT 'Mar' AS month, product, sales_mar AS sales FROM sales_data
) AS unpivoted_sales;

条件聚合

条件聚合是指根据指定条件应用条件聚合函数。例如,如果想计算老客户订单的平均销售额:

SELECT customer_id, 
       AVG(CASE WHEN order_count > 1 THEN order_total ELSE NULL END) AS avg_sales_repeat_customers
FROM (
    SELECT customer_id, COUNT(*) AS order_count, SUM(order_total) AS order_total
    FROM orders
    GROUP BY customer_id
) AS customer_orders;

日期函数

SQL中的日期函数支持操纵和提取与日期相关的信息。例如,可以使用DATE_TRUNC()函数按月对销售数据进行分组。

SELECT DATE_TRUNC('month', order_date) AS month, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY DATE_TRUNC('month', order_date);

合并语句

合并语句(也称为 UPSERT 或 ON DUPLICATE KEY UPDATE)可让分析师根据与源表的连接结果在目标表中插入、更新或删除记录。比如,要同步两个包含客户数据的表。

MERGE INTO target_table AS t
USING source_table AS s
ON t.customer_id = s.customer_id
WHEN MATCHED THEN
    UPDATE SET t.name = s.name, t.email = s.email
WHEN NOT MATCHED THEN
    INSERT (customer_id, name, email) VALUES (s.customer_id, s.name, s.email);

 情况语句

情况语句支持在SQL查询中应用条件逻辑。例如,使用情况语句根据客户的总购买金额对其进行分类。

SELECT customer_id,
       CASE
           WHEN total_purchase_amount >= 1000 THEN 'Platinum'
           WHEN total_purchase_amount >= 500 THEN 'Gold'
           ELSE 'Silver'
       END AS customer_category
FROM (
    SELECT customer_id, SUM(order_total) AS total_purchase_amount
    FROM orders
    GROUP BY customer_id
) AS customer_purchases;

其他代码:

JOIN:查询员工及其所属部门的信息
SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.id;

UNION:查询男性员工和女性员工的信息
SELECT name, gender FROM employees WHERE gender = 'M' UNION SELECT name, gender FROM employees WHERE gender = 'F';

LIMIT:查询年龄最大的前5名员工信息
SELECT * FROM employees ORDER BY age DESC LIMIT 5;

OFFSET:查询第6到第10名员工的信息
SELECT * FROM employees LIMIT 5 OFFSET 5;

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

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

相关文章

OWASP Top 10 网络安全10大漏洞——A02:A02:2021-加密机制失效

10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化,以及一些合并。 A02:A02:2021-加密机制失效 上升一个位置,当前top2,以前称为敏感数据泄露,是一种状况而不是根本原因。更新后的类别…

算法学习03:前缀和与差分(互逆)

算法学习03:前缀和与差分(互逆) 文章目录 算法学习03:前缀和与差分(互逆)前言一、前缀和1.一维2.二维 二、差分1.一维在这里插入图片描述2.二维在这里插入图片描述 ![在这里插入图片描述](https://img-blog…

嵌入式驱动学习第一周——阻塞IO,进程的休眠与唤醒

前言 本文介绍进程的休眠与唤醒。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏,一起讨论一起学习。现在关注就是老粉啦! 行文目录 前言1. 阻塞和非阻…

【TEE】内存完整性保护

Hash Functions&Merkle Tree 对读操作进行完整性检查,通过在加载的块上重新计算一个哈希,然后根据片外地址将得到的哈希与片上哈希比较。 缺点:不可承受的片上存储开销,并假设128位哈希和512位cache line,其开销为…

基于springboot+vue的实习管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

8个优秀的CSS实践,开发web应用

HTML面试题部分 1.H5的新特性有哪些 2.Label的作用是什么?是怎么用的? 3.HTML5的form如何关闭自动完成功能 4.dom如何实现浏览器内多个标签页之间的通信? 5.实现不使用 border 画出1px高的线,在不同浏览器的标准模式与怪异模式下都 能保持一…

Qt/自定义控件的封装

新建文件,选择Qt设计师界面类 创建空界面 这是自己控件封装的文件,双击跳转到设计界面进行设计 跳转到其他的ui界面,创建一个widget 右键,选择提升为 在提升的类名称输入刚刚创建的类名,添加后选择提升,勾选…

FairTune:优化参数高效微调以实现医学图像分析的公平性

paper:https://arxiv.org/abs/2310.05055 code: https://github.com/Raman1121/FairTune 摘要和介绍 人工智能在医疗健康应用中的应用正在迅速增长。然而,人工智能模型一再被证明对不同的人口统计学亚群体表现出不必要的偏见——AI模型在由…

【暗月安全】2021年渗透测试全套培训视频

参与培训需要遵守国家法律法规,相关知识只做技术研究,请勿用于违法用途,造成任何后果自负与本人无关。 中华人民共和国网络安全法(2017 年 6 月 1 日起施行) 第二十二条 任何个人和组织不得从事入侵他人网络、干扰他…

数据结构之七大排序

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

Kubernetes Service

一、Service:Kubernetes 中的服务返现与负载均衡 1、为什么需要服务发现 Pod 生命周期短暂,IP 地址随时变化。 Deployment 等的 Pod 组需要统一访问入口和做负载均衡。 应用间在不同环境部署时保持同样的部署拓扑和访问方式。 2、应用服务如何暴露到…

停止Tomcat服务的方式

运行脚本文件停止 运行Tomcat的bin目录中提供的停止服务的脚本文件 关闭命令 # sh方式 sh shutdown.sh# ./方式 ./shutdown.sh操作步骤 运行结束进程停止 查看Tomcat进程,获得进程id kill进程命令 # 执行命令结束进程 kill -9 65358 操作步骤 注意 kill命令是…

简单的排序算法

目录 1.直接插入排序 2.希尔排序 3.选择排序 4.冒泡排序 5.计数排序 6.排序总结 1.直接插入排序 (1)思想 所谓插入排序,就是将待排序数据插入到已经有序的数据中,为了使插入后数据依然有序,就要选中一个合理的…

android开发网络通信,带你彻底搞懂Android启动速度优化

实现方案 直接依赖 这种方式实现简单,但是耦合太严重,不方便维护与开发,当工程逐渐增大模块逐渐增多,依赖关系会非常复杂,不推荐这种方式。 事件或广播通信 EventBus: 我们非常熟悉的事件总线型的通信框…

JavaScript的`bind`方法:函数的“复制”与“定制”

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

jquery选择器有哪些

jQuery是一个功能强大的JavaScript库,它提供了丰富的选择器来帮助开发者更方便地选择和操作DOM元素。以下是jQuery的一些常用选择器及其示例代码: 1.基本选择器: // 通过ID选择元素 $("#myId").css("color", "red…

【论文阅读 VLDB22】On-Demand State Separation for Cloud Data Warehousing

On-Demand State Separation for Cloud Data Warehousing 问题背景 首先是问题背景,目前除了大规模PB级别的AP会使用云数据库,越来越多的百G大小的中小规模的负载也开始进行上云分析和处理,而这些ap任务不需要消耗整个集群的资源&#xff0…

DHCP自动获取IP地址实验(思科)

华为设备参考:DHCP自动获取IP地址实验(华为) 一,实验目的 路由器搭载DHCP,让PC通过DHCP自动获取IP地址 二,不划分vlan 实验拓扑 配置命令 Switch Switch>enable Switch#configure terminal Switch(c…

C#不可识别的数据库格式解决方法

1.检查数据库文件路径和文件名: 确保指定的路径和文件名拼写正确,而且文件确实存在于指定的位置。使用绝对路径或相对路径都是可行的,但要确保路径的正确性 string connectionString "ProviderMicrosoft.ACE.OLEDB.12.0;Data SourceE:…

go 程序被意外kill后出现僵尸进程解决方案

go 管理自身子进程(防止僵尸进程出现) 写这篇文章是因为最近有同事竟然会知道异步启动子进程,不会关闭,最后导致导致僵尸进程出现,而且由于子进程会随着业务的使用越开越多,主进程一旦被kill掉就会不得不手动一个一个kill。 大概…