SQL 基础
· 6 min read
SQL 基础
SQL(Structured Query Language)结构化查询语言
关系型数据库的标准操作语言
SQL 特点
- 综合统一 — 集数据定义语言(DDL)、数据操控语言(DML)、数据控制语言(DCL)功能于一体
- 高度非过程化
- 面向集合的操作方式
- 以同一种语法结构提供多种使用方式
- 语言简洁、易学易用
数据定义语言 DDL(Data Definition Language)
创建库/表
CREATE DATABASE 数据库名;
CREATE TABLE 表名 (
列名 数据类型 [约束],
...
);
/*
约束条件:
NOT NULL 取值非空
DEFAULT 指定默认值
UNIQUE 取值不能重复
NOT NULL UNIQUE
CHECK 限制取值范围
PRIMARY KEY 指定主键
FOREIGN KEY 指定外键
*/
修改表结构
ALTER TABLE 表名 ADD 新列名 数据类型 [约束] / DROP 列名 / MODIFY 列名 新数据类型 [约束];
删除库/表
DROP DATABASE 数据库名;
DROP TABLE 表名;
数据操作语言 DML(Data Manipulation Language)
插入数据
INSERT INTO 表名 [(列名1, 列名2, ...)] VALUES (值1, 值2, ...);
更新数据
UPDATE 表名 SET 列名1 = 值1 [, 列名2 = 值2] WHERE 条件;
删除数据
DELETE FROM 表名 WHERE 条件;
数据查询语言 DQL(Data Query Language)
基本查询
SELECT [ALL | DISTINCT] 列名1, 列名2, ...
FROM 表名
[WHERE 条件]
[GROUP BY 列名 [HAVING 条件]]
[ORDER BY 列名 [ASC | DESC]];
常用运算符
=、<>、!=、<、<=、>、>=BETWEEN ... AND ...IN(...)LIKE 'pattern'(%任意字符,_单个字符)IS NULL/IS NOT NULL
聚合函数
COUNT(*) -- 统计行数
SUM(列名) -- 求和
AVG(列名) -- 平均值
MAX(列名) -- 最大值
MIN(列名) -- 最小值
分组与筛选
SELECT 列名, COUNT(*) AS cnt
FROM 表名
GROUP BY 列名
HAVING COUNT(*) > 1;
排序
SELECT * FROM 表名 ORDER BY 列名 ASC; -- 升序(默认)
SELECT * FROM 表名 ORDER BY 列名 DESC; -- 降序
数据控制语言 DCL(Data Control Language)
授权
GRANT 权限1, 权限2 ON 表名 TO 用户名;
回收权限
REVOKE 权限1, 权限2 ON 表名 FROM 用户名;
常用数据类型
| 类型 | 说明 |
|---|---|
INT | 整型 |
VARCHAR(n) | 可变长度字符串,最大 n 字符 |
CHAR(n) | 固定长度字符串,n 字符 |
DATE | 日期 |
DATETIME | 日期时间 |
DECIMAL(p, s) | 精确小数,p 位精度,s 位小数 |
示例
-- 创建表
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
gender CHAR(1) CHECK(gender IN ('M', 'F'))
);
-- 插入数据
INSERT INTO students VALUES (1, 'Alice', 20, 'F');
-- 查询
SELECT name, age FROM students WHERE gender = 'F' ORDER BY age DESC;
-- 更新
UPDATE students SET age = 21 WHERE name = 'Alice';
-- 删除
DELETE FROM students WHERE id = 1;
参考
- MySQL、PostgreSQL、SQL Server、SQLite 均支持标准 SQL 语法,部分方言略有差异