SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。由于它具有功能丰富、使用方便灵活、语言简洁易学等突出的优点,深受计算机工业界和计算机用户的欢迎。1980年10月,经美国国家标准局ANSI的数据库委员会X3H2批准,将SQL作为关系数据库语言的美国标准,同年公布了标准SQL,此后不久,国际标准化组织ISO也作出了同样的决定。
在数据库管理中,增删改查(CRUD)是最基本也是最重要的操作。以下是每种操作的详细介绍和示例。
增(INSERT)
向数据库中添加新记录。
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);示例
假设有一个名为Students的表,初始为空。
初始表格:
| ID | Name | Age |
|---|
执行以下命令:
INSERT INTO Students (ID, Name, Age)
VALUES (1, '张三', 20);执行后的表格:
| ID | Name | Age |
|---|---|---|
| 1 | 张三 | 20 |
更多示例
向Students表中插入多行数据:
初始表格:
| ID | Name | Age |
|---|---|---|
| 1 | 张三 | 20 |
执行命令:
INSERT INTO Students (ID, Name, Age)
VALUES (2, '李四', 22), (3, '王五', 23);执行后的表格:
| ID | Name | Age |
|---|---|---|
| 1 | 张三 | 20 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
向表中插入数据,部分列使用默认值:
假设Students表的Age列有默认值18。
初始表格:
| ID | Name | Age |
|---|---|---|
| ... | ... | ... |
执行命令:
INSERT INTO Students (ID, Name)
VALUES (4, '赵六');执行后的表格:
| ID | Name | Age |
|---|---|---|
| ... | ... | ... |
| 4 | 赵六 | 18 |
插入数据时使用子查询:
假设还有一个Class表,包含学生的班级信息。
初始Students表格:
| ID | Name | Age |
|---|---|---|
| ... | ... | ... |
Class表格:
| StudentID | ClassName |
|---|---|
| 1 | 一班 |
| 2 | 二班 |
执行命令:
INSERT INTO Students (ID, Name, Age)
SELECT StudentID, '新学生', 18 FROM Class WHERE ClassName = '一班';执行后的Students表格:
| ID | Name | Age |
|---|---|---|
| ... | ... | ... |
| 1 | 新学生 | 18 |
删(DELETE)
从数据库中删除记录。
DELETE FROM table_name WHERE condition;示例
初始表格:
| ID | Name | Age |
|---|---|---|
| 1 | 张三 | 20 |
执行以下命令:
DELETE FROM Students WHERE ID = 1;执行后的表格:
| ID | Name | Age |
|---|
更多示例
根据姓名删除记录:
初始表格:
| ID | Name | Age |
|---|---|---|
| 1 | 张三 | 20 |
| 2 | 李四 | 22 |
执行命令:
DELETE FROM Students WHERE Name = '张三';执行后的表格:
| ID | Name | Age |
|---|---|---|
| 2 | 李四 | 22 |
删除特定年龄段的记录:
初始表格:
| ID | Name | Age |
|---|---|---|
| 2 | 李四 | 22 |
| 3 | 王五 | 19 |
执行命令:
DELETE FROM Students WHERE Age BETWEEN 20 AND 25;执行后的表格:
| ID | Name | Age |
|---|---|---|
| 3 | 王五 | 19 |
删除所有记录:
初始表格:
| ID | Name | Age |
|---|---|---|
| 3 | 王五 | 19 |
执行命令:
DELETE FROM Students;执行后的表格将为空。
改(UPDATE)
更新数据库中的现有记录。
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;示例
初始表格:
| ID | Name | Age |
|---|---|---|
| 1 | 张三 | 20 |
执行以下命令:
UPDATE Students
SET Age = 21
WHERE ID = 1;执行后的表格:
| ID | Name | Age |
|---|---|---|
| 1 | 张三 | 21 |
更多示例
更新特定记录的多个字段:
初始表格:
| ID | Name | Age | Grade |
|---|---|---|---|
| 1 | 张三 | 20 | B |
| 2 | 李四 | 22 | A |
执行命令:
UPDATE Students
SET Age = 23, Grade = 'A+'
WHERE ID = 1;执行后的表格:
| ID | Name | Age | Grade |
|---|---|---|---|
| 1 | 张三 | 23 | A+ |
| 2 | 李四 | 22 | A |
使用条件更新多条记录:
初始表格:
| ID | Name | Age | Grade |
|---|---|---|---|
| ... | ... | ... | ... |
执行命令:
UPDATE Students
SET Grade = 'B'
WHERE Age > 20;执行后的表格:
| ID | Name | Age | Grade |
|---|---|---|---|
| ... | ... | ... | B |
| ... | ... | ... | B |
更新记录时使用子查询:
假设还有一个ClassScores表,记录学生的成绩。
初始Students表格:
| ID | Name | Age | Grade |
|---|---|---|---|
| ... | ... | ... | ... |
ClassScores表格:
| StudentID | Score |
|---|---|
| 1 | 85 |
| 2 | 90 |
执行命令:
UPDATE Students
SET Grade = 'A'
WHERE ID IN (SELECT StudentID FROM ClassScores WHERE Score > 80);执行后的Students表格:
| ID | Name | Age | Grade |
|---|---|---|---|
| ... | ... | ... | A |
| ... | ... | ... | A |
查(SELECT)
从数据库中选择数据。
SELECT column1, column2, ...
FROM table_name
WHERE condition;示例
初始表格:
| ID | Name | Age |
|---|---|---|
| 1 | 张三 | 20 |
| 2 | 李四 | 22 |
执行以下命令:
SELECT Name FROM Students WHERE Age > 20;查询结果:
| Name |
|---|
| 李四 |
更多示例
查询特定列的数据:
初始表格:
| ID | Name | Age | Grade |
|---|---|---|---|
| 1 | 张三 | 20 | A |
| 2 | 李四 | 22 | B |
执行命令:
SELECT ID, Name FROM Students;查询结果:
| ID | Name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
使用条件和排序查询数据:
初始表格:
| ID | Name | Age | Grade |
|---|---|---|---|
| 1 | 张三 | 20 | A |
| 2 | 李四 | 22 | B |
| 3 | 王五 | 19 | B |
执行命令:
SELECT * FROM Students WHERE Grade = 'B' ORDER BY Age DESC;查询结果:
| ID | Name | Age | Grade |
|---|---|---|---|
| 2 | 李四 | 22 | B |
| 3 | 王五 | 19 | B |
使用聚合函数进行查询:
初始表格:
| ID | Name | Age | Grade |
|---|---|---|---|
| ... | ... | ... | ... |
执行命令:
SELECT AVG(Age) AS AverageAge FROM Students;查询结果:
| AverageAge |
|---|
| [平均年龄] |