<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>读书笔记 - 标签 - 灿若星河 | 郝建锋</title><link>https://philohao.com/tags/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/</link><description>读书笔记 - 标签 - 灿若星河 | 郝建锋</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>haojianfeng1997@gmail.com (Jianfeng.Hao)</managingEditor><webMaster>haojianfeng1997@gmail.com (Jianfeng.Hao)</webMaster><lastBuildDate>Sun, 16 Feb 2020 22:28:47 +0800</lastBuildDate><atom:link href="https://philohao.com/tags/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/index.xml" rel="self" type="application/rss+xml"/><item><title>数据库书摘 01 - 《SQL 必知必会》</title><link>https://philohao.com/2020/02/20200216/</link><pubDate>Sun, 16 Feb 2020 22:28:47 +0800</pubDate><dc:creator>Jianfeng.Hao</dc:creator><author>haojianfeng1997@gmail.com (Jianfeng.Hao)</author><guid isPermaLink="true">https://philohao.com/2020/02/20200216/</guid><description>《SQL 必知必会》读书摘录，整理 SQL 查询、过滤、分组和连接等基础语法。</description><content:encoded><![CDATA[<blockquote>
<p>涉及资源列表：<br>
<a href="https://book.douban.com/subject/24250054/" target="_blank" rel="noopener noreffer">《SQL必知必会》（豆瓣）</a><br>
<a href="https://github.com/xianshenglu/document/blob/master/SQL%E5%BF%85%E7%9F%A5%E5%BF%85%E4%BC%9A-%E4%B8%AD%E6%96%87-%E7%AC%AC4%E7%89%88.pdf" target="_blank" rel="noopener noreffer">PDF 资源（GitHub）</a></p>
</blockquote>
<h2 id="数据查询语句">数据查询语句</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="k">SELECT</span><span class="w"> </span><span class="p">[</span><span class="k">DISTINCT</span><span class="o">/</span><span class="k">ALL</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">&lt;</span><span class="n">select_list</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">FROM</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">&lt;</span><span class="n">left_table</span><span class="o">&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">join_type</span><span class="o">&gt;</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="o">&lt;</span><span class="n">right_table</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="k">ON</span><span class="w"> </span><span class="o">&lt;</span><span class="n">join_condition</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">WHERE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">&lt;</span><span class="n">where_condition</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">GROUP</span><span class="w"> </span><span class="k">BY</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">&lt;</span><span class="n">group_by_list</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">HAVING</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">&lt;</span><span class="n">having_condition</span><span class="o">&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">&lt;</span><span class="n">sorting_columns</span><span class="o">&gt;</span><span class="w"> </span><span class="p">[</span><span class="k">ASC</span><span class="o">|</span><span class="k">DESC</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">LIMIT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="o">&lt;</span><span class="n">offset_start</span><span class="p">,</span><span class="w"> </span><span class="n">row_length</span><span class="o">&gt;</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><h3 id="易错点">易错点</h3>
<ul>
<li>多条 SQL 语句必须以分号（;）作分隔</li>
<li>注释语法 &ndash; 和 /**/，#大多数不行</li>
<li>检索数据（<code>SELECT</code>、<code>LIMIT</code>、<code>ORDER BY</code>）
<ul>
<li>DISTINCT 作用于所有的列，而不仅仅是跟在其后的那一列</li>
<li>与 DISTINCT 不同，DESC 关键字只应用到直接位于其前面的列名</li>
</ul>
</li>
<li>过滤数据（<code>WHERE</code>）
<ul>
<li>由于 AND 操作符比 OR 操作符优先级高，需要使用圆括号对操作符进行明确分组</li>
<li>IN 操作符最大的优点在于可以包含其他 SELECT 语句</li>
<li>通配符搜索只能用于文本字段（字符串），非文本数据类型字段不能使用通配符搜索</li>
<li>通配符 % 代表匹配任意字符，甚至可以匹配 0 个字符，但不可匹配 null</li>
</ul>
</li>
<li>计算字段
<ul>
<li>CONUT() 函数中如果指定列名，则会忽略指定列的值为空 NULL 的行；如果用 * 则不忽略</li>
<li>对于文本数据，MIN() 返回排序后最前面的行， MAX() 返回排序后最后面的行</li>
</ul>
</li>
<li>汇总数据
<ul>
<li>5个聚集函数（AVG、COUNT、MIN、MAX、SUM）都可用于指定 DISTINCT 参数的列，但唯独 COUNT(*) 不可以</li>
</ul>
</li>
<li>分组数据（<code>GROUP BY</code>、<code>HAVING</code>）
<ul>
<li>分组统计：GROUP BY 分组后进行聚集函数运算；分组排序：利用窗口函数及 OVER 子句</li>
<li>除聚集计算语句外，SELECT 语句中的每一列都必须在 GROUP BY 子句中给出</li>
<li>Having 支持所有 Where 操作符，区别在于 having 用于过滤分组，而 where 用于过滤行</li>
</ul>
</li>
<li>子查询
<ul>
<li>两种使用方法
<ul>
<li>WHERE 子句的 IN 操作符中</li>
<li>用来填充计算字段</li>
</ul>
</li>
<li>作为子查询的 SELECT 语句只能查询单个列</li>
</ul>
</li>
<li>联结表：自联结的实现需要用到表别名</li>
<li>组合查询（<code>UNION</code>）
<ul>
<li>UNION 中的每个查询必须包括相同的列、表达式或聚集函数，但各个列不需要以相同的次序列出</li>
<li>UNION 默认会从查询结果中自动去掉重复的行，如果想返回全部的行，可以使用 UNION ALL</li>
<li>在用 UNION 组合查询时，只能使用一条 ORDER BY 子句，它只能位于最后一条 SELECT 语句之后</li>
<li>UNION 在需要组合多个表的数据时也很有用，当列名写法不一致时可以借助别名来实现组合查询，检索到一个结果集</li>
</ul>
</li>
</ul>
<h3 id="背诵点">背诵点</h3>
<ul>
<li>不同平台差异点：
<ul>
<li>限制结果语句 - 不同平台实现起来并不一样——TOP、FETCH、ROWNUM、LIMIT</li>
<li>通配符 #（%/*、_/？、[]、^/!）</li>
<li>拼接字段（+/||）</li>
<li>函数</li>
</ul>
</li>
<li>WHERE 子句的条件操作符（=、&lt;&gt;/!=、&gt;、&lt;、&gt;=/!&lt;、&lt;=/!&gt;、between、is null）、AND/OR/IN/NOT/LIKE 操作符</li>
<li>函数（文本、数值、时间、系统、聚集、窗口）</li>
</ul>
<h2 id="数据操作语言">数据操作语言</h2>
<h2 id="数据定义语言">数据定义语言</h2>
]]></content:encoded></item></channel></rss>