DBMS第四篇(下):SQL 查询语言 (第三章)——SQL语句-自然连接、补充基础操作、集合操作、聚集函数...

1.Natural Join

自然连接操作对两个关系进行操作,并生成一个关系作为结果

看代码,1.要求是找到教员教的课程

select name, course_id 
from instructor natural join teaches;

这俩代码一个意思

	select name, course_id 
	from instructor, teaches 
	where instructor.ID = teaches.ID;

注意:

  • 自然连接只考虑在两种关系的模式中出现的属性上具有相同值的元组对
  • from子句中可以有多个表natural join
  • 小心不相关的相同名称的属性被错误地等同

Example

列出教师的姓名和他们所教授课程的名称

  • instructor表
    在这里插入图片描述
  • teaches表
    在这里插入图片描述
  • courses表
    在这里插入图片描述

代码:

  • Incorrect version
    (makes course.dept_name=instructor.dept_name)
select name, title 
from instructor natural join teaches natural join course;
  • Correct version
select name, title 
from instructor natural join teaches, course 
where teaches.course_id = course.course_id;
select name, title 
from (instructor natural join teaches) 
 join course using(course_id);

join…using…

  • 指定一个属性名列表
  • 两个输入都必须具有指定名称的属性
    (比如上面代码中制定了course_id)

比如:

 r1 join r2 using(A1, A2)
  • 操作类似于r1 natural join r2,
  • 但要一对来自r1的元组t1
    来自r2的元组t2
    匹配t1.A1 = t2.A1 、t1.A2 = t2.A2
  • 即便存在t1.A3 == t2.A3 但不在考虑范围

2.Rename Operation

as 来重命名,(as是可以omitted
和python 中导入头文件的用法类似:

from bs4 import BeautifulSoup as bs

SQL语句:
– 重命名表达式

select ID, name, salary/12 as monthly_salary 
from instructor

– 重命名表

select distinct T. name 
from instructor as T, instructor as S 
where T.salary > S.salary and S.dept_name = ‘Comp. Sci.

– Keyword as is optional and may be omitted

instructor as T ≡ instructor T

3.String Operations

使用 like

表达式 含义
% 通配符,匹配任何子字符串
_ . (下划线、小数点分别都是)匹配任意字符
’%dar%' 包含子串“dar”的所有串
like ‘100 %’ escape '\‘ 匹配字符串“100%”(转义符‘\’, 使 “%” 作被处理对象)
‘_ _ _’ 匹配任何恰好长度为3的字符串

有点像import re的正则表达

Example

找到名字中包含子串“dar”的所有教师的名字

select name 
from instructor where name like '%dar%'

4. * denote all attributes

The asterisk symbol “ * ” can be used in the select clause to denote “all attributes.”

Select instructor.* 
From instructor,	teaches 
Where instructor.ID=teaches.ID

5. order by、降序desc,升序asc

order by: 给出一种顺序投影属性。

desc for descending order
asc for ascending order.

Example

按薪资降序列出整个教员关系
薪水相同,按名字升序排列

select *
from instructor
order by salary desc, name asc;

6.where子句的谓词(predicates)

between

下面俩代码 等价的

select name
from instructor
where salary between 90000 and 100000;
select name
from instructor
where salary <= 100000 and salary >= 90000;

(,) = (,)、 (,) <= (,) …

下面俩代码 也等价的

select name, course_id
from instructor, teaches
where instructor.ID= teaches.ID and dept_name = 'Biology';

                
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

adingable

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值