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

深入理解sql:进阶版

目录

  • 背景
  • 举例
    • 子查询和嵌套查询:
    • 联合查询(UNION和UNION ALL):
    • 窗口函数:
    • CTE(公共表达式):
    • 索引优化:
    • 事务隔离级别和锁定:
    • 性能优化:
    • 存储过程和函数:
    • 触发器:
    • 动态SQL:
    • 数据库安全性:
    • 详细说说多表联查
      • 内连接(INNER JOIN):
    • 左连接(LEFT JOIN):
    • 右连接(RIGHT JOIN):
    • 全外连接(FULL OUTER JOIN):
    • 交叉连接(CROSS JOIN):
  • 总结

背景

进阶版sql,让我们写的sql效率更高。

举例

子查询和嵌套查询:

示例:查询具有最高工资的员工姓名。

SELECT first_name, last_name
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

联合查询(UNION和UNION ALL):

示例:从两个表中检索不同地区的客户姓名。

SELECT customer_name FROM customers_A
UNION
SELECT customer_name FROM customers_B;

窗口函数:

示例:为每个部门计算工资排名。

SELECT department_id, first_name, last_name, salary,RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS salary_rank
FROM employees;

CTE(公共表达式):

示例:使用CTE找出订单数量最多的客户。

WITH OrderCounts AS (SELECT customer_id, COUNT(*) AS order_countFROM ordersGROUP BY customer_id
)
SELECT customers.customer_name, OrderCounts.order_count
FROM customers
JOIN OrderCounts ON customers.customer_id = OrderCounts.customer_id
ORDER BY OrderCounts.order_count DESC;

索引优化:

示例:为产品表的名称列创建索引。

CREATE INDEX idx_product_name ON products (product_name);

事务隔离级别和锁定:

示例:设置事务隔离级别为REPEATABLE READ。

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
-- Your SQL statements here
COMMIT;

性能优化:

示例:分析查询执行计划以查找潜在的性能问题。

性能优化:示例:分析查询执行计划以查找潜在的性能问题。

存储过程和函数:

示例:创建一个简单的存储过程,计算两个数的和。

DELIMITER //
CREATE PROCEDURE CalculateSum(IN num1 INT, IN num2 INT, OUT result INT)
BEGINSET result = num1 + num2;
END //
DELIMITER ;-- 调用存储过程
CALL CalculateSum(10, 20, );
SELECT ;

触发器:

示例:创建一个触发器,在插入新订单时更新客户的最近订单日期。

DELIMITER //
CREATE TRIGGER UpdateLastOrderDate
AFTER INSERT ON orders
FOR EACH ROW
BEGINUPDATE customersSET last_order_date = NEW.order_dateWHERE customer_id = NEW.customer_id;
END //
DELIMITER ;-- 插入新订单时,触发器会自动更新相应的客户最近订单日期
INSERT INTO orders (customer_id, order_date) VALUES (1, '2023-08-30');

动态SQL:

示例:根据用户提供的条件生成动态查询。

SET  = 'price > 100';SET  = CONCAT('SELECT * FROM products WHERE ', );
PREPARE dynamic_query FROM ;
EXECUTE dynamic_query;
DEALLOCATE PREPARE dynamic_query;

数据库安全性:

示例:创建一个只读用户,限制其对员工表的访问权限。

CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT ON database_name.employees TO 'readonly_user'@'localhost';

详细说说多表联查

内连接(INNER JOIN):

内连接返回两个表中匹配行的交集。只有在连接条件成立时,才会返回数据。

示例:查找每个部门的员工和部门名称。

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;

左连接(LEFT JOIN):

左连接返回左表中的所有行,以及与右表匹配的行。如果没有匹配,右表的结果列将为 NULL。

示例:查找每个客户以及他们的订单数量。

SELECT customers.customer_name, COUNT(orders.order_id) AS order_count
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY customers.customer_name;

右连接(RIGHT JOIN):

右连接类似于左连接,但是返回右表中的所有行。如果没有匹配,左表的结果列将为 NULL。

示例:查找每个订单以及订单对应的客户名称。

SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id;

全外连接(FULL OUTER JOIN):

全外连接返回左表和右表中的所有行,并将它们组合在一起。如果没有匹配,对应的结果列将为 NULL。

