实验7 单表条件查询
一、实验目的
(1) 掌握SELECT语句的基本用法。
(2) 使用WHERE子句进行有条件的查询。
(3) 掌握使用IN和NOT IN,BETWEEN…AND和NOT BETWEEN…AND来缩小查询范围的方法。
(4) 利用LIKE子句实现字符串匹配查询。
二、实验要求
1、学生提前准备好实验报告,预习并熟悉实验步骤;
2、遵守实验室纪律,在规定的时间内完成要求的内容;
3、1~2人为1小组,实验过程中独立操作、相互学习。
三、实验内容及步骤
- 数据查询语句的语法结构
(1)数据查询是数据库中最常见的操作,数据查询的语法结构如下:
SELECT 子句1
FROM 子句2
[WHERE 表达式1]
[GROUP BY 子句3
[HAVING 表达式2]]
[ORDER BY 子句4]
[UNION 运算符]
[LIMIT [M,]N]
[INTO OUTFILE 输出文件名];
功能及说明如下:
- SELECT子句:指定结果要展现哪些列,是普通的已经存在的列还是你有特殊要求的列;
- FROM子句:指定从哪儿查询,表还是视图;
- WHERE表达式:指定查询的搜索条件,只展示你需要的行数据;
- GROUP BY子句:查询到的结果需要分组显示;
- HAVING表达式:分组后的数据不全部显示,根据条件展现部分;
- ORDER BY子句:指定查询结果的排序方法,升序或降序;
- UNION运算符:将多个SELECT语句查询结果组合为一个结果集;
- LIMIT [M,]N]:指定查询结果的范围,并不全部展现;
- INTO OUTFILE输出文件名:将查询结果输出到指定文件中;
- 单表条件数据查询
(1)单表条件数据查询格式如下:
SELECT [ALL|DISTINCT] <选项> [AS<显示列名>] [,<选项> [AS<显示列名>][,…]]
FROM <表名|视图名>
WHERE <条件表达式>;
(2)完成如下练习,将执行结果截图在下方。
==比较运算符
- 查询所有成绩大于80分的学生的学号和成绩;
- 查询所有男生的学号、姓名、系别及出生日期;
- 查询计算机工程系全体学生的名单;
- 查询考试成绩不及格的学生的学号;
==逻辑运算符
- 查询计算机工程系女生的信息;
- 查询成绩在90分以上或不及格的学生学号和课程号信息;
- 查询非计算机工程系的学生信息;
- 查询电子工程系的男生信息;
- 查询计算机工程系和电子工程系学生的姓名,性别和出生日期,显示列名分别为“姓名”、“性别”和“出生日期”;
==范围运算符
语法格式:表达式 [NOT] BETWEEN 初始值 AND 终止值
其中,NOT为可选项,初始值表示范围的下限,终止值表示范围的上限。
注意:绝对不允许初始值大于终止值!!!
- 查询考试成绩在60~70分的学生学号和成绩;
- 查询考试成绩小于60或者大于90的学生学号和成绩;
==字符匹配符
语法格式:WHERE 字段名 [NOT] LIKE '字符串' [ESCAPE '转义字符']
应用场景:需要对字符串进行模糊查询
通配符及其说明:
- %:任意多个字符
- _:任意一个字符
ESCAPE '转义字符'的作用是当用户要查询的字符串本身含有通配符时,可以使用该选项对通配符进行转义。
- 查询所有姓李的学生的个人信息;
- 查询生源地不是山东省的所有学生信息;
- 查询名字中第2个字为“阳”字的学生的姓名和学号;
- 查询学号为“2007010103”的学生姓名和性别;
- 查询课程名称里带了JAVA_的课程信息;
==正则表达式
语法格式:WHERE 字段名 REGEXP '操作符'
什么是正则表达式:正则表达式即一种描述字符串结构的语法规则,其作用是用于检索和替换符合某一特定规则的文本内容。
- 查询家庭住址以“济”开头的学生信息;
2.查询家庭住址以“号”结尾的学生信息;
==列表运算符
列表运算符(IN或NOT IN)
语法格式:WHERE 表达式 [NOT] IN 值列表
注意:值列表中不允许出现空值
- 查询信息工程系、软件工程系和计算机工程系学生的姓名和性别;
==空值查询
涉及空值的查询(NULL或NOT NULL)
语法格式:WHERE 字段 IS [NOT] NULL
- 因为某些学生选修课程后没有参加考试,所以有选修记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号;
- 查询所有有成绩的学生学号和课程号;
四、思考题
1、WHERE子句中常用的运算符有哪几种?
算数 逻辑 比较
2、LIKE的通配符有哪些?分别代表什么含义?
通配符及其说明:
Ø%:任意多个字符
_:任意一个字符
3、知道学生的出生日期,如何求出其年龄?
YEAR(CURDATE())-YEAR(sbirthday)
4、IS能用“=”来代替吗?
不可以的,is是用来判断null的
- 数据的范围除了可以利用BETWEEN…AND运算符表示外,能否用其他方法表示?怎样表示?
select * from sc where degree between 60 and 70 ;
select * from sc where degree >=60 and <=70 ;