数据库-SQL必知必会 笔记(补充...)

SQL必知必会-笔记(完善版):第1课 目前笔记参考内容: 书籍:《SQL必知必会》、《MySQL基础教程》 课程:《数据库系统》MOOC-哈工大-战得臣教师 课程:《MySQL8学习教程》哔哩哔哩 以及一些其他的课程和笔记 公众号:LearningTribe 阅读详情




连接表和创建高级连接

可伸缩性(scale)

能够适应不断增加的工作量而不失败.设计良好的数据库或应用程序可称之为”可伸缩性好”.

笛卡尔积(cartesian product)

       没有连接条件的表关系返回的结果.

       比如: SELECT vend_name,pro_name,pro_name FROM Vendors,Products;

内部连接

       INNER JOIN…ON

SELECT vend_name,pro_name,pro_price

FROM Venders AS V

INNER JOIN Products AS P ON V.vend_id = P.vend_id;

提示:联结的表越多,性能就下降得越厉害.SQL中对联结表的数目没有限制,但DBMS中却有.内部联结也称”等值联结”.

注意:Oracle中起别名不需要”AS”,直接写就行.

自连接

       通常作为外部语句来替代从相同表中检索数据的子查询语句.

自然连接 (SELECT *)

一般连接可能会出现相同的列,尽管这些列分属于不同的表,但其实它们的名称和意义是一样的.

cust_id

order_num

cust_id

pro_id

0128

100123

0128

0013

0129

112850

0129

0041

0330

145896

0330

0029

SELECT C.*,O.order_num,O.order_date,OI.pro_id,OI.quantity,OI.item.price

FROM Customers AS C,Orders AS O,OrderItems AS OI

WHERE C.cust_id = O.cust_id

AND OI.order_num = O.order.num AND pro_id = "RGA001";

事实上,迄今为止,我们用到的”内部联结”都是”自然联结”.

外部连结

       LEFT/RIGHT/FULL OUTER JOIN…ON

       用于 许多联结将一个表中的行与另一个表中的行相关联,但有时候会需要包含没有关系行的那些行.

※ 计算平均销售规模,且包括那些至今未下订单的客户.

※ 对每个客户下了多少订单进行计数,且包括那些至今未下订单的客户.

左/右外联结

SELECT C.cust_id,O.order_num

FROM Customers AS C LEFT OUTER JOIN Orders AS O

ON C.cust_id = O.cust_id;

cust_id

order_num

0111

2005

0112

2009

0113

NULL

0114

2006

0115

2008

在Order中表,根本就不存在未下订单的cust_id,所以普通的联结根本得不到这样的结果,这就体现了外联结的好处.

可以看到,”左联结”就是从写在FROM子句的左边的表中选择所有的行.

       也可以用符号表示:

       SQL Server :         “ *= ” :左联结                     “ =* “ :右联结

       Oracel :                “ (+)= ” :左联结           “ =(+) “ :右联结

-- 右联结 结果等同于上例

SELECT C.cust_id,O.order_num

FROM Customers AS C , Orders AS O

ON O.cust_id =* C.cust_id;

带聚集函数的外部联结

SELECT C.cust_id,COUNT(O.order_num) AS num_id

FROM Customers AS C INNER JOIN Orders AS O

ON C.cust_id = O.cust_id

GROUP BY C.cust_id;

cust_id

num_id

0111

2

0113

1

0114

1

0115

1

 

SELECT C.cust_id,COUNT(O.order_num) AS num_id

FROM Customers AS C LEFT OUTER JOIN Orders AS O

ON C.cust_id = O.cust_id

GROUP BY C.cust_id;

cust_id

num_id

0111

2

0112

0

0113

1

0114

1

0115

1

提示:一般用内部联结,但外部联结也是有效的;

       应总是提供联结条件,否则会出现笛卡尔积.

 

 

管理事务处理

       事件处理(transaction processing)可以用来维护数据库的完整性,它保证成批的SQL操作要么完全执行,要么完全不执行.

事务处理的4个专业术语

※ 事件(transation)指一组SQL语句;

※ 回退(rollback)指撤销指定SQL语句的过程;

※ 提交(commit)指将未存储的SQL语句结果写入数据库表;

※ 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),你可以对它发布回退指令.

