本文最后更新于57 天前,其中的信息可能已经过时,如有错误请发送邮件

一、SQL 基础语法核心
所有SQL语句都遵循一个原则:关键字不区分大小写,语句结尾必须加分号 ;书写时建议关键字大写,可读性更强。
1. 数据库 & 表基础操作(DDL)
复习第一步:先会建库、建表、删库、删表,是所有操作的基础。
— 创建数据库
CREATE DATABASE IF NOT EXISTS test_db;
— 使用数据库
USE test_db;
— 删除数据库
DROP DATABASE IF EXISTS test_db;
— 创建数据表(最常用示例:用户表)
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
username VARCHAR(20) NOT NULL COMMENT '用户名',
age INT DEFAULT 0 COMMENT '年龄',
create_time DATETIME DEFAULT NOW() COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
— 删除表
DROP TABLE IF EXISTS user;
2. 数据增删改(DML)
— 新增数据 INSERT
INSERT INTO user(username,age) VALUES ('张三',20),('李四',22);
— 修改数据 UPDATE(必须加WHERE,否则改全表)
UPDATE user SET age=21 WHERE username='张三';
— 删除数据 DELETE(必须加WHERE,否则删全表)
DELETE FROM user WHERE username='李四';
二、DQL 查询语法
查询是SQL的灵魂,无论是开发查数据、数据分析统计,90%的工作都是写查询语句。
1. 基础查询语法结构(固定顺序,必须牢记)
完整查询语句执行顺序:
SELECT 字段 FROM 表名 WHERE 条件 GROUP BY 分组 HAVING 分组条件 ORDER BY 排序 LIMIT 分页
2. 常用基础查询
— 查询所有字段
SELECT * FROM user;
— 查询指定字段
SELECT id,username,age FROM user;
— 别名查询 AS(可省略)
SELECT username AS 姓名,age 年龄 FROM user;
— 去重查询 DISTINCT
SELECT DISTINCT age FROM user;
3. 条件查询 WHERE(核心筛选)
常用运算符:>、<、=、!=、>=、<=、BETWEEN AND、IN、LIKE、IS NULL
-- 查询年龄20岁的用户
SELECT * FROM user WHERE age=20;
-- 查询年龄18-22岁的用户
SELECT * FROM user WHERE age BETWEEN 18 AND 22;
-- 查询指定多个用户
SELECT * FROM user WHERE username IN ('张三','王五');
-- 模糊查询(%匹配任意字符)
SELECT * FROM user WHERE username LIKE '张%';
-- 查询年龄为空的数据
SELECT * FROM user WHERE age IS NULL;
4. 排序 & 分页
-- 升序排序 ASC(默认),降序 DESC
SELECT * FROM user ORDER BY age DESC;
-- 分页 LIMIT 起始下标,条数
-- 查询前2条数据
SELECT * FROM user LIMIT 0,2;
5. 聚合函数 + 分组查询(数据分析必备)
常用聚合函数:COUNT统计、SUM求和、AVG平均值、MAX最大值、MIN最小值
-- 统计总人数
SELECT COUNT(*) FROM user;
-- 统计平均年龄
SELECT AVG(age) FROM user;
-- 按年龄分组,统计每个年龄的人数
SELECT age,COUNT(*) AS 人数 FROM user GROUP BY age;
-- 分组后筛选(HAVING 配合 GROUP BY)
-- 筛选人数大于1的年龄组
SELECT age,COUNT(*) AS 人数 FROM user GROUP BY age HAVING 人数 > 1;
重点区分:
WHERE是分组前筛选数据,HAVING是分组后筛选结果
三、多表联查
实际业务中,数据不会存在一张表里,多表联查是必须掌握的核心技能。
1. 联查四种类型
- INNER JOIN 内连接:只查询两表匹配的数据(交集)
- LEFT JOIN 左连接:以左表为主,左表数据全部展示,右表无数据显示null(最常用)
- RIGHT JOIN 右连接:以右表为主
- FULL JOIN 全连接:展示两表所有数据(MySQL不支持,可 union 替代,即联合)
2. 实战示例(左连接)
假设存在用户表 user、订单表 order,通过用户id关联
-- 查询所有用户及对应的订单信息(无订单用户也展示)
SELECT u.username,o.order_id,o.order_time
FROM user u
LEFT JOIN `order` o ON u.id = o.user_id;


