SQL基础语法
什么是SQL
SQL(Structured Query Language)是结构化查询语言的缩写,它是一种用于管理关系型数据库的标准语言。SQL用于执行各种数据库操作,包括查询数据、插入数据、更新数据、删除数据、创建和修改数据库对象等。
SQL的分类
DDL(Data Definition Language) - 数据定义语言
用于定义和管理数据库对象,如数据库、表、视图、索引等。
常用命令:
- CREATE:创建数据库对象
- ALTER:修改数据库对象
- DROP:删除数据库对象
- TRUNCATE:截断表中的所有数据
DML(Data Manipulation Language) - 数据操作语言
用于操作数据库中的数据,如插入、更新、删除数据等。
常用命令:
- SELECT:查询数据
- INSERT:插入数据
- UPDATE:更新数据
- DELETE:删除数据
DCL(Data Control Language) - 数据控制语言
用于控制数据库的访问权限和安全级别。
常用命令:
- GRANT:授予权限
- REVOKE:撤销权限
- DENY:拒绝权限
TCL(Transaction Control Language) - 事务控制语言
用于管理数据库事务。
常用命令:
- BEGIN/START TRANSACTION:开始事务
- COMMIT:提交事务
- ROLLBACK:回滚事务
- SAVEPOINT:设置保存点
SELECT语句
SELECT语句用于从数据库表中查询数据。
基本语法
SELECT column1, column2, ...
FROM table_name;
查询所有列
SELECT * FROM table_name;
带WHERE子句的查询
SELECT column1, column2, ...
FROM table_name
WHERE condition;
带ORDER BY子句的排序查询
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 ASC|DESC, column2 ASC|DESC, ...;
带LIMIT子句的限制查询
SELECT column1, column2, ...
FROM table_name
LIMIT number;
带OFFSET子句的分页查询
SELECT column1, column2, ...
FROM table_name
LIMIT number OFFSET offset_number;
INSERT语句
INSERT语句用于向数据库表中插入新数据。
基本语法
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
插入多条数据
INSERT INTO table_name (column1, column2, ...)
VALUES
(value1, value2, ...),
(value1, value2, ...),
...;
UPDATE语句
UPDATE语句用于更新数据库表中的现有数据。
基本语法
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
注意: 如果省略WHERE子句,将更新表中的所有行。
DELETE语句
DELETE语句用于删除数据库表中的数据。
基本语法
DELETE FROM table_name
WHERE condition;
注意: 如果省略WHERE子句,将删除表中的所有行。
CREATE语句
CREATE语句用于创建数据库对象,如数据库、表、视图、索引等。
创建数据库
CREATE DATABASE database_name;
创建表
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
PRIMARY KEY (one_or_more_columns)
);
常用数据类型:
- INT/INTEGER:整数
- FLOAT/DOUBLE:浮点数
- DECIMAL/NUMERIC:精确小数
- VARCHAR/CHAR:字符串
- DATE/DATETIME/TIMESTAMP:日期和时间
- BOOLEAN:布尔值
- BLOB/CLOB:二进制或大文本数据
常用约束:
- PRIMARY KEY:主键约束
- FOREIGN KEY:外键约束
- NOT NULL:非空约束
- UNIQUE:唯一约束
- CHECK:检查约束
- DEFAULT:默认值约束
创建视图
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
创建索引
CREATE INDEX index_name
ON table_name (column1, column2, ...);
ALTER语句
ALTER语句用于修改数据库对象的结构。
修改表
-- 添加列
ALTER TABLE table_name
ADD column_name datatype constraints;
-- 修改列
ALTER TABLE table_name
ALTER COLUMN column_name datatype constraints;
-- 删除列
ALTER TABLE table_name
DROP COLUMN column_name;
-- 添加约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name constraint_type (column_name);
-- 删除约束
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
DROP语句
DROP语句用于删除数据库对象。
删除数据库
DROP DATABASE database_name;
删除表
DROP TABLE table_name;
删除视图
DROP VIEW view_name;
删除索引
DROP INDEX index_name;
TRUNCATE语句
TRUNCATE语句用于删除表中的所有数据,但保留表的结构。
TRUNCATE TABLE table_name;
注意: TRUNCATE与DELETE的区别是,TRUNCATE是DDL命令,速度更快,不会记录日志,且不能回滚;而DELETE是DML命令,速度较慢,会记录日志,可以回滚。
WHERE子句中的运算符
在WHERE子句中,可以使用以下运算符来指定条件:
比较运算符
=:等于<>或!=:不等于<:小于>:大于<=:小于等于>=:大于等于BETWEEN:在某个范围内LIKE:模糊匹配IN:在指定的集合中IS NULL:为空IS NOT NULL:不为空
逻辑运算符
- AND:逻辑与
- OR:逻辑或
- NOT:逻辑非
GROUP BY和HAVING子句
GROUP BY子句用于分组数据,HAVING子句用于筛选分组后的结果。
SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1
HAVING condition;
常用聚合函数:
- COUNT():计数
- SUM():求和
- AVG():平均值
- MAX():最大值
- MIN():最小值
JOIN语句
JOIN语句用于根据两个或多个表之间的关系查询数据。
INNER JOIN
内连接,返回两个表中匹配的行。
SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
LEFT JOIN
左连接,返回左表中的所有行和右表中匹配的行。
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
RIGHT JOIN
右连接,返回右表中的所有行和左表中匹配的行。
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;
FULL JOIN
全连接,返回两个表中的所有行,不管是否匹配。
SELECT column1, column2, ...
FROM table1
FULL JOIN table2
ON table1.column = table2.column;
子查询
子查询是嵌套在另一个SQL语句中的查询。
作为WHERE子句的一部分
SELECT column1, column2, ...
FROM table1
WHERE column1 IN (SELECT column2 FROM table2 WHERE condition);
作为FROM子句的一部分
SELECT column1, column2, ...
FROM (SELECT column1, column2 FROM table1 WHERE condition) AS subquery_name;
作为SELECT子句的一部分
SELECT column1, (SELECT column2 FROM table2 WHERE table1.id = table2.id) AS column2_alias
FROM table1;
学习建议
SQL是学习数据库的基础,建议按照以下步骤学习:
- 掌握基本的SELECT语句和WHERE子句
- 学习INSERT、UPDATE、DELETE语句
- 了解CREATE、ALTER、DROP等DDL语句
- 学习JOIN语句,掌握多表查询
- 掌握GROUP BY、HAVING子句和聚合函数
- 学习子查询和高级查询技巧
- 实践练习,多编写SQL查询语句
- 了解不同数据库系统的SQL方言差异