大家好,欢迎来到IT知识分享网。
1. 概念
SQL,全称Structured Query Language,即结构化查询语言,是用于管理关系数据库管理系统(RDBMS)的标准编程语言。SQL语言的主要功能包括数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)。
2. 分类
- 数据定义语言(DDL,Data Definition Language):这类语句用于定义不同的数据库、表、视图、索引等数据库对象,以及用来创建、删除、修改数据库和数据表的结构。主要的语句关键字包括CREATE、DROP、ALTER等。
- 数据查询语言(DQL,Data Query Language):DQL用于检索数据库中的数据,其核心指令为SELECT。它允许用户查询存储在数据库中的信息,包括从单个或多个表中检索数据。
- 数据操纵语言(DML,Data Manipulation Language):DML用于添加、删除、更新和查询数据库记录,并检查数据完整性。主要的语句关键字包括INSERT、DELETE、UPDATE等。
- 数据控制语言(DCL,Data Control Language):DCL用于定义数据库、表、字段、用户的访问权限和安全级别。它控制特定用户或角色对数据库结构和数据的访问。主要的语句关键字包括GRANT、REVOKE等。
3. 数据定义语言(DDL)
3.1 CREATE语句
CREATE语句用于创建数据库对象,如表、索引、视图等。以下是一些常见的用法。
3.1.1 创建数据库
- 语法
CREATE DATABASE 数据库名;
- 示例
CREATE DATABASE my_database;
3.1.2 创建表
- 语法
CREATE TABLE 表名 ( 列名1 数据类型, 列名2 数据类型, ... );
- 示例
CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), age INT, department_id INT );
3.1.3 创建索引
- 语法
CREATE [UNIQUE] INDEX 索引名 ON 表名 (列名);
- 示例
CREATE INDEX idx_employees_name ON employees (name);
3.1.4 创建视图
- 语法
CREATE VIEW 视图名 AS SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;
- 示例
CREATE VIEW employees_by_department AS SELECT id, name, department_id FROM employees WHERE department_id = 1;
3.2 ALTER语句
ALTER语句用于修改数据库对象的定义,如表的结构、索引等。以下是一些常见的用法。
3.2.1 添加列
- 语法
ALTER TABLE 表名 ADD 列名 数据类型;
- 示例
ALTER TABLE employees ADD salary DECIMAL(10, 2);
3.2.2 修改列
- 语法
ALTER TABLE 表名 MODIFY 列名 新数据类型;
- 示例
ALTER TABLE employees MODIFY age INT;
3.2.3 删除列
- 语法
ALTER TABLE 表名 DROP COLUMN 列名;
- 示例
ALTER TABLE employees DROP COLUMN department_id;
3.3 DROP语句
DROP语句用于删除数据库对象,如表、索引、视图等。以下是一些常见的用法。
3.3.1 删除表
- 语法
DROP TABLE 表名;
- 示例
DROP TABLE employees;
3.3.2 删除索引
- 语法
DROP INDEX 索引名 ON 表名;
- 示例
DROP INDEX idx_employees_name ON employees;
3.3.3 删除视图
- 语法
DROP VIEW 视图名;
- 示例
DROP VIEW employees_by_department;
4. 数据查询语言(DQL)
4.1 可同步看
- SQL数据查询的艺术:深入探索SELECT的无限可能
4.2 SELECT语句
4.2.1 检索所有列
- 语法
SELECT * FROM 表名;
- 示例
SELECT * FROM employees;
4.2.2 检索指定列
- 语法
SELECT 列名1, 列名2, ... FROM 表名;
- 示例
SELECT name, age FROM employees;
4.2.3 使用WHERE子句过滤数据
- 语法
SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;
- 示例
SELECT name, age FROM employees WHERE age > 30;
4.2.4 模糊查询
在SQL中,模糊查询可以使用LIKE关键字来实现。LIKE关键字用于匹配模式,可以与通配符一起使用来执行模糊查询。
- 通配符
- %:代表零个、一个或多个字符。
- _:代表一个单一字符。
- 语法
SELECT 列名1, 列名2, ... FROM 表名 WHERE 列名 LIKE '模式';
- 示例:查找以”A”开头的所有姓名
SELECT name FROM employees WHERE name LIKE 'A%';
- 示例:查找名字长度为3个字符,且第三个字符是”A”的所有姓名
SELECT name FROM employees WHERE name LIKE '_A_';
- 示例:查找包含”A”的所有姓名
SELECT name FROM employees WHERE name LIKE '%A%';
4.2.5 聚合函数:
SQL中的聚合函数用于对一组值执行计算,并返回单个值。
- 语法
SELECT COUNT(列名), MAX(列名), MIN(列名), AVG(列名), SUM(列名) FROM 表名;
- COUNT():计算指定列中非NULL值的数量。
- 语法
SELECT COUNT(column_name) FROM table_name;
- 示例:计算employees表中的记录数量
SELECT COUNT(id) FROM employees;
- SUM():计算指定列中所有值的总和。
- 语法
SELECT SUM(column_name) FROM table_name;
- 示例:计算employees表中薪水的总和
SELECT SUM(salary) FROM employees;
- AVG():计算指定列中所有值的平均值。
- 语法
SELECT AVG(column_name) FROM table_name;
- 示例:计算employees表中员工的平均年龄
SELECT AVG(age) FROM employees;
- MIN():从指定列中找到最小值。
- 语法
SELECT MIN(column_name) FROM table_name;
- 示例:找到employees表中薪水的最小值
SELECT MIN(salary) FROM employees;
- MAX():从指定列中找到最大值。
- 语法
SELECT MAX(column_name) FROM table_name;
- 示例:找到employees表中员工的最大年龄
SELECT MAX(age) FROM employees;
- 聚合函数通常与GROUP BY子句结合使用
- 语法
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;
- 下面是一些示例
- 计算每个部门的员工数量
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department;
- 计算每个部门的总薪水
SELECT department, SUM(salary) AS total_salary FROM employees GROUP BY department;
- 计算每个部门的平均薪水
SELECT department, AVG(salary) AS average_salary FROM employees GROUP BY department;
- 找到每个部门中薪水最高的员工
SELECT department, MAX(salary) AS max_salary FROM employees GROUP BY department;
- 使用聚合函数时,还需要注意以下几点:
- 聚合函数忽略NULL值。
- 可以在聚合函数中使用DISTINCT关键字来去除重复值后再进行计算。
- 聚合函数可以与其他SQL函数结合使用,以创建复杂的查询。
4.2.6 使用ORDER BY子句排序数据
- 语法
SELECT 列名1, 列名2, ... FROM 表名 ORDER BY 列名 [ASC|DESC];
- 示例
SELECT name, age FROM employees ORDER BY age DESC;
4.2.7 使用GROUP BY子句对数据进行分组
- 语法
SELECT 列名1, 列名2, ... FROM 表名 GROUP BY 列名;
- 示例
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;
4.2.8 使用HAVING子句过滤分组后的数据
- 语法
SELECT 列名1, 列名2, ... FROM 表名 GROUP BY 列名 HAVING 条件;
- 示例
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 5;
4.2.9 LIMIT查询
- 语法
SELECT 列名1, 列名2, ... FROM 表名 LIMIT 数量 OFFSET 偏移量;
- 示例
SELECT name, age FROM employees LIMIT 5, 5; -- 或者 LIMIT 5 OFFSET 5;
- 这里,LIMIT 5, 5 表示跳过前 5 条记录,然后返回接下来的 5 条记录。
4.3 DISTINCT关键字
DISTINCT关键字用于去除查询结果中的重复行。
4.3.1 去除重复行
- 语法
SELECT DISTINCT 列名1, 列名2, ... FROM 表名;
- 示例
SELECT DISTINCT department_id FROM employees;
4.4 JOIN操作
JOIN操作用于将多个表中的数据进行关联。
4.4.1 INNER JOIN(内连接)
返回两个表中满足连接条件的记录。
- 语法
SELECT 表名1.列名1, 表名2.列名2, ... FROM 表名1 INNER JOIN 表名2 ON 表名1.列名 = 表名2.列名;
- 示例
SELECT employees.name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.department_id;
4.4.2 LEFT JOIN(左连接)
返回左表中的所有记录,以及右表中满足连接条件的记录。如果右表中没有满足条件的记录,则用NULL填充。
- 语法
SELECT 表名1.列名1, 表名2.列名2, ... FROM 表名1 LEFT JOIN 表名2 ON 表名1.列名 = 表名2.列名;
- 示例
SELECT employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id;
4.4.3 RIGHT JOIN(右连接)
返回右表中的所有记录,以及左表中满足连接条件的记录。如果左表中没有满足条件的记录,则用NULL填充。
- 语法
SELECT 表名1.列名1, 表名2.列名2, ... FROM 表名1 RIGHT JOIN 表名2 ON 表名1.列名 = 表名2.列名;
- 示例
SELECT employees.name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.department_id;
5. 数据操纵语言(DML)
5.1 可同步看
- SQL中如何添加数据
- 精通SQL:数据删除的艺术
- 深入SQL:精通数据更新的多种方法
5.2 INSERT语句
INSERT语句用于向表中插入新的数据行
5.2.1 插入单行数据
- 语法
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);
- 示例
INSERT INTO employees (name, age, department_id) VALUES ('John Doe', 30, 1);
5.2.2 插入多行数据
- 语法
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), ...;
- 示例
INSERT INTO employees (name, age, department_id) VALUES ('John Doe', 30, 1), ('Jane Smith', 28, 2), ('Bob Johnson', 35, 1);
5.3 UPDATE语句
UPDATE语句用于修改表中的数据
5.3.1 更新单列数据
- 语法
UPDATE 表名 SET 列名 = 新值 WHERE 条件;
- 示例
UPDATE employees SET salary = 5000 WHERE name = 'John Doe';
5.3.2 更新多列数据
- 语法
UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2, ... WHERE 条件;
- 示例
UPDATE employees SET salary = 5000, department_id = 3 WHERE name = 'John Doe';
5.4 DELETE语句
DELETE语句用于从表中删除数据
5.4.1 删除指定行
- 语法
DELETE FROM 表名 WHERE 条件;
- 示例
DELETE FROM employees WHERE name = 'John Doe';
5.4.2 删除所有行(慎用,会删除表中所有数据)
- 语法
DELETE FROM 表名;
- 示例
DELETE FROM employees;
- 要删除表中的所有记录,也可以使用 TRUNCATE 语句
TRUNCATE TABLE employees;
6. 数据控制语言(DCL)
6.1 GRANT语句
GRANT语句用于授予用户或角色对数据库对象的操作权限
6.1.1 授予特定用户的权限
- 语法
GRANT 权限 ON 对象 TO 用户;
- 示例
GRANT SELECT ON employees TO john;
6.1.2 授予所有用户的权限
- 语法
GRANT 权限 ON 对象 TO PUBLIC;
- 示例
GRANT SELECT ON employees TO PUBLIC;
6.1.3 授予多个权限
- 语法
GRANT 权限1, 权限2 ON 对象 TO 用户;
- 示例
GRANT SELECT, UPDATE ON employees TO john;
6.2 REVOKE语句
REVOKE语句用于移除之前授予的权限
6.2.1 移除特定用户的权限
- 语法
REVOKE 权限 ON 对象 FROM 用户;
- 示例
REVOKE SELECT ON employees FROM john;
6.2.2 移除所有用户的权限
- 语法
REVOKE 权限 ON 对象 FROM PUBLIC;
- 示例
REVOKE SELECT ON employees FROM PUBLIC;
6.2.3 移除多个权限
- 语法
REVOKE 权限1, 权限2 ON 对象 FROM 用户;
- 示例
REVOKE SELECT, UPDATE ON employees FROM john;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141531.html