示例:查找每个订单以及与之相关的客户名称。

SELECT orders.order_id, customers.customer_name
FROM orders
FULL OUTER JOIN customers ON orders.customer_id = customers.customer_id;

交叉连接(CROSS JOIN):

交叉连接返回两个表的笛卡尔积,即左表的每一行与右表的每一行都组合在一起。

示例:从两个表中获取所有可能的组合。

SELECT * FROM table1
CROSS JOIN table2;

总结

做LeetCode题目有许多好处,特别是对于准备面试、提升编程技能和深化计算机科学知识的人来说。以下是一些可能的好处:

算法与数据结构掌握:LeetCode题库涵盖了各种经典的算法和数据结构问题,通过解决这些问题,你可以加深对各种常见算法和数据结构的理解和掌握。

编程技能提升:LeetCode的题目要求你在一定的时间内用有效的代码解决问题,这可以帮助你提高编写高效、优雅代码的能力,培养解决问题的思维方式。

面试准备:LeetCode上的题目往往涵盖了面试中常见的问题类型,通过刷题可以帮助你更好地准备技术面试,提高通过面试的机会。

思维训练:解决LeetCode题目需要逻辑清晰、抽象思维和创造性的问题解决能力。这些技能可以帮助你在现实生活中更好地分析和解决各种问题。

代码调试与优化:通过LeetCode的练习,你将学会调试代码和优化性能的技巧,这在实际开发中也是非常重要的。

积累解题经验:随着解决不同类型的问题,你将建立起丰富的解题经验,这些经验可以在类似问题出现时帮助你更快地找到解决方案。

学习新的编程语言特性:在解决LeetCode题目时,你可能会接触到一些新的编程语言特性和库函数,从而丰富自己的编程知识。

自信心提升:通过不断地解决难题,你会逐渐积累自信,相信自己可以解决复杂的编程问题。

相关文章:

深入理解sql:进阶版

目录 背景举例子查询和嵌套查询:联合查询(UNION和UNION ALL):窗口函数:CTE(公共表达式):索引优化:事务隔离级别和锁定:性能优化:存储过程和函数&a…...

day31 | 455.分发饼干、376. 摆动序列、53. 最大子序和

目录: 解题及思路学习 455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸&#…...

C# textBox 右键菜单 contextMenuStrip

需求: 想在上图空白处可以右键弹出菜单,该怎么做呢? 1.首先,拖出一个 ContextMenuStrip。 随便放哪里都行,如下: 2.在textBox里关联这个“右键控件”即可,如下: 最终效果如下: 以上…...

TCP拥塞控制详解 | 7. 超越TCP

网络传输问题本质上是对网络资源的共享和复用问题,因此拥塞控制是网络工程领域的核心问题之一,并且随着互联网和数据中心流量的爆炸式增长,相关算法和机制出现了很多创新,本系列是免费电子书《TCP Congestion Control: A Systems …...

stm32之26.spi外设

...

C++信息学奥赛1177:奇数单增序列

#include<bits/stdc.h> using namespace std; int main(){int n;cin>>n; // 输入整数 n&#xff0c;表示数组的大小int arr[n]; // 创建大小为 n 的整型数组for(int i0;i<n;i) cin>>arr[i]; // 输入数组元素for(int i0;i<n;i){ // 对数组进行冒泡排序f…...

Java的数组是啥?

1.数组是啥&#xff1f; 数组是一块连续的内存&#xff0c;用来存储相同类型的数据 &#xff08;1&#xff09;如何定义数组&#xff1f; 1.int[] array {1,2,3,4} new int[]{1,2,3,4};//这里的new是一个关键字&#xff0c;用来创建对象 2.数组就是一个对象 动态初始化 …...

我的私人笔记(安装hadoop)

1.安装hadoop01环境 注需安装最小安装和使用英文界面 2.安装群集 // 获得网关IP&#xff1a;192.168.80.2 获得子网掩码&#xff1a;255.255.255.0 // 获得网段&#xff1a;[起始IP地址]192.168.128 --- [结束IP地址]192.168.80.254 // 计划集群的ip和主机名 //192.168.80.…...