提示:不能回退SELECT语句,也不能回退CREATE或DROP操作.事务中可以使用它们,但不能撤消它们.

       不同的事务处理的语法是不同的

SQL Server

BEGIN TRANSACTION

...

COMMIT TRANSACTION

MySQL

START TRANSACTION

...

PostgreSQL使用ANSI SQL语法

BEGIN;

...

       一般SQL语句都是直接针对数据库表执行和编写的,就是所谓的隐含提交(implicit commit),即提交(写或保存)操作是自动进行的.但是在事务处理中,不会隐含的提交.不过有的DBMS不这样.

SQL Server

BEGIN TRANSACTION

DELETE OrderItems WHERE order_num = 123;

DELETE Orders WHERE order_num = 123;

COMMIT TRANSACTION

Oracle

DELETE OrderItems WHERE order_num = 123;

DELETE Orders WHERE order_num = 123;

COMMIT;

上例中,COMMIT语句仅在全部DELETE语句不出错时才发生.

为了支持回退部分事务处理,须在事务处理块中合适的位置放置占位符.

SQL Server

SAVE TRANSACTION delete1;

MySQL 和 Oracle

ROLLBACK TO delete1;

一个完整的例子:

BEGIN TRANSACTION

INSERT INTO Customes(cust_id,cust_name) VALUES('1001','Tom');

--设置保留点StartOrder,以便回退

SAVE TRANSACTION StartOrder;

INSERT INTO Orders(order_num,order_date,cust_id) VALUES(20100,'2000/01/01','1001');

--SQL Server中,@@ERROR变量用来判断操作是否成功; 其它DBMS可能使用不同的变量

if @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;

INSERT INTO OrderItems(order_num,order_item,quantity,price) VALUES(20100,1,'waterbox',5.49);

if @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;

COMMIT TRANSACTION

--提示: 保留点越多越好

《SQL必知必会第五版》自留笔记 注:本书介绍的SQL主要适用于以下系统:IBM DB2,Microsoft SQL Server,MariaDB,MySQL, 阅读详情

相关推荐

Azure数据库服务比较:SQL Database vs Cosmos DB

结构化数据场景:如订单管理、用户认证等需要强事务支持的业务非结构化/半结构化场景:如物联网设备日志、社交网络数据、实时推荐系统:基于传统关系型数据库(SQL Server)的云原生服务,支持ACID事务和复杂SQL查询Cosmos DB:全球分布式NoSQL数据库,支持多模型(文档、键值、图、宽列)和弹性扩展两者的架构设计哲学有何本质区别?数据建模和查询语言的差异如何影响开发体验?一致性、可用性、吞吐量的权衡模型如何选择?典型业务场景下的选型决策依据是什么?技术原理对比。

AI云原生与云计算技术学院 1972

SQL必知必会笔记

极客时间-陈旸-SQL必知必会 笔记整理

zhaohui blog 1840

SQL必知必会(第四版)-MySQL源码/案例导入方法附赠非扫描版必知必会

SQL必知必会(第四版)-源码/案例导入方法 为了学习《MySQL 必知必会》中各个例子,需要一组填充数据的表,首先需要下载2个SQL脚本文件。 附带《SQL必知必会(第4版)》带源码 非扫描版 高清带书签 百度云下载方式:提取码nll1 官方案例下载链接 下载脚本之后,开始创建和填充书中各章所用的表: 创建一个新的数据源 create database crashcourse; #(这里使...

学习进击之路 2万+

(SQL入门经典+SQL必知必会+视频)笔记之一

一、了解SQL 1. 关系型数据库管理系统(RDBMS) 2. 结构化查询语言(SQL)——关系型数据库进行通信的标准语言 3. ANSI标准——可移植性和易用性 4. 连接数据库:CONNECT user@database;断开连接:DISCONNECT 5. SQL命令类型: 数据定义语言:DDL——用于创建和重构数据库对象(撤销和修改数据模式) 数据操作语言:DML——

王某的博客 7531

SQL高级语句-CREATE DATABASE 用于创建数据库。

CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库。 SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL CREATE DATABASE 实例 现在我们希望创建一个名为 "my_db" 的数据库。 我们使用下面的 CREATE DATABASE 语句: CREATE

qq_35144470的博客 2865

《SQL必知必会》学习笔记(一):实验数据初始化

