我就是你哥 發表於 2025-12-25 16:56:25

MySQL增删查改、多表查询的操作大全

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、增删查改</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1.添加数据</a></li><li><a href="#_lab2_0_1">2.修改数据</a></li><li><a href="#_lab2_0_2">3.删除数据</a></li><li><a href="#_lab2_0_3">4.查询数据</a></li><ul class="third_class_ul"><li><a href="#_label3_0_3_0">4.1 条件查询</a></li><li><a href="#_label3_0_3_1">4.2 聚合函数</a></li><li><a href="#_label3_0_3_2">4.3 分组查询</a></li><li><a href="#_label3_0_3_3">4.4 排序查询</a></li><li><a href="#_label3_0_3_4">4.5 分页查询</a></li></ul></ul><li><a href="#_label1">二、多表查询</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_4">1.笛卡尔积</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_5">2.内连接</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_6">3.外连接</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_7">4.自连接</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_8">5.联合查询</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_9">6.子查询</a></li><ul class="third_class_ul"><li><a href="#_label3_1_9_5">6.1 列子查询</a></li><li><a href="#_label3_1_9_6">6.2 行子查询</a></li><li><a href="#_label3_1_9_7">6.3 表子查询</a></li></ul></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、增删查改</h2>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>1.添加数据</h3>
<div class="jb51code"><pre class="brush:sql;">insert into 表名(字段名1,字段名2...) values(值1,值2...);
</pre></div>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>2.修改数据</h3>
<div class="jb51code"><pre class="brush:sql;">update 表名 set 字段名1=值1, 字段名2=值2 where ...;
</pre></div>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>3.删除数据</h3>
<div class="jb51code"><pre class="brush:sql;">delete from 表名 where...
</pre></div>
<p class="maodian"><a name="_lab2_0_3"></a></p><h3>4.查询数据</h3>
<p class="maodian"><a name="_label3_0_3_0"></a></p><h4>4.1 条件查询</h4>
<div class="jb51code"><pre class="brush:sql;">select 字段名1,字段名2 from 表名 where...
</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025122516550437.png" /></p>
<p class="maodian"><a name="_label3_0_3_1"></a></p><h4>4.2 聚合函数</h4>
<div class="jb51code"><pre class="brush:sql;">select 聚合函数(字段列表) from 表名
</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025122516550497.png" /></p>
<p class="maodian"><a name="_label3_0_3_2"></a></p><h4>4.3 分组查询</h4>
<div class="jb51code"><pre class="brush:sql;">select 字段列表 from表名 group by 分组字段
</pre></div>
<p>其中having是分组之后进行过滤的,所以相较于where在分组之前进行过滤,having可以对聚合函数过滤。</p>
<div class="jb51code"><pre class="brush:sql;">select gender, avg(age) from emp where age&gt;18 group by gender having avg(age)&gt;20
</pre></div>
<p class="maodian"><a name="_label3_0_3_3"></a></p><h4>4.4 排序查询</h4>
<div class="jb51code"><pre class="brush:sql;">select 字段列表 from表名 order by 字段1 排序方式1, 字段2 排序方式2;
</pre></div>
<ul><li><code>ASC</code>:升序(默认值)</li><li><code>DESC</code>:降序</li></ul>
<p>多字段排序时,先对第一个字段排序,第一个字段相同时再对第二个字段排序。</p>
<p class="maodian"><a name="_label3_0_3_4"></a></p><h4>4.5 分页查询</h4>
<div class="jb51code"><pre class="brush:sql;">select 字段列表 from表名 limit 起始索引, 查询行数;
</pre></div>
<p>起始索引从0开始,起始索引=(查询页码-1)&times;每页的行数<br />如果查询的是第一页数据,起始索引可以省略,简写为<code>limit 查询行数</code></p>
<p class="maodian"><a name="_label1"></a></p><h2>二、多表查询</h2>
<p class="maodian"><a name="_lab2_1_4"></a></p><h3>1.笛卡尔积</h3>
<p>多表查询时如果没有指定条件那么查询结果就是笛卡尔积。例如A表有2条数据,B表有4条数据,那么笛卡尔积就是2&times;4=8条数据。</p>
<div class="jb51code"><pre class="brush:sql;">select * from a,b;
</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025122516550451.png" /></p>
<p class="maodian"><a name="_lab2_1_5"></a></p><h3>2.内连接</h3>
<p>内连接查询的是<strong>两张表的交集部分</strong>。也就是说当表A/表B中的数据在表B/表A中没有匹配项时不会输出。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025122516550448.png" /></p>
<p>隐式内连接:<code>select a.name, b.name from a, b where a.b_name=b.name;</code><br />显式内连接:<code>select a.name, b.name from a inner join b on a.b_name=b.name;</code></p>
<p class="maodian"><a name="_lab2_1_6"></a></p><h3>3.外连接</h3>
<p>左外连接查询的是<strong>左表所有数据+两张表的交集</strong>。右外连接查询的是<strong>右表所有数据+两张表的交集</strong>。也就是说当表A中的数据在表B中没有匹配项时使用左外连接也会输出,当表B中的数据在表A中没有匹配项时使用右外连接也会输出。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025122516550448.png" /></p>
<p>左外连接:<code>select a.name, b.name from a left join b on a.b_name=b.name;</code><br />右外连接:<code>select a.name, b.name from a right join b on a.b_name=b.name;</code></p>
<p>在实际开发中,<strong>想要哪张表的所有信息</strong>就以该表作为主表。</p>
<p class="maodian"><a name="_lab2_1_7"></a></p><h3>4.自连接</h3>
<p>自连接查询的是同一张表,例如同一张表记录了id和领导id,那么查询所有员工的信息及其领导信息就需要用自连接。自连接可以用内连接也可以用外连接,具体看需求。<strong>自连接需要对表起别名,因为需要看成两张表。</strong></p>
<div class="jb51code"><pre class="brush:sql;">select * from emp a, emp b left join on a.manager_id=b.id;
</pre></div>
<p class="maodian"><a name="_lab2_1_8"></a></p><h3>5.联合查询</h3>
<p>联合查询可以把多次查询的结果<strong>在行上</strong>合并起来,形成一个新的结果集。</p>
<div class="jb51code"><pre class="brush:sql;">select * from emp where salary&gt;5000
union all
select * from emp where age&gt;50
</pre></div>
<p>union还会将查询结果合并之后<strong>去重</strong>。</p>
<p class="maodian"><a name="_lab2_1_9"></a></p><h3>6.子查询</h3>
<p class="maodian"><a name="_label3_1_9_5"></a></p><h4>6.1 列子查询</h4>
<p>子查询返回的是<strong>1列n行</strong>数据,常用操作符:</p>
<ul><li><code>in</code>:在子查询集合内满足其一</li><li><code>not in</code></li><li><code>any</code>: 在子查询集合内满足其一,一般配合>号使用</li><li><code>all</code>:子查询集合内满足所有,一般配合>号使用</li></ul>
<p class="maodian"><a name="_label3_1_9_6"></a></p><h4>6.2 行子查询</h4>
<p>子查询返回的是<strong>1行n列</strong>数据,常用操作符:</p>
<ul><li><code>=</code></li><li><code>&lt;&gt;</code>:不等于</li><li><code>in</code>:在子查询集合内满足其一</li><li><code>not in</code></li></ul>
<p class="maodian"><a name="_label3_1_9_7"></a></p><h4>6.3 表子查询</h4>
<p>子查询返回的是<strong>n行n列</strong>数据,常用操作符:</p>
<ul><li><code>in</code>:在子查询集合内满足其一</li></ul>
<p>select * from emp where (job, salary) in (子查询select job, salary from &hellip;)</p>
頁: [1]
查看完整版本: MySQL增删查改、多表查询的操作大全