sql删除元组_Lecture #02: 中级SQL

1766c1369f6f055fe3ae5f2cf17a5991.png
本专栏是对CMU15445的笔记的翻译,原文地址:https://15445.courses.cs.cmu.edu/fall2020/notes/02-advancedsql.pdf

1 关系语言

在20世纪70年代,Edgar Codd发布了一篇关于关系模型的论文。最初,他只定义了数据库在关系模型上运行查询的数学符号。

用户只需要使用声明性的语言指定他们想要的结果(例如SQL)。数据库有责任去决定最有效率的计划并返回结果。

关系代数基于set(无序,没有重复),SQL基于bag(无序,有重复)。

2 SQL历史

用于关系型数据库的声明式查询语言,最初是在20世纪70年代作为IBM System R项目的一部分开发的。IBM最初称为“SEQUEL”(Structured English Query Language 结构化英文查询语言)。在20世纪80年代改名为“SQL”(Structured Query Language 结构化查询语言)。

这个语言由不同种类的命令组成:

  1. Data Manipulation Language (DML 数据操纵语言):SELETE(查询),INSERT(插入),UPDATE(更新)和DELETE(删除)。
  2. Data Definition Language (DDL 数据定义语言):定义表,索引,视图和另外对象的模式。
  3. Data Control Language (DCL 数据控制语言):安全,访问控制。

SQL不是一个死(一成不变)的语言,每隔几年就会添加新功能。SQL-92标准是一个数据库支持SQL的最低要求。每个供应商都在一定程度上遵循标准,但同时他们也有很多自己的扩展语法。

3 聚合

聚合函数接受一批元组作为输入并产生单个标量作为输出。聚合函数只能用于SELECT的输出列。

例子:获取学生用“@cs”登录的数量。下列3个查询是等价的:

SELECT 

可以使用多个聚合函数在一个SELECT语句块中:

SELECT 

一些聚合函数支持DISTINCT关键字:

SELECT 

同时输出聚合函数列和非聚合函数列是未定义行为(e.cid在这里是未定义行为)

注:未定义行为指该行为标准中未定义,不同数据库可能会返回不同的结果(甚至可能会报错)

SELECT 

因此,其他非聚合函数的列必须使用GROUP BY命令进行聚合:

SELECT 

HAVING:聚合后进行过滤,像WHERE子句中使用GROUP BY过滤这样

SELECT 

4 字符串操作

SQL标准规定字符串区分大小写只能使用单引号。有些函数可以在查询的任何地方使用并操纵字符串。

Pattern Matching(模式匹配):LIKE关键字被用于在谓词中的字符串匹配。

  • “%” 匹配任何子串(包括空串)。
  • “_” 匹配单个字符。

Concatenation(连接):两个竖线(“||”)会连接2个或多个字符串变成1个字符串。

5 输出重定向

除了可以直接给用户返回结果,你还可以告诉数据库存储结果到另外一张表,然后你可以在后续查询中访问这些数据。

  • New Table(新表):存储查询的输出到新表中。
SELECT 
  • Existing Table(已存在的表):存储查询的输入到已经存在表中。目标表必须有相同的列数和相同的类型,列名可以和输出列不匹配。
INSERT 

6 输出控制

由于SQL是无序的,你必须使用ORDER BY子句去对结果进行排序:

SELECT 

你可以使用多个ORDER BY子句做更复杂的排序:

SELECT 

你可以使用任意的表达式在ORDER BY子句中:

SELECT 

通常,数据库会返回所有符合条件的元组。你可以使用LIMIT子句去限制返回元组的数量:

SELECT 

同时也可以提供offset去获得一个结果的区间:

SELECT 

除非你使用一个ORDER BY子句搭配LIMIT,否则数据库可能在每次查询会返回不同的元组,因为关系模型不在意顺序。

7 嵌套查询

嵌套查询可以使单个查询中运行更复杂的查询。外部查询的作用域在内部查询中(内部查询可以访问外部查询的属性),反之不行。

内部查询可以出现在查询的几乎所有地方:

  1. SELECT输出目标:
