Mysql(3)
Mysql的增删改查:
增:add
删:delete
改:set
查:get
|
命令 |
作用对象 |
是否改变表结构 |
危险程度 |
典型用途 |
|---|---|---|---|---|
|
CREATE |
数据库/表/索引 |
✅ 是(新建) |
低 |
初始化项目结构 |
|
ALTER |
表结构 |
✅ 是(修改) |
中(可能丢数据) |
表结构升级、字段调整 |
|
UPDATE |
表数据 |
❌ 否 |
高(误删全表) |
修改业务数据 |
|
INSERT |
表数据 |
❌ 否 |
低 |
新增业务数据 |
Mysql查询:
SELECT 列名
FROM 表名
[JOIN ...]
[WHERE 条件]
[GROUP BY 分组]
[HAVING 过滤]
[ORDER BY 排序]
[LIMIT 分页];
逻辑顺序:
FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
查询表里所有数据:
SELECT * FROM employees;
加上条件(工资大于1w):
SELECT name, salary
FROM employees
WHERE salary > 10000;
排序,分区:
SELECT *
FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 20;
常用函数:
|
函数 |
含义 |
|---|---|
|
COUNT |
行数 |
|
SUM |
总和 |
|
AVG |
平均值 |
|
MAX |
最大值 |
|
MIN |
最小值 |
用dept分组:
SELECT dept_id, COUNT(*) AS emp_count
FROM employees
GROUP BY dept_id;
SQL 子查询(Subquery)详解
子查询是指嵌套在其他 SQL 语句(如 SELECT、INSERT、UPDATE、DELETE)中的查询语句。它可以出现在 FROM、WHERE、HAVING等子句中,相当于把一个查询的结果当作另一个查询的条件或数据源。
一、什么是子查询?
定义:
在一个 SQL 语句中,使用 (SELECT ...)的形式嵌入另一个查询,这个内部的 SELECT语句就称为子查询。
SELECT 列名
FROM 表名
WHERE 列名 比较运算符 (SELECT 列名 FROM 表名 WHERE 条件);
|
类型 |
返回结果 |
常见使用场景 |
|---|---|---|
|
标量子查询 |
单行单列(一个值) |
|
|
行子查询 |
单行多列 |
|
|
列子查询 |
单列多行 |
|
|
表子查询 |
多行多列 |
|
2. 按出现位置分类
-
WHERE子句子查询 -
FROM子句子查询(派生表) -
SELECT子句子查询 -
HAVING子句子查询 -
EXISTS / NOT EXISTS子查询
例子:
-- 学生表
students(id, name, age, class_id)-- 班级表
classes(id, class_name, teacher)
二.MySQL 内连接 / 左连接 / 右连接
|
连接类型 |
一句话解释 |
|---|---|
|
INNER JOIN(内连接) |
只返回 两表都匹配 的数据 |
|
LEFT JOIN(左连接) |
返回 左表全部 + 右表匹配的 |
|
RIGHT JOIN(右连接) |
返回 右表全部 + 左表匹配的 |
示例:
employees(员工表)
+----+--------+---------+
| id | name | dept_id |
+----+--------+---------+
| 1 | 张三 | 10 |
| 2 | 李四 | 20 |
| 3 | 王五 | NULL |
+----+--------+---------+
departments(部门表)
+----+------------+
| id | dept_name |
+----+------------+
| 10 | 技术部 |
| 20 | 市场部 |
| 30 | 财务部 |
+----+------------+
内连接:
SELECT *
FROM employees e
INNER JOIN departments d
ON e.dept_id = d.id;
结果:
| 张三 | 技术部 |
| 李四 | 市场部 |
左连接:
SELECT *
FROM employees e
LEFT JOIN departments d
ON e.dept_id = d.id;
结果:
| 张三 | 技术部 |
| 李四 | 市场部 |
| 王五 | NULL |
右连接:
SELECT *
FROM employees e
RIGHT JOIN departments d
ON e.dept_id = d.id;
结果:
| 张三 | 技术部 |
| 李四 | 市场部 |
| NULL | 财务部 |
|
对比项 |
INNER JOIN |
LEFT JOIN |
RIGHT JOIN |
|---|---|---|---|
|
返回左表未匹配 |
❌ |
✅ |
❌ |
|
返回右表未匹配 |
❌ |
❌ |
✅ |
|
返回交集 |
✅ |
❌ |
❌ |
|
NULL 行 |
无 |
有 |
有 |
|
使用频率 |
⭐⭐⭐⭐⭐ |
⭐⭐⭐⭐ |
⭐⭐ |
左连接和右连接实际上就是镜像,一般都是用左
更多推荐



所有评论(0)