选择表中的若干列:

查询指定列

例:查询全体学生的学号与姓名

select Sno,Sname
from Student;
  • 1.
  • 2.

例:查询学生的姓名、学号和所在系

select Sname,Sno,Sdept
frmo Student;
  • 1.
  • 2.

查询全部列

例:查询全体学生的详细记录

select * from Student;
  • 1.

查询经过计算的值

例:查全体学生的姓名和出生年份

select Sname,2022-Sage 
from Student;
  • 1.
  • 2.

例:查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示系名

select Sname,'Year of Birth:',2014-Sage,lower(Sdept)
from Stduent;
  • 1.
  • 2.

使用列别名改变查询结果的列标题

select 
  Sname (as) NAME,
  'year of birth:' (as) birth,2014-Sage (as)birthday,
  lower(Sdept) (as)department
from Student
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

选择表中的若干数组

消除取值重复的行

select distinct Sno
from SC;
  • 1.
  • 2.

查询满足条件的元组

比较:= ,> ,< ,<= ,!=

确定范围:between and ,not between and 

确定集合:(not)in

字符匹配:(not)like

空值:is (not)null

逻辑运算:and,or,not 

查询计算机科学系全体学生的名单:

select * from Student where Sdept='CS';
  • 1.

查询所有年龄在20岁以下学生姓名及其年龄

select Sname,Sage
from Student
where Sage<20;
  • 1.
  • 2.
  • 3.

查询考试成绩有不及格的学生的学号

select distinct Sno
from SC
where Grade<60;
  • 1.
  • 2.
  • 3.

注意去重

between and

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

select Sname,Sdept,Sage 
from Student
where Sage between 20 and 23;
  • 1.
  • 2.
  • 3.

查询年龄不再20~23岁之间学生姓名、系别和年龄

select Sname,Sdept,Sage
from Student
where age not between 20 and 23;
  • 1.
  • 2.
  • 3.

in:

查询CS系,MA系,IS系学生的姓名和性别

select Sname,Ssex
from Student
where Sdept in ('CS'.'MA','IS');



或
where Sdept='CS' or Sdept='MA' or Sdept='IS'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

查询既不是CS系,MA系,也不是IS系的学生的姓名和性别

select Sname,Ssex 
from Student
where Sdept not in('IS','MA','CS');
  • 1.
  • 2.
  • 3.

通配符:

%任意多个字符,_匹配一个字符

查询所有刘姓学生姓名、学号和性别

select Sname,Sno,Ssex 
from Student
where Sname like '刘%';
  • 1.
  • 2.
  • 3.

查询姓'欧阳'且全名为三个汉字的学生的姓名

select Sname
from Student
where Sname like '欧阳_';
  • 1.
  • 2.
  • 3.

查询名字中第2个字为‘阳’字学生的姓名和学号

select Sname,Sno
from Student
where Sname like '_阳%';
  • 1.
  • 2.
  • 3.

查询所有不姓刘的学生姓名

select Sname
from Student
where Sname not like '刘%';
  • 1.
  • 2.
  • 3.

空值:

查询缺少考试成绩的学生的学号和课程号

select Sno,Cno
from SC
where Grade is null
  • 1.
  • 2.
  • 3.

逻辑运算符:

and 优先级高于OR,可以使用括号改变优先级

例:查询计算机系年龄在20岁以下的学生姓名

select Sname
from Student
where Sdept='CS' and Sage<20;
  • 1.
  • 2.
  • 3.

order by子句:

例:查询选修3号课程的学生的学号及成绩,查询结果按分数降序排序

select Sno,Grade
from SC
where Cno='3'
order by Grade desc;
  • 1.
  • 2.
  • 3.
  • 4.

例:查询全体学生情况,查询结果按所在系号升序排序,同一系中的学生按年龄降序排列。

select *
from Student
order by Sdept,Sage desc;
  • 1.
  • 2.
  • 3.

聚集函数:

count(*)统计元组个数

sum():计算一列值的总和

avg():计算一列值的平均值

max():求一列中最大值

min():求一列中最小值

查询学生总人数: 

select count(*)
from Student;
  • 1.
  • 2.

查询选修了课程的学生人数

select count(distinct Sno)
from SC;
  • 1.
  • 2.

计算1号课程的学生平均成绩:

select avg(Grade)
from SC
where Cno='1';
  • 1.
  • 2.
  • 3.

查询选修1号课程的学生最高分数

select max(Grade)
from SC
where Cno='1';
  • 1.
  • 2.
  • 3.

group by:

group  by用于细化聚集函数的作用对象

如果未对查询结果分组,聚集函数将作用于整个查询结果。

对查询结果分组后,聚集函数将分别作用于每个组

按指定的一列或多列值分组,值相等的为一组

 例:求各个课程号对应的选课人数

select Cno,count(*)
from SC
group by Cno;
  • 1.
  • 2.
  • 3.

例:查询选修了3门以上课程的学生学号

select Sno
from SC
group by Sno
having count(*)>=3;
  • 1.
  • 2.
  • 3.
  • 4.

having 选择满足条件的组

where作用于表,从中选择满足条件的元组

例:查询平均成绩大于等于90分的学生学号和平均成绩

select Sno,avg(Grade)
from SC
group by Sno
having avg(Grade)>=90
  • 1.
  • 2.
  • 3.
  • 4.