前言

关于sql数据库中的数据查询知识点及实例。内容包含,
查询指定属性列,
查询经过计算的值,
并为查询结果的列标题设置别名,
限制查询返回的行数,
确定范围的条件查询
字符匹配的条件查询
空值查询
聚集函数查询
分组查询
比较运算符相关子查询
并操作查询
修改


提示:以下是本篇文章正文内容

预备知识

1)SELECT查询语句的一般格式为:
SELECT [ALL|DISTINCT] <目标列表达式>[别名][,<目标列表达式>[别名]]…
FROM <表名或视图名>[别名][,<表名或视图名>[别名]]…|(<SELECT 语句>)[AS][<别名>
[WHERE<条件表达式>]
[GROUP BY <列名 1>[HAVING <条件表达式>]]
[ORDER BY<列名 2> [ASC|DESC]];
(2)聚集函数的一般格式为:
COUNT/SUM/AVG/MAX/MIN ([DISTINCT|ALL] <列名>)
如果指定 DISTINCT 短语,表示在计算时要取消指定列中的重复值,否则表示不取消重复值。

二、实例

(1)查询全体学生的姓名、性别和年龄。(查询指定属性列)
(2)查询全体学生的姓名、性别和出生年份,并为查询结果的列标题设置合适的别名。(查询经过计算的值,并为查询结果的列标题设置别名)
(3)查询课程表中前3门课程信息。(限制查询返回的行数)
(4)查询成绩在[90,100]之间的学生学号和课程编号。(确定范围的条件查询)
(5)查询所有姓“王”的学生的姓名、性别和院系编号。(字符匹配的条件查询)
(6)查询所有有选课成绩的学生学号和课程编号。(空值查询)
(7)查询男生总人数。(聚集函数查询)
(8)查询男生的最大年龄、最小年龄和平均年龄。(聚集函数查询)
(9)查询选修了 2 门及以上课程的学生学号。(分组查询)
(10)查询课程成绩在 85 分以上的学生的学号、姓名、选修的课程号、课程名和成绩。
(11)找出每个学生未超过他自己选修课程平均成绩的课程号。(比较运算符相关子查询)
(12)查询信息系的学生及年龄不大于18岁的学生信息。(并操作查询)
(13)将选修了大学英语课程的学生成绩加2 分。

1.引入库

本次使用的数据库

2.代码

代码如下(示例):

--(1)查询全体学生的姓名、性别和年龄。
select Sname,stud_sex,stud_age
from Student
  
--(2)查询全体学生的姓名、性别和出生年份,并为查询结果的列标题设置合适的别名
select Sname,stud_sex,出生年份=(2022-stud_age)
from Student

--(3)查询课程表中前3门课程信息。
select top 3 *
from Course

--(4)查询成绩在[90,100]之间的学生学号和课程编号。
select Sno,Cno
from SC
where Grade>=90and Grade<=100

--(5)查询所有姓“王”的学生的姓名、性别和院系编号。
select Sname,stud_sex,Dno
from Student
where Sname like '王%'

--(6)查询所有有选课成绩的学生学号和课程编号。
select Sno,Cno
from SC
where Grade is not null

--(7)查询男生总人数。
select count(stud_sex)男生个数
from Student
where stud_sex='男'

--(8)查询男生的最大年龄、最小年龄和平均年龄。
select 
max(stud_age)最大年龄,
min(stud_age)最小年龄,
avg(stud_age)平均年龄
from Student

--(9)查询选修了 2 门及以上课程的学生学号。
select Sno--,count(Cno)课程数量
from SC
group by Sno
having count(Cno)>=2--条件两门及两门以上
order by count(Cno)--排序(升序)

--(10)查询课程成绩在 85 分以上的学生的学号、姓名、选修的课程号、课程名和成绩。
select SC.Sno,Sname,Course.Cno,Cname,Grade
from SC,Student,Course
where SC.Sno=Student.Sno and SC.Cno=Course.Cno --内连接条件
and Grade>85

--(11)找出每个学生未超过他自己选修课程平均成绩的课程号。
select Cno 
from SC x ----x,y是表SC的一个别名,又称为元组变量,可以用来表示SC的一个元组
where Grade>
(select AVG(Grade)
from SC y
where y.Sno=x.Sno
)
--临时派生表
select Sno,Cno
from SC,(select Sno,Avg(Grade)from SC group by Sno)
as Avg_sc(avg_sno,avg_grade)
where SC.Sno=Avg_sc.avg_sno and SC.Grade>=Avg_sc.avg_grade

--(12)查询信息系的学生及年龄不大于18岁的学生信息。
select *
from Student
where Dno='D01'--查询信息学院

union   --并操作关键字

select *
from Student
where stud_age<=18 --查询不大于18岁

--(13)将选修了大学英语课程的学生成绩加2 分。 
select Grade
from SC
where Cno='C8' --查看原来的成绩
update SC
set Grade=Grade+2
where Cno='C8' --条件:英语课

总结

以上就是本次查询操作的全部内容,能力不强仅供参考,欢迎大佬指正。