SELECT 

2. FROM子句:

SELECT 

3. WHERE子句:

SELECT 

例子:获取所有报名“15-445”的学生名字

SELECT 

注意,根据sid出现的不同位置,它拥有不同的作用域。

Nest Query Results Expressions(嵌套查询表达式):

  • ALL:必须满足子查询中所有的行
  • ANY:必须满足子查询中至少1行
  • IN:等价于ANY()
  • EXISTS:至少1行被返回

8 窗口函数

跨元组执行“移动”计算。和聚合一样,但它依然返回原始元组。

Functions(函数):窗口函数可以是上面讨论的任意的聚合函数。同时还有一些特殊的窗口函数:

  1. ROW_NUMBER:当前行的number
  2. RANK:当前行的排序

Grouping(分组):OVER子句指定当计算窗口函数的时候如何分组。使用PARTITION BY去指定分组。

SELECT 

你也可以在OVER中使用ORDER BY去确定结果的顺序,即使数据库内部存储结构发生改变也不会影响结果。

SELECT 

重点:RANK函数在窗口函数排序后计算,ROW_NUBMER函数在排序前计算。

9 公用表表达式(CTE)

公用表表达式(CTE)是窗口函数和嵌套查询的替代方法去编写更加复杂的查询。可以认为CTE是在单次查询的一个临时表。

WITH子句将内部查询的输出绑定到临时的结果。

例子:生成一个CTE叫cteName包含1个tuple的1个属性,属性值为1。这个查询返回了cteName的所有属性及值。

WITH 

你可以绑定输出列的名字在AS之前:

WITH 

单个查询可以包括多个CTE的定义:

WITH 

在WITH后添加RECURSIVE关键字允许CTE引用自己。

例子:打印1到10的序列

WITH 

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

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

相关文章

iCloud官方文档

官方地址:iOS App Programming Guide -> iCloud Storage这个偏理论一些,提供了很多iCloud应用设计层面的东西,大家感兴趣,可以一看。如果需要iCloud上手教程,可以参考我的另外一个贴子:http://www.cocoa…

0x00000000指令引用的内存不能为written_变量和内存访问

计算机世界有一个常识——所有的数据和指令必须经由内存才能进入CPU的寄存器进而被CPU使用,那么我们程序操作的主战场就是内存,内存操作也就顺理成章成为了程序中最高频的操作。为了节目的效果,我们先来看一段8086平台下的汇编代码&#xff1…

Zabbix 3.0 配置企业微信报警(注册---测试)

一、申请企业微信 1、登录企业微信官网,点击企业注册 二、配置企业微信 1、邀请管理员使用企业微信,如果有多个人直接添加新成员 2、管理员收到邀请,下载手机版企业微信,使用微信号登陆即可 3、创建应用 4、填写应用信息&#xff…

AutoMapper 9.0的改造(续)

