数据查询

使用select语句

  • 查询满足一定条件的元组;
  • 查询某些属性的值;
  • 使用表别名和列别名;
  • 利用DISTINCT去掉查询结果中的重复行;
  • 通过在WHERE子句中放入连接条件,进行多表连接查询;
  • 利用GROUP BY进行分组统计
  • 利用ORDER对查询结果按要求排序;

基本语法

  • SELECT [ALL|DISTINCT]〈 目标列表达式〉 [,〈 目标列表达式>] …
  • FROM 〈 表名或视图名〉 [, 〈 表名或视图名〉 ] …
  • [WHERE <条件表达式>]
  • [GROUP BY 〈 列名〉 [, 〈 列名〉 ]…
  • [HAVING <内部函数表达式>] ]
  • [ORDER BY 〈 列名〉 [ASC│DESC] [, 〈 列名〉 [ASC│DESC]]…]
整个select语句的含义是,根据where子句的条件表达式从from字句指定的基本表,视图或派生表找出满足条件的元组,在select字句中的目标列表达式选出元组中的属性值形成结果表。
如果有group by 字句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果group by 子句带 having 短语,则只有满足指定条件的组才予以输出。
如果有 order by 子句,则结果表还要按<列名2>的值的升序或降序排序。

记录一些经典的题目 :

查询计算机科学系(cs),数学系(ma)和信息系(is)学生的姓名和性别
select sname,ssex
from student
where sdept in (‘cs’,’ma’,’is’)

查询DB_Design课程的课程号和学分
select cno,ccredit
from course
where cname like ‘DB_Design’ escape ‘\’

查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
select sno,grade
from sc
where cno = ‘3’
order by grade desc

查询全体学生情况,查询结果按所在系的系号升序排列,同一系的学生按年龄降序排列
select *
from student
order by sdept ,sage desc

查询选修了课程的学生人数
select count (distinct sno)
from sc

查询学生2012选修课程的总学分数
select sum(ccredit)
from sc,course
where sno = ‘2012’ and sc.cno = course.cno

  • 注意: where子句是不能用聚集函数作为条件表达式的。聚集函数只能用于select子句和group by 中的having子句。

  • 聚集函数只能用于select子句和group by的having 子句

    求各个课程号及其相应的选课人数
    select cno,count(sno)
    from sc
    group by cno

  • group by 子句将查询结果按某一列或多列的值分组,值相等的为一组
    分组后聚集函数将作用于每一个组,即每一个组都有一个函数值

查询选修了三门以上的课程的学生学号
select sno
from sc
group by sno
having count(*)>3

找出每个学生超过他自己选修课程平均成绩的课程号
select sno.cno
from sc x
where grade > (
select avg(grade)
from sc y
where sc.x=sc.y
)

查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄
select sname , sage
from student
where sage < any (
select sage
from student
where sdept = ‘cs’
)and sdept != ‘cs’

查询所有选修了1号课程的学生姓名
select sname
from student
where exists
(
select *
from sc
sno = studnet.sno and cno = ‘1’
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值