选择表中的若干列:
查询指定列
例:查询全体学生的学号与姓名
- select Sno,Sname
- from Student;
例:查询学生的姓名、学号和所在系
- select Sname,Sno,Sdept
- frmo Student;
查询全部列
例:查询全体学生的详细记录
select * from Student;
查询经过计算的值
例:查全体学生的姓名和出生年份
- select Sname,2022-Sage
- from Student;
例:查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示系名
- select Sname,'Year of Birth:',2014-Sage,lower(Sdept)
- from Stduent;
使用列别名改变查询结果的列标题
- select
- Sname (as) NAME,
- 'year of birth:' (as) birth,2014-Sage (as)birthday,
- lower(Sdept) (as)department
- from Student
选择表中的若干数组
消除取值重复的行
- select distinct Sno
- from SC;
查询满足条件的元组
比较:= ,> ,< ,<= ,!=
确定范围:between and ,not between and
确定集合:(not)in
字符匹配:(not)like
空值:is (not)null
逻辑运算:and,or,not
查询计算机科学系全体学生的名单:
select * from Student where Sdept='CS';
查询所有年龄在20岁以下学生姓名及其年龄
- select Sname,Sage
- from Student
- where Sage<20;
查询考试成绩有不及格的学生的学号
- select distinct Sno
- from SC
- where Grade<60;
注意去重
between and
查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄
- select Sname,Sdept,Sage
- from Student
- where Sage between 20 and 23;
查询年龄不再20~23岁之间学生姓名、系别和年龄
- select Sname,Sdept,Sage
- from Student
- where age not between 20 and 23;
in:
查询CS系,MA系,IS系学生的姓名和性别
- select Sname,Ssex
- from Student
- where Sdept in ('CS'.'MA','IS');
-
-
-
- 或
- where Sdept='CS' or Sdept='MA' or Sdept='IS'
查询既不是CS系,MA系,也不是IS系的学生的姓名和性别
- select Sname,Ssex
- from Student
- where Sdept not in('IS','MA','CS');
通配符:
%任意多个字符,_匹配一个字符
查询所有刘姓学生姓名、学号和性别
- select Sname,Sno,Ssex
- from Student
- where Sname like '刘%';
查询姓'欧阳'且全名为三个汉字的学生的姓名
- select Sname
- from Student
- where Sname like '欧阳_';
查询名字中第2个字为‘阳’字学生的姓名和学号
- select Sname,Sno
- from Student
- where Sname like '_阳%';
查询所有不姓刘的学生姓名
- select Sname
- from Student
- where Sname not like '刘%';
空值:
查询缺少考试成绩的学生的学号和课程号
- select Sno,Cno
- from SC
- where Grade is null
逻辑运算符:
and 优先级高于OR,可以使用括号改变优先级
例:查询计算机系年龄在20岁以下的学生姓名
- select Sname
- from Student
- where Sdept='CS' and Sage<20;
order by子句:
例:查询选修3号课程的学生的学号及成绩,查询结果按分数降序排序
- select Sno,Grade
- from SC
- where Cno='3'
- order by Grade desc;
例:查询全体学生情况,查询结果按所在系号升序排序,同一系中的学生按年龄降序排列。
- select *
- from Student
- order by Sdept,Sage desc;
聚集函数:
count(*)统计元组个数
sum():计算一列值的总和
avg():计算一列值的平均值
max():求一列中最大值
min():求一列中最小值
查询学生总人数:
- select count(*)
- from Student;
查询选修了课程的学生人数
- select count(distinct Sno)
- from SC;
计算1号课程的学生平均成绩:
- select avg(Grade)
- from SC
- where Cno='1';
查询选修1号课程的学生最高分数
- select max(Grade)
- from SC
- where Cno='1';
group by:
group by用于细化聚集函数的作用对象
如果未对查询结果分组,聚集函数将作用于整个查询结果。
对查询结果分组后,聚集函数将分别作用于每个组
按指定的一列或多列值分组,值相等的为一组
例:求各个课程号对应的选课人数
- select Cno,count(*)
- from SC
- group by Cno;
例:查询选修了3门以上课程的学生学号
- select Sno
- from SC
- group by Sno
- having count(*)>=3;
having 选择满足条件的组
where作用于表,从中选择满足条件的元组
例:查询平均成绩大于等于90分的学生学号和平均成绩
- select Sno,avg(Grade)
- from SC
- group by Sno
- having avg(Grade)>=90