深入理解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题目时,你可能会接触到一些新的编程语言特性和库函数,从而丰富自己的编程知识。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

景联文科技数据标注:人体关键点标注用途及各点的位置定义

人体关键点标注是一种计算机视觉任务,指通过人工的方式,在指定位置标注上关键点,例如人脸特征点、人体骨骼连接点等,常用来训练面部识别模型以及统计模型。这些关键点可以表示图像的各个方面,例如角、边或特定特征。在…

FPGA | Verilog仿真VHDL文件

当VHDL模块中有Generic块时,应该怎么例化? VHDL模块代码 entity GenericExample isgeneric (DATA_WIDTH : positive : 8; -- 泛型参数:数据宽度ENABLE_FEATURE : boolean : true -- 泛型参数:是否启用特定功能);Port ( clk : …

Kotlin数据结构

数据结构基础 什么是数据结构 在计算机科学中,数据结构(Data Structure)是计算机中存储、组织数据的方式。数据结构是各种编程语言的基础。 一些使用场景 不同的数据结构适用于不同的应用场景。比如HashMap与ConcurrentHashMap&#xff0…

FFT代码上的实现细节

ω \omega ω 的计算 ω n 1 \omega_n^1 ωn1​ 的计算 考虑单位圆, ω n 1 \omega_n^1 ωn1​ 为: 也就是: 注:op为判断当前为dft还是idft ω n i \omega_n^i ωni​ 的计算 当要计算 ω n i \omega_n^i ωni​ 时&#xf…

微信小程序智慧流调微信小程序设计与实现

摘 要 自从2020年新冠疫情爆发以来,对全国人民的健康和全国各地区的经济发展都带来了很大的影响,并且新冠肺炎对各个领域带来的影响还未完全消除。近三年以来,全国各地区多次爆发新的疫情,导致许多人被隔离,也导致全国…

2023年高教社杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法?2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法? 粒子群算法(Pa…

浅谈 Pytest+HttpRunner 如何展开接口测试!

软件测试有多种多样的方法和技术,可以从不同角度对它们进行分类。其中,根据软件生命周期,针对不同的测试对象与目标,可将测试过程分为 4 个阶段:单元测试、集成测试、系统测试和验收测试。本文着重介绍了如何借用 pyte…

只允许程序单实例运行

有时候,我们只能允许程序单实例运行,以免程序运行出错。可以通过使用App.PrevInstance和系统级的Mutex等多种办法来实现。 代码如下: 用户昵称: 留下些什么 个人简介: 一个会做软件的货代 CSDN网址:https://blog.csdn.net/zezes…

Kafka核心原理第一弹——更新中

架构原理 一、高性能读写架构原理——顺序写零拷贝 首先了解两个专业术语,研究kafka这个东西,你必须得搞清楚这两个概念,吞吐量,延迟。 写数据请求发送给kafka一直到他处理成功,你认为写请求成功,假设是…

OVER(PARTITION BY ***)用法,力扣mysql算法题,每日一题

力扣mysql题 题目:585. 2016年的投资 Insurance 表: Column NameTypepidinttiv_2015floattiv_2016floatlatfloatlonfloat pid 是这张表的主键(具有唯一值的列)。 表中的每一行都包含一条保险信息,其中: pid 是投保人的投保编号。 tiv_201…

女子垒球运动的发展·垒球1号位

女子垒球运动的发展 1. 女子垒球运动的起源和发展概述 女子垒球运动,诞生于19世纪末的美国,作为棒球运动的衍生品,经过百年的积淀,已在全球范围内广泛传播,形成了丰富的赛事文化。她的起源,可以追溯到19世…

微信小程序修改数据,input不能实时回显

场景: 填写发票抬头,填写抬头公司时候,会根据用户输入的内容实时获取相关的公司信息,用户选择搜索出来的公司,这时候 setData,但是数据并没有回显,而是需要再需要点一下屏幕。 解决方案: 原来…

java基础-----第三篇

系列文章目录 文章目录 系列文章目录前言一、final二、String、StringBuffer、StringBuilder前言 一、final 最终的 修饰类:表示类不可被继承 修饰方法:表示方法不可被子类覆盖,但是可以重载 修饰变量:表示变量一旦被赋值就不可以更改它的值。 (1)修饰成员变量 如果fina…

lnmp架构-mysql1

1.MySQL数据库编译 make完之后是这样的 mysql 初始化 所有这种默认不在系统环境中的路径里 就这样加 这样就可以直接调用 不用输入路径调用 2.初始化 重置密码 3.mysql主从复制 配置master 配置slave 当master 端中还没有插入数据时 在server2 上配slave 此时master 还没进…

【混合时变参数系统参数估计算法】使用范数总和正则化和期望最大化的混合时变参数系统参数估计算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

微软 Turing Bletchley v3视觉语言模型更新:必应搜索图片更精准

据微软新闻稿透露,在推出第三代Turing Bletchley视觉语言模型后,微软计划逐步将其整合到Bing等相关产品中,以提供更出色的图像搜索体验。这款模型最初于2021年11月面世,并在2022年秋季开始邀请用户测试。 凭借用户的反馈和建议&am…

vue项目使用svg实现一个物体沿着线条实时运动;svg图像放大缩小;svg中的文字居中显示

效果如上 html部分 <svg width"500px" height"500px" viewBox"0 0 400 400"><!-- 绘制连线 --><template v-for"(point, index) in points"><line :x1"point.x" :y1"point.y" :x2"in…

生物笔记——暑期学习笔记(三)

生物笔记——暑期学习笔记&#xff08;三&#xff09; 文章目录 前言一、R篇1. 数据筛选2. 字符串处理3. 练习 二、生信篇1. blast 基因家族鉴定2. hmm鉴定3. 理化性质与亚细胞定位4. 基因重复类型分析5. 家族成员染色体位置分析6. 基因组共线性分析7. 多序列比对&#xff0c;构…

【seaweedfs】3、f4: Facebook’s Warm BLOB Storage System 分布式对象存储的冷热数据

论文地址 Facebook的照片、视频和其他需要可靠存储和快速访问的二进制大型对象(BLOB)的语料库非常庞大&#xff0c;而且还在继续增长。随着BLOB占用空间的增加&#xff0c;将它们存储在我们传统的存储系统-- Haystack 中变得越来越低效。为了提高我们的存储效率(以Blob的有效复…

node18 vue2启动报错 error:0308010C:digital envelope routines::unsupported

出现原因 貌似是因为是因为 node 17版本开始发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制&#xff0c;可能会对生态系统造成一些影响。 解决方法 第一种方法降低node版本 降低到17以下即可 &#xff0c;如项目不能降低版本 看后面的解决方式 第二…