www.2014338.comSQL别名

Git ww9992019com 发表于 1 周前

www.2014338.com开户请拨15974937077入戏太深报警17次湛江坡头区RDz1Pi<div style="width:100%;float:left;" class="article-content">

                <input type="hidden" name="article_id" id="article_id" value="27326">
                <input type="hidden" name="catid" id="catid" value="0">

                <p>在本教程中,您将了解SQL别名,包括表和列别名,以使查询更短,更易理解。</p>

<h4 id="h4-1-sql-"><a name="1.%20SQL%E5%88%AB%E5%90%8D%E7%AE%80%E4%BB%8B" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1. SQL别名简介</h4><p>SQL别名用于在执行查询期间为表或列分配临时名称。 有两种类型的别名:表别名和列别名。<br>几乎所有关系数据库管理系统都支持列别名和表别名。<br><img src="http://f2e.im/u/ww9992019com" alt=""></p>
<h4 id="h4-1-1-"><a name="1.1.%20%E5%88%97%E5%88%AB%E5%90%8D" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1.1. 列别名</h4><p>当我们设计表时,经常将列名称保持简短或另起新名称,例如,销售订单号为:<code>so_no</code>,发票号码为:<code>inv_no</code>。在使用<code>SELECT</code>语句从表中查询数据返回输出时不具有描述性。</p>
<p>要在查询中为列指定新名称,请使用列别名。 列别名只是执行查询期间列的临时名称。</p>
<p>请参阅以下查询:</p>
<pre><code class="lang-sql">SELECT
inv_no AS invoice_no,
amount,
due_date AS '截止日期',
cust_no '客户编号'
FROM
invoices;
</code></pre>
<ul>
<li><code>invoice_no</code>是<code>inv_no</code>列的别名</li><li><code>'Due date'</code>是<code>due_date</code>列的列别名。 因为别名包含空格,所以必须使用单引号(<code>'</code>)或双引号(<code>"</code>)来包围别名。</li><li><code>'Customer no'</code>是<code>cust_no</code>列的别名。注意这里没有使用<code>AS</code>关键字。<code>AS</code>关键字是可选的,因此可以省略它。</li></ul>
<p>我们经常对选择列表中的表达式使用列别名。 例如,以下查询使用<code>headcount</code>作为返回雇员数量的表达式的列别名:</p>
<pre><code class="lang-sql">SELECT
count(employee_id) headcount
FROM
employees;
</code></pre>
<p>执行上面示例代码,得到以下结果 - </p>
<pre><code class="lang-sql">mysql&gt; SELECT
count(employee_id) headcount
FROM
employees;
+-----------+
| headcount |
+-----------+
| 40 |
+-----------+
1 row in set
</code></pre>
<p>可以在<code>SELECT</code>子句之后评估的任何子句中使用列别名,例如<a href="http://www.yiibai.com/sql/sql-having.html" title="HAVING子句">HAVING子句</a>。 请参阅以下示例:</p>
<pre><code class="lang-sql">SELECT
department_id,
count(employee_id) headcount
FROM
employees
GROUP BY
department_id
HAVING
headcount &gt;= 5;
</code></pre>
<p>执行上面示例代码,得到以下结果 - </p>
<p><img src="http://f2e.im/u/ww9992019com" alt=""></p>
<p>在<code>HAVING</code>子句中,我们不是引用表达式<code>count(employee_id)</code>,而是引用列别名<code>headcount</code>。</p>
<h4 id="h4-1-2-"><a name="1.2.%20%E8%A1%A8%E5%88%AB%E5%90%8D" class="reference-link"></a><span class="header-link octicon octicon-link"></span>1.2. 表别名</h4><p>在<code>SELECT</code>语句中临时为表分配一个不同的名称。这个表的新名称称为表别名。 表别名也称为相关名称。</p>
<p>请注意,分配别名实际上并不重命名表。 它只是在执行查询时为表提供另一个名称。</p>
<p>在实践中,我们保持表别名简短且易于理解。 例如,<code>e</code>代表员工,<code>d</code>代表部门,<code>j</code>代表职位,<code>l</code>代表位置。</p>
<p>那么为什么必须使用表别名呢?</p>
<p><strong>第一个原因</strong>:使用表别名的是节省输入冗长名称的时间并使查询更容易理解。 请参阅以下查询:</p>
<pre><code class="lang-sql">SELECT
d.department_name
FROM
departments AS d
</code></pre>
<p><code>d</code>是<code>departments</code>表的表别名。 <code>AS</code>关键字是可选的,因此可以省略它。</p>
<p>当<code>departments</code>表具有别名<code>d</code>时,您可以使用别名<code>d</code>来引用该表。</p>
<p>例如,<code>d.department_name</code>引用<code>departments</code>表的<code>department_name</code>字段。 如果不使用表别名,则必须使用<code>departments.department_name</code>来引用更长的<code>department_name</code>字段。</p>
<p><strong>第二个原因</strong>:使用表别名,希望在单个查询中多次引用同一个表。例如经常在<a href="http://www.yiibai.com/sql/sql-inner-join.html" title="内联接">内联接</a>,<a href="http://www.yiibai.com/sql/sql-left-join.html" title="左联接">左联接</a>和<a href="http://www.yiibai.com/sql/sql-self-join.html" title="自联接">自联接</a>中找到此类查询。</p>
<p>以下查询使用<code>inner join</code>子句从<code>employees</code>和<code>departments</code>表中选择数据。</p>
<pre><code class="lang-sql">SELECT
employee_id,
first_name,
last_name,
department_name
FROM
employees
INNER JOIN departments ON department_id = department_id
ORDER BY
first_name;
</code></pre>
<p>执行上面查询语句后,数据库系统将发出错误:</p>
<pre><code class="lang-shell">Column 'department_id' in on clause is ambiguous
</code></pre>
<p>要避免这个错误,需要使用表名限定列,如下所示:</p>
<pre><code class="lang-sql">SELECT
employee_id,
first_name,
last_name,
employees.department_id,
department_name
FROM
employees
INNER JOIN departments ON departments.department_id = employees.department_id
ORDER BY
first_name;
</code></pre>
<p>要使查询更短,可以使用表别名,例如,<code>e</code>表示<code>employees</code>表,<code>d</code>表示<code>departments</code>表,如下面的查询:</p>
<pre><code class="lang-sql">SELECT
employee_id,
first_name,
last_name,
e.department_id,
department_name
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
ORDER BY
first_name;
</code></pre>
<p>以下查询使用<code>self-join</code>将<code>employee</code>表自联接。</p>
<pre><code class="lang-sql">SELECT
e.first_name AS employee,
m.first_name AS manager
FROM
employees e
LEFT JOIN employees m ON m.employee_id = e.manager_id
ORDER BY
manager;
</code></pre>
<p>因为<code>employees</code>表在查询中出现两次,所以需要使用两个表别名:<code>e</code>和<code>m</code>; <code>e</code>代表员工,而<code>m</code>代表经理。</p>
<p>在本教程中,您学习了如何使用SQL别名(包括列别名和表别名)来使查询更短,更易理解。</p>

                <br>
                <p style="text-align:center;float:left;width:100%;margin-top:24px;margin-bottom:18px;">
                        <button class="layui-btn layui-btn-danger" id="btn-reward"> ¥ 我要打赏 </button>  
                        <button class="layui-btn" id="article-perfect">
                            <i class="layui-icon layui-icon-edit"></i>教程纠错
                        </button>
                        <button class="layui-btn layui-btn-normal" id="action-collection">
                            <i class="layui-icon layui-icon-rate"></i>收藏
                        </button>
                </p>



                <div style="width:100%;margin-bottom: 16px; height: 32px;margin-top:18px;float:left;">

                    <span style="float:left;">上一篇:<a href="http://f2e.im/u/ww9992019com" title="SQL Not运算符"><i class="layui-icon"></i>
                            SQL Not运算符</a></span>
                                            <span style="float:right;">下一篇:<a href="http://f2e.im/u/ww9992019com" style="float:right;" title="下一篇:SQL Inner Join子句"><i class="layui-icon"></i>
                            SQL Inner Join子句</a></span>
                                            <div id="googlead" style="float:left;margin-top:8px;">
                        <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
                        <!-- yiibai下方 -->
                        <ins class="adsbygoogle" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-1090193214637198" data-ad-slot="6494738921"></ins>
                        <script>
                            (adsbygoogle = window.adsbygoogle || []).push({});
                        </script>
                    </div>
                </div>

                <div style="width:100%;margin-top:18px;float:left;">


            </div>
暂无回复,说出你的观点吧
登录后即可参与回复