Administrator
发布于 2025-09-24 / 9 阅读
0
0

MySQL练习题:数据查询(NOT IN IS NULL)

1.创建学生成绩表

要求:表名(students)

  • 学号(id )整型 自动增长 主键

  • 姓名(s_name)变长字符串 非空

  • 出生日期(s_birthdate)日期格式

  • 性别(s_gender)只能输入男或女 非空

  • 家乡(s_hometown)'永年区', '肥乡区', '邯山区', '丛台区', '复兴区'

  • 语文(s_chinese)精确到小数点后2位 默认0分 大于等于0

  • 数学(s_math)精确到小数点后2位 默认0分 大于等于0

  • 外语(s_english)精确到小数点后2位 默认0分 大于等于0

  • 计算机(s_computer) 精确到小数点后2位 默认0分 大于等于0

  • 特长(s_specialty) 有无特长 默认无

create table students(
  id int primary key auto_increment,
  s_name varchar(20) not null,
  s_birthdate date ,
  s_gender enum('男','女') not null,
  s_hometown enum('永年区', '肥乡区', '邯山区', '丛台区', '复兴区') ,
  s_chinese decimal(5,2) default 0,
  s_math decimal(5,2) default 0,
  s_english decimal(5,2) default 0,
  s_computer decimal(5,2) default 0,
  s_specialty enum('是','否') default '否'
);

2.插入数据

INSERT INTO students (s_name, s_birthdate, s_gender, s_hometown, s_chinese, s_math, s_english, s_computer, s_specialty) VALUES
('王浩', '2005-03-12', '男', '丛台区', 88.50, 92.00, 85.75, 78.25, '否'),
('李思雨', '2006-07-25', '女', '邯山区', 76.00, 68.50, 94.25, 82.00, '是'),
('张宇航', '2005-11-08', '男', '复兴区', NULL, NULL, 79.50, 91.25, '否'),
('陈晓萌', '2006-02-14', '女', '丛台区', 81.25, 77.50, 88.00, 84.75, '是'),
('赵子轩', '2005-09-30', '男', '肥乡区', 65.50, 93.75, 72.00, 89.50, '否'),
('刘雨欣', '2006-05-19', '女', NULL, 95.00, 84.25, 90.50, 76.75, '否'),
('黄俊杰', '2005-12-05', '男', '丛台区', 78.75, 69.50, 81.25, 94.00, '是'),
('周诗涵', '2006-04-22', '女', '邯山区', 87.25, 91.00, 86.75, 80.50, '否'),
('吴天宇', '2005-08-17', '男', '复兴区', 72.50, 88.75, 73.25, 85.00, '否'),
('郑雨桐', '2006-01-09', '女', '丛台区', 93.00, 75.50, 97.25, 79.75, '是'),
('孙浩然', NULL, '男', '肥乡区', 84.75, 82.25, 68.50, 90.00, '否'),
('朱雅婷', '2006-10-15', '女', '永年区', 79.50, 96.75, 89.00, 83.25, '是'),
('徐子墨', '2005-04-03', '男', '丛台区', 91.25, 70.50, 84.75, 77.00, '否'),
('马欣怡', '2006-08-21', '女', '邯山区', 67.75, NULL, 95.50, 86.75, '否'),
('高博文', '2005-02-18', '男', '复兴区', 88.00, 94.50, 78.25, 92.75, '是'),
('林若曦', '2006-11-27', '女', '丛台区', 75.25, 83.75, 91.00, 81.50, '否'),
('何俊豪', '2005-07-14', '男', '肥乡区', 96.50, 76.25, 82.75, 88.00, '否'),
('罗诗雨', NULL, '女', NULL, 82.75, 90.00, 74.50, 93.25, '是'),
('梁家辉', '2005-10-31', '男', '丛台区', 89.25, 85.75, 87.00, 75.50, '否'),
('蔡雪晴', '2006-09-12', '女', '邯山区', 73.50, 78.25, 96.75, 84.00, '否'),
('宋哲瀚', '2005-01-25', '男', '复兴区', NULL, 86.50, 80.25, 89.75, '是'),
('唐语嫣', '2006-06-08', '女', '丛台区', 80.75, 92.25, 83.50, 72.00, '否'),
('许嘉豪', '2005-12-19', '男', '肥乡区', 85.25, 79.75, 90.00, 87.50, '否'),
('邓雨菲', NULL, '女', '永年区', 77.00, 95.50, 85.75, 91.25, '是'),
('钟子涵', '2005-03-27', '男', '丛台区', 90.50, 81.25, 76.00, 94.75, '否'),
('袁欣悦', '2006-07-14', '女', '邯山区', 83.75, NULL, 93.25, 79.50, '否'),
('崔天佑', '2005-11-22', '男', '复兴区', 71.25, 98.50, 84.75, 86.00, '是'),
('薛佳琪', '2006-02-09', '女', NULL, 97.00, 73.75, 88.50, 82.25, '否'),
('彭一鸣', '2005-05-16', '男', '肥乡区', 86.50, 89.25, 75.00, 95.75, '否'),
('丁雨萱', '2006-08-28', '女', '永年区', 78.25, 84.75, 97.50, 80.00, '是');

3.作业

以下是20道针对运算符 IN(), NOT IN(), IS NULL, IS NOT NULL 的MySQL查询练习题:

基础题目

1. 查询家乡在丛台区或邯山区的学生信息

2. 查询不是来自丛台区和复兴区的学生信息

3. 假设某些学生的出生日期为空,查询出生日期不为空的学生

4. 查询语文成绩为特定值(88.5, 92.75, 81.25)的学生

