【数据库】单表查询(1)

数据库查询的单表查询的第一部分

请注意,本文编写于 592 天前,最后修改于 592 天前,其中某些信息可能已经过时。

一、选择表中的若干项

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";

添加新评论

已有 3 条评论