<div class="htmledit_views">html
<p><span style="color:#ff0000;"><span style="color:#000000;">(</span>本文一切基于SQL SERVER 2008 R2</span>)</p> <p> </p> <p>先来看一个语句执行过程发生的错误提示:</p> <div class="dp-highlighter bg_html"><div class="bar"><div class="tools"><b>[html]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 504px; top: 452px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_1" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 504px; top: 452px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_10" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_10" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=10&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-xml"><li class="alt"><span><span>消息 8120,级别 16,状态 1,第 2 行 </span></span></li><li class=""><span> 选择列表中的列 'SC.CNO' 无效,由于该列没有包含在聚合函数或 GROUP BY 子句中。 </span></li></ol></div><pre class="html" name="code" style="display: none;"> 消息 8120,级别 16,状态 1,第 2 行 选择列表中的列 'SC.CNO' 无效,由于该列没有包含在聚合函数或 GROUP BY 子句中。</pre> <p> 元数据库为Stu_C,含有三个表,S、SC、C。执行的语句以下:</p> <p> </p> <div class="dp-highlighter bg_sql"><div class="bar"><div class="tools"><b>[sql]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 493px; top: 623px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 493px; top: 623px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_11" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_11" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=11&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-sql"><li class="alt"><span><span>use Stu_C </span></span></li><li class=""><span><span class="keyword">select</span><span> SNO,cno,</span><span class="func">sum</span><span>(grade) sum_grade </span></span></li><li class="alt"><span><span class="keyword">from</span><span> SC </span></span></li><li class=""><span><span class="keyword">where</span><span> GRADE>=60 </span></span></li><li class="alt"><span><span class="keyword">group</span><span> </span><span class="keyword">by</span><span> SC.SNO </span></span></li><li class=""><span><span class="keyword">having</span><span> </span><span class="func">count</span><span>(CNO)>=4 </span></span></li><li class="alt"><span><span class="keyword">order</span><span> </span><span class="keyword">by</span><span> sum_grade </span><span class="keyword">desc</span><span> </span></span></li></ol></div><pre class="sql" name="code" style="display: none;"> use Stu_C select SNO,cno,sum(grade) sum_grade from SC where GRADE>=60 group by SC.SNO having count(CNO)>=4 order by sum_grade desc</pre><div class="dp-highlighter bg_sql"><div class="bar"><div class="tools"><b>[sql]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 493px; top: 798px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_3" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 493px; top: 798px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_12" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_12" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=12&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-sql"><li class="alt"><span><span> 目的是检索选修4门课以上课程的学生总成绩(排除不及格的),并按总成绩的降序排列出来。根据提示咱们容易知道,</span><span class="keyword">select</span><span>语句中多了cno这个属性列。若是将其去掉执 </span></span></li><li class=""><span> 行以下: </span></li></ol></div><pre class="sql" name="code" style="display: none;"> 目的是检索选修4门课以上课程的学生总成绩(排除不及格的),并按总成绩的降序排列出来。根据提示咱们容易知道,select语句中多了cno这个属性列。若是将其去掉执 行以下:</pre><div class="dp-highlighter bg_sql"><div class="bar"><div class="tools"><b>[sql]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 493px; top: 901px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_4" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_4" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 493px; top: 901px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_13" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_13" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=13&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-sql"><li class="alt"><span><span>use Stu_C </span></span></li><li class=""><span><span class="keyword">select</span><span> SNO,</span><span class="func">sum</span><span>(grade) sum_grade </span></span></li><li class="alt"><span><span class="keyword">from</span><span> SC </span></span></li><li class=""><span><span class="keyword">where</span><span> GRADE>=60 </span></span></li><li class="alt"><span><span class="keyword">group</span><span> </span><span class="keyword">by</span><span> SC.SNO </span></span></li><li class=""><span><span class="keyword">having</span><span> </span><span class="func">count</span><span>(CNO)>=4 </span></span></li><li class="alt"><span><span class="keyword">order</span><span> </span><span class="keyword">by</span><span> sum_grade </span><span class="keyword">desc</span><span> </span></span></li></ol></div><pre class="sql" name="code" style="display: none;"> use Stu_C select SNO,sum(grade) sum_grade from SC where GRADE>=60 group by SC.SNO having count(CNO)>=4 order by sum_grade desc</pre><div class="dp-highlighter bg_sql"><div class="bar"><div class="tools"><b>[sql]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 493px; top: 1076px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_5" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_5" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=5&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 493px; top: 1076px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_14" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_14" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=14&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-sql"><li class="alt"><span><span>结果: </span></span></li></ol></div><pre class="sql" name="code" style="display: none;"> 结果:</pre><div class="dp-highlighter bg_sql"><div class="bar"><div class="tools"><b>[sql]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 493px; top: 1143px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_6" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_6" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=6&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 493px; top: 1143px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_15" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_15" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=15&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-sql"><li class="alt"><span><span> </span></span></li></ol></div><pre class="sql" name="code" style="display: none;"> </pre><div class="dp-highlighter bg_sql"><div class="bar"><div class="tools"><b>[sql]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 493px; top: 1210px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_7" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_7" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=7&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 493px; top: 1210px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_16" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_16" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=16&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-sql"><li class="alt"><span><span>分析及结论: </span></span></li></ol></div><pre class="sql" name="code" style="display: none;">分析及结论:</pre> <blockquote dir="ltr" style="margin-right:0px;"> <div dir="ltr" style="margin-right:0px;"> <p dir="ltr" style="margin-right:0px;"></p><div class="dp-highlighter bg_sql"><div class="bar"><div class="tools"><b>[sql]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 493px; top: 1277px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_8" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_8" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=8&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 493px; top: 1277px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_17" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_17" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=17&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-sql"><li class="alt"><span><span>当使用</span><span class="keyword">group</span><span> </span><span class="keyword">by</span><span>子句时则</span><span class="keyword">select</span><span>中关于表的原始属性名只能是被</span><span class="string">"by"</span><span>的属性,如上例中的SNO。若想输出其余属性列,则应在</span><span class="keyword">select</span><span>子句后加上相应的聚合函数(</span><span class="func">count</span><span>(*),</span><span class="func">count</span><span>(列名),</span><span class="func">sum</span><span>(列名),</span><span class="func">avg</span><span>(列名),</span><span class="keyword">max</span><span>(列名),</span><span class="keyword">min</span><span>(列名))。其实这也很容易理解,当参照SNO被分组后,每个SNO的具体实例与其余任意一个属性都变成一对一或一对多的关系,只有经过聚合函数将每组其余想要的属性的多个实例算成一个值,即SNO与其造成一对一的关系后才能列出。并且一旦SQL语句中使用了</span><span class="keyword">group</span><span> </span><span class="keyword">by</span><span>子句后聚合函数都变成分别对每组起做用。 </span></span></li></ol></div><pre class="sql" name="code" style="display: none;"> 当使用group by子句时则select中关于表的原始属性名只能是被"by"的属性,如上例中的SNO。若想输出其余属性列,则应在select子句后加上相应的聚合函数(count(*),count(列名),sum(列名),avg(列名),max(列名),min(列名))。其实这也很容易理解,当参照SNO被分组后,每个SNO的具体实例与其余任意一个属性都变成一对一或一对多的关系,只有经过聚合函数将每组其余想要的属性的多个实例算成一个值,即SNO与其造成一对一的关系后才能列出。并且一旦SQL语句中使用了group by子句后聚合函数都变成分别对每组起做用。</pre> </div> </blockquote> <div class="dp-highlighter bg_sql"><div class="bar"><div class="tools"><b>[sql]</b> <a href="#" class="ViewSource" title="view plain" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><span data-mod="popu_168"> <a href="#" class="CopyToClipboard" title="copy" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy</a><div style="position: absolute; left: 493px; top: 1452px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_9" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_9" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=9&width=16&height=16" wmode="transparent"></div><div style="position: absolute; left: 493px; top: 1452px; width: 16px; height: 16px; z-index: 99;"><embed id="ZeroClipboardMovie_18" src="https://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_18" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=18&width=16&height=16" wmode="transparent"></div></span><span data-mod="popu_169"> <a href="#" class="PrintSource" title="print" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a></span><a href="#" class="About" title="?" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div></div><ol start="1" class="dp-sql"><li class="alt"><span><span>一条SQL语句个子句的前后做用过程: </span></span></li></ol></div><pre class="sql" name="code" style="display: none;">一条SQL语句个子句的前后做用过程:</pre> <h1 class="sql"><span style="font-size:13px;"> from</span>→<span style="font-size:13px;">where</span><span style="font-size:24px;">→<span style="font-size:13px;">group by</span>→<span style="font-size:13px;">select(含聚合函数)</span></span><span style="font-size:24px;">→<span style="font-size:13px;">order by</span></span></h1> <p class="sql"><span style="font-size:24px;"><span style="font-size:13px;"> 因此当select子句中含有sum(grade) sum_grade时,最后的排序子句能够是order by sum_grade desc。<br></span><br></span></p> </div>sql