5. 查询数学成绩不在70-80分之间的学生

6. 查询有特长且家乡在特定区域的学生

7. 查询英语成绩不是94.25, 90.50, 97.25的学生

8. 假设某些学生的计算机成绩为空,查询计算机成绩为空的学生

9. 查询来自特定区域且没有特长的男生

10. 查询语文和数学成绩都不在特定范围内的学生

11. 查询2005年出生且家乡不在邯山区的学生

12. 查询有特长且计算机成绩为特定值的学生

13. 查询女生中语文成绩不为空且不在低分段的学⽣

14. 查询来自丛台区或复兴区,但数学成绩不在前几名的学生

15. 查询英语成绩为特定值或为空的学⽣

16. 查询不是2006年出生且家乡不在特定区域的学生

17. 查询有特长且各科成绩都不在低分段的学⽣

18. 查询男生中计算机成绩为特定值或为空的学生

19. 查询家乡在特定区域且没有特长,但成绩优秀的学生

20. 综合查询:查询不是来自特定家乡、有特长、且各科成绩都不为空的学生

基础题目

1. 查询家乡在丛台区或邯山区的学生信息

SELECT * FROM students 
WHERE s_hometown IN ('丛台区', '邯山区');

2. 查询不是来自丛台区和复兴区的学生信息

SELECT * FROM students 
WHERE s_hometown NOT IN ('丛台区', '复兴区');

3. 假设某些学生的出生日期为空,查询出生日期不为空的学生

SELECT * FROM students 
WHERE s_birthdate IS NOT NULL;

4. 查询语文成绩为特定值(88.5, 92.75, 81.25)的学生

SELECT * FROM students 
WHERE s_chinese IN (88.50, 92.75, 81.25);

5. 查询数学成绩不在70-80分之间的学生

SELECT * FROM students 
WHERE s_math NOT IN (
    SELECT s_math FROM students 
    WHERE s_math BETWEEN 70 AND 80
);

进阶题目

6. 查询有特长且家乡在特定区域的学生

SELECT * FROM students 
WHERE s_specialty = '是' 
AND s_hometown IN ('丛台区', '永年区');

7. 查询英语成绩不是94.25, 90.50, 97.25的学生

SELECT * FROM students 
WHERE s_english NOT IN (94.25, 90.50, 97.25);

8. 假设某些学生的计算机成绩为空,查询计算机成绩为空的学生

SELECT * FROM students 
WHERE s_computer IS NULL;

9. 查询来自特定区域且没有特长的男生

SELECT * FROM students 
WHERE s_hometown IN ('肥乡区', '永年区') 
AND s_specialty = '否' 
AND s_gender = '男';

10. 查询语文和数学成绩都不在特定范围内的学生

SELECT * FROM students 
WHERE s_chinese NOT IN (SELECT s_chinese FROM students WHERE s_chinese > 85) 
AND s_math NOT IN (SELECT s_math FROM students WHERE s_math < 80);

综合应用题目

11. 查询2005年出生且家乡不在邯山区的学生

SELECT * FROM students 
WHERE YEAR(s_birthdate) = 2005 
AND s_hometown NOT IN ('邯山区');

12. 查询有特长且计算机成绩为特定值的学生

SELECT * FROM students 
WHERE s_specialty = '是' 
AND s_computer IN (82.00, 84.75, 94.00);

13. 查询女生中语文成绩不为空且不在低分段的学⽣

SELECT * FROM students 
WHERE s_gender = '女' 
AND s_chinese IS NOT NULL 
AND s_chinese NOT IN (
    SELECT s_chinese FROM students 
    WHERE s_chinese < 75
);

14. 查询来自丛台区或复兴区,但数学成绩不在前几名的学生

SELECT * FROM students 
WHERE s_hometown IN ('丛台区', '复兴区') 
AND s_math NOT IN (98.50, 96.75, 95.50);

15. 查询英语成绩为特定值或为空的学⽣

SELECT * FROM students 
WHERE s_english IN (85.75, 90.50, 97.25) 
OR s_english IS NULL;

复杂逻辑题目

16. 查询不是2006年出生且家乡不在特定区域的学生

SELECT * FROM students 
WHERE YEAR(s_birthdate) != 2006 
AND s_hometown NOT IN ('肥乡区', '永年区');

17. 查询有特长且各科成绩都不在低分段的学⽣

SELECT * FROM students 
WHERE s_specialty = '是' 
AND s_chinese NOT IN (SELECT s_chinese FROM students WHERE s_chinese < 70)
AND s_math NOT IN (SELECT s_math FROM students WHERE s_math < 70)
AND s_english NOT IN (SELECT s_english FROM students WHERE s_english < 70);

18. 查询男生中计算机成绩为特定值或为空的学生

SELECT * FROM students 
WHERE s_gender = '男' 
AND (s_computer IN (78.25, 91.25, 89.50) 
     OR s_computer IS NULL);

19. 查询家乡在特定区域且没有特长,但成绩优秀的学生

SELECT * FROM students 
WHERE s_hometown IN ('丛台区', '邯山区', '复兴区') 
AND s_specialty = '否' 
AND s_chinese IS NOT NULL 
AND s_math IS NOT NULL 
AND s_chinese > 85 
AND s_math > 85;

20. 综合查询:查询不是来自特定家乡、有特长、且各科成绩都不为空的学生

SELECT * FROM students 
WHERE s_hometown NOT IN ('肥乡区', '永年区') 
AND s_specialty = '是' 
AND s_chinese IS NOT NULL 
AND s_math IS NOT NULL 
AND s_english IS NOT NULL 
AND s_computer IS NOT NULL;


评论