一、SQL语句的分类
SQL语句分为以下几类:
数据定义语言(Data Definition Language,DDL):用来创建或者删除数据库以及数据库对象(表、视图等)。常见的DDL语句包括CREATE、ALTER、DROP等。
数据操作语言(Data Manipulation Language,DML):用来添加、删除、修改和查询数据库记录。常见的DML语句包括SELECT、INSERT、UPDATE、DELETE等。
数据控制语言(Data Control Language,DCL):用来授予或者回收访问数据库的权限,以及对数据库进行认证。常见的DCL语句包括GRANT、REVOKE等。
事务控制语言(Transaction Control Language,TCL):用来管理数据库的事务处理。常见的TCL语句包括COMMIT、ROLLBACK、SAVEPOINT等。
二、数据定义语言(DDL)
1.CREATE
CREATE语句用来创建数据库对象,例如表、视图、函数等。其基本语法如下:
-- 创建数据库
CREATE DATABASE database_name;
-- 创建表
CREATE TABLE table_name (
column_name1 datatype [optional_constraint],
column_name2 datatype [optional_constraint],
...
[optional_table_constraint]
);
-- 创建视图
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
在使用CREATE语句创建对象时,需要注意以下几点:
CREATE DATABASE语句只能由具有管理员权限的用户执行;
表中至少要包含一列,每列都需要指定数据类型;
CREATE TABLE语句中的optional_constraint指定各种约束条件,例如PRIMARY KEY、FOREIGN KEY、CHECK、NOT NULL等;
CREATE VIEW语句中必须指定view包含哪些列,并且这些列必须是从现有表中选择的。
2.ALTER
ALTER语句用来修改数据库对象,例如表、视图、列、索引等。其基本语法如下:
-- 修改表名
ALTER TABLE table_name RENAME TO new_table_name;
-- 新增列
ALTER TABLE table_name ADD COLUMN new_column_name datatype [optional_constraint];
-- 修改列
ALTER TABLE table_name ALTER COLUMN column_name datatype [optional_constraint];
-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;
在使用ALTER语句修改对象时,需要注意以下几点:
ALTER语句应谨慎使用,因为它会修改已经存在的数据库对象,可能会对数据造成损失或影响性能;
ALTER COLUMN语句可以修改已有列的数据类型和约束条件;
DROP COLUMN语句会删除指定的列及其数据,因此应该提前备份数据。
3.DROP
DROP语句用来删除数据库对象,例如表、视图、函数等。其基本语法如下:
-- 删除数据库
DROP DATABASE database_name;
-- 删除表
DROP TABLE table_name;
-- 删除视图
DROP VIEW view_name;
在使用DROP语句删除对象时,需要注意以下几点:
DROP语句会永久删除已有的数据库对象,因此应该谨慎使用,并提前备份数据;
如果删除对象时还有其他对象依赖于它,会抛出异常并终止执行。
三、数据操作语言(DML)
1.SELECT
SELECT语句用来从数据库中查询数据,并返回查询结果集。其基本语法如下:
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name
HAVING condition
ORDER BY column_name [ASC|DESC];
在使用SELECT查询数据时,需要注意以下几点:
SELECT语句是SQL中最常用的语句之一,可以根据不同的需求对数据进行查询、汇总、统计等操作;
FROM关键字表示从哪张表中查询数据,可以同时查询多张表;
WHERE关键字用于筛选数据,只有符合条件的数据才会返回;
GROUP BY关键字用于对查询结果进行分组,可以进行聚合计算;
HAVING关键字用于在GROUP BY的基础上对分组后的结果进行筛选;
ORDER BY关键字用于根据指定列对查询结果进行排序,可以指定升序(ASC)或降序(DESC)。
2.INSERT
INSERT语句用来向数据库中插入新数据。其基本语法如下:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
在使用INSERT插入数据时,需要注意以下几点:
INSERT语句可以一次性插入多行数据,其VALUES子句需要跟随多组值;
如果插入数据时没有明确指定列名,则需要保证插入的值的顺序和表中列的定义顺序一致;
如果插入数据时涉及到外键约束,需要先插入主表的记录,再插入从表的记录。
3.UPDATE
UPDATE语句用来修改数据库中已有的数据。其基本语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
在使用UPDATE修改数据时,需要注意以下几点:
UPDATE语句可以修改一行或多行数据;
WHERE子句用来筛选需要修改的目标记录,如果没有WHERE子句,则会修改整张表的所有数据;
如果更新数据时涉及到外键约束,需要先更新主表的记录,再更新从表的记录。
4.DELETE
DELETE语句用来删除数据库中已有的数据。其基本语法如下:
DELETE FROM table_name
WHERE condition;
在使用DELETE删除数据时,需要注意以下几点:
DELETE语句可以删除一行或多行数据;
WHERE子句用来筛选需要删除的目标记录,如果没有WHERE子句,则会删除整张表的所有数据;
如果删除数据时涉及到外键约束,需要先删除从表的记录,再删除主表的记录。
四、数据控制语言(DCL)
1.GRANT
GRANT语句用来授予访问数据库的权限。其基本语法如下:
GRANT privilege_type ON object_name TO user_name;
在使用GRANT语句授权时,需要注意以下几点:
privilege_type指定授权级别,例如SELECT、INSERT、UPDATE、DELETE等;
object_name指定授权对象,例如某个表、视图等;
user_name指定被授予权限的用户,可以是具体的用户名或者角色名称。
2.REVOKE
REVOKE语句用来回收其他用户对数据库的访问权限。其基本语法如下:
REVOKE privilege_type ON object_name FROM user_name;
在使用REVOKE语句回收权限时,需要注意以下几点:
privilege_type和object_name的含义与GRANT语句相同;
user_name指定需要被回收权限的用户。
五、事务控制语言(TCL)
1.COMMIT
COMMIT语句用来提交当前事务。其基本语法如下:
COMMIT;
在使用COMMIT提交事务时,需要注意以下几点:
当前事务必须是一个已经开启的事务;
一旦提交事务,则会永久性地将所有已经执行的SQL语句影响到数据库中的数据;
COMMIT语句一般和START TRANSACTION语句一起使用。
2.ROLLBACK
ROLLBACK语句用来回滚当前事务。其基本语法如下:
ROLLBACK;
在使用ROLLBACK回滚事务时,需要注意以下几点:
当前事务必须是一个已经开启的事务;
一旦回滚事务,则会取消所有已经执行的SQL语句对数据库中数据的影响;
ROLLBACK语句一般和START TRANSACTION语句一起使用。
3.SAVEPOINT
SAVEPOINT语句用来设置一个保存点,以便在后续需要回滚部分事务时可以更好地控制回滚范围。其基本语法如下:
SAVEPOINT savepoint_name;
在使用SAVEPOINT设置保存点时,需要注意以下几点:
savepoint_name指定保存点的名称,可以自定义;
保存点设置之后,可以在后续的操作中进行回滚。
六、SQL语句的应用实战
1.创建新表
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50),
gender VARCHAR(10),
age INT
);
2.向表中插入数据
INSERT INTO student (id, name, gender, age)
VALUES (1, 'Tom', 'Male', 18);
3.查询表中所有数据
SELECT * FROM student;
4.根据条件查询数据
SELECT * FROM student
WHERE age > 20 AND gender = 'Female';
5.修改数据
UPDATE student
SET age = 19
WHERE name = 'Tom';
6.删除数据
DELETE FROM student
WHERE age < 18;
7.
创建新视图
CREATE VIEW count_by_gender AS
SELECT gender, COUNT(*) AS count
FROM student
GROUP BY gender;
以上是SQL语句的一些基本应用示例,它们可以用于构建各种不同类型的数据库系统。在实际应用中,需要根据具体的需求和场景选择不同的SQL语句进行组合,并注意语句使用的规范和注意事项。