一、选择表中的若干项
1、查询指定列
【例】查询全体学生的学号与姓名。
select Sno,Sname from student;
2、查询全部列。
【例】查询全体学生的详细记录。
select * from student;
3、查询经过计算的值。
【例】查询全体学生的姓名及其出生年月。
select Sname,2022-Sage as birthday from student;
【例】查询全体学生的姓名、出生年月和所在院系,使用小写表示院系。
select Sname,2022-Sage as birthday,lower(Sdep) as department from student;
二、选择表中的若干元组
1、去除重复数据
【例】去除结果表中的重复行
select distinct Sno from sc;
2、查询满足条件的元组。
可以通过where子句实现。
查询条件 | 谓词 |
---|---|
比较 | =,>,<,>=,!=,!<,!> |
确定范围 | between and,not between and |
确定集合 | in,not in |
字符匹配 | like,is not like |
多重条件 | and,or,not |
注意:!=或<>是不等于
① 比较大小
【例】查询所有年龄在20岁以下的学生姓名及其年龄
select * from student where Sage<20;
【例】查询考试成绩不合格的学生的学号。
select distinct Sno from sc where Grade<60;
② 确定范围
【例】查询年龄在20~23岁之间的学生的姓名、系别和年龄。
select * from student where Sage between 20 and 23;
【例】查询年龄不在20~23岁之间的学生姓名、系别和年龄。
select * from student where Sage not between 20 and 23;
③ 确定集合
【例】查询计算机CS,数学MA和信息IS学生的姓名和性别。
select Sname,Ssex from student where Sdep in("CS","MA","IS");
【例】查询不是计算机CS,数学MA和信息IS学生的姓名和性别。
select Sname,Ssex from student where Sdep not in("CS","MA","IS");
④ 字符匹配
like可以用来进行字符串的匹配。
- %代表任意长度的(长度可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串。如ab,acb,acdb。
- _(下划线)代表任意单个字符。例如a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb、afb等都满足该匹配值。
如果like后面的匹配串不含通配符,则可以用=运算符取代like,用!=或<>取代not like。
【例】查询所有姓刘的学生的姓名、学号和性别。
select Sname,Ssex,Sno from student where Sname like "刘%";
【例】查询“欧阳”且全名为三个汉字的学生的姓名。
select Sname from student where Sname like "欧阳_";
【例】查询名字中第二个字为“阳”的学生的姓名、学号和性别。
select Sname,Sno,Ssex from student where Sname like "_阳%";
【例】查询所有不姓刘的学生的姓名、学号和性别。
select Sname,Sno,Ssex from student where Sname not like "刘%";
如果用户要查询的字符串本身就含有通配符%或_,这时就要使用escape'<换码字符>'短语对通配符进行转义了。
【例】查询DB_Design课程的课程和学分。
select Cno,Ccredit from Course where Cname like 'DB\_Design' escape'\';
【例】查询以“DB_”开头,且倒数第三个字符为i的课程的详细课程。
select * from course where Cname like 'DB\_%i__' escape'\';
注意,在mysql中,不用 escape'\'
⑤ 涉及空值的查询。
【例】查询缺少成绩的学生的学号和相应的课程号。
select Sno,Cno from sc where Grade is null;
⑥多重条件查询。
【例】查询计算机科学系年龄在20岁以下的学生姓名。
select Sname from student where Sage<20 and Sdep="CS";
😘
😂