通常的select 的子句所完成的功能类似于关系代数中的投影运算,而where的子句的功能类似于关系运算中的选择运算。
关系代数中的投影运算,对应于SQL中利用select子句指定属性的功能,与关系代数不同的是,SQL语句的投影运算默认获得投影列上的所有元组(包括所有的重复元组)。
举个栗子
查询所有学生的选课情况。
select * from sc;
那么对应的,假如我们要在一组数据中不重复地取一次数据,那我们该怎么办呢?
这时候就就可以使用distinct来对重复数据进行去重。
举个栗子
查询选了课的学生学号。
select distinct sno from sc;
基本语法结构:
select 属性1, 属性2,属性3,属性4 from 表;
或使用 通配符 ' * '
简化输出,如下:
select * from 表;
举个栗子
使用通配符 '*'
型:
查询学生表中全体学生的详细记录。
select * from s;
逐一列举属性(列名)型:
查询所有学生的姓名以及年龄。
select sname,age from s;
使用select语句不仅可以选择出表中存在的列值,而且可以通过对列值进行计算得到表中不存在的信息
基本语法结构
select 函数或计算公式 from 表;
注意
我们在使用了函数或者计算公式得到的新数据我们的系统会生成默认字段,此时的新字段往往会晦涩难懂。因此我们可以使用关键子 as 来对新数据列名进行命名,以提高我们数据库的可读性。
举个栗子
查询所有学生的学号,姓名和出生年份,并在查询结果中修改列表题分别为“学号”、“姓名”和“出生年份”。
select sno as 学号,sname as 姓名,year(now()) - age as 出生年份 from s;
说明:
year()和now()是MySQL中处理日期和时间的函数,now()返回为获取当前日期时间,year()为返回指定日期中的年,因此
year(now())
是获得当前年份。
查询满足指定条件的元组可以通过where子句来实现。
where子句常用的查询条件如下表:
查询条件 | 谓词 |
---|---|
比较 | = 、<>、>、<、>=、<= |
算术运算 | +、-、*、/ |
确定范围 | between、and、not between and |
确定集合 | in、not in |
字符匹配 | like、not like |
空值 | is null、is not null |
多重条件 | and,or |
基本语法结构
select 属性一,属性二 from 表 where 比较条件;
举个栗子
查询学分为64的课程号和课程名。
select cno,cname from c where credit = '64';
查询年龄小于22的学生信息。
select * from s where age <'22';
查询计算机系男生的学号和姓名。
select sno,sname from s where sdept = '计算机' and sex = '男';
基本语法结构
select 属性一,属性二,属性三 from 表 where 属性一 in ('数据元素一','数据元素二');
举个栗子
查询电信、外国语、经管系的女生信息。
select * from s where sdept in('电信','外国语','经管系') and sex = '女';
查询年龄大于22的姓张的同学的学号和姓名。
select sno,sname from s where age > 22 and sname like '张%';
查询成绩在85-100之间的选课信息。
select * from sc where grade between 85 and 100;
基本语法结构
select 属性 from 表 where 属性 like '需匹配的字符%';
举个栗子
查询课程名中带有“网络”的课程号和课程名。
select cno,cname from c where cname like '网络%';
查询姓名中第二个字是“小”的学生基本信息。
select * from s where sname like '_小%';
假如,用户需要查询的匹配字符串中本身就含有"%“或者”_"时,我们就可以采用escape’ \ ',对通配字符进行转义。
举个栗子
查找课程名是DB_Design课程的课程号、课程性质。
select 课程号,课程性质 from 课程 where 课程名 like 'DB\_Design' escape'\';
==escape’ \ '==短语表示“\”为转义字符,这样匹配串紧跟在“\”后面的字符“_”就不在具有通配符的含义。
基本语法结构
select 属性一,属性二 from 表 where 属性一 is null;
举个栗子
查询成绩为空的学号和课程号。
select sno,cno from sc where grade is null;
强调:这里的 is 不能使用(=)来代替