数据库(SQL)代码编写——数据查询(学习笔记)

数据查询

格式:

select [all|distinct] <目标列表达式>[,<目标列表达式>]...
from<表名或视图名> [,<表名或视图名>...] | (<select语句>) [as] <别名>
[where<条件表达式>]
[group by<列名 1> [having <条件表达式>]
[order by <列名 2> [asc | desc]]		//按<列名 2>的值的升序或降序排序

//group by 子句,将结果按<列名 1>的值进行分组,通常会在每组中作用聚集函数。
//如果group by子句带having短语,则只有满足指定条件的组才予以输出

单表查询

1.选择表中的若干列
(1)查询指定列

//查询全体学生的学号和姓名
select sno,sname
from student

(2)查询全部列

//查询全体学生的详细记录
select *
from student

(3)查询经过计算的值

//查询全体学生的姓名及其出生年份
select sname,2023-sage as birthday  //as birthday (birthday为别名)
from student

2.选择表中的若干元组
(1)消除取值重复的行

select distinct sno		//用distinct消除相同的元组
from sc

(2)查询满足条件的元组

where 常用查询条件

查询条件谓词
比较=,>,<,>=,<=,!=,<>,!>,!<;not+上述比较运算符
确定范围between and,not between and
确定集合in,not in
字符匹配like,not like
空值is null,is not null
多重条件(逻辑运算)and,or,not
确定范围 (between and 和 not between and)

eg.查询年龄在20~30岁(包括20岁和30岁)之间的学生的姓名、系别和年龄

select sname,sdept,sage
from student
where sage between 20 and 23

eg.查询年龄不在20~30岁之间的学生的姓名、系别和年龄

select sname,sdept,sage
from student
where sage not between 20 and 23
确定集合(in,not in)

eg.查询计算机系(cs)、数学系(ma)和信息系(is)学生的姓名和性别。

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

eg.查询计算机系(cs)、数学系(ma)和信息系(is)都不是的学生的姓名和性别。

select sname,ssex
from student
where sdept not in('cs','ma','is')
字符匹配(like,not like)

语法:[not] like’<匹配串>’ [escape’<换码字符>']

通配符含义例子
%(百分号)任意长度(长度可以为0)的字符串‘a%b’ (以a开头,以b结尾的任意长度的字符串)
_(下横线)任意单个字符‘a_b’ (以a开头,b结尾的长度为3的任意字符串)
[ ](方括号)任选一个‘%[02468]’ (尾号为0\2\4\6\8\的同学)
^不是‘%[^0]’ (尾号不为0的同学)

如果like后面的匹配串中不含通配符,则可以用=(等于)运算取代like谓词,用!=或<>(不等于)运算取代not like谓词

//eg.查询学号为201215121的学生的详细情况
select *
from student
where sno like '201215121'
//等价于
select *
from student
where sno='201215121'

eg.查询名字中第二个字为“阳”的学生的姓名和学号

select sname,sno
from student
where sname like'_阳%'
//注:数据库字符集为ASCII时一个汉字需要两个_;当字符集为GBK时只需要一个_

escpae’ \ ’ 表示 ’ \ ’ 为换码字符。这样匹配串中紧跟在“ \ ”后面的字符“ _ ”不再具有通配符的含义,转义为普通的“ _ ”字符

//eg.查询以‘DB_’开头,且倒数第三个字符为i的课程的详细情况
select *
from course
where cname like 'DB\_%i_ _' escape'\'
涉及空值的查询(is)
//eg.某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
//查询缺少成绩的学生的学号和相应的课程号
select sno,cno
from sc
where grade is null		//分数grade是空值
//is不能用“=”代替
多重条件查询(and,or,in)

逻辑运算符and和or可以用来连接多个查询条件。and的优先级高于or,但用户可以用括号改变优先级

//查询计算机科学系年龄在20岁以下的学生姓名
select sname
from student
where sdept='cs' and sage<20

(in谓词其实是多个or运算符的缩写)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值