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

各种查询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;

 

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

 


http://www.kler.cn/news/358013.html

相关文章:

  • 重学SpringBoot3-集成Spring Security(一)
  • 进程间通信——管道
  • ts 中 type 和 interface 的区别
  • 2024CSP-J模拟赛9————S12678
  • Guava防击穿回源-异步防击穿
  • Vue快速嵌入百度地图,避坑提效指南
  • Git 可视化的实现:提升版本控制体验的利器
  • 【安装依赖】npm i
  • 【高等数学】多元微分学 (一)
  • 基于SpringBoot+Vue+uniapp的C语言在线评测系统的详细设计和实现
  • ArkTS 中时间格式化
  • QT中的D指针和Q指针
  • 驱动开发系列22 - 调试 mesa 中的 glDrawArrays 的实现
  • 芯科科技最新第三代无线开发平台全面提升人工智能和无线连接功能!
  • http大数据post与put请求
  • C++高阶:红黑树实现
  • 【Java SE 】继承 与 多态 详解
  • leetcode389:赎金信
  • 效果不错的论文介绍:Im2Flow2Act:-跨领域机器人操控技术
  • 101 - Lecture 9