【板栗糖GIS】——360浏览器的下载图标隐藏在内部不方便,怎么修改

目录 1. 设置前的本来样子 2. 登录360的皮肤中心 3. 使用se13的经典皮肤 最近edge浏览器最近使用bilibili和notion都非常卡&#xff0c;时不时崩溃&#xff0c;不得不换浏览器使用&#xff0c;试来试去360浏览器最得我心&#xff0c;只不过广告太多&#xff0c;调教也是花了…...

SpringMVC之文件上传和下载

文章目录 前言一、文件下载二、文件上传总结 前言 实现下载文件和上传文件的功能。 一、文件下载 使用ResponseEntity实现下载文件的功能 RequestMapping("/testDown") public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOEx…...

简单了解OSI网络模型

目录 一、协议是什么&#xff1f; 二、OSI七层模型 三、TCP/IP五层模型 一、协议是什么&#xff1f; 协议顾名思义就是通过大家伙一起协商讨论达成的统一规则和标准。网络协议就是规定用户数据信息如何在网络上传播以及实现某种网络技术所要遵循的统一标准和规则。 二、OSI…...

服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践

作者&#xff1a;王夕宁、 刘强、 华相 公司介绍 丽迅物流是百丽旗下专注于时尚产业、为企业提供专业物流及供应链解决方案的服务商。其产品服务主要包括城市落地配、仓配一体、干线运输及定制化解决方案。通过自研智能化物流管理平台&#xff0c;全面助力企业合作集约化发展…...

bpmnjs Properties-panel拓展(属性设置篇)

最近有思考工作流相关的事情&#xff0c;绘制bpmn图的工具认可度比较高的就是bpmn.js了&#xff0c;是一个基于node.js的流程图绘制框架。初始的框架只实现了基本的可视化&#xff0c;想在xml进行客制化操作的话需要拓展&#xff0c;简单记录下几个需求的实现过程。 修改基础 …...

Debian系统上通过NFS挂载远程服务器硬盘

步骤 1&#xff1a;配置远程服务器 在拥有硬盘内容的远程服务器上&#xff0c;进行以下配置&#xff1a; 安装NFS服务器软件&#xff1a; sudo apt-get update sudo apt-get install nfs-kernel-server编辑NFS服务器配置文件 /etc/exports&#xff0c;添加需要共享的目录及其权…...

【Linux】以太网协议以及MTU

以太网协议 数据链路层的功能以太网的数据格式MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对TCP协议的影响 数据链路层的功能 数据链路层的主要功能是&#xff1a;控制链路。包括数据链路的建立、链路的维护和释放。MAC寻址也是它的功能&#xff0c;寻址是指计算机网卡的MAC地…...

UE5打完包后,启动程序不能全屏

最近看到ue5的打包程序后不能默认自动全屏&#xff0c;效果如下&#xff0c;发现并不是全屏的&#xff0c;而且就算点击放大也不是全屏 解决办法&#xff1a;设置如下之后在打包就可以了 但是会一直打印错误的日志&#xff0c;不过这个不影响使用...

财务部发布《企业数据资源相关会计处理暂行规定》

导读 财务部为规范企业数据资源相关会计处理&#xff0c;强化相关会计信息披露&#xff0c;根据《中华人民共和国会计法》和相关企业会计准则&#xff0c;制定了《企业数据资源相关会计处理暂行规定》。 加gzh“大数据食铁兽”&#xff0c;回复“20230828”获取材料完整版 来…...

引用(个人学习笔记黑马学习)

1、引用的基本语法 #include <iostream> using namespace std;int main() {int a 10;//创建引用int& b a;cout << "a " << a << endl;cout << "b " << b << endl;b 100;cout << "a "…...

卷积神经网络实现运动鞋识别 - P5

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;Pytorch实战 | 第P5周&#xff1a;运动鞋识别&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 目录…...

C#安装“Windows 窗体应用(.NET Framework)”

目录 背景: 第一步: 第二步: 第三步&#xff1a; 总结: 背景: 如下图所示:在Visual Studio Installer创建新项目的时候&#xff0c;想要添加windows窗体应用程序&#xff0c;发现里面并没有找到Windows窗体应用(.NET Framework)模板&#xff0c;快捷搜索也没有发现&#…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...