数据库----数据查询

基于中国人民大学 中国慕课数据库系统概论(基础篇)

一、查询语句的基本功能分解

请添加图片描述
可分为三类。
请添加图片描述
查询全部信息 (student表中)

select * from student;

select 是不去重的,如果需要消除取值重复的行,需要指定DISTINST关键词,如果没有,则缺省为ALL。如下例(sc表中)

select distinct sno from sc;

常见运算符

请添加图片描述

查询年龄是否不在20~23之间的学生姓名、系别和年龄(student表)(使用between … and 和not between … and)

select sname,sdept,sage from sage not between 20 and 23;

查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别(使用IN<值表>,not in<值表>)

select sname,ssex from sage where sdept not in ('is','ma','cs')

谓词:[not] like ‘<匹配串>’ [escape ‘<转换字符>’]
%(百分号)表示任意长度,如刘%即 刘后面多少个字都可以(0也可以),都能返回true
__ (下划线)表示单个字符,如刘_即后面只有在一个字符时是匹配的

escape 使用换码字符将通配符转义为普通字符

查询DB_design 课程时,需要escape 来完成_(下划线)变为普通字符
(以\为界,后面的第一个字符不为普通字符,其余不变)

select Cno,Ccredit from course where cname like 'DB\_design' escape'\';

order by可以进行排序(asc/desc)(根据顺序,第一个填写的为第一排序段,第二填写的为第二排序段)

select Cno,Ccredit from course order by sno,sname asc;

二、聚集函数请添加图片描述

group by子句分组:

查询平均成绩大于等于90分的学生学号和平均成绩(聚集函数的判断只能用having 不能用where)

select sno,avg(grade) from sc group by sno having avg(grade) > 90;

三、连接查询

一般格式:[<表名1>.]<列名1> <比较运算符>[<表名2>.]<列名2>
分情况进行介绍

3.1等值连接

三种基本办法(查询优化的时候还会讲)

3.1.1嵌套循环法
3.1.2排序合并
3.1.3索引连接

3.2自身连接

请添加图片描述

select first.cname,second.cname
from course first,course second
where first.cpno = second.cno;

3.3外连接

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno, Grade
FROM Student LEFT OUT JOIN SC ON Student.Sno=sC.Sno;

3.4多表连接

SELECT Student. Sno, Sname, Cname, Grade
FROM Student, SC, Course /*多表连接*/
WHERE Student. Sno = SC.Sno
AND SC.Cno = Course.Cno;

五.嵌套查询

请添加图片描述
分四种情况介绍

4.1带有in谓词的子查询

4.2带有比较运算符的子查询

4.3带有any(some)或all谓词的子查询

4.4带有EXISTS谓词的子查询

六、集合查询请添加图片描述

查询计算机科学系的学生及年龄不大于19岁的学生。

SELECT *
FROM Student
WHERE Sdept= 'CS'
UNION
SELECT *
FROM Student
WHERE Sage<= 19;

■UNION:将多个查询结果合并起来时,系统自动去掉重复元组
■UNIONALL:将多个查询结果合并起来时,保留重复元组

查询计算机科学系的学生与年龄不大于19岁的学生的交集。

SELECT *
FROM Student
WHERE Sdept ='CS'
INTERSECT
SELECT *
FROM Student
WHERE Sage<=19

查询计算机科学系的学生与年龄不大于19岁的学生的差集。

SELECT *
FROM Student
WHERE Sdept ='CS'
EXCEPT
SEL ECT
FROM Student
WHERE Sage <=19;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值