目录
基础查询语句
组合查询语句
高级查询语句
常用函数
FAQ
相似概念对比
基础查询语句
创建数据库和表格
在开始讲解查询语句之前,我们需要创建一个数据库和表格,以便进行后续的查询操作。以下是创建数据库和表格的SQL语句:
-- 创建数据库
CREATE DATABASE CTFSTU;
-- 使用数据库
USE CTFSTU;
-- 创建学生表格
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50),
sex VARCHAR(10),
birthday DATE,
department VARCHAR(50)
);
-- 创建分数表格
CREATE TABLE score (
id INT PRIMARY KEY,
student_id INT,
score INT,
subject VARCHAR(50)
);
-- 插入数据
INSERT INTO student (id, name, sex, birthday, department) VALUES
(901, '张三', '男', '1990-01-01', '中文系'),
(902, '李四', '女', '1990-02-02', '英文系'),
(903, '王五', '男', '1990-03-03', '计算机系');
INSERT INTO score (id, student_id, score, subject) VALUES
(1, 901, 90, '数学'),
(2, 902, 85, '数学'),
(3, 903, 95, '数学');
基础查询语句
SELECT 语句
SELECT 语句用于从数据库中选择数据。它可以用于选择一个或多个列,或选择所有列。
-- 选择所有列
SELECT * FROM student;
-- 选择特定列
SELECT name FROM student;
-- 选择多个列
SELECT id, name FROM student;
FROM 语句
FROM 语句用于指定查询的表格。它告诉SQL从哪个表格中选择数据。
-- 从student表格中选择数据
SELECT name FROM student;
WHERE 语句
WHERE 语句用于过滤查询结果,只返回满足特定条件的数据。
-- 查询张三的信息
SELECT * FROM student WHERE id = 901;
-- 查询中文系的学生
SELECT * FROM student WHERE department = '中文系';
嵌套查询
嵌套查询是指在一个查询语句中嵌入另一个查询语句。嵌套查询通常用于获取复杂的数据。
-- 查询王五的分数
SELECT * FROM score WHERE student_id = (SELECT id FROM student WHERE name = '王五');
组合查询语句
UNION 语句
UNION 语句用于合并两个或多个 SELECT 语句的结果。UNION 语句要求所有 SELECT 语句的列数相同。
-- 查询学生ID和分数ID
SELECT id FROM student UNION SELECT student_id FROM score;
列数匹配
在使用 UNION 时,必须确保两个查询的列数相同。如果不相同,可以通过添加虚拟列来匹配列数。
-- 列数不匹配时的处理
SELECT * FROM student WHERE id = 901 UNION SELECT *, 0, 0 FROM score WHERE student_id = 901;
高级查询语句
GROUP BY 语句
GROUP BY 语句用于将结果集按一个或多个列进行分组。通常与聚合函数一起使用。
-- 统计每个系的学生数量
SELECT department, COUNT(*) FROM student GROUP BY department;
ORDER BY 语句
ORDER BY 语句用于对结果集进行排序。可以按升序(ASC)或降序(DESC)排序。
-- 按分数降序排序
SELECT * FROM score ORDER BY score DESC;
LIMIT 语句
LIMIT 语句用于限制查询结果的数量。可以指定从哪一行开始返回结果。
-- 从第一行开始返回三行
SELECT * FROM student LIMIT 0, 3;
AND 和 OR 语句
AND 和 OR 语句用于组合多个条件。AND 表示所有条件都必须满足,OR 表示满足任意一个条件即可。
-- 查询英语系的男生
SELECT * FROM student WHERE department = '英文系' AND sex = '男';
-- 查询英语系的学生或男生
SELECT * FROM student WHERE department = '英文系' OR sex = '男';
常用函数
GROUP_CONCAT 函数
GROUP_CONCAT 函数用于将多行数据合并为一行,通常用于注入时的单行输出。
-- 将所有ID合并为一行
SELECT GROUP_CONCAT(id) FROM student;
DATABASE() 和 VERSION() 函数
DATABASE() 函数返回当前使用的数据库名称,VERSION() 函数返回MySQL的版本信息。
-- 查询当前数据库名称
SELECT DATABASE();
-- 查询MySQL版本
SELECT VERSION();
FAQ
问题 答案
SELECT 语句的作用是什么? SELECT 语句用于从数据库中选择数据,可以用于选择一个或多个列,或选择所有列。
UNION 语句的使用场景是什么? UNION 语句用于合并两个或多个 SELECT 语句的结果,要求所有 SELECT 语句的列数相同。
GROUP BY 和 ORDER BY 的区别是什么? GROUP BY 用于将结果集按一个或多个列进行分组,通常与聚合函数一起使用。ORDER BY 用于对结果集进行排序。
相似概念对比
概念 描述 区别
AND 用于组合多个条件,所有条件都必须满足 AND 表示所有条件都必须满足,OR 表示满足任意一个条件即可
OR 用于组合多个条件,满足任意一个条件即可 AND 表示所有条件都必须满足,OR 表示满足任意一个条件即可
GROUP BY 用于将结果集按一个或多个列进行分组 GROUP BY 用于分组,ORDER BY 用于排序
ORDER BY 用于对结果集进行排序 GROUP BY 用于分组,ORDER BY 用于排序
结语
本文详细讲解了MySQL中的常用查询指令,从基础查询语句到高级查询语句,包括SELECT、FROM、WHERE、UNION、GROUP BY、ORDER BY、LIMIT等,帮助读者掌握SQL注入中的查询技巧。同时,介绍了常用函数如GROUP_CONCAT、DATABASE()和VERSION(),并提供了FAQ和相似概念对比,帮助读者更好地理解和应用这些查询指令。