StanfordDB class自学笔记 (7) SQL

本文介绍了SQL语言,它是基于关系代数的声明性标准语言。详细阐述了各类SQL语句,如基本select、Union、intersect等,还讲解了子查询在不同子句中的用法,以及JOIN系列操作符,包括inner join、natural join等,同时提及数据的插入、删除和更新方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL简介

SQL 类似relational model 已经用了非常久的年份,是一个标准的语言。

是申明性的语言,基于关系代数。

关于SQL术语

SQL语句

下面所有的sql语句基于的relational model都是自学笔记(6)中的大学申请系统

基本select

Table variable

table variable主要影响的是from 语句后面,相当于是对table进行简写,这样可以在where语句中使用。

Union

  • 上面的 as name 是为了将attribute的名字统一,否则sql会自行选取一个当作attribute的名字。
  • 如果是union 后面加 all ,则结果中会有duplicate存在

intersect

Except

上面的sql语句是从Apply中查询申请cs但是没有申请ee的学生的ID

Subqueries in WHERE clause

这是我感觉有点难度的地方,需要结合实际问题好好体会subquery的用法。

subquery是内嵌的,用的正确恰当会非常powerful!

in操作

比如下面的subquery语句,选出major是cs同学的ID和Name,这样的结果就不会有duplicate

如果用下面的sql查询语句,就可能有重复的value,因为某个学生可能申请了很多学校!

duplicate有时候是很重要的 也很tricky,值得我们引起注意!

下面的这个sql查询语句效果等同于之前用的except例子!

exist

老师上课说exist是查询存在不存在(我怎么感觉和in是一码事情)!

网上查了下

当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用。in 和 exists的区别如下:

1、运用情况不同

sql中in适用于子查询得出的结果集记录较少,主查询中的表较大且又有索引的表,。sql中exist适用于外层的主查询记录较少,子查询中的表大,又有索引的时候。

2、驱动顺序不同

IN是先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。exists是以外层表为驱动表,先被访问。

3、对NULL值处理不同。

IN不对NULL进行处理,exists会对NULL值进行处理。

4、底层原理不同

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

All

all关键词用来查询subquery的条件是否满足在主查询语句下

比如下面的查询语句,用来查出最高gpa学生(返回学生的名字和gpa)

Subqueries in FROM and SELECT clauses

这节课开始有点难度了,需要仔细看老师的例子。下面的查询语句可以转换成

下面这样 将 subquery放在from中!

The JOIN family of operators

inner join

格式如下:

去掉inner后只剩join,效果同 innter join一样。注意如果直接用","相当于是把两个table做一个cross-product,即笛卡尔积。

natural join

natural join 自动会把相同的attribute合并

老师建议用  table join table using(attribute)的形式形成我们所需要的关系

left outer join

指即便左边的table没有对应的tuple,也会加入到我们的结果中

在上面的例子中,即便student中没有申请,也会加入我们的结果list!

right outer join

和left outer join 类似 只不过换了一个边

full outer join

结合了left和right outer join  可以理解为  left outer join Union right outer join

Aggregation

NULL

Inserting new data (2 methods)

Deleting existing data

Updating existing data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值