MySQL增删查改、多表查询

目录

一、增删查改

1.添加数据

c 复制代码
insert into 表名(字段名1,字段名2...) values(值1,值2...);

2.修改数据

c 复制代码
update 表名 set 字段名1=值1, 字段名2=值2 where ...;

3.删除数据

c 复制代码
delete from 表名 where...

4.查询数据

4.1 条件查询

c 复制代码
select [distinct] 字段名1,字段名2 from 表名 where...

4.2 聚合函数

c 复制代码
select 聚合函数(字段列表) from 表名

4.3 分组查询

c 复制代码
select 字段列表 from  表名 [where 条件] group by 分组字段 [having 分组后过滤条件]

其中having是分组之后进行过滤的,所以相较于where在分组之前进行过滤,having可以对聚合函数过滤。

c 复制代码
select gender, avg(age) from emp where age>18 group by gender having avg(age)>20

4.4 排序查询

c 复制代码
select 字段列表 from  表名 [where 条件] order by 字段1 排序方式1, 字段2 排序方式2;
  • ASC:升序(默认值)
  • DESC:降序

多字段排序时,先对第一个字段排序,第一个字段相同时再对第二个字段排序。

4.5 分页查询

c 复制代码
select 字段列表 from  表名 [where 条件] limit 起始索引, 查询行数;

起始索引从0开始,起始索引=(查询页码-1)×每页的行数

如果查询的是第一页数据,起始索引可以省略,简写为limit 查询行数


二、多表查询

1.笛卡尔积

多表查询时如果没有指定条件那么查询结果就是笛卡尔积。例如A表有2条数据,B表有4条数据,那么笛卡尔积就是2×4=8条数据。

c 复制代码
select * from a,b;

2.内连接

内连接查询的是两张表的交集部分。也就是说当表A/表B中的数据在表B/表A中没有匹配项时不会输出。

隐式内连接:select a.name, b.name from a, b where a.b_name=b.name;

显式内连接:select a.name, b.name from a inner join b on a.b_name=b.name;

3.外连接

左外连接查询的是左表所有数据+两张表的交集 。右外连接查询的是右表所有数据+两张表的交集。也就是说当表A中的数据在表B中没有匹配项时使用左外连接也会输出,当表B中的数据在表A中没有匹配项时使用右外连接也会输出。

左外连接:select a.name, b.name from a left join b on a.b_name=b.name;

右外连接:select a.name, b.name from a right join b on a.b_name=b.name;

在实际开发中,想要哪张表的所有信息就以该表作为主表。

4.自连接

自连接查询的是同一张表,例如同一张表记录了id和领导id,那么查询所有员工的信息及其领导信息就需要用自连接。自连接可以用内连接也可以用外连接,具体看需求。自连接需要对表起别名,因为需要看成两张表。

c 复制代码
select * from emp a, emp b left join on a.manager_id=b.id;

5.联合查询

联合查询可以把多次查询的结果在行上合并起来,形成一个新的结果集。

c 复制代码
select * from emp where salary>5000
union all
select * from emp where age>50

union还会将查询结果合并之后去重

6.子查询

6.1 列子查询

子查询返回的是1列n行数据,常用操作符:

  • in:在子查询集合内满足其一
  • not in
  • any: 在子查询集合内满足其一,一般配合>号使用
  • all:子查询集合内满足所有,一般配合>号使用

6.2 行子查询

子查询返回的是1行n列数据,常用操作符:

  • =
  • <>:不等于
  • in:在子查询集合内满足其一
  • not in

6.3 表子查询

子查询返回的是n行n列数据,常用操作符:

  • in:在子查询集合内满足其一

select * from emp where (job, salary) in (子查询select job, salary from ...)

相关推荐
HUGu RGIN3 小时前
MySQL--》如何在MySQL中打造高效优化索引
android·mysql·adb
HackTwoHub4 小时前
AI大模型网关存在SQL注入、附 POC 复现、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·网络安全·系统安全·网络攻击模型·安全架构
l1t5 小时前
DeepSeek总结的DuckLake构建基于 SQL 原生表格式的下一代数据湖仓
数据库·sql
KmSH8umpK5 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
TDengine (老段)5 小时前
从施工监测到运营预警,桥科院用 TDengine 提升桥梁数据管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
S1998_1997111609•X6 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则
KmSH8umpK7 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
BU摆烂会噶8 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain
l1t9 小时前
DeepSeek总结的DuckLake 入门
数据库
Joseph Cooper9 小时前
RAG 与 AI Agent:智能体真的需要检索增强生成吗?
数据库·人工智能·ai·agent·rag·上下文工程