内容正文:
举一反三考点练
《数据库原理与应用技术-MySQL》数据查询-讲义
(四)数据查询
1. 掌握基本查询语句SELECT的使用;
2. 掌握单表查询的相关操作:
a.查询所有字段:SELECT * FROM <表名>
b.查询部分字段:SELECT <字段名1>[,字段名2,… ] FROM <表名>
c.按条件查询:SELECT <字段名1>[,字段名2,… ] FROM <表名> WHERE <条件表达式>
SELECT语句是数据查询的核心,用于从数据表中提取所需数据。单表查询是基础,主要包括查询所有字段、查询部分字段和按条件查询。
1. 查询所有字段
SELECT * FROM 表名;
作用:返回表中所有字段的所有记录(*表示 “所有字段”)。
示例:
查询student表的所有字段和记录:
SELECT * FROM student;
注意:
效率较低:*会返回所有字段,包括不需要的字段,浪费资源,实际开发中建议指定所需字段。
字段顺序:返回字段的顺序与表定义时的字段顺序一致。
2.查询部分字段
语法:
SELECT 字段名1, 字段名2, ... FROM 表名;
作用:返回指定字段的所有记录,减少数据传输量,提高效率。
示例:
查询student表中id、name、age字段的所有记录:
SELECT id, name, age FROM student;
注意事项:
字段名之间用逗号分隔,最后一个字段后无逗号。
可通过AS为字段起别名。
3.按条件查询
语法:
SELECT 字段列表 FROM 表名 WHERE 条件表达式;
作用:返回表中符合条件表达式的记录,实现数据筛选。
条件表达式的常用运算符:
运算符类型
具体运算符 / 关键字
说明
比较运算符
=(等于)、<>/!=(不等于)、>、<、>=、<=
用于数值、字符串、日期的比较(字符串和日期需用单引号括起,如name = '张三')。
逻辑运算符
AND(且)、OR(或)、NOT(非)
组合多个条件(AND优先级高于OR,可加括号改变优先级)。
范围运算符
BETWEEN ... AND ...(在范围内)、NOT BETWEEN ... AND ...(不在范围内)
用于数值或日期的范围判断(如age BETWEEN 18 AND 22等价于age >=18 AND age <=22)。
集合运算符
IN(在集合中)、NOT IN(不在集合中)
判断值是否在指定集合内(如gender IN ('男', '女'))。
空值判断
IS NULL(为空)、IS NOT NULL(不为空)
判断字段是否为NULL(不能用= NULL,NULL表示 “未知”,需用IS NULL)。
示例:
① 查询student表中年龄大于 18 的女生的name和age:
SELECT name, age FROM student WHERE age > 18 AND gender = '女';
② 查询score表中分数在 80 到 100 之间(含 80 和 100)的sid和score:
SELECT sid, score FROM score WHERE score BETWEEN 80 AND 100;
1.已知student表结构如下:
字段名
类型
说明
id
INT
学号(主键)
name
VARCHAR(20)
姓名
gender
CHAR(1)
性别(男 / 女)
age
INT
年龄
major
VARCHAR(30)
专业
请写出查询 “计算机专业中年龄在 20 到 22 岁(含 20 和 22 岁)的男生姓名和年龄” 的 SQL 语句。
【答案】
SELECT name, age FROM student WHERE major = '计算机' AND gender = '男' AND age BETWEEN 20 AND 22;
【解析】
SELECT name, age:指定返回 “姓名” 和 “年龄” 字段;
FROM student:从student表查询;
WHERE子句组合三个条件:
major = '计算机':专业为 “计算机”(字符串用单引号);
gender = '男':性别为 “男”;
age BETWEEN 20 AND 22:年龄在 20 到 22 岁之间(等价于age >=20 AND age <=22);
条件间用AND连接,表示 “同时满足”。
1.(判断题)SELECT id, name FROM student WHERE age > 18 OR gender = '女' AND major = '中文';与SELECT id, name FROM student WHERE (age > 18 OR gender = '女') AND major = '中文';查询结果相同。( )
【答案】×
【解析】逻辑运算符中AND优先级高于OR,第一个语句等价于age > 18 OR (gender = '女' AND major = '中文'),与第二个语句(先算括号内的OR)条件不同,结果不同。
2.(填空题)查询score表中所有分数不等于 60 的记录,WHERE条件应为:WHERE score ______ 60。
【答案】<>(或!=)
【解析】<>和!=均表示 “不等于”,用于筛选分数不是 60 的记录。
3.(单项选择题)下列语句中,用于查询employee表中 “部门为‘销售部’且入职时间在 2020-01-01 之后” 的员工姓名和入职时间的是( )
A. SELECT name, hire_date FROM employee WHERE dept = 销售部 AND hire_date > 2020-01-01;
B. SELECT name, hire_date FROM employee WHERE dept = '销售部' OR hire_date > '2020-01-01';
C. SELECT name, hire_date FROM employee WHERE dept = '销售部' AND hire_date > '2020-01-01';
D. SELECT * FROM employee WHERE dept = '销售部' AND hire_date > '2020-01-01';
【答案】C
【解析】A 错误(字符串和日期未用单引号);B 错误(用OR而非AND,条件不符);C 正确(指定字段,条件正确);D 错误(查询所有字段,不符合需求)。
4.(读程序填空题)以下语句查询book表中 “价格在 50 到 100 元之间(不含 50 和 100)且出版社为‘人民邮电’” 的图书名称和价格,请补全条件:
SELECT bname, price FROM book ______ price > 50 AND price ______ 100 ______ publisher = '人民邮电';
【答案】WHERE;<;AND
1.(单项选择题)下列语句中,用于查询product表所有字段的是( )
A. SELECT ALL FROM product;
B. SELECT * FROM product;
C. SELECT 字段名 FROM product;
D. SELECT product FROM *;
【答案】B
【解析】SELECT * FROM 表名是查询所有字段的标准语法;A、D 语法错误,C 是查询部分字段。
2.(判断题)查询student表中 “年龄为空” 的记录,条件表达式应为WHERE age = NULL。( )
【答案】×
【解析】NULL表示 “未知”,不能用=判断,需用IS NULL,正确条件为WHERE age IS NULL。
3.(填空题)查询order表中 “订单状态为‘已完成’或‘已取消’” 的订单号和状态,WHERE条件应为:WHERE status ______ ('已完成', '已取消')。
【答案】IN
【解析】IN用于判断值是否在指定集合中,status IN ('已完成', '已取消')等价于status = '已完成' OR status = '已取消'。
4.(SQL 语句题)已知course表结构如下:
字段名
类型
说明
cid
INT
课程号
cname
VARCHAR(30)
课程名
credit
INT
学分
teacher
VARCHAR(20)
授课教师
写出查询 “学分大于 3 且授课教师为‘张三’” 的课程名和学分的 SQL 语句。
【答案】
SELECT cname, credit FROM course WHERE credit > 3 AND teacher = '张三';
5.(单项选择题)下列关于SELECT name AS 姓名 FROM student;的说法,正确的是( )
A. AS必须省略
B. 结果中字段名显示为 “姓名”
C. 只能查询name字段
D. 会返回所有记录的所有字段
【答案】B
【解析】AS用于给字段起别名,结果中字段名显示为别名 “姓名”;A 错误(AS可省略,如name 姓名);C 错误(可同时查询多个字段);D 错误(仅查询name字段)。
6.(判断题)SELECT id, name FROM student WHERE gender = '男' AND age BETWEEN 18 AND 20;与SELECT id, name FROM student WHERE gender = '男' AND age >=18 AND age <=20;结果相同。( )
【答案】√
【解析】BETWEEN a AND b等价于>=a AND <=b,两语句条件完全一致,结果相同。
7.(填空题)查询user表中 “注册时间在 2023-01-01 之前且未注销(status为 1)” 的用户名和注册时间,SQL 语句为:SELECT username, reg_time FROM user WHERE reg_time ______ '2023-01-01' AND status ______ 1;
【答案】<;=
【解析】“2023-01-01 之前” 用reg_time < '2023-01-01',“未注销(status 为 1)” 用status = 1。
8.(SQL 语句题)已知score表结构如下:
字段名
类型
说明
sid
INT
学生 ID
cid
INT
课程 ID
score
DECIMAL(5,2)
成绩
exam_date
DATE
考试日期
写出查询 “成绩在 60 到 70 分之间(不含 60,含 70)且考试日期为 2023-06-30” 的学生 ID、课程 ID 和成绩的 SQL 语句。
【答案】
SELECT sid, cid, score FROM score WHERE score > 60 AND score <= 70 AND exam_date = '2023-06-30';
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$