2 Star 0 Fork 2

jinzhengdong / mysql

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
MySQLDQL.md 8.85 KB
一键复制 编辑 原始数据 按行查看 历史
jinzhengdong 提交于 2023-04-09 22:32 . .

教学目标

  1. 理解什么是MySQL DQL
  2. 掌握SELECT语句的基础语法和常用操作
  3. 学会使用WHERE语句进行数据筛选和排序
  4. 了解JOIN语句和UNION语句

课程内容

什么是MySQL DQL?

DQL是MySQL中的数据查询语言,用于从MySQL数据库中检索数据。SELECT语句是DQL的主要语句。

SELECT语句的基础语法和常用操作

展示SELECT语句的基础语法,并详细介绍SELECT语句中的常用操作,如:

  • SELECT语句的基本用法(选择表、选择列)
  • 使用DISTINCT关键字去除重复行
  • 使用LIKE操作符进行模糊查找

WHERE语句进行数据筛选和排序

介绍WHERE语句的使用,以及如何使用ORDER BY进行数据排序。主要内容包括:

  • WHERE语句的基本语法(比较运算符、逻辑运算符、IN运算符等)
  • 使用ORDER BY语句进行升序或降序排序
  • 掌握常用的日期和时间函数如NOW、DATEDIFF等

JOIN语句的使用

介绍JOIN语句的使用方法以及不同类型的JOIN语句的区别。

  • JOIN语句的基本用法
  • INNER JOIN和LEFT JOIN的区别
  • 多表联接的实战操作演示

UNION语句

介绍UNION语句的用法和作用,包括如何将两个或多个SELECT语句的结果合并成一个结果集。

  • UNION语句的概念和基本用法
  • UNION ALL 和 UNION的区别
  • 实战操作演示

教学方法

  • 通过PPT进行授课,并在PPT上展示SQL命令的执行过程,以帮助学生理解SQL的执行方式
  • 提供具体的案例和练习以巩固学生的基础知识和操作技能
  • 通过实际案例演示MySQL DQL的实际应用场景,增强学生的学习兴趣和实践能力

教学评估

  • 更正基础练习的答案
  • 随堂测试考核学生对基础知识和操作技巧的掌握情况
  • 作业和实践项目,考察学生将所学内容应用到实践中的能力

附录

说课

同学们好,今天开始我们将要学习MySQL数据查询语言DQL(Data Query Language),这是用于从MySQL数据库中检索数据的语言。MySQL是一种非常流行的关系型数据库管理系统,它被应用于各种应用程序,因此MySQL DQL是数据库管理技能的重要组成部分。

MySQL DQL主要由SELECT语句组成,用于检索数据。我们将学习如何选择表和列,并使用WHERE子句和ORDER BY子句对数据进行筛选和排序。我们还将介绍JOIN子句和UNION子句的使用方法,演示多表查询和多结果集的联合查询。

在学习SELECT语句之前,我们将先对SQL语言的基本知识进行简要回顾,包括DDL数据定义语言和DML数据操纵语言。然后,我们将深入学习WHERE语句的各种用法,并使用MySQL内置函数查询日期和时间类型的数据。我们还将重点介绍比较运算符、逻辑运算符、IN运算符等,以便对各种复杂查询进行筛选。

为了使查询效率更高,我们将介绍如何使用索引优化MySQL DQL语句,以及过度使用索引对查询性能大的影响。

正则表达式也是MySQL DQL的重要一环,我们将补充讨论正则表达式的知识,以满足在检索数据时需要更加灵活和复杂的需求。

最后,我们将强调安全性和数据保护的问题。为了避免SQL注入等安全威胁,我们将介绍如何编写具有防止SQL注入等攻击的DQL语句。我们还将探讨如何保护数据库和数据,使其免受恶意攻击和未经授权的访问。

MySQL DQL是数据库管理的基础,本课程的目标是帮助您掌握MySQL DQL的基础知识和实际应用技巧。我们将提供大量实例,让您在学习过程中更好地掌握MySQL DQL的核心概念和操作,为未来的职业发展打下坚实的基础。

演示数据脚本

根据MySQL DQL教案设计,以下是相关演示数据的SQL代码脚步:

-- 学生表
CREATE TABLE students (
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    gender CHAR(1) NOT NULL,
    birthdate DATE,
    class_id INT(11) NOT NULL
);

-- 班级表
CREATE TABLE classes (
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    teacher VARCHAR(50)
);

-- 分数表
CREATE TABLE scores (
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    student_id INT(11) NOT NULL,
    course_name VARCHAR(50) NOT NULL,
    score INT(11)
);

INSERT INTO students (name, gender, birthdate, class_id) VALUES 
('张燕', 'M', '2000-01-01', 1),
('李亚萍', 'M', '1999-05-10', 2),
('张芳', 'F', '2001-07-12', 1),
('刘雯', 'F', '2002-09-02', 2),
('王建国', 'M', '1998-03-15', 1);

