七天掌握SQL--->第二天:SQL高级查询与数据库设计

SQL高级查询与数据库设计

一级目录

  1. SQL高级查询技巧
    • 1.1 JOIN操作
    • 1.2 GROUP BY与聚合函数
    • 1.3 ORDER BY排序
    • 1.4 子查询
    • 1.5 窗口函数
    • 1.6 递归查询
  2. 数据库设计原则
    • 2.1 实体关系模型(ER图)
    • 2.2 数据库范式理论
  3. 实际案例与代码示例
    • 3.1 JOIN操作案例
    • 3.2 GROUP BY与聚合函数案例
    • 3.3 ORDER BY排序案例
    • 3.4 子查询案例
    • 3.5 窗口函数案例
    • 3.6 递归查询案例
  4. 总结

SQL高级查询技巧

1.1 JOIN操作

JOIN操作是数据库查询中常见的性能瓶颈。尽量减少多表关联操作,尤其是关联大表。可以通过派生表、子查询、索引等方式优化JOIN性能。

SELECT a.*, b.* FROM table1 a JOIN table2 b ON a.id = b.foreign_id;

1.2 GROUP BY与聚合函数

GROUP BY用于将结果集按一列或多列的值进行分组,并对每组数据应用聚合函数进行计算。

SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;

1.3 ORDER BY排序

ORDER BY语句用于根据一个或多个列对结果集进行排序。

SELECT * FROM employees ORDER BY salary DESC;

1.4 子查询

子查询在SQL中有广泛的应用,但使用不当可能导致性能瓶颈。以下是一些子查询优化的技巧。

SELECT * FROM customers WHERE id IN (SELECT customer_id FROM orders);

1.5 窗口函数

窗口函数是SQL中强大且灵活的工具,能够在不改变数据行数的情况下对数据进行计算。

SELECTcustomer_id,order_date,amount,SUM(amount) OVER (ORDER BY order_date) AS cumulative_sum,AVG(amount) OVER (ORDER BY order_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg
FROM orders;

1.6 递归查询

递归查询在处理树状结构和分层数据时非常有用。

WITH RECURSIVE hierarchy AS (SELECT id, name, parent_id, 1 AS levelFROM employeesWHERE parent_id IS NULLUNION ALLSELECT e.id, e.name, e.parent_id, h.level + 1FROM employees eJOIN hierarchy h ON e.parent_id = h.id
)
SELECT * FROM hierarchy;

数据库设计原则

2.1 实体关系模型(ER图)

实体关系模型(ER图)是数据库设计中用于表示实体之间关系的图形化工具。

绘制ER图的原则:

  • 确定实体和属性
  • 确定实体之间的关系
  • 使用图形化工具绘制ER图

2.2 数据库范式理论

数据库范式理论是一系列设计原则,用于减少数据冗余和提高数据完整性。

范式包括:

  • 第一范式(1NF):无重复的域
  • 第二范式(2NF):消除部分依赖
  • 第三范式(3NF):消除传递依赖
  • BCNF:进一步消除依赖

示例: 为了符合3NF,需要创建一个单独的部门表,以消除传递依赖。

CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(100),department_id INT,FOREIGN KEY (department_id) REFERENCES departments(id)
);
CREATE TABLE departments (id INT PRIMARY KEY,name VARCHAR(100)
);

实际案例与代码示例

3.1 JOIN操作案例

SELECT a.*, b.* FROM customers a JOIN orders b ON a.id = b.customer_id;

3.2 GROUP BY与聚合函数案例

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

3.3 ORDER BY排序案例

SELECT * FROM products ORDER BY price ASC;

3.4 子查询案例

SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);

3.5 窗口函数案例

SELECTemployee_id,salary,RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM employees;

3.6 递归查询案例

WITH RECURSIVE employee_paths AS (SELECT id, name, manager_id, CAST(name AS VARCHAR(255)) AS pathFROM employeesWHERE manager_id IS NULLUNION ALLSELECT e.id, e.name, e.manager_id, CONCAT(p.path, ' > ', e.name)FROM employees eJOIN employee_paths p ON e.manager_id = p.id
)
SELECT * FROM employee_paths;

总结

通过本教程的学习,我们掌握了SQL的高级查询技巧,包括JOIN、GROUP BY、ORDER BY、子查询、窗口函数和递归查询等。同时,我们也学习了数据库设计的原则,如实体关系模型(ER图)的绘制和数据库范式理论,包括1NF、2NF、3NF以及BCNF等。这些知识和技能将帮助我们在实际工作中更高效地进行复杂数据查询和数据库设计,提高数据处理的准确性和效率。

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

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

相关文章

Vue.js 插槽 Slots 实际应用 最近重构项目的时候遇到的...

前端开发中 插槽 Slots 是一个重要的概念 我们可以查看一下vue.js的官方文档 https://cn.vuejs.org/guide/components/slots 类似于连接通道一样 可以把核心代码逻辑搬到另外的地方 做一个引用 而原先的地方可能并不能这样书写 对于这个概念我在vue的官方文档里面找到了…

Windows11在WSL中安装QEMU-KVM

Windows11在WSL中安装QEMU-KVM 检查系统信息WSL检测安装所需软件端口转发 检查系统信息 打开设置-系统-系统信息(拉到最下面),我的是 版本 Windows 11 专业版 版本号 24H2 安装日期 ‎2024/‎11/‎13 操作系统版本 26100.2314 体验 Windows …

【东莞石碣】戴尔R740服务器维修raid硬盘问题

1:石碣某塑料工厂下午报修一台戴尔R740服务器硬盘故障,催的还比较着急。 2:工程师经过跟用户确认故障的问题以及故障服务器型号和故障硬盘型号,产品和配件确认好后,公司仓库确认有该款硬盘现货,DELL 12T S…

