SQL怎么写

1. SQL简介
SQL(Structured Query Language),即结构化查询语言,是一种用于管理关系数据库系统的标准化语言。SQL由IBM的基石项目(Stonebraker)研制出来,它与标准化数据库语言(如dBase、Clipper、FoxPro等)有着明显的区别。SQL被广泛应用于数据库管理系统(DBMS)中,是一种数据库查询语言。
2. SQL基本语法
2.1 SQL语句
SQL语句由一个或多个SQL命令组成,可以分为以下几类:
- DDL(数据定义语言):用于定义数据库的结构,包括创建、修改和删除表、视图、索引等。
-
DML(数据操作语言):用于对数据库中的数据进行操作,包括插入、更新、删除数据等。
-
DCL(数据控制语言):用于控制数据库用户的访问权限和安全性。
-
TCL(事务控制语言):用于管理数据库中的事务。
2.2 SQL注释
SQL支持两种注释形式:
- 单行注释:使用两个连续的减号“–”开头,后续文字直到行尾都会被注释。例如:
-- 这是单行注释
- 多行注释:使用“/”开头,使用“/”结尾,中间的内容为注释。例如:
/* 这是多行注释
注释内容
注释内容 */
2.3 SQL语句的结束
SQL语句可以用分号“;”或者换行符结束,通常习惯在每条SQL语句之后加上分号。
3. SQL查询语句
3.1 SELECT语句
SELECT语句用于检索数据库中的数据,语法如下:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
其中,
- column1, column2, …为要检索的列名;
- table_name为要检索的表名;
- condition为筛选条件,可选。
例如,查询表中所有记录:
SELECT * FROM employees;
3.2 WHERE子句
WHERE子句用于从数据库表中筛选数据,只返回满足条件的数据。例如:
SELECT * FROM employees WHERE department = 'IT';
3.3 ORDER BY子句
ORDER BY子句用于对检索的数据按指定列进行排序,默认按升序排列。例如:
SELECT * FROM employees ORDER BY salary DESC;
3.4 LIMIT子句
LIMIT子句用于限制检索的数据条数,常用于分页功能。例如:
SELECT * FROM employees LIMIT 10;
4. SQL插入数据
4.1 INSERT INTO语句
INSERT INTO语句用于向数据库表中插入新的记录,语法如下:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
例如,向employees表中插入一条记录:
INSERT INTO employees (name, department, salary)
VALUES ('John Doe', 'Marketing', 50000);
5. SQL更新数据
5.1 UPDATE语句
UPDATE语句用于更新数据库表中已有的记录,语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
例如,将employees表中所有IT部门的员工工资提高10%:
UPDATE employees
SET salary = salary * 1.1
WHERE department = 'IT';
6. SQL删除数据
6.1 DELETE语句
DELETE语句用于从数据库表中删除记录,语法如下:
DELETE FROM table_name
WHERE condition;
例如,删除employees表中工资低于30000的员工记录:
DELETE FROM employees
WHERE salary < 30000;
7. SQL聚合函数
SQL支持多种聚合函数,如COUNT、SUM、AVG、MAX、MIN等,用于对数据进行统计和计算。
7.1 COUNT函数
COUNT函数用于计算检索的记录数,例如:
SELECT COUNT(*) FROM employees;
7.2 SUM函数
SUM函数用于计算某一列的总和,例如:
SELECT SUM(salary) FROM employees;
7.3 AVG函数
AVG函数用于计算某一列的平均值,例如:
SELECT AVG(salary) FROM employees;
7.4 MAX函数
MAX函数用于计算某一列的最大值,例如:
SELECT MAX(salary) FROM employees;
7.5 MIN函数
MIN函数用于计算某一列的最小值,例如:
SELECT MIN(salary) FROM employees;
8. SQL联合查询
SQL联合查询用于从多个表中检索数据,并将结果合并成一个结果集。常用的联合查询包括UNION、UNION ALL、INTERSECT、EXCEPT等。
8.1 UNION操作符
UNION操作符用于合并两个或多个SELECT语句的结果集,去重重复的记录。
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
8.2 UNION ALL操作符
UNION ALL操作符用于合并两个或多个SELECT语句的结果集,保留重复的记录。
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
9. SQL连接查询
SQL连接查询用于在多个表之间建立关联关系,并检索相关联的数据。常用的连接查询包括内连接、外连接、自连接等。
9.1 内连接
内连接用于检索两个表中符合连接条件的记录,常用的内连接方式包括INNER JOIN、JOIN等。
SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
9.2 外连接
外连接用于检索两个表中符合连接条件的记录,并保留不符合条件的记录。常用的外连接包括LEFT JOIN、RIGHT JOIN、FULL JOIN等。
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
9.3 自连接
自连接用于对同一表进行连接操作,常用于需要将表中某一列数据与另一列数据比较的情况。
SELECT column1, column2, ...
FROM table1 AS t1
JOIN table1 AS t2
ON t1.column = t2.column;
10. SQL视图
SQL视图是一个虚拟的表,是一个SELECT语句的结果集,可作为普通表一样使用,方便对数据进行统一管理和访问。
10.1 创建视图
创建视图使用CREATE VIEW语句,语法如下:
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
例如,创建一个包含员工姓名和部门的视图:
CREATE VIEW employee_view AS
SELECT name, department
FROM employees;
10.2 查询视图
查询视图使用SELECT语句,与查询表相同:
SELECT * FROM employee_view;
10.3 更新视图
更新视图直接使用UPDATE语句,更新视图会同时更新视图本身定义的查询结果:
UPDATE employee_view
SET department = 'Sales'
WHERE name = 'John Doe';
10.4 删除视图
删除视图使用DROP VIEW语句,语法如下:
DROP VIEW view_name;
例如,删除之前创建的employee_view视图:
DROP VIEW employee_view;
11. SQL事务管理
SQL事务是数据库中的一组操作单元,要么全部执行成功,要么全部执行失败。SQL事务管理包括事务的开始、提交、回滚等操作。
11.1 事务的开始
事务的开始使用BEGIN TRANSACTION语句。
11.2 提交事务
提交事务使用COMMIT语句,意味着事务执行成功。
11.3 回滚事务
回滚事务使用ROLLBACK语句,意味着事务执行失败或者撤销之前的操作。
BEGIN TRANSACTION;
UPDATE employees
SET salary = salary * 1.1
WHERE department = 'IT';
COMMIT;
12. SQL索引
SQL索引是数据库表中某一列或多列的值进行排序的一种结构,可以提高查询效率。常见的索引类型包括主键索引、唯一索引、普通索引等。
12.1 创建索引
创建索引使用CREATE INDEX语句,语法如下:
CREATE INDEX index_name
ON table_name (column1, column2, ...);
例如,为employees表中的salary列创建索引:
CREATE INDEX salary_index
ON employees (salary);
12.2 删除索引
删除索引使用DROP INDEX语句,语法如下:
DROP INDEX index_name;
例如,删除之前创建的salary_index索引:
DROP INDEX salary_index;
13. SQL约束
SQL约束是用来限制字段值的有效性和完整性的规则,包括NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY等。
13.1 NOT NULL约束
NOT NULL约束用于确保字段不为空。
CREATE TABLE employees (
ID INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
department VARCHAR(255) NOT NULL
);
13.2 UNIQUE约束
UNIQUE约束用于确保字段中的值唯一。
CREATE TABLE employees (
ID INT PRIMARY KEY,
name VARCHAR(255) UNIQUE,
department VARCHAR(255)
);
13.3 PRIMARY KEY约束
PRIMARY KEY约束用于定义表的主键。
CREATE TABLE employees (
ID INT PRIMARY KEY,
name VARCHAR(255),
department VARCHAR(255)
);
13.4 FOREIGN KEY约束
FOREIGN KEY约束用于定义表之间的关系。
CREATE TABLE employees (
ID INT PRIMARY KEY,
name VARCHAR(255),
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(ID)
);
14. SQL存储过程
SQL存储过程是一组预先编译好的SQL语句,存储在数据库中,可以在需要时被调用执行。
DELIMITER //
CREATE PROCEDURE get_employee_salary(IN emp_name VARCHAR(255), OUT emp_salary INT)
BEGIN
SELECT salary INTO emp_salary FROM employees WHERE name = emp_name;
END //
DELIMITER ;
15. SQL触发器
SQL触发器是一种特殊的存储过程,当表中的数据发生变化时会自动触发执行一系列操作。
CREATE TRIGGER before_insert_employee
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
SET NEW.salary = NEW.salary * 1.1;
END;
以上是SQL的基本语法和常用操作,通过学习和实践,可以更好地掌握SQL的使用方法。
极客教程