SQL 查询实验室 V1.0

编写、测试和可视化您的 SQL 查询,实时查看结果

执行结果

当前数据状态

SQL 学习教程

创建表 (CREATE TABLE)

创建表是SQL数据库操作的基础。表是数据库中存储数据的主要对象,由行和列组成。

基本语法

CREATE TABLE 表名( 列名1 数据类型 [约束条件], 列名2 数据类型 [约束条件], ... 列名n 数据类型 [约束条件] );

常用数据类型

常用约束条件

示例

CREATE TABLE Students( StudentID INT PRIMARY KEY, StudentName VARCHAR(50) NOT NULL, Age INT CHECK(Age > 0), Gender CHAR(1), Department VARCHAR(50), EnrollmentDate DATE DEFAULT CURRENT_DATE );

数据操作 (DML - Data Manipulation Language)

数据操作语言用于向数据库添加、修改和删除数据。

INSERT - 插入数据

-- 插入完整行 INSERT INTO 表名 VALUES (值1, 值2, ..., 值n); -- 插入指定列 INSERT INTO 表名 (列1, 列2, ..., 列n) VALUES (值1, 值2, ..., 值n);

示例

-- 插入单行数据 INSERT INTO Students VALUES (1001, '张三', 20, 'M', '计算机系', '2022-09-01'); -- 插入多行数据 INSERT INTO Students (StudentID, StudentName, Department) VALUES (1002, '李四', '数学系'), (1003, '王五', '物理系');

UPDATE - 更新数据

UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... WHERE 条件;

示例

-- 更新单个学生的信息 UPDATE Students SET Age = 21, Department = '信息管理系' WHERE StudentID = 1001; -- 更新多个学生的信息 UPDATE Students SET EnrollmentDate = '2022-09-05' WHERE Department = '计算机系';

DELETE - 删除数据

DELETE FROM 表名 WHERE 条件;

示例

-- 删除指定学生 DELETE FROM Students WHERE StudentID = 1003; -- 删除满足条件的所有记录 DELETE FROM Students WHERE EnrollmentDate < '2022-01-01';

注意: 如果在DELETE或UPDATE语句中省略WHERE子句,该操作将影响表中的所有记录!

数据查询 (SELECT)

SELECT语句是SQL中最常用的命令,用于从一个或多个表中检索数据。

基本语法

SELECT 列1, 列2, ... FROM 表名 WHERE 条件;

常用子句

基本查询示例

-- 选择所有列 SELECT * FROM Students; -- 选择特定列 SELECT StudentID, StudentName, Department FROM Students; -- 使用WHERE子句过滤 SELECT * FROM Students WHERE Age > 20; -- 使用ORDER BY排序 SELECT * FROM Students ORDER BY Age DESC, StudentName ASC;

高级查询功能

聚合函数
-- 计算学生平均年龄 SELECT AVG(Age) AS AverageAge FROM Students; -- 统计每个系的学生人数 SELECT Department, COUNT(*) AS StudentCount FROM Students GROUP BY Department;
连接查询
-- 内连接 SELECT s.StudentName, c.CourseName, e.Grade FROM Students s INNER JOIN Enrollments e ON s.StudentID = e.StudentID INNER JOIN Courses c ON e.CourseID = c.CourseID; -- 左连接 SELECT s.StudentName, c.CourseName FROM Students s LEFT JOIN Enrollments e ON s.StudentID = e.StudentID LEFT JOIN Courses c ON e.CourseID = c.CourseID;
子查询
-- 查找年龄高于平均年龄的学生 SELECT * FROM Students WHERE Age > (SELECT AVG(Age) FROM Students); -- 查找至少选修了一门课程的学生 SELECT * FROM Students WHERE StudentID IN (SELECT DISTINCT StudentID FROM Enrollments);