SpringBoot学习笔记(一)

一、Spring Boot概述 (一)微服务概述 1、微服务 微服务(英语:Microservices)是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式…

SD模型微调之LoRA

​ 🌺系列文章推荐🌺 扩散模型系列文章正在持续的更新,更新节奏如下,先更新SD模型讲解,再更新相关的微调方法文章,敬请期待!!!(本文及其之前的文章均已更新&a…

手机远程控制电脑,让办公更快捷

在数字化办公的浪潮下,远程控制软件已成为连接工作与生活的桥梁。它使得用户能够通过一台设备(主控端)来操作另一台设备(被控端),无论它们是否位于同一局域网内。这种软件广泛应用于远程办公、手机远程控制…

【Three.js基础学习】26. Animated galaxy

前言 shaders实现星系 课程回顾 使用顶点着色器为每个粒子设置动画 a属性 , u制服 ,v变化 像素比:window.devicePixelRatio 自动从渲染器检索像素比 renderer.getPixelRatio() 如何尺寸衰减, 放大缩小视角时,粒子都是同…

基于Springboot + Vue的旧物置换网站管理系统(源码+lw+部署讲解+PPT)

前言 详细视频演示 论文参考 系统介绍 系统概述 核心功能 具体实现截图 1. 首页功能 2. 旧物信息功能 3. 网站公告功能 4. 用户管理功能(管理员端) 5. 置换交易管理功能 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBatis-Plus …

新书速览|循序渐进Spark大数据应用开发

《循序渐进Spark大数据应用开发》 本书内容 《循序渐进Spark大数据应用开发》结合作者一线开发实践,循序渐进地介绍了新版Apache Spark 3.x的开发技术。全书共10章,第1章和第2章主要介绍Spark的基本概念、安装,并演示如何编写最简单的Spark程…

一道算法期末应用题及解答

1.印刷电路板布线区划分成为n m 个方格,确定连接方格a 到方格b 的最短布线方案。 在布线时,只能沿直线或者直角布线,为避免交叉,已经布线的方格做了封锁标记,其他线路不允许穿过被封锁的方格,某…

2024内科学综合类科技核心期刊汇总

在已经公布的中国科技核心期刊目录(2024年版)中,5本内科学综合类期刊入选。常笑医学整理了这5本科技核心期刊的详细参数,以及投稿信息,供大家在论文投稿时参考,有需要的赶紧收藏! 1.《临床内科…

【网络】Socket编程TCP/UDP序列化和反序列化理解应用层(C++实现)Json::Value

主页:醋溜马桶圈-CSDN博客 专栏:计算机网络原理_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.基于Socket的UDP和TCP编程介绍 1.1 基本TCP客户—服务器程序设计基本框架 ​编辑1.2 基本UDP客户—服务器程序设计基本框…

Spring MVC——针对实习面试

目录 Spring MVC什么是Spring MVC?简单介绍下你对Spring MVC的理解?Spring MVC的优点有哪些?Spring MVC的主要组件有哪些?Spring MVC的工作原理或流程是怎样的?Spring MVC常用注解有哪些? Spring MVC 什么是…

硬件工程师之电子元器件—二极管(10)之可变电容和TVS二极管

写在前面 本系列文章主要讲解二极管的相关知识,希望能帮助更多的同学认识和了解二极管。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 二极管 25. 齐纳二极管的动态阻抗 齐纳阻抗是齐纳二极管在传导电流时的等效串联电阻(E…

2024-11-19 树与二叉树

一、树的定义和基本语术 1.基本概念:从根节点出发,依次长出各个分支,各个分支也能长出下级分支。(根节点无前驱,叶无后继)除根节点外,任何一个结点有且仅有一个前驱。 2.树的基本概念&#xff…

【金融风控项目-08】:特征构造

文章目录 1.数据准备1.1 风控建模特征数据1.2 人行征信数据1.3 据之间的内在逻辑 2 样本设计和特征框架2.1 定义观察期样本2.2 数据EDA(Explore Data Analysis)2.3 梳理特征框架 3 特征构造3.1 静态信息和时间截面特征3.2 未来信息问题3.2.1 未来信息案例3.2.2 时间序列特征的未…

docker基础

一 docker整体架构 docker镜像(image) docker hub类似于maven远程仓库地址: https://hub.docker.com/ 该地址用于搜索并下载地址。 镜像下载命令: docker pull imagename 比如:docker pull to…

Qt 元对象系统

Qt 元对象系统 Qt 元对象系统1. 元对象的概念2. 元对象系统的核心组件2.1 QObject2.2 Q_OBJECT 宏2.3 Meta-Object Compiler (MOC) 3. 信号与槽3.1 基本概念信号与槽的本质信号和槽的关键特征 3.2 绑定信号与槽参数解析断开连接 3.3 标准信号与槽查找标准信号与槽使用示例规则与…

Lua如何连接MySQL数据库?

大家好,我是袁庭新。使用Lua语言如何来连接数据库呢?新哥这篇文章给你安排上。 1 LuaSQL概述 LuaSQL是一个轻量级的Lua到数据库管理系统(DBMS)的接口库,由Kepler Project维护,且是开源的。它提供了一个简…

高级指南:全面解析线上服务器CPU占用过高问题及其解决方案

文章目录 拿到CPU占用高的进程ID通过进程ID拿到CPU占用高的线程ID将线程ID转换为十六进制jstack分析线程栈信息 CPU占用过高的时候要先找出到底是哪个进程下的线程占用内存过高了。 我在线上预先写了一个Java程序,Test.java用于本篇文章实验所用。模拟CPU占用过高时…