SQL语法基础
基础
什么是 SQL
SQL(Structured Query Language,结构化查询语言)是操作关系型数据库的标准语言,用于定义、查询、更新和管理数据。
通用特性
大小写不敏感 :关键字、库名、表名、列名在 Windows 平台默认不区分大小写;Linux 区分,建议统一小写 + 下划线命名。
语句结束符:单条或多条语句均以英文分号
;结束。可换行缩进:提高可读性,解析器会忽略多余空白。
支持表达式与函数:
SELECT 1+1, NOW();即可直接返回结果。
注释
SQL 支持以下三种注释:
sql# 注释 SELECT * FROM mytable; -- 注释 /* 注释1 注释2 */SQL 四大分类(CRUD 视角)
分类 缩写 常见动词 典型作用 DDL Data Definition Language CREATE / DROP / ALTER 定义库、表、列、索引等结构 DML Data Manipulation Language INSERT / UPDATE / DELETE 增删改“行”数据 DQL Data Query Language SELECT 查询数据(只读) DCL Data Control Language GRANT / REVOKE 权限、事务、安全
DDL操作(数据定义)
库操作
查看当前所有库
sqlSHOW DATABASES;查看当前使用的库
sqlSELECT DATABASES();使用某个库
sqlUSE 库名;创建库
sqlCREATE DATABASE 库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CHARACTER SET : 字符集,推荐utf8mb4
COLLATE : 排序方式, 推荐utf8mb4_unicode_ci
删除库
sqlDROP DATABASE 库名;
表操作
- 查看当前库中的表sql
SHOW TABLES; - 创建表sql
CREATE TABLE 表名( 列1 列类型 是否可空, 列2 列类型 是否可空, ...); - 删除表sql
DROP TABLE 表名; DROP TABLE IF EXISTS 表名;
DML操作(数据操作)
插入数据
sql-- 基础语法 INSERT INTO 表名(列1, 列2, ...) VALUES(值1, 值2, ...), (值1, 值2, ...), ...; -- 示例: -- 仅插入id列数据 INSERT INTO student(id) VALUES(10001), (10002), (10003); -- 插入全部列数据 INSERT INTO student(id, name, age) VALUES(10001, '周杰轮', 31), (10002, '王力宏', 33), (10003, '林俊杰', 26); /* 插入全部列数据(快捷写法) 此时参数顺序要和列名顺序一致 */ INSERT INTO student VALUES(10001, '周杰轮', 31), (10002, '王力宏', 33), (10003, '林俊杰', 26);删除数据
sql-- 基础语法 DELETE FROM 表名 [WHERE 条件判断]; -- 示例: -- 删除 student 表中 name = 林俊杰 的数据 DELETE FROM student WHERE name = '林俊杰'; -- 删除 student 表中 age > 33 的数据 DELETE FROM student WHERE age>33; -- 删除 student 表中全部数据 DELETE FROM student;修改数据
sql-- 基础语法 UPDATE 表名 SET 列 = 值 [WHERE 条件判断]; -- 示例: -- 在 student 将 id = 10001 的 同学的 name 改为 陈奕迅 UPDATE student SET name = '陈奕迅' WHERE id = 10001; -- 在student表中修改全部数据的 age 为 11 UPDATE student SET age = 11;
DQL操作(数据控制)
基础查询
sql-- 基本语法 SELECT 列名1, 列名2, ... FROM 表名 [WHERE 条件] [GROUP BY 分组列] [HAVING 分组条件] [ORDER BY 排序列 [ASC|DESC]] [LIMIT 行数]; -- 示例 -- 查询 student 表中 id, name 两列 SELECT id, name FROM student; -- 查询 student 表中 全部列 SELECT * FROM student; --条件查询(过滤)
sql-- 基础语法 SELECT 列1, 列2 FROM 表名 WHERE 条件; -- 示例 -- 查询 student 表中 age >= 18 的同学的 name 和 id SELECT id, name FROM student WHERE age >= 18;分组聚合
sql-- 基础语法 -- 要注意 select 后的列要和 GROUP BY 后的列一致 SELECT 列1, 列2, ...|聚合函数 FROM 表名 WHERE 条件 GROUP BY 列1, 列2...; -- 示例: -- 按性别统计学生的数量 SELECT gender, COUNT(*) AS stu_count FROM student GROUP BY gender; -- 分组前筛选(WHERE) -- 只统计 age > 18 的学生, 按性别统计学生的数量 SELECT gender, COUNT(*) AS oldstu_count FROM student WHERE age > 18 GROUP BY gender; -- 分组后筛选(HAVING) -- 统计各个部门平均薪资, 只显示平均薪资大于8000的部门 SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING AVG(salary) > 8000;- 常用聚合函数
count(): 计数COUNT(*)统计行数SUM(): 求和SUM(salary)计算总和AVG(): 求平均值AVG(age)计算平均年龄MAX(): 最大值MAX(price)找出最高价格MIN(): 最小值MIN(date)找出最早日期
- 常用聚合函数
排序分页
sql-- 排序基础语法 SELECT 列1, 列2, ...|聚合函数 FROM 表名 WHERE 条件 GROUP BY 列1, 列2, ... ORDER BY 列 [ASC|DESC]; -- ASC: 升序(默认); DESC: 降序 -- 示例: -- 员工表中先按部门升序,再按薪资降序 SELECT name, department, salary FROM employees ORDER BY department ASC, salary DESC; -- 按名字长度排序 SELECT name FROM employees ORDER BY LENGTH(name); -- 按计算结果排序 SELECT prodect_name, (price * discount) AS final_price FROM products ORDER BY final_price DESCsql-- 分页基础语法 SELECT 列1, 列2, ...|聚合函数 FROM 表名 WHERE 条件 GROUP BY 列1, 列2, ... ORDER BY 列 [ASC|DESC] LIMIT n[,m]; -- n: 偏移量, 跳过前 n 个数据; m: 每页 m 条数据 -- 示例 -- 获取第2页数据,每页10条 SELECT * FROM products ORDER BY id LIMIT 10, 10;