基本表 Employee
create table Employee(
Id int,
Name varchar(20),
Sex varchar(20),
Age int
)
1 新增
insert into Employee values
(001,'张子婷','女',24),
(002,'你愁啥','男',26),
(003,'黑客','女',29),
(004,'大佬','男',20),
(005,'尼奥','女',24),
(006,'安德森','男',15)
2 常规查询
2.1 聚合函数
行聚合函数 |
描述 |
count(*) |
返回数据中的项数 |
count({ [ [ all或distinct ] 列名 ] } ) |
返回某列的个数 |
avg({ [ [ all或distinct ] 列名 ] } ) |
返回某列的平均值 |
max({ [ [ all或distinct ] 列名 ] } ) |
返回某列的最大值 |
min({ [ [ all或distinct ] 列名 ] } ) |
返回某列的最小值 |
sum({ [ [ all或distinct ] 列名 ] } ) |
返回某列值得和 |
2.2 别名查询
别名的 3 中定义方法:
select 员工编号=Id, Name as 姓名, Sex 性别, Age 年龄
from Employee

2.3 where子句
指定查询返回的行的搜索条件。
2.3.1 逻辑运算符(not、and、or)
select * from Employe where Sex='女' and Age =20
select * from Employe where Id='001' or Id='002'
select * from Employe where Sex='男' and not Age>20
select * from Employe where Sex='男' and Age=20 or Sex='女' and Age='23'
2.3.2 比较运算符(=、>、<)
select * from Employe where Name='张子婷'
select * from Employe where Age>24
2.3.3 like 关键字
使用 like 关键字可以确定特定字符是否与指定模式相匹配。模式可以包含常规字符和通配符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。但是,通配符可以与字符串的任意部分相匹配。
通配符 |
说明 |
示例 |
% |
包含零个或多个字符的任意字符串 |
|
_ (下划线) |
任何单个字符 |
|
[ ] |
指定范围([a~f])或集合([abcdef])中任何单个字符 |
|
[^] |
指定范围([a~f])或集合([abcdef])中任何单个字符 |
|
2.4 into 子句
创建新表并将来自查询的结果行插入新表中。
[into new_table]
eg. 使用 into 子句创建一个新表 tb_Employ, tb_Employ表中包含 Employ 表中的Name和Age字段。
select Name, Age into tb_Employe from Employee
select * from tb_Employe

3 嵌套查询
数据库表



3.1 in
查询Student表 并且 Sno 在 SC表中有
select * from Student where Sno in(select Sno from SC)

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

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

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

