理性发言 發表於 2025-6-26 22:14:00

MySQL-查询命令

<h1 id="mysql查询命令">MySQL查询命令</h1>
<p>学习资料来源:数据库原理与应用——MySQL从入门到实战</p>
<h2 id="单表查询一">单表查询(一)</h2>
<h3 id="基本查询语句">基本查询语句</h3>
<h5 id="查询数据表中指定字段的内容">查询数据表中指定字段的内容</h5>
<p><code>MySQL</code>从数据表中查询数据的基本语句为<code>SELECT</code>语句。</p>
<p><code>SELECT</code>语句的可选参数比较多,让我们先从最简单的开始,带大家一步一步的深入<code>SELECT</code>语句的使用。</p>
<p>SELECT 基本语法规则为: <code>SELECT 字段名 FROM 表名;</code> 。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容如下:</p>
<p><img src="https://img2023.cnblogs.com/blog/3520125/202505/3520125-20250524003640335-344792372.png" alt="image-20250524003637748" loading="lazy"></p>
<p>我们需要从数据表中查询所有商品的名称,你们想想该怎么写?</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT prod_name FROM Mall_products;
</code></pre>
<p>结果为:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626180518908-58821815.jpg" alt="1" loading="lazy"></p>
<p>查询过程如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626180847045-126497839.gif" alt="2" loading="lazy"></p>
<p><strong>分析</strong>:</p>
<p>在该例子中,我们使用了<code>SELECT</code>语句从<code>Mall_products</code>表中获取名称为<code>prod_name</code>字段下的所有产品名称,字段名称需要紧跟在<code>SELECT</code>关键字之后。</p>
<p>然而事实上,我们查询数据的时候,往往需要同时查询<code>多个字段</code>下的内容。这时,我们只需要在<code>字段之间</code>加入逗号<code>,</code>即可。</p>
<p>语法规则为: <code>SELECT 字段名1, 字段名2 FROM 表名;</code> 。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容与上例相同。我们需要从数据表中查询所有商品的名称和价格,你们想想该怎么写?</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT prod_name, prod_price
FROM Mall_products;
</code></pre>
<p>结果为:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626191554318-1332672068.jpg" alt="1" loading="lazy"></p>
<p><strong>小提示</strong>: MySQL 中的 SQL 语句对关键字的大小写不敏感, SELECT 和 select 是一样的。 但是许多开发者更喜欢将关键字大写,表名和字段名使用小写,养成这种习惯,以后写出来的脚本就更容易阅读和维护了。</p>
<h5 id="查询数据表中的所有内容">查询数据表中的所有内容</h5>
<p>如果我们不记得字段名字了,我们还可以查看整张表的内容。这时候,只需要我们用星号<code>*</code>来代替字段的名字,就会得到一整张表的内容。</p>
<p>语法规则为: <code>SELECT * FROM 表名;</code></p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>。一开始我们并不知道表里都有什么,所以想要查看整张数据表的内容,你们想想该怎么写?</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT * FROM Mall_products;
</code></pre>
<p>结果为:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626191746732-1831919983.jpg" alt="1" loading="lazy"></p>
<p><strong>小提示</strong>: 虽然使用星号 * 看起来是一件很方便的事情,但是建议大家在不想获取整张表的情况下,还是使用字段名来进行查询。因为很显然,它会降低查询的效率。</p>
<h3 id="带in关键字的查询">带<code>IN</code>关键字的查询</h3>
<p><code>IN</code>关键字被用在<code>WHERE</code>语句的后边,用来过滤你所需要查询的内容。更形象的说,<code>IN</code>关键字的使用情形就像点名,点到谁谁就要站出来。</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626192151125-1464290064.jpg" alt="1" loading="lazy"></p>
<p>语法规则为: <code>SELECT 字段名 FROM 表名 WHERE 字段名 IN (n1,n2,n3,...);</code> 。</p>
<p>其中,括号内的数字必须为<code>INT</code>格式的数字。被“点到名”的这些括号里数字对应的内容,都要乖乖的站到前边来展示给大家看。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626213109954-2009201353.jpg" alt="img" loading="lazy"></p>
<p>我们会使用<code>IN</code>关键字检索出所有国家代码为<code>1</code>、<code>86</code>和<code>39</code>的商品信息。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT *
FROM Mall_products
WHERE prod_country IN (1,87,39);
</code></pre>
<p>结果为:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626213324098-2046955038.jpg" alt="img" loading="lazy"></p>
<p>查询过程如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626213357863-308544693.gif" alt="img" loading="lazy"></p>
<p>Oopes! 貌似我们刚才输入了三个数字,为什么只查询到了国家代码为<code>1</code>和<code>39</code>的数据内容,<code>87</code>去哪里了?</p>
<p>因为国家代号<code>87</code>的内容就压根没存在过啊,仔细看看表<code>Mall_products</code>就知道了。</p>
<h3 id="带not-in关键字的查询">带<code>NOT IN</code>关键字的查询</h3>
<p>聪明的小伙伴一看<code>NOT</code>就知道了,我们是要取反了。刚才我们是在查询括号中出现的内容,加了<code>NOT</code>取反后,就意味着,我们要查询的是除了括号中出现内容外的所有内容。</p>
<p>语法规则为: <code>SELECT 字段名 FROM 表名 WHERE 字段名 NOT IN (n1,n2,n3,...);</code> 。</p>
<p><strong>举个例子</strong> 我们还使用刚才的表<code>Mall_products</code>。现在我们想要查询除了国家代码为<code>86</code>的所有国家的产品内容。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT *
FROM Mall_products
WHERE prod_country NOT IN (86);
</code></pre>
<p>结果为:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626213536192-811244053.jpg" alt="img" loading="lazy"></p>
<h3 id="带between-and关键字的查询">带<code>BETWEEN AND</code>关键字的查询</h3>
<p>我们已经学会了如何用<code>IN</code>关键字精确查询数据表中的内容,但是在很多时候,我们仅仅是想知道在某一范围内有多少符合条件的数据,这就不得不使用到关键字<code>BETWEEN AND</code>了。</p>
<p><code>BETWEEN AND</code>需要两个参数支持,一个是范围的开始值,另一个就是结束值了。如果字段值满足指定的范围查询条件,就返回这些满足条件的数据内容。</p>
<p>语法规则为: <code>SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN n1 AND n2;</code> 。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626213735949-1397645503.jpg" alt="img" loading="lazy"></p>
<p>我们将使用<code>BETWEEN AND</code>关键字检索出所有国家代码为<code>1~50</code>的商品的信息。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT *
FROM Mall_product
WHERE prod_country BETWEEN 1 AND 50;
</code></pre>
<p>结果为:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626213828242-1093768033.jpg" alt="img" loading="lazy"></p>
<p>查询过程如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626214004989-1765146821.gif" alt="img" loading="lazy"></p>
<p>可以看到,返回结果包含了国家代码从<code>1~50</code>之间的字段值。尤其值得注意的是,端点值<code>1</code>也包含在返回结果中。</p>
<h3 id="带not-between-and关键字的查询">带<code>NOT BETWEEN AND</code>关键字的查询</h3>
<p>像上一关介绍的关键字<code>IN</code>一样,我们还可以对关键字<code>BETWEEN AND</code>进行取反,表示查询指定范围之外的值。</p>
<p>语法规则为: <code>SELECT 字段名 FROM 表名 WHERE 字段名 NOT BETWEEN n1 AND n2;</code> 。</p>
<p><strong>举个例子</strong> 我们依然使用表<code>Mall_products</code>。现在我们想要查询除了国家代码为<code>1~50</code>的所有国家的产品内容。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT *
FROM Mall_products
WHERE prod_country NOT BETWEEN 1 AND 50;
</code></pre>
<p>结果为:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626214125247-798308932.jpg" alt="img" loading="lazy"></p>
<p>由结果可以看出,返回的结果只有大于国家代码<code>50</code>的内容。</p>
<h2 id="单表查询二">单表查询(二)</h2>
<h3 id="带-like-的字符匹配查询">带 LIKE 的字符匹配查询</h3>
<h5 id="使用通配符模糊匹配数据内容">使用通配符<code>%</code>模糊匹配数据内容</h5>
<p>百分号通配符<code>%</code>可以匹配任意长度的字符,甚至包括零字符。</p>
<p>语法规则为: <code>SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符%';</code> 。 其中 % 的位置可以根据需要在字符间变化。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626215011763-880768703.jpg" alt="img" loading="lazy"></p>
<p>我们将使用<code>LIKE</code>关键字和通配符<code>%</code>检索出所有商品名称带<code>ir</code>的商品信息。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT *
FROM Mall_products
WHERE prod_name LIKE '%ir%';
</code></pre>
<p>结果为:</p>
<p><img src="https://data.educoder.net/api/attachments/QnlBci9PYkI5aFA0SVlMTFFUSkwzZz09" alt="img" loading="lazy"></p>
<p><strong>分析:</strong></p>
<p>该语句查询的结果返回所有商品的名字中间带<code>ir</code>字符的所有信息。通配符<code>%</code>告诉<code>MySQL</code>,返回字符串中间带<code>ir</code>字符的记录,不管<code>ir</code>前面和后面分别有多少字符。</p>
<p>通配符<code>%</code>可以放在不同的位置以满足你查询的需要,仔细想想,如果我们想要查找商品名称以<code>B</code>开头的所有记录,<code>%</code>应该放在哪里?</p>
<p>查询过程如下:</p>
<p><img src="https://data.educoder.net/api/attachments/aHI0QmRwVGdScDhrRTIvb2MvYllXZz09" alt="img" loading="lazy"></p>
<h5 id="使用通配符_模糊匹配数据内容">使用通配符<code>_</code>模糊匹配数据内容</h5>
<p>下划线通配符<code>_</code>与百分号通配符<code>%</code>类似,也用于模糊匹配。但是区别在于下划线通配符<code>_</code>只能模糊匹配<code>1个</code>字符。如果你执意想用下划线通配符<code>_</code>匹配多个字符,那只能多用几个<code>_</code>咯!</p>
<p>语法规则为: <code>SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符_';</code> 。 其中<code>_</code>的位置可以根据需要在字符间变化。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/3520125/202506/3520125-20250626215147085-512454645.jpg" alt="img" loading="lazy"></p>
<p>我们将使用<code>LIKE</code>关键字和通配符<code>_</code>检索出所有商品名称以<code>r</code>结尾,且前边有9个字母的商品信息。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT *
FROM Mall_products
WHERE prod_name LIKE '_________r';
</code></pre>
<p>结果为:</p>
<p><img src="https://data.educoder.net/api/attachments/L3Q2U1pNWE1iV0RoK1BxOE14dXlyQT09" alt="img" loading="lazy"></p>
<p>看到查询结果中<code>prod_name</code>对应的<code>Teddy bear</code>,大家可能注意到了,我们把空格也当成了一个字符来计算。</p>
<p>查询过程如下:</p>
<p><img src="https://data.educoder.net/api/attachments/N01Zc3YyS3d3ZjV0OFRLS3lDb0Z2Zz09" alt="img" loading="lazy"></p>
<h3 id="查询空值与去除重复结果">查询空值与去除重复结果</h3>
<h5 id="查询空值">查询空值</h5>
<p>在数据表创建之初,创建者可以指定某个字段是否为空值<code>NULL</code>。注意了,这个<code>NULL</code>既不代表<code>0</code>,也不代表空字符,而是代表一种未知的状态,比如不适用或者放着等将来有合适数据了再添加进去。</p>
<p>语法规则为: <code>SELECT 字段名 FROM 表名 WHERE 字段名 IS NULL;</code> 。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容如下:</p>
<p><img src="https://data.educoder.net/api/attachments/V2tIU3l2UnFSa2wvcFVyYUR4cmdoQT09" alt="img" loading="lazy"></p>
<p>我们将使用<code>IS NULL</code>关键字检索出所有<code>prod_country</code>字段为<code>NULL</code>的商品信息。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT *
FROM Mall_products
WHERE prod_country IS NULL;
</code></pre>
<p>结果为:</p>
<p><img src="https://data.educoder.net/api/attachments/T0ZEdm5XaElrQldxVU9sL3B0M0k5UT09" alt="img" loading="lazy"></p>
<p>查询过程如下:</p>
<p><img src="https://data.educoder.net/api/attachments/K2w2akx5TVdrUkNDLzZxeUZ4SmpMZz09" alt="img" loading="lazy"></p>
<p>可以看到,结果成功显示了<code>prod_country</code>字段为<code>NULL</code>的商品信息。与关键字<code>IS NULL</code>查询结果相反的是关键字<code>IS NOT NULL</code>,我们来看看实际操作的效果。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT *
FROM Mall_products
WHERE prod_country IS NOT NULL;
</code></pre>
<p>结果为:</p>
<p><img src="https://data.educoder.net/api/attachments/UHZ0ZzZUbEozbkNYblJkcUdmdGRiZz09" alt="img" loading="lazy"></p>
<p>查询过程如下:</p>
<p><img src="https://data.educoder.net/api/attachments/WVV2SmFubGwxeGhPODdNbEVWNzVNUT09" alt="img" loading="lazy"></p>
<p>可以看到,查出来了<code>prod_country</code>字段的非<code>NULL</code>记录。</p>
<h5 id="去除重复结果">去除重复结果</h5>
<p>有的时候,出于对数据分析的要求,分析人员需要消除数据表中重复的数据,那么如何消除呢?别担心,<code>SQL</code>语句也贴心的为你准备好了消除重复数据的关键字<code>DISTINCT</code>。</p>
<p>语法规则为: <code>SELECT DISTINCT 字段名 FROM 表名;</code> 。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容如下:</p>
<p><img src="https://data.educoder.net/api/attachments/MHQ2UkwvdnpPMHdjSVlhckNYWEZMdz09" alt="img" loading="lazy"></p>
<p>可以从表中看到,除了字段<code>ID</code>没有重复项,剩下的字段里都出现了重复项。</p>
<p>我们将使用<code>DISTINCT</code>关键字去除<code>prod_name</code>字段中的重复数据。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT DISTINCT prod_name, prod_country, prod_price
FROM Mall_products;
</code></pre>
<p>结果为:</p>
<p><img src="https://data.educoder.net/api/attachments/c0xaLzZBOTBzUVlvVzFjQnd4SlpCZz09" alt="img" loading="lazy"></p>
<p>查询过程如下:</p>
<p><img src="https://data.educoder.net/api/attachments/N21VZ2VGaHkzOERuekQ3eGJDa2RwZz09" alt="img" loading="lazy"></p>
<p>可以看到,使用了关键字<code>DISTINCT</code>后,我们返回的记录都不再有重复值。</p>
<h3 id="带-and-与-or-的多条件查询">带 AND 与 OR 的多条件查询</h3>
<h5 id="带and关键字的多条件查询">带<code>AND</code>关键字的多条件查询</h5>
<p>大家在前两章使用<code>WHERE</code>关键字限定查询内容的时候,有没有注意到我们使用的都是单一条件查询。有没有同学曾经在检索的时候觉得力不从心:“我需要的结果只用单一条件查询是得不到的呀!”</p>
<p>比如,我既想要成熟苹果中直径大于<code>5cm</code>的苹果的品种,又想要成熟苹果果色为黄色的苹果的品种。这两个条件如何综合在一起进行检索呢?</p>
<p><code>MySQL</code>在<code>WHERE</code>子句中使用<code>AND</code>操作符限制只有满足所有条件的查询才会被返回。可以使用<code>AND</code>连接两个甚至更多个查询条件,多个条件表达式之间用<code>AND</code>分开。</p>
<p>语法规则为: <code>SELECT 字段名 FROM 表名 WHERE 表达式1 AND 表达式2;</code> 。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容如下:</p>
<p><img src="https://data.educoder.net/api/attachments/NDQrdlRlaFhQV1BrNjg0dnRrWDQ2QT09" alt="img" loading="lazy"></p>
<p>我们想要查询表中哪些商品不仅商品名中带有<code>toy</code>字符,单价又同时大于<code>5</code>,并列出他们的商品信息。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECT *
FROM Mall_products
WHERE prod_name LIKE '%toy%' AND prod_price &gt; 5;
</code></pre>
<p>结果为:</p>
<p><img src="https://data.educoder.net/api/attachments/MmdaSFd6bTV3M2dKWUpMOFN1K1gxZz09" alt="img" loading="lazy"></p>
<p>查询过程如下:</p>
<p><img src="https://data.educoder.net/api/attachments/elZ4dzR0cGsvV3M3T1BOeTIwS0Vidz09" alt="img" loading="lazy"></p>
<p>分析:</p>
<p>在这个例子中,<code>WHERE</code>子句中的条件分为了两部分,<code>AND</code>关键字指示<code>MySQL</code>返回所有同时满足两个条件的内容。单独满足带<code>toy</code>字符后者单独满足价格大于<code>5</code>都得不到我们想要查询的结果。</p>
<p><strong>小提示:</strong> 可以同时添加多个过滤条件,增加条件的同时只需增加一个 AND 关键字。</p>
<h5 id="带or关键字的多条件查询">带<code>OR</code>关键字的多条件查询</h5>
<p>与<code>AND</code>相反,在<code>WHERE</code>声明中使用<code>OR</code>关键字表示只需满足两个条件中的其中一个条件即可返回结果。</p>
<p>语法规则为: <code>SELECT 字段名 FROM 表名 WHERE 表达式1 OR 表达式2;</code> 。</p>
<p><strong>举个例子</strong> 假设我们现在有一张表<code>Mall_products</code>,内容如下:</p>
<p><img src="https://data.educoder.net/api/attachments/NDQrdlRlaFhQV1BrNjg0dnRrWDQ2QT09" alt="img" loading="lazy"></p>
<p>我们想要查询表中商品<code>ID</code>为<code>BNBG01</code>或<code>BR01</code>的名称和单价。</p>
<p>查询代码如下:</p>
<pre><code class="language-mysql">SELECTID, prod_name, prod_price
FROM Mall_products
WHERE ID = 'BNBG01' OR ID = 'BR01';
</code></pre>
<p>结果为:</p>
<p><img src="https://data.educoder.net/api/attachments/dHVBbkhGakNhMlNuWTkzS0sxUkZWUT09" alt="img" loading="lazy"></p>
<p>查询过程如下:</p>
<p><img src="https://data.educoder.net/api/attachments/ZUJDeHhxam1ML2FsNzArWkhqZ2FVdz09" alt="img" loading="lazy"></p>
<p>分析:</p>
<p>在这个例子里,关键字<code>OR</code>告诉<code>MySQL</code>只需要满足其中一个条件就可以返回结果,恩,很幸运的是它两个条件都能满足,所以返回了所有条件的结果。这里我们如果使用关键字<code>AND</code>,将不会得到任何结果。</p>
<p><strong>小提示:</strong> OR 可以和 AND 一起使用。但是 AND 的优先级要高于 OR 的优先级!</p>
<p>在这里我们不得不提到关键字<code>IN</code>,它能实现与<code>OR</code>相同的功能。</p>
<p><strong>比如以下代码的功能和该例中的代码功能是一样的:</strong></p>
<pre><code class="language-mysql">SELECTID, prod_name, prod_price
FROM Mall_products
WHERE ID IN('BNBG01', 'BR01');
</code></pre>
<p><strong>小提示:</strong> 虽然两种写法功能一样,但是我们更推荐使用 IN 关键字。因为它不仅逻辑清晰,执行的速度也会快于 OR 关键字。更重要的是,使用 IN 关键字,我们以后可以执行更加复杂的嵌套语句。</p>
<h2 id="单表查询三">单表查询(三)</h2>
<h3 id="对查询结果进行排序">对查询结果进行排序</h3>
<p>我们知道在<code>MySQL</code>中从数据表中读取数据都是使用<code>SELECT</code>语句。 如果我们需要对读取的语句进行排序,我们就可以使用<code>Order By</code>子句来设定你想要按照的字段进行排序并返回结果。</p>
<p>语法:</p>
<pre><code class="language-mysql">SELECT 字段名 FROM 表名 ORDER BY 字段名 ];
</code></pre>
<p>你还可以根据自己的需求添加<code>WHERE</code>、<code>LIKE</code>子句来设置条件,再对结果过进行排序显示。</p>
<p>现有<code>user</code>表数据如下:</p>
<table>
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>age</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Tom</td>
<td>32</td>
</tr>
<tr>
<td>2</td>
<td>Nancy</td>
<td>18</td>
</tr>
<tr>
<td>3</td>
<td>Allen</td>
<td>24</td>
</tr>
<tr>
<td>4</td>
<td>Jason</td>
<td>23</td>
</tr>
</tbody>
</table>
<p>我们需要查询表中信息,要求按照年龄的<strong>升序</strong>进行排序:</p>
<p><img src="https://data.educoder.net/api/attachments/TEplejNJeWhMR3A5UG5ENmZSRXM1UT09" alt="img" loading="lazy"></p>
<h5 id="指定排序方向">指定排序方向</h5>
<p>从上面的查询语句中我们并未看到有任何表示<strong>排序方向</strong>的关键字,在默认情况下,它是按<strong>升序</strong>排列的。</p>
<ul>
<li><code>ASC</code> 升序关键字</li>
<li><code>DESC</code> 降序关键字</li>
</ul>
<p><img src="https://data.educoder.net/api/attachments/MmowakZBRDlLYUhJT1dGZlVaYkxIQT09" alt="img" loading="lazy"></p>
<h3 id="分组查询">分组查询</h3>
<p><strong>分组查询的单独使用</strong></p>
<p>分组查询的关键字是<code>Group By</code>,查询的是每个分组中 <strong>首次出现的一条记录</strong>。</p>
<p>语法:</p>
<pre><code class="language-mysql">SELECT 字段名 FROM 表名 GROUP BY 字段名;
</code></pre>
<p>例如: 现有<code>user</code>表数据:</p>
<table>
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>sex</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Tom</td>
<td>男</td>
</tr>
<tr>
<td>2</td>
<td>Nancy</td>
<td>女</td>
</tr>
<tr>
<td>3</td>
<td>Allen</td>
<td>Null</td>
</tr>
<tr>
<td>4</td>
<td>Jason</td>
<td>男</td>
</tr>
</tbody>
</table>
<p>我们对表中数据的性别进行分组查询:</p>
<p><img src="https://data.educoder.net/api/attachments/UmtxWEdVdXNMUDF1OHVSdWtyK1pKdz09" alt="img" loading="lazy"></p>
<p>可以看出,返回了<code>3</code>条记录,分别是<code>sex</code>字段值为<code>Null</code>、女、男的记录,查询结果按照<code>sex</code>字段中不同的值进行了<strong>分类</strong>,<strong>只显示每个分组中的一条记录</strong>,意义不大,一般情况下,<code>GROUP BY</code>都和聚合函数一起使用。</p>
<h3 id="使用-limit-限制查询结果的数量">使用 LIMIT 限制查询结果的数量</h3>
<p><strong><code>LIMIT</code>的使用</strong></p>
<p>在我们查询大量数据结果时,会返回很多条数据,有需要的记录可能就其中的一条或者几条。比如,实现分页功能,若每页显示<code>10</code>条记录,每次查询就只需要<code>10</code>条记录。 在<code>MySQL</code>中,提供了<code>LIMIT</code>关键字,用来限制查询结果的数量。</p>
<p>语法:</p>
<pre><code class="language-mysql">SELECT 字段名 FROM 表名 LIMIT 记录数;
</code></pre>
<p>参数说明:</p>
<ul>
<li>第一个参数,<code>OFFSET</code>,可选参数,表示<strong>偏移量</strong>,如果不指定默认值为<code>0</code>,表示从查询结果的第一条记录开始,若偏移量为<code>1</code>,则从查询结果中的第二条记录开始,以此类推。</li>
<li>第二个参数,记录数,表示返回查询结果的条数。</li>
</ul>
<p>现有<code>employee</code>表数据如下:</p>
<table>
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>age</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Tom</td>
<td>23</td>
</tr>
<tr>
<td>2</td>
<td>Allen</td>
<td>45</td>
</tr>
<tr>
<td>3</td>
<td>Nancy</td>
<td>32</td>
</tr>
<tr>
<td>4</td>
<td>Jack</td>
<td>27</td>
</tr>
<tr>
<td>5</td>
<td>Rose</td>
<td>29</td>
</tr>
<tr>
<td>6</td>
<td>Mary</td>
<td>18</td>
</tr>
</tbody>
</table>
<ul>
<li>查询<code>employee</code>表中前<code>4</code>条数据:</li>
</ul>
<p><img src="https://data.educoder.net/api/attachments/OUswejhyd1V4OVFCSEw1WTFlWWJhZz09" alt="img" loading="lazy"></p>
<ul>
<li>从第二条记录开始往后查看<code>4</code>条数据(不包含第二条):</li>
</ul>
<p><img src="https://data.educoder.net/api/attachments/RkxmS3JzaUxSNU9aVnZmNENLTmxpQT09" alt="img" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/start1/p/18950995
頁: [1]
查看完整版本: MySQL-查询命令