INSERT INTO classes (name, teacher) VALUES 
('高一数学', '张老师'),
('高二英语', '李老师');

INSERT INTO scores (student_id, course_name, score) VALUES
(1, '数学', 85),
(1, '英语', 76),
(2, '数学', 92),
(2, '英语', 90),
(3, '数学', 78),
(3, '英语', 89),
(4, '数学', 80),
(4, '英语', 88),
(5, '数学', 94),
(5, '英语', 92);

DQL教学

SELECT语句的基础语法和常用操作

  • SELECT语句的基本用法(选择表、选择列)

查询students表的所有列:

SELECT * FROM students;

查询students表中id和name两列的数据:

SELECT id, name FROM students;
  • 使用DISTINCT关键字去除重复行

查询students表中不重复的所有班级:

SELECT DISTINCT class_id FROM students;
  • 使用LIKE操作符进行模糊查找

查询students表中姓名包含“王”的所有学生:

SELECT * FROM students WHERE name LIKE '%王%';

查询students表中生日为2000年的学生:

SELECT * FROM students WHERE YEAR(birthdate) = 2000;

WHERE语句进行数据筛选和排序

  • WHERE语句的基本语法(比较运算符、逻辑运算符、IN运算符等)

查询students表中班级为1且年龄小于19岁的女生:

SELECT * FROM students WHERE class_id = 1 AND gender = 'F' AND YEAR(CURDATE())-YEAR(birthdate) < 19;

查询scores表中数学成绩在80到90分之间的学生:

SELECT * FROM scores WHERE course_name = '数学' AND score BETWEEN 80 AND 90;

查询scores表中学生的名字、科目和成绩:

SELECT s.name AS 学生姓名, sc.course_name AS 科目, sc.score AS 成绩
FROM students s
JOIN scores sc ON s.id = sc.student_id;
  • 使用ORDER BY语句进行升序或降序排序

查询students表中所有学生按照生日升序排列:

SELECT * FROM students ORDER BY birthdate ASC;

查询scores表中所有学生成绩降序排列:

SELECT * FROM scores ORDER BY score DESC;
  • 掌握常用的日期和时间函数如NOW、DATEDIFF等

查询students表中所有学生的年龄:

SELECT name, YEAR(CURDATE())-YEAR(birthdate) AS 年龄 FROM students;

JOIN语句的使用

  • JOIN语句的基本用法

查询每个学生对应的班级信息:

SELECT s.name AS 学生姓名, c.name AS 班级信息
FROM students s
JOIN classes c ON s.class_id = c.id;
  • INNER JOIN和LEFT JOIN的区别

查询所有班级信息和对应的学生信息(即使班级中没有学生也会显示):

SELECT c.name AS 班级信息, s.name AS 学生姓名
FROM classes c
LEFT JOIN students s ON c.id = s.class_id;

查询所有有成绩的学生及其对应的成绩信息:

SELECT s.name AS 学生姓名, sc.course_name AS 科目, sc.score AS 成绩
FROM students s
JOIN scores sc ON s.id = sc.student_id;

UNION语句

  • UNION语句的概念和基本用法

查询所有班级名称和所有学生成绩的科目:

SELECT name FROM classes
UNION
SELECT course_name FROM scores;
  • UNION ALL 和 UNION的区别

查询所有班级名称和所有学生成绩的科目,包括重复数据:

SELECT name FROM classes
UNION ALL
SELECT course_name FROM scores;

教学评估

DQL基础练习题

  • 查询表中的所有数据
  • 查询表中的前10条数据
  • 查询表中的第10到20条数据
  • 查询表中的所有数据并按照某个字段升序排序
  • 查询表中的所有数据并按照某个字段降序排序
  • 查询表中某个字段的最大值和最小值
  • 查询表中某个字段的平均值
  • 查询表中某个字段的总和
  • 查询表中某个字段的数量
  • 查询表中符合某个条件的数据
  • 查询表中符合多个条件的数据
  • 查询表中符合某个条件的数据并按照某个字段排序
  • 查询表中符合某个条件的数据并限制结果数量
  • 查询表中符合某个条件的数据并跳过前面的结果
  • 查询表中符合某个条件的数据并统计数量
  • 查询表中符合某个条件的数据并计算某个字段的平均值
  • 查询表中某个字段的不同取值
  • 查询表中符合某个条件的数据并分组计算某个字段的总和
  • 查询表中符合某个条件的数据并分组计算某个字段的平均值
  • 查询表中符合某个条件的数据并按照某个字段分组排序

MySQL期末考试

SQL
1
https://gitee.com/jinzhengdong/mysql.git
git@gitee.com:jinzhengdong/mysql.git
jinzhengdong
mysql
mysql
master

搜索帮助