摘要:本文主要提供《SQL必知必会》一书中实验所用的数据库,以及创建数据库、表、约束和初始化的SQL语句。

猴子搬来的救兵 6203

《SQL必知必会》笔记(施工中)

SQL必知必会

ychinata的博客 1779

sql server下的数据仓库的构建

SQL Server2008/R2 下的数据仓库的构建       本文详细介绍在SQL Server下如何做数据仓库的构建和如何利用数据仓库进行有效的分析,假设读者已经具备相关的理论知识,由于在SQL Server上都是实践过程,因此主要以截图来展示,这样做的好处是读者可直接按照该步骤进行操作,由于之前作者是写在word中的,因此直接截图,好了,话不多说,直接开始。 上面的全部内容是利用数据仓库...

WQ的博客 1万+

《SQL必知必会》学习笔记(一)

文章目录DB基本知识及表的创建主键创建数据库检索数据DISTINCT 关键字限制结果注释排序检索数据排序数据指定排序方向过滤数据使用 WHERE 子句WHERE 子句操作符AND 操作符OR 操作符IN 操作符NOT 操作符LIKE 操作符百分号(%) 通配符下划线(—)通配符通配符使用技巧创建计算字段拼接字段执行算数计算使用函数处理数据文本处理函数日期时间处理函数数值处理函数汇总数据聚集函数AV...

Neil.Liu的博客 611

three.js开发3D地图记录(二)

添加地图点击事件,点击区域,地图区域改变颜色并浮起来。

anwebDesigner的博客 1694

车载LIN总线避坑指南:主从节点通信失败的5个常见原因及解决方案

本文深度解析车载LIN总线主从节点通信失败的五大常见原因,涵盖物理层信号异常、调度表冲突、LDF配置错误、节点状态机缺陷及环境干扰。重点剖析了LDF文件配置不一致、波特率不匹配等关键问题,并提供了从示波器波形分析到软件配置检查的完整实战排查路径,帮助工程师高效定位并解决LIN通信故障。

g9h0i1的博客 1250

SQL必知必会51题

文章内容为《SQL必知必会》练习题重点笔记

2401_86505958的博客 2671

金蝶EAS uploadlogo漏洞实战:如何快速检测你的系统是否受影响

本文详细解析了金蝶EAS uploadlogo任意文件上传漏洞的检测与防护方法,帮助企业安全团队快速识别系统风险。通过资产发现、漏洞验证和应急响应方案,有效防范财务数据泄露和系统入侵风险,提升企业整体安全防护能力。

weixin_29322553的博客 387

Python通过ibm_db模块进行DB2数据库SQL语句执行及结果返回

执行SQL语句 方法一: 语法: 调用ibm_db.prepare()函数并传递以下参数: 1.从ibm_db.connect()或ibm_db.pconnect()函数返回的有效数据库连接资源; 2.包含SQL语句的字符串,包括需要变量输入的任何列或谓词值的参数标记(?)。该字符串可以包含由XMLQUERY子句包装的XQuery表达式 3.ibm_db.execute()执行SQL语句 im...

weixin_42970378的博客 8895

超详细Tokenizer——文本训练数据预处理

Tokenizer是Keras库中的一个文本处理工具,它用于将文本分词并构建词汇表,同时将文本映射到整数序列。这对于自然语言处理任务非常有用,例如文本分类、情感分析、机器翻译等。

halo的博客 3701

如何使用superpowers

"这个 bug 帮我修一下" → 我会自动走 systematic-debugging → TDD → verify 流程。- "帮我添加一个登录功能" → 我会自动走 brainstorming → plan → TDD → verify 流程。只要任务有 1% 的可能性适用某个技能,我就会先调用它再行动。→ TDD(测试驱动开发)→ verification(验证)→ code review(代码审查)提出需求 → brainstorming(头脑风暴)→ writing-plans(编写计划)

xiaojingjianqiang的博客 611

《SQL必知必会》笔记

