数据库单表查询

3.4数据查询

select [ALL | DISTINCT ] from <表名> where <条件语句> GROUP BY <列名 1> ORDER BY <列名2> [ASC | DESC];

整个select语句的含义是,根据where 子句的条件表达式从from子句指定的基本表、视图、或者派生表中找出满足条件的元组,再按select 子句中目标列表达式选出元组中的属性值形成结果表。
如果有group by子句,则将结果按《列名1》 的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果GROUP BY子句带HAVING,则表示只有满足指定条件的组才予以输出。
如果有order By子句,则结果还按列名<2>的值完成升序或者降序排序。

3.4.1 单表查询

1.选择表中若干列

单表查询:表示只涉及一个表的查询
①查询指定列:select Sno,Sname from student;
②查询全部列: select * from student
③查询经过简单计算的值
select Sname, 2020-Sage from student
(第二列展示的就是进行过简单计算的值,假如当前年份为2020年减去年龄就是学生的出生年月)

Sname2020 - Sage
张张张1996
王王王1998
④还可以是字符串常量、函数
		select Sname ,“Year of Birth”,2014-Sage,LOWER(Sdept) from student
⑤还可以给字段加别名
		select Sname Name ,“Year of Birth” BIRTH,2014-Sage BIRTHDAY from student
SnameBIRTHBIRTHDAY
张张张Year of Birth1996
王王王Year of Birth1998
2.选择表中若干元组(元组:每一行数据)

(1)消除取值重复的
SELECT Sno FROM classnum

sno
202001
202001
202001
202002
202002

该结果包含许多行,如果想去掉结果表中的重复行,必须指定DISTNCT
SELECT DISTNCT Sno FROM classnum

sno
202001
202002
(2)查询满足条件的元组
查询满足条件的元组可以通过where子句实现,
查询条件谓词
比较=, > , < , >= , <= , ! , !> , !< ;NOT+上述比较运算符
确定范围BETWEEN AND,NOT BETWEEN AND,
确定集合IN, NOT IN
字符匹配LIKE, NOT LIKE
空值IS NULL,IS NOT NULL
多重条件AND,OR NOT

①比较大小
[例] 查询年龄在20岁直辖的学生姓名
select Sname,Sage from student where Sage<20;

②确定范围
[例]查询年龄在20–30岁之间的学生姓名
select Sname from student where Sage BETWEEN 20 AND 30
[例]查询年龄不在20–30岁之间的学生姓名
select Sname from student where Sage NOT BETWEEN 20 AND 30

③确定集合
[例]查询计算机系,和数学系的学生名字
select Sname from Student where Sdept IN (“MA”,“CM”);
[例]查询不是计算机系,和数学系的学生名字
select Sname from Student where Sdept NOT IN (“MA”,“CM”);

④字符匹配
用谓词LIKE 可以用于进行字符串匹配
%(百分号)代表任意长度(长度可以是0)的字符串,
例如 a%b 表示以a开头,以b结尾的任意长度的字符串。adfcdb,afghb,ab都满足这个匹配
_ (下划线)代表任意单个字符
例如a_b 表示,以a开头,以b结尾的3个字符的字符串,anb,amb,都满足这个匹配
【例】查询所有刘姓学生名字
select Sname from student where Sname LIKE “刘%”
【例】查询所有两个字的张姓学生名字
select Sname from student where Sname LIKE “张(下划线) ”

数据库字集为ASCII时需要两个下划线,;当字符集为GBK需要一个

【例】查询不姓张的所有学生姓名
select Sname from student where NOT LIKE “张%,”

如果要查询的数据本身还有%或者_,这时就需要使用ESCAPE '<换码字符>'短语进行转义

例如查询DB_Design课程的课程号,
select Cno,Credent from cource where Cname LIKE “DB_Design” ESCAPE ’ \ ’
ESCAPE ‘ \ ’ ,表示’\为换码字符,这样匹配在“\”后的“(下划线)”就是普通的下划线字符

⑤涉及空值的查询
【例】查找数学成绩为空的学生名字
select Sname from SC where math IS NULL;
【例】查找语文成绩不为空的学生名字
select Sname from SC where math IS NOT NULL;

⑥多重查询
逻辑运算符AND和OR可用来连接多个查询条件,AND的优先级高于OR,但用户可以用括号改变优先级
select Sname from student where sdept=“CS” and age<20

⑦order by
用户可以用order by 子句对查询结果按照一个或者多个属性列的升序(ASC)和降序(DESC)排列,默认是ASC
select Sno,Grade from SC where Cno=“3” order by Grade DESC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值