上一篇有一个读者,有疑问,如何自动化注册Dto 我开篇,做了一个自动化注册的 public sealed class AutoInjectAttribute : Attribute{public Type SourceType { get; }public Type TargetType { get; }public AutoInjectAttribute(Type sourceT…

.net byte转java byte_Java Web安全 || Java基础 Java Agent

点击上方“凌天实验室”,“星标或置顶公众号”漏洞、技术还是其他,我都想第一时间和你分享“【历史】已连载更新全部内容:【菜单栏】-【JAVA SEC】01Java AgentJDK1.5开始,Java新增了Instrumentation(Java Agent API)和JVMTI(JVM …

必须进行支持的游戏方可使用此功能_C#8.0 新增功能

(给DotNet加星标,提升.Net技能)转自:张传宁cnblogs.com/SavionZhang/p/11201818.htmlC#8.0提供了许多增强功能1、Readonly 成员可将 readonly 修饰符应用于结构的任何成员。它指示该成员不会修改状态。这比将 readonly 修饰符应用于 struct 声明更精细。…

Zabbix 3.0 配置企业微信报警(配置zabbix-web)

一、添加报警媒体类型 Name:自定义 Type:选择script Scripts name:填写脚本名称 Script parameters:脚本参数--corpidXXX--corpsecretXXX--user{ALERT.SENDTO}--msg{ALERT.MESSAGE}--agentidXXX最后点Add即可添加完成;…

采用python解决实际问题_Python编程语言解决几种常见的实际问题

Python编程语言解决几种常见的实际问题 (2012-10-25 17:24:12) 标签: it python python培训 北京 杂谈 Python编程语言解决一些实际问题 from os.path import walk, join, normpath from os import chdir, remove def scan(arg, dirname, names) for file in names:…

EevExpress中XtraGrid常用方法

1.girdView在第一列显示行号 调整第一列的宽度 gridView1.IndicatorWidth 40; View Code 1 private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)2 { 3 if (e.Info.IsRowIndi…

【转载】博客园编辑数学公式的方法

原文在这里:博客园编辑数学公式的方法 需要在选项中勾上 启用数学公式支持 在公式开始和结尾输入美元符号 : 如 美元符号x^2美元符号 则显示x的平方 x^2 需要在http://latex.codecogs.com/eqneditor/editor.php里面编辑好后复制源码过来。 如 转载于:htt…

php代码里怎么写html代码_菜鸟青铜变白银!Python 项目代码写完了,然后怎么打包和发布?...

你把你的代码写完了,是不是要给别人使用下,怎么打包你的项目代码呢?喂,开源么?接下来小帅b就跟你说说,如何打包你的代码。就拿我们上次演示的 todo为例,写完代码之后,代码的目录是这…

三次样条插值 cubic spline interpolation

什么是三次样条插值 插值(interpolation)是在已知部分数据节点(knots)的情况下,求解经过这些已知点的曲线, 然后根据得到的曲线进行未知位置点函数值预测的方法(未知点在上述已知点自变量范围内…

vscode python环境_在vscode中配置python环境

原博文 2019-09-27 22:55 − 1.安装vscode和python3.7(安装路径在:E:\Python\Python37); 2.打开vscode,在左下角点击设置图标选择setting,搜索python path,在该路径下选择python的安装路径&…

ufw防火墙规则不生效

正式站系统是Ubuntu 16.04.6 一、今天一个项目有百度爬出,在nginx中封掉还在一直爬取,都403还不停爬取 二、在uwf封掉爬出ip,想封掉80端口没有用,然后封掉整个网段还是没有用,尴尬 三、放出终极大招 UFW(iptables)规则…

network怎么断点调试_Windows 网络编程:调试 API

一次性进群,长期免费索取教程,没有付费教程。教程列表见微信公众号底部菜单进微信群回复公众号:微信群;QQ群:460500587微信公众号:计算机与网络安全ID:Computer-network在Windows中有这么一些AP…

非会员只能试看20分钟_做欧包都要把铁锅烤半小时?太费电了,用我这办法只需预热几分钟...

最近迷上了做欧包,做欧包要用蒸烤箱,做好的欧包才会外脆内软,如果没有蒸烤箱的话人们又研究出了用铸铁锅来做,先把铸铁锅放在烤箱里烘烤半小时左右,然后把面包坯子放入铸铁锅盖好盖子迅速放回烤箱, 因为锅的…

顺序表归并

对两个顺序表进行合并。 思想&#xff1a;定义两个变量&#xff08;i&#xff0c;j&#xff09;分别指向顺序表 A和B当前处理的元素&#xff0c;若i元素不大于j元素&#xff08;<&#xff09;&#xff0c;则把i元素复制到新表中&#xff0c;否者将j元素复制到新表中。 View …

collection集合 多少钱_Java集合框架大汇总,建议收藏

Java集合Java集合框架&#xff1a;是一种工具类&#xff0c;就像是一个容器可以存储任意数量的具有共同属性的对象。Java集合中成员很丰富&#xff0c;常用的集合有ArrayList&#xff0c;HashMap&#xff0c;HashSet等。线程安全的有Vector&#xff0c;HashTable。线程不安全的…