数据库原理SQL查询(习题+知识点)

一、查询学生表所有学生记录

1.题目内容+代码编写

select *
from stu;

2.知识点提醒

1)选择表中的所有属性列有两种方法

  • 在select关键字后列出所有列名
  • 若列的显示顺序与其在表中的顺序相同,则也可用 * 表示所有列

二、查询学生表中部分信息

1.题目内容+代码编写

select sno,sname,case when sex = '1' then '男' else '女' end as sex
from stu;

2.知识点提醒

1)性别表示转换(case语句)

  • case语句用于根据条件返回不同的值
  • eg.when sex = '1' then '男':如果sex字段的值为'1',则返回'男'
  • AS关键字:使用AS关键字为列名提供别名,使结果更易于理解

三、查询学生表中的女生信息

1.题目内容+代码编写

select sno as 学号,sname as 姓名
from stu
where sex = '0';

2.知识点提醒

1)where语句

  • 常用于查询满足指定条件的元组
  • 用于条件限定
  • where子句不能用聚集函数作为条件表达式

四、查询学生表中大于19岁的女生

1.题目内容+代码编写

select sno as 学号,sname as 姓名,sex as 性别,mno as 专业,2020-year(birdate) as 年龄,memo as 备注
from stu
where 2020-year(birdate) > 19 and sex = '0';

2.知识点提醒

1)年龄求法

  • 若遇到输出样例需要的是年龄而不是出生年份,需要编写代码进行计算,通常为(给定的当前年份 - year(出生年份))

2)多个条件并存

  • 遇到多个判别条件时,可以使用and进行连接

五、查询年龄18-20之间的学生信息

1.题目内容+代码编写

select sno as 学号,sname as 姓名,sex as 性别,mno as 专业,2020-year(birdate) as 年龄,memo as 备注
from stu
where 2020-year(birdate) between 18 and 20;

2.知识点提醒

1)判别范围圈定

  • 若判别条件为一段范围,可以使用between...and...进行范围的规定

六、查询姓‘李’的学生记录

1.题目内容+代码编写

select sno as 学号,sname as 姓名,sex as 性别,mno as 专业,birdate as 出生日期,memo as 备注
from stu
where sname LIKE '李%';

2.知识点提醒

1)字符串匹配

  • 谓词LIKE可以用来进行字符串的匹配
  • %代表任意长度的字符串,eg.a%b表示以a开头,以b结尾的任意长度的字符串
  • _(下划线)代表任意单个字符,eg.a%b表示以a开头,以b结尾的长度为3的任意字符串

七、查询部分专业的学生

1.题目内容+代码编写

select sno as 学号,sname as 姓名,sex as 性别,mname as 专业
from stu,major
where stu.mno = major.mno and mname in('计算机工程' , '软件工程')
order by sno; 

2.知识点提醒

1)表的连接 

  • 将两个表连接时,可以使用 = 进行等值连接

2)确定集合

  • 谓词IN可以用来查找属性值属于指定集合的元组

3)排序

  • 使用order by进行排序,order by ... desc为降序,order by ... asc为升序(默认值为升序)

八、查询所有学生的平均成绩

1.题目内容+代码编写

SELECT stu.sno as 学号,COALESCE(AVG(sc.grade), 0) as 平均成绩
FROM stu
LEFT JOIN sc ON stu.sno = sc.sno
GROUP BY stu.sno;

2.知识点提醒

1)成绩显示不为NULL

  • COALESCE() 函数确保了即使某个学生没有成绩记录,其平均成绩也不会显示为NULL,而是显示为0

九、查询各专业学生的平均成绩

1.题目内容+代码编写

SELECT mname as 专业,ifnull(AVG(grade),0) as 平均成绩
FROM major left outer join
    (SELECT mno,grade 
    FROM stu,sc 
    WHERE stu.sno=sc.sno)as a on major.mno=a.mno
GROUP BY major.mno
ORDER BY major.mno;

2.知识点提醒

1)连接操作

  • LEFT OUTER JOIN将 major 表和子查询结果a进行左外连接。左外连接保证了即使a表中没有对应的记录,major 表中的记录仍然会出现在结果中。
  • 子查询a从 stu 和 sc 表中选择专业编号 mno 和成绩 grade ,其中stu.sno = sc.sno

十、查询平均成绩高于75分的学生

1.题目内容+代码编写

select sno as 学号,AVG(grade) as 平均成绩
from sc
group by sno
having AVG(grade) > 75;

2.知识点提醒

1)求平均成绩

  • 求平均成绩时,可以使用聚集函数AVG(),且聚集函数不能和where一起使用

2)相同项相加

  • group by子句将查询结果按某一列或多列的值分组,值相等的为一组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值