SQL之单表查询

SQL之单表查询(1)

  • SQL之单表查询(1)
    • SQL查询之选择表中的若干列(投影运算)
      • **查询表中所有或指定属性**
      • 使用函数获取表中不存在属性
    • SQL中的选择运算
      • 比较运算
      • 确定集合
      • 字符匹配
      • 空值

数据库查询是数据库的核心操作,SQL提供了 select 语句进行数据库查询。

通常的select 的子句所完成的功能类似于关系代数中的投影运算,而where的子句的功能类似于关系运算中的选择运算

SQL查询之选择表中的若干列(投影运算)

关系代数中的投影运算,对应于SQL中利用select子句指定属性的功能,与关系代数不同的是,SQL语句的投影运算默认获得投影列上的所有元组(包括所有的重复元组)。

举个栗子

查询所有学生的选课情况

select * from sc;

SQL之单表查询_第1张图片

那么对应的,假如我们要在一组数据中不重复地取一次数据,那我们该怎么办呢?

这时候就就可以使用distinct来对重复数据进行去重。

举个栗子

查询选了课的学生学号。

select distinct sno from sc;

SQL之单表查询_第2张图片

查询表中所有或指定属性

基本语法结构:

select 属性1, 属性2,属性3,属性4 from 表;

或使用 通配符 ' * '简化输出,如下:

select * from 表;

举个栗子

使用通配符 '*'型:

查询学生表中全体学生的详细记录

select * from s;

SQL之单表查询_第3张图片

逐一列举属性(列名)型:

查询所有学生的姓名以及年龄

select sname,age from s;

SQL之单表查询_第4张图片

使用函数获取表中不存在属性

使用select语句不仅可以选择出表中存在的列值,而且可以通过对列值进行计算得到表中不存在的信息

基本语法结构

select 函数或计算公式 from 表;

注意

我们在使用了函数或者计算公式得到的新数据我们的系统会生成默认字段,此时的新字段往往会晦涩难懂。因此我们可以使用关键子 as 来对新数据列名进行命名,以提高我们数据库的可读性。

举个栗子

查询所有学生的学号,姓名和出生年份,并在查询结果中修改列表题分别为“学号”、“姓名”和“出生年份”。

select sno as 学号,sname as 姓名,year(now()) - age as 出生年份 from s;

SQL之单表查询_第5张图片

说明:

year()和now()是MySQL中处理日期和时间的函数,now()返回为获取当前日期时间,year()为返回指定日期中的年,因此year(now())是获得当前年份。

SQL中的选择运算

查询满足指定条件的元组可以通过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';

SQL之单表查询_第6张图片

查询年龄小于22的学生信息。

select * from s where age <'22';

SQL之单表查询_第7张图片

查询计算机系男生的学号和姓名。

select sno,sname from s where sdept = '计算机' and sex = '男';

SQL之单表查询_第8张图片

确定集合

基本语法结构

select 属性一,属性二,属性三 from 表 where 属性一 in ('数据元素一','数据元素二');

举个栗子

查询电信、外国语、经管系的女生信息。

 select * from s where sdept in('电信','外国语','经管系') and sex = '女';

SQL之单表查询_第9张图片

查询年龄大于22的姓张的同学的学号和姓名。

 select sno,sname from s where age > 22 and sname like '张%';

SQL之单表查询_第10张图片

查询成绩在85-100之间的选课信息。

select * from sc where grade between 85 and 100;

SQL之单表查询_第11张图片

字符匹配

基本语法结构

select 属性 from 表 where 属性 like '需匹配的字符%';

举个栗子

查询课程名中带有“网络”的课程号和课程名。

select cno,cname from c where cname like '网络%';

SQL之单表查询_第12张图片

查询姓名中第二个字是“小”的学生基本信息。

select * from s where sname like '_小%';

SQL之单表查询_第13张图片

假如,用户需要查询的匹配字符串中本身就含有"%“或者”_"时,我们就可以采用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;

SQL之单表查询_第14张图片

强调:这里的 is 不能使用(=)来代替

你可能感兴趣的:(sql,数据库,mysql)