3.5 exists
exists谓词只注重子查询结果是否返回行。如果子查询返回一个或多个行,谓词返回为真值,否则为假。
exists搜索条件并不真正使用子查询的结果。他仅测试子查询是否产生任何结果。
查询没有参加考试的学生
select * from Student
where not exists
(select Sno from SC where Student.Sno = SC.Sno)
伪代码
查询学生表
不存在
(查询 Student.Sno = SC.Sno的结果)
<p>基本表 Employee</p>
<pre><div class="hljs"><code class="lang-sql"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> Employee(
Id <span class="hljs-type">int</span>,
Name <span class="hljs-type">varchar</span>(<span class="hljs-number">20</span>),
Sex <span class="hljs-type">varchar</span>(<span class="hljs-number">20</span>),
Age <span class="hljs-type">int</span>
)
</code></div></pre>
<h2><a id="1__11"></a>1 新增</h2>
<pre><div class="hljs"><code class="lang-sql"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> Employee <span class="hljs-keyword">values</span>
(<span class="hljs-number">001</span>,<span class="hljs-string">'张子婷'</span>,<span class="hljs-string">'女'</span>,<span class="hljs-number">24</span>),
(<span class="hljs-number">002</span>,<span class="hljs-string">'你愁啥'</span>,<span class="hljs-string">'男'</span>,<span class="hljs-number">26</span>),
(<span class="hljs-number">003</span>,<span class="hljs-string">'黑客'</span>,<span class="hljs-string">'女'</span>,<span class="hljs-number">29</span>),
(<span class="hljs-number">004</span>,<span class="hljs-string">'大佬'</span>,<span class="hljs-string">'男'</span>,<span class="hljs-number">20</span>),
(<span class="hljs-number">005</span>,<span class="hljs-string">'尼奥'</span>,<span class="hljs-string">'女'</span>,<span class="hljs-number">24</span>),
(<span class="hljs-number">006</span>,<span class="hljs-string">'安德森'</span>,<span class="hljs-string">'男'</span>,<span class="hljs-number">15</span>)
</code></div></pre>
<h2><a id="2__21"></a>2 常规查询</h2>
<h3><a id="21__22"></a>2.1 聚合函数</h3>
<table>
<thead>
<tr>
<th>行聚合函数</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>count(*)</td>
<td>返回数据中的项数</td>
</tr>
<tr>
<td>count({ [ [ all或distinct ] 列名 ] } )</td>
<td>返回某列的个数</td>
</tr>
<tr>
<td>avg({ [ [ all或distinct ] 列名 ] } )</td>
<td>返回某列的平均值</td>
</tr>
<tr>
<td>max({ [ [ all或distinct ] 列名 ] } )</td>
<td>返回某列的最大值</td>
</tr>
<tr>
<td>min({ [ [ all或distinct ] 列名 ] } )</td>
<td>返回某列的最小值</td>
</tr>
<tr>
<td>sum({ [ [ all或distinct ] 列名 ] } )</td>
<td>返回某列值得和</td>
</tr>
</tbody>
</table>
<h3><a id="22__32"></a>2.2 别名查询</h3>
<p>别名的 3 中定义方法:</p>
<ul>
<li>别名=<strong>列名</strong></li>
<li><strong>列名</strong> as 别名</li>
<li><strong>列名</strong> 别名</li>
</ul>
<pre><div class="hljs"><code class="lang-sql"><span class="hljs-keyword">select</span> 员工编号<span class="hljs-operator">=</span>Id, Name <span class="hljs-keyword">as</span> 姓名, Sex 性别, Age 年龄
<span class="hljs-keyword">from</span> Employee
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/4810eab1adb7a5f050784a213ec66e25.png" alt="image.png" /></p>
<h3><a id="23_where_45"></a>2.3 where子句</h3>
<p>指定查询返回的行的搜索条件。</p>
<h4><a id="231_notandor_48"></a>2.3.1 逻辑运算符(not、and、or)</h4>
<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> Employe <span class="hljs-keyword">where</span> Sex<span class="hljs-operator">=</span><span class="hljs-string">'女'</span> <span class="hljs-keyword">and</span> Age <span class="hljs-operator">=</span><span class="hljs-number">20</span>
</code></div></pre>
<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> Employe <span class="hljs-keyword">where</span> Id<span class="hljs-operator">=</span><span class="hljs-string">'001'</span> <span class="hljs-keyword">or</span> Id<span class="hljs-operator">=</span><span class="hljs-string">'002'</span>
</code></div></pre>
<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> Employe <span class="hljs-keyword">where</span> Sex<span class="hljs-operator">=</span><span class="hljs-string">'男'</span> <span class="hljs-keyword">and</span> <span class="hljs-keyword">not</span> Age<span class="hljs-operator">></span><span class="hljs-number">20</span>
</code></div></pre>
<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> Employe <span class="hljs-keyword">where</span> Sex<span class="hljs-operator">=</span><span class="hljs-string">'男'</span> <span class="hljs-keyword">and</span> Age<span class="hljs-operator">=</span><span class="hljs-number">20</span> <span class="hljs-keyword">or</span> Sex<span class="hljs-operator">=</span><span class="hljs-string">'女'</span> <span class="hljs-keyword">and</span> Age<span class="hljs-operator">=</span><span class="hljs-string">'23'</span>
</code></div></pre>
<h4><a id="232_gtlt_61"></a>2.3.2 比较运算符(=、>、<)</h4>
<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> Employe <span class="hljs-keyword">where</span> Name<span class="hljs-operator">=</span><span class="hljs-string">'张子婷'</span>
</code></div></pre>
<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> Employe <span class="hljs-keyword">where</span> Age<span class="hljs-operator">></span><span class="hljs-number">24</span>
</code></div></pre>
<h4><a id="233_like__69"></a>2.3.3 like 关键字</h4>
<p>使用 like 关键字可以确定特定字符是否与指定模式相匹配。模式可以包含常规字符和通配符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。但是,通配符可以与字符串的任意部分相匹配。</p>
<table>
<thead>
<tr>
<th>通配符</th>
<th>说明</th>
<th>示例</th>
</tr>
</thead>
<tbody>
<tr>
<td>%</td>
<td>包含零个或多个字符的任意字符串</td>
<td></td>
</tr>
<tr>
<td>_ (下划线)</td>
<td>任何单个字符</td>
<td></td>
</tr>
<tr>
<td>[ ]</td>
<td>指定范围([a~f])或集合([abcdef])中任何单个字符</td>
<td></td>
</tr>
<tr>
<td>[^]</td>
<td>指定范围([a~f])或集合([abcdef])中任何单个字符</td>
<td></td>
</tr>
</tbody>
</table>
<h3><a id="24_into__79"></a>2.4 into 子句</h3>
<p>创建新表并将来自查询的结果行插入新表中。</p>
<pre><div class="hljs"><code class="lang-sql">[<span class="hljs-keyword">into</span> new_table]
</code></div></pre>
<p>eg. 使用 into 子句创建一个新表 tb_Employ, tb_Employ表中包含 Employ 表中的Name和Age字段。</p>
<pre><div class="hljs"><code class="lang-sql"><span class="hljs-keyword">select</span> Name, Age <span class="hljs-keyword">into</span> tb_Employe <span class="hljs-keyword">from</span> Employee
<span class="hljs-keyword">select</span> <span class="hljs-operator">*</span> <span class="hljs-keyword">from</span> tb_Employe
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/6863d66f507a7972c9ea4f6c37e21e5a.png" alt="image.png" /></p>
<h2><a id="3__96"></a>3 嵌套查询</h2>
<p>数据库表</p>
<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="31_in_106"></a>3.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="32_not_in_114"></a>3.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="33_some_131"></a>3.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>
<h3><a id="34_all_150"></a>3.4 all</h3>
<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>
<h3><a id="35_exists_169"></a>3.5 exists</h3>
<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>
留言