数据库表



1.带 in 的嵌套查询
查询Student表 并且 Sno 在 SC表中有
select * from Student where Sno in(select Sno from SC)

2.带 not in 的嵌套查询
查询学生表中 Sno在SC表不存在的学生
select * from Student
where Sno not in
(select Sno from SC)
伪代码
查询学生表
学生表中的Sno
不在SC表中

3.带 some 的嵌套查询
SQL支持3中定量比较谓词:some、any 和 all。他们都是判断是否任何或全部返回值都满足搜索要求的。其中,some和any谓词是存在量的,只注重是否有返回值满足搜索要求。这两谓词含义相同,可以替换使用。
查询学生表中,年龄小于平均值的学生
select * from Student
where Sage < some
(select avg(Sage) from Student)
伪代码
查询学生表
年龄小于
(查询 学生表 年龄平均值)

4. 带 all 的嵌套查询
all 谓词的使用方法和 any 或者 some 谓词一样,也是把列值与子查询结果进行比较,但是它不要求任意结果值得列值为真,而是要求所有列的查询结果都为真,否则就不返回行。
查询课程表 并且成绩 没有 有 成绩超过 90分的课程
select * from Course
where Cno <> all
(select Cno from SC where grade > 90)
伪代码
查询课程表
不存在的课程号在
(查询有分数>90分的课程号)

5. 带exists的嵌套查询
exists谓词只注重子查询结果是否返回行。如果子查询返回一个或多个行,谓词返回为真值,否则为假。
exists搜索条件并不真正使用子查询的结果。他仅测试子查询是否产生任何结果。
查询没有参加考试的学生
select * from Student
where not exists
(select Sno from SC where Student.Sno = SC.Sno)
伪代码
查询学生表
不存在
(查询 Student.Sno = SC.Sno的结果)
<h2><a id="_1"></a>数据库表</h2>
<p><img src="https://static.couragesteak.com/article/ceb531bc15612ea3378a244b5d555c8e.png" alt="image.png" /></p>
<p><img src="https://static.couragesteak.com/article/c1b9c51c715e670d6e6fd6fd41a5fc7a.png" alt="image.png" /></p>
<p><img src="https://static.couragesteak.com/article/b74316fb6dcd56c74b8dd555de60d4d9.png" alt="image.png" /></p>
<h3><a id="1_in__10"></a>1.带 in 的嵌套查询</h3>
<p>查询Student表 并且 Sno 在 SC表中有</p>
<pre><div class="hljs"><code class="lang-sql"><span class="hljs-keyword">select</span> <span class="hljs-operator">*</span> <span class="hljs-keyword">from</span> Student <span class="hljs-keyword">where</span> Sno <span class="hljs-keyword">in</span>(<span class="hljs-keyword">select</span> Sno <span class="hljs-keyword">from</span> SC)
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/9338e87e3a295b3874b1b9808220440e.png" alt="image.png" /></p>
<h3><a id="2_not_in__19"></a>2.带 not in 的嵌套查询</h3>
<p>查询学生表中 Sno在SC表不存在的学生</p>
<pre><div class="hljs"><code class="lang-sql"><span class="hljs-keyword">select</span> <span class="hljs-operator">*</span> <span class="hljs-keyword">from</span> Student
<span class="hljs-keyword">where</span> Sno <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span>
(<span class="hljs-keyword">select</span> Sno <span class="hljs-keyword">from</span> SC)
</code></div></pre>
<p>伪代码</p>
<pre><div class="hljs"><code class="lang-sql">查询学生表
学生表中的Sno
不在SC表中
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/b061664040e3dd1ca2bcb82b028a2bea.png" alt="image.png" /></p>
<h3><a id="3_some__36"></a>3.带 some 的嵌套查询</h3>
<p>SQL支持3中定量比较谓词:some、any 和 all。他们都是判断是否任何或全部返回值都满足搜索要求的。其中,some和any谓词是存在量的,只注重是否有返回值满足搜索要求。这两谓词含义相同,可以替换使用。</p>
<p>查询学生表中,年龄小于平均值的学生</p>
<pre><div class="hljs"><code class="lang-sql"><span class="hljs-keyword">select</span> <span class="hljs-operator">*</span> <span class="hljs-keyword">from</span> Student
<span class="hljs-keyword">where</span> Sage <span class="hljs-operator"><</span> <span class="hljs-keyword">some</span>
(<span class="hljs-keyword">select</span> <span class="hljs-built_in">avg</span>(Sage) <span class="hljs-keyword">from</span> Student)
</code></div></pre>
<p>伪代码</p>
<pre><div class="hljs"><code class="lang-sql">查询学生表
年龄小于
(查询 学生表 年龄平均值)
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/f3d67a2467adedd69d770d1b745ef2c2.png" alt="image.png" /></p>
<h2><a id="4__all__56"></a>4. 带 all 的嵌套查询</h2>
<p>all 谓词的使用方法和 any 或者 some 谓词一样,也是把列值与子查询结果进行比较,但是它不要求任意结果值得列值为真,而是要求所有列的查询结果都为真,否则就不返回行。</p>
<p>查询课程表 并且成绩 没有 有 成绩超过 90分的课程</p>
<pre><div class="hljs"><code class="lang-sql"><span class="hljs-keyword">select</span> <span class="hljs-operator">*</span> <span class="hljs-keyword">from</span> Course
<span class="hljs-keyword">where</span> Cno <span class="hljs-operator"><></span> <span class="hljs-keyword">all</span>
(<span class="hljs-keyword">select</span> Cno <span class="hljs-keyword">from</span> SC <span class="hljs-keyword">where</span> grade <span class="hljs-operator">></span> <span class="hljs-number">90</span>)
</code></div></pre>
<p>伪代码</p>
<pre><div class="hljs"><code class="lang-sql">查询课程表
不存在的课程号在
(查询有分数<span class="hljs-operator">></span><span class="hljs-number">90</span>分的课程号)
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/b92bf2d43d896ad5c3845bbb351882a2.png" alt="image.png" /></p>
<h2><a id="5_exists_74"></a>5. 带exists的嵌套查询</h2>
<p>exists谓词只注重子查询结果是否返回行。如果子查询返回一个或多个行,谓词返回为真值,否则为假。<br />
exists搜索条件并不真正使用子查询的结果。他仅测试子查询是否产生任何结果。</p>
<p>查询没有参加考试的学生</p>
<pre><div class="hljs"><code class="lang-sql"><span class="hljs-keyword">select</span> <span class="hljs-operator">*</span> <span class="hljs-keyword">from</span> Student
<span class="hljs-keyword">where</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">exists</span>
(<span class="hljs-keyword">select</span> Sno <span class="hljs-keyword">from</span> SC <span class="hljs-keyword">where</span> Student.Sno <span class="hljs-operator">=</span> SC.Sno)
</code></div></pre>
<p>伪代码</p>
<pre><div class="hljs"><code class="lang-sql">查询学生表
不存在
(查询 Student.Sno <span class="hljs-operator">=</span> SC.Sno的结果)
</code></div></pre>
留言