数据检索
一.基 本 语 句 查 询
1.select 语句是SQL语言从数据库中获取信息的一个基本语句。该语句可以实现从一个或多个数据库中的一个或多个表中查询信息,并将结果显示为另外一个二维表的形式,称之为结果集(result set)。
格式归纳:
select [all|distinct]selection_list
from table_source [where search_condition]
[group by grouping_columns][with rollup]
[having search_condition]
[order by order_expression [asc|desc]]
[limit count]
2.select 语句的简单应用
1)使用select语句查询一个数据表。使用select语句时,首先要确定所要查询的列。“*”代表所有的列。
mysql> use teaching;
Database changed
mysql> select * from course;
2)查询表中的指定列。针对表中的多列进行查询,只要在select后面指定要查询的列名即可,多列之间用“,”分隔。
mysql> select studentno,sname,phone from student;
3)在对多个表进行查询时,同样使用“,”对多个表进行分隔。也可以通过where子句中使用连接运算来确定表之间的联系。
二.单 表 查 询
1.select…from基本子句的使用
1)为字段取名
Select子句的主要功能是输出字段或表达式的值,form子句的主要功能是指定数据源。
例子:在student表中查询出生日期在2001年以后的学生的学号、姓名、电话和年龄。
mysql> select studentno as '学号',sname as '姓名',
-> phone as '手机号',year(now())-year(birthdate) as '年龄'
-> from student
-> where year(birthdate)>2001;
2)使用谓词过滤记录
如果希望一个列表没有重复值,可以利用distinct子句从结果集中除去重复的行。当使用distinct子句时,需要注意以下事项:
(1)选择列表的行集中,所有值的组合决定行的唯一性。
(2)数据检索包含任何唯一值组合的行,如果不指定distinct子句则将所有行返回到结果集中。
例子:在score表中查询期末成绩中有高于95的学生的学号和课程号,并按照学号排序。
mysql> select distinct studentno,courseno
-> from score
-> where final>95
-> order by studentno;
2.使用where 子句过滤结果集
1)查询符合指定条件的记录数据
例子:查询表student中入学成绩在800分以上的学生的学号、姓名和电话信息。
mysql> select studentno,sname,phone
-> from student
-> where entrance>800;
2)带in关键字的查询
in关键字可以判断某个字段的值是否在于指定的集合中。
例子:查询学号分别为的18135222201、18137221508和19123567897的学生学号、课程号、平时成绩和期末成绩。
mysql> select studentno,courseno ,daily ,final
-> from score
-> where studentno in('18135222201','18137221508','19123567897');
3)带between and 的范围查询
在where子句中,可以使用between搜索条件检索指定范围内的行。使用between搜索条件时,使用between搜索条件相当于用and连接两个比较条件。
例子:查询选修课程号为c05109 的学生学号和期末成绩,并且要求平时成绩在80到95之间。
mysql> select studentno, final
-> from score
-> where courseno='c05109' and daily between 80 and 95;
4)带like的字符匹配查询
like属于较常用的比较运算符,通过它可以实现模糊查询。它有两种通配符:“%”和下划线“”:
!!“%”可以匹配一个或多个字符,可以代表任意长度的字符串,长度可以为0。
!!“”只匹配一个字符。
例子:在student表中显示所有姓何或姓韩的学生的姓名、生日和Email。
mysql> select sname, birthdate, Email
-> from student
-> where sname like '何%' or sname like '韩%';
5)用is null 关键字查询空值
说明:
(1)一个字段值是空值或者不是空值,要表示为:“is null”或“is not null”。不能表示为:“=null”或“<>null”。
(2)如果写成 “字段=null”或“字段<>null”,系统的运行结果都直接处理为null值,按照false处理而不报错。
(3)where子句有以下通用格式: column is [not] null
例子:在se_score表中添加成绩字段score,查询se_score表中学生的学号、课程号和成绩。
mysql> alter table se_course
-> add score float(3,1) null after teacherno;
Query OK, 0 rows affected(1.27 sec)
mysql> select studentno, courseno,teacherno, score
-> from se_course
-> where score is null;
6)带and的多条件查询
例子:在score表中显示期中高于90分、期末成绩高于85分的学生学号、课程号和成绩。
mysql> select studentno,courseno,daily,final
-> from score
-> where daily >=90 and final >= 85;
7)带or的多条件查询
例子:查询计算机学院的具有高级职称教师的教师号、姓名和从事专业。
mysql> select teacherno,tname, major
-> from teacher
-> where department='计算机学院' and (prof='副教授'or prof='教授');