目录SQL必知必会本文的用途读后感第一章第二章 检索数据2.1 SELECT语句2.5 检索不同的值2.6 限制结果2.7 使用注释第三章 排序检索数据3.1 排序数据第四章 过滤数据4.1 使用WHERE字句4.2 WHERE子句操作符第五章 高级数据过滤5.1 组合WHERE子句5.2 IN操作符5.3 NOT操作符第六章 用通配符过滤6.1 LIKE操作符6.2 通配符的技巧第七章 创建计算字段7.1 计算字段7.2 拼接字段第8课8.1 函数8.2 使用函数第九章 汇总数据9.1 聚集函数9.2 聚

生息之地 1125

逆向学习:从已上线微信小游戏反推Cocos工程结构(以切水果跑酷为例)

本文以“切水果跑酷”为例,详细介绍了如何通过逆向分析已上线的微信小游戏,反推其基于Cocos Creator的原始工程结构。文章深入拆解了编译后的目录骨架、资源加载逻辑与依赖关系,并重点解析了微信平台API的调用特征,为开发者提供了一种高效学习游戏架构与设计模式的实用方法。

kk1234的博客 1075

数据库——(DB、DBMS、SQL)

公司的数据库突然坏了,报一些稀奇古怪的错误代码,公司没人能搞定。老板很着急,把我叫到办公室说:“你赶紧在招聘网站发布一个DBA职位,年薪50万……”我大吃一惊:“50万?”老板点点头,接着说:“你负责面试,就问他们怎样恢复我们的数据库,切记,不管他们能不能答出来,都把他们拒绝了!”

CHENZULAN的博客 3383

2024年捡垃圾指南:E5 V3/V4服务器CPU怎么选?从游戏多开到深度学习,附华南X99主板搭配清单

本文详细解析2024年E5 V3/V4服务器CPU的选购策略,涵盖游戏多开、深度学习等多种应用场景。通过对比E5 V3与V4系列的制程、功耗及性能差异,提供高性价比的CPU型号推荐及华南X99主板搭配方案,帮助用户在有限预算下打造高效能工作站。

weixin_42549451的博客 1583

【异常】Cursor 编辑器 “Too many computers“ 报错排查与完整解决方案

该报错通常在启动Cursor、调用AI对话/代码补全核心功能时触发,会直接阻断编辑器AI能力的正常使用。

奶爸的编程之路,也就一周冷个三天 460

【免费下载】 SQL必知必会.pdf

SQL必知必会.pdf 【下载地址】SQL必知必会.pdf SQL必知必会.pdf 项目地址: https://gitcode.com/Open-source-documentation-tutorial/501a8 ...

gitblog_06647的博客 3055

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

database.db 文件详解:数据库文件在 SQLite 中的作用与使用

本文解析了Python项目中自动生成的database.db文件的作用和使用方法。该文件是SQLite数据库的默认存储文件,包含表结构、数据记录和索引等信息。文章详细介绍了SQLite的存储原理、查看和操作方法(命令行与可视化工具)、备份策略及常见问题解决方案,并强调数据库管理需严谨,避免数据丢失。掌握.db文件的特性能帮助开发者更高效地进行项目调试和数据库维护。

聚焦学生开发者需求,分享课设毕设项目实战经验、系统开发技巧、数据库设计规范及文档排版实用方法。 2400

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SQL必知必会-基础篇[SQL学习笔记]

本篇博客是对于陈旸老师极客专栏“SQL 必知必会”基础篇的笔记总结。需要学习资料可私信。

weixin_44972997的博客 1936

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

《SQL必知必会》导入数据库、填充数据流程

《SQL必知必会》导入数据库、填充数据方法 1、访问官网https://forta.com/books/0672336073/ 2、下滑找到: 3、这里

x__Sherlock的博客 2327

读书笔记-《SQL 必知必会》

《SQL 必知必会》是学习数据库的入门级经典书籍,里面知识点虽然都比较基础,不过讲解的清晰简介,也比较全面。通过全面的学习SQL,可以在工作面临问题时想到更高效的办法。 接下来主要记录经典章节中知识点的用法(主要针对Oracle语法): 第6课:用通配符进行过滤 第7课:创建计算字段 第8课:使用函数处理数据 第9课:汇总数据 第10课:分组数据 第11课:使用子查询 第12课:联结表 第13课:...

MsSpark的博客 2526
上一篇: 生活-发胶、发泥、发蜡、着哩哪种造型效果要好?
下一篇: ASP2.0-130道ASP.NET面试题
MasterFT
博客等级 码龄20年 48粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值