SQL语言概述
目录
1 SQL简介
SQL(Structured Query Language,结构化查询语言)是一种专门用来管理关系型数据库的编程语言。它提供了一种标准的途径来查询、操作和管理数据库中的数据。
SQL最初是在20世纪70年代末由IBM的研究员提出,并在20世纪80年代成为 ANSI(美国国家标准化协会)和ISO(国际标准化组织)的标准。随后,SQL被广泛应用于各种关系型数据库管理系统(RDBMS),如Oracle、MySQL、SQL Server、PostgreSQL等。
SQL具有以下特点:
- 简单易学:SQL基于人类自然语言,其语法规则相对简单,容易理解和掌握。
- 高度灵活:SQL提供了丰富的操作和查询语句,使得用户可以灵活地对数据库进行各种操作,如创建表、查询数据、更新数据、删除数据等。
- 独立于具体数据库系统:SQL是一种标准语言,可以在不同的关系型数据库管理系统中使用。尽管不同的数据库系统可能存在一些语法差异和特定的扩展功能,但大部分SQL语句是通用的。
SQL语言主要包括以下几个方面的功能:
- 数据定义语言(DDL):用于创建、修改和删除数据库对象,如数据库、表、视图、索引等。
- 数据操作语言(DML):用于插入、查询、更新和删除数据库中的数据。
- 数据查询语言(DQL):用于从数据库中查询数据,并获取满足指定条件的结果。
- 数据控制语言(DCL):用于定义数据库的安全性和完整性规则,授权和撤销访问权限。
SQL的使用可以通过命令行界面、图形化界面工具或编程语言进行。除了基本的SQL语法,还有一些高级特性,如多表连接、子查询、事务管理等,可以进一步提高SQL的功能和灵活性。
总的来说,SQL是一种强大且广泛应用于关系型数据库管理的语言,使得用户能够方便地进行数据管理和查询工作。
举例:
普通话:各数据库厂商都遵循的ISO标准。
方言:数据库特有的关键字。
2 SQL语言分类
2.1 DDL
DDL是指数据库定义语言(Data Definition Language),用于定义和管理数据库对象,例如表、索引、视图等。
DDL语句不涉及具体数据的操作,而是用于创建、修改和删除数据库结构。
下面是对DDL语句按照操作对象分类的详细解释:
(1)对数据库的操作:
- CREATE DATABASE:用于创建数据库。
- ALTER DATABASE:用于修改数据库的属性。
- DROP DATABASE:用于删除数据库。
- USE:用于选择要使用的数据库。
(2)对表的操作:
- CREATE TABLE:用于创建表。
- ALTER TABLE:用于修改表的结构,如添加、修改或删除列、索引等。
- DROP TABLE:用于删除表。
- TRUNCATE TABLE:用于删除表中的数据,但保留表的结构。
- RENAME TABLE:用于重命名表。
(3)对列的操作:
- ALTER TABLE:通过ALTER TABLE语句,可以添加、修改或删除表的列。
- RENAME COLUMN:用于重命名表中的列。
(4)对索引的操作:
- CREATE INDEX:用于创建索引。
- DROP INDEX:用于删除索引。
(5)对约束的操作:
- CREATE TABLE:可以在CREATE TABLE语句中定义表级约束,如主键约束、唯一约束、外键约束等。
- ALTER TABLE:通过ALTER TABLE语句,可以添加、修改或删除表级约束。
(6)对视图的操作:
- CREATE VIEW:用于创建视图。
- ALTER VIEW:用于修改视图的定义。
- DROP VIEW:用于删除视图。
(7)对存储过程与函数的操作:
- CREATE PROCEDURE:用于创建存储过程。
- ALTER PROCEDURE:用于修改存储过程的定义。
- DROP PROCEDURE:用于删除存储过程。
- CREATE FUNCTION:用于创建函数。
- ALTER FUNCTION:用于修改函数的定义。
- DROP FUNCTION:用于删除函数。
(8)其他操作:
- COMMENT:用于为数据库、表、列等对象添加注释。
注意1:具体的语法和用法可能因数据库管理系统的不同而有所差异。在实际使用中,请参考相应的数据库文档以获得准确的语法和用法。
注意2:DDL语句会自动提交事务,即在执行完DDL语句后,会立即生效,并且无法回滚。因此,在执行DDL语句之前,请确保针对数据库的操作是安全的,并且确保没有正在进行的重要数据操作。
2.2 DML
DML是指数据库操作语言(Data Manipulation Language),用于对数据库中的数据进行操作,包括插入、更新和删除数据。
以下是常见的DML语句和其功能:
-
INSERT INTO:用于向数据库中插入新的行。
例:INSERT INTO mytable (column1, column2) VALUES ('value1', 'value2');
-
UPDATE:用于修改数据库中的数据。
例:UPDATE mytable SET column1 = 'new value' WHERE condition;
-
DELETE FROM:用于从数据库中删除数据。
例:DELETE FROM mytable WHERE condition;
注意1:DML语句必须在事务中执行,以确保数据的一致性和完整性。在执行DML语句之后,可以通过提交事务(COMMIT)将修改的数据永久保存到数据库中,或者通过回滚事务(ROLLBACK)来撤销对数据的修改。
注意2:DML语句也可以与DDL语句结合使用,例如可以在一个事务中先创建表(DDL),然后插入数据(DML),最后提交事务。这样可以确保数据的一致性,并且可以实现复杂的数据库操作。
2.3 DQL
DQL是指数据库查询语言(Data Query Language),用于从数据库中检索数据。
最常见的DQL语句是SELECT,它用于从一个或多个表中查询数据,并返回满足指定条件的结果集。
以下是常见的DQL语句和其功能:
-
SELECT:用于从数据库中查询数据。
例:SELECT column1, column2 FROM mytable WHERE condition;
-
FROM:指定要查询的数据表。
例:SELECT column1, column2 FROM mytable;
-
WHERE:指定查询过滤条件。
例:SELECT column1, column2 FROM mytable WHERE condition;
-
GROUP BY:按照指定的列对查询结果进行分组。
例:SELECT column1, COUNT(column2) FROM mytable GROUP BY column1;
-
HAVING:指定对分组后的结果进行过滤的条件。
例:SELECT column1, COUNT(column2) FROM mytable GROUP BY column1 HAVING COUNT(column2) > 10;
-
ORDER BY:指定查询结果的排序顺序。
例:SELECT column1, column2 FROM mytable ORDER BY column1 ASC;
-
JOIN:用于将多个表按照某些条件连接在一起进行查询。
例:SELECT t1.column1, t2.column2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id;
注意1:除了SELECT语句,DQL还可以包括其他一些语句,如子查询语句(将一个查询结果作为另一个查询的输入)、WITH语句(定义可重用的查询块)、UNION操作(将多个查询结果合并)等。
注意2:DQL语句是用于查询数据的,不会对数据库中的数据进行修改。如果需要修改数据,则需要使用DML语句(如INSERT、UPDATE和DELETE)或DDL语句(如CREATE和ALTER)来操作数据库。
2.4 DCL
DCL是指数据库控制语言(Data Control Language),用于定义数据库的安全性和完整性规则,以及授权和撤销用户对数据库对象的访问权限。
DCL语句用于管理数据库的安全性和完整性,限制哪些用户可以对数据库进行操作,以及哪些操作可以执行。通过GRANT命令,可以授予用户或用户组包括SELECT、INSERT、UPDATE、DELETE等在内的数据库操作权限。REVOKE命令可以从用户或用户组中撤销已授予的权限。DENY命令用于明确拒绝用户执行某些操作的权限。
除了权限管理,DCL还包括事务管理的命令。事务是一组数据库操作,要么全部执行,要么全部回滚。COMMIT命令用于将当前事务中的所有修改永久保存到数据库中,而ROLLBACK命令用于撤销当前事务中的所有修改。
以下是常见的DCL命令和其功能:
-
GRANT:用于向用户或用户组授予特定的数据库操作权限。
例:GRANT SELECT, INSERT ON mytable TO user;
-
REVOKE:用于从用户或用户组中撤销特定的数据库操作权限。
例:REVOKE DELETE ON mytable FROM user;
-
DENY:用于阻止用户或用户组对数据库对象进行特定的操作,即拒绝权限。
例:DENY UPDATE ON mytable TO user;
-
COMMIT:将当前事务中的所有修改永久保存到数据库中。
例:COMMIT;
-
ROLLBACK:撤销当前事务中的所有修改,恢复到事务开始前的状态。
例:ROLLBACK;
注意:DCL语句一般只能由具有特定权限的用户执行。数据库管理员(DBA)通常具有执行DCL语句的权限,以便对数据库进行有效的授权和管理。
3 SQL基本语法
(1)SQL语句可以单行或多行书写,以分号结尾。
正确的写法:
select * from students;
(2)可使用空格和缩进来增强语句的可读性。
正确的写法:
select
*
from students;
(3)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
虽然MySQL数据库的SQL语句不区分大小写,但是在实践中,为了代码的可读性和一致性,关键字通常会使用大写。
例如:
正确的写法:
SELECT * FROM user;
等价于
select * from user;
(4)可以使用单行与多行注释。
对于单行注释,可以使用"--"符号(“--”后有空格)进行注释,例如:
-- 这是单行注释,注释内容写在行的最开始位置
SELECT column1, column2
FROM mytable
WHERE condition;
对于多行注释,可以使用"/* ... */"进行注释,例如:
/*
这是多行注释,
可以写多行的注释内容,
直到遇到
*/
SELECT column1, column2
FROM mytable
WHERE condition;
需要注意的是,在使用"/* ... */"进行多行注释时,注释的开始和结束位置必须成对出现,不能嵌套使用。
注意:在SQL语句中,注释不会被执行,它们只是用来增加代码的可读性和解释性。