一.单表查询
1.选择表中的若干列
- 查询列
从Student表中查询全体学生的学号和姓名:
select Sno,Sname from Student;
- 查询所有列
从Student表中查询学生所有信息
select * from Student 等价于 select Sno,Sname,Ssex from Student;
- 查询经过计算的值
从Student表中查询学生出生信息
select Sname,2014 - Sage from Student; #用2014年减去年龄
输出是:
可以使用别名代替 2014-Sage
select Sname,2014 - Sage birthDay from Student; #2014 - Sage birthDay 用birthDay代替
2.选择表中的若干元组
- 消除取值重复的行
从Student表中查询选修了课程的学生学号
select distinct Sno from Student; #distinct去重 默认值all
- 查询满足条件的元组
从Student表中查询软件工程系的学生姓名
select Sname from Student where Sdept = 'RJ';
字符匹配
- % 代表任意长度的字符串,如a%b,有acb,adddhhb,afnhb等以a开头,b结尾都满足该匹配值
- _ 代表任意单个字符,如a_b,有 acb,ahb等
从Student表中查询姓刘的学生姓名、学号
select Sname,Sno from Student where Sname like '刘%';
注: ‘\’斜杠转义字符 ,将%、_ 转为普通的 %、_
查询DB_Design课程的课程号和学分
select Cno,Ccredit from Course where Cname like 'DB\_Design' escape '\'; #'DB\_Design' escape '\'
3.order by 子句
用户可以用order by 子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序
查询选修3号课程学生学号和成绩,按成绩降序排列
select Sname,Grade from SC where Cno = '3' order by Grade desc;
4.聚集函数
如下
注: where子句中不能用聚集函数,聚集函数只能用于select子句和group by子句中
5.group by子句
它是将查询结果按某一列或多列的值分组,值相等的为一组
查询选修了3门课程学生学号
select Sno from SC group by Sno having COUNT(*)>3;
二.连接查询
查询每个学生及其选修课程的情况(学生情况存在Student表中,学生选课情况存在SC表中)
输出为
select Student.*,SC.* from Student,SC where Student.Sno = SC.Sno;