4、 查询语句的扩展:$ }$ Z! Q8 p; X* |/ P
(1) 合并多个结果集:SELECT 语句1 UNION SELECT 语句2……,使用UNION的两个基本规则:
3 i! i3 q L0 U' W1 Y$ q1 S' ]8 b(A) 所有查询语句中列的个数和列的顺序必须相同;6 W) E1 p$ i+ g: R1 W. z2 X0 y, A
(B) 所有查询语句中对应的数据类型必须兼容;
9 s7 d+ i- M$ ~6 W6 }0 v4 G(2) 将查询结果保存到新表中:SELECT 查询列表序列 INTO 新表名 FROM 数据源;
" Y" Y0 m9 l9 Y2 M(3) 使用TOP限制结果集行数:TOP n [percent] [WITH TIES]
9 ]( ~1 J; W ^7 ]& k* y7 }(A) TOP n :表示取查询结果的前n行;) g# y3 X% D# l
(B) TOP n percent:表示取查询结果的前n%行;5 B0 k q L! f0 C* p, H, `
(C) WITH TIES:表示包括并列的结果;, F' K: m. b9 k# Y0 ~( I
(4) 使用CASE表达式:
9 d' `2 p$ W7 `1 K1 Q/ A8 k(A) 简单CASE表达式:
* Z+ ^7 U$ _0 a: V& m' b8 m(B) 搜索CASE表达式;
# F0 n% B, t& z, i5、子查询:如果一个SELECT语句是嵌套在一个SELECT、INSERT、UPDATE或DELETE语句中,则称为子查询或内层查询,包含子查询的语句称为主查询或外层查询;/ B$ B% d( z$ w( ^/ j
(1) 使用子查询进行基于集合的测试,形式:WHERE 表达式 [NOT] IN (子查询);
* C( ?& q' F/ A: N(2) 使用子查询进行比较测试,形式:WHERE 表达式 比较运算符 (子查询);% o- h$ D: Z$ e0 Q7 h3 j
(3) 使用子查询进行存在性测试,形式:WHERE [NOT] EXISTS (子查询);
$ J- ~( B: |$ h- k' J8.3.2 数据修改
# o: K& a9 I' H4 a" t: h1、 添加数据:INSERT [INTO] 表名 VALUE 值列表;使用插入单行语句时要注意:2 o. Y9 I5 |: X; X8 B
(1) 值列表中的值与列名表中的列按位置顺序对应,要求它们的数据类型必须一致;) L1 Z& M. b2 V" a: \) n
(2) 如果[表名]后边没有指明列名,则值列表中的值的顺序必须与表中列的顺序一致,且每一列均有值;
" y$ f4 X2 B0 e2 `. l r2、 更新数据:形式 UPDATE 表名 SET [列名=表达式] [WHERE 更新条件];5 U7 [3 f7 `. Z4 @( T6 A- h
3、 删除数据::形式DELETE [FROM] 表名 [WHERE 删除条件];
1 _2 o! q6 B# m9 D: Q+ y3 F6 T3 {8.4 索引
. p) K( D1 p% ]3 p1、 创建索引:CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]: K& w, a" S# O1 f
INDEX 索引名 ON 表名
3 N1 Y N+ C9 I4 ?: M) E5 R(1) UNIQUE:表示要创建的索引是唯一索引;/ D. j/ g2 n1 n
(2) CLUSTERED:表示要创建的索引是聚集索引;) ^, u& ?& Q, ?8 A' k
(3) NONCLUSTERED:表示要创建的索引是非聚集索引;' S9 P2 b/ g4 `- ?. y! u) Y3 W
2、 删除索引:DROP INDEX 索引名;8 s2 ?4 L' n* v- H# m4 H" Q/ H( H
8.5 视图& i: f" y; y8 J" z7 c
8.5.1 定义视图
. G6 K+ H; W5 G5 ]! D: f1、 语法格式:CREATE VIEW 视图名 AS SELECT 语句 [WITH CHECK OPTION]
( f- V1 Z3 @, l7 X+ ]$ b2 \) `2、 需要注意下列几点:
& J# E4 e, S# |) ]3 ?2 i1 q(1) 在定义视图时要么指定全部视图列,要么全部省略不写。如果省略了视图列名,则视图的列名与查询语句的列名相同。但如下情况则要明确指出组成视图的所有列名:
5 v! z- r. {2 SA、 某个目标列不是单纯的属性名,而是计算函数或列的表达式;
4 [& g0 w& t0 E$ AB、 多表连接时选出了几个同名列作为视图的字段;
. J* c6 q% f4 g' @& ~C、 需要在视图中为某个列选用新的更合适的列名。
" r4 K4 ]# _! q6 j( O9 c(2) WITH CHECK OPTION选项表示通过视图对数据进行增加、删除和更改操作时要保证对数据的操作结果要满足定义视图时指定的WHERE子句条件;: ~& d" @& e0 Q
3、 视图通常用于查询数据,也可修改基本表中的数据,但不是所有的视力都可以这样。
' g# I1 Q4 w5 e3 {4、 定义单源表视图—视图数据可只取自一个基本表的部分行、列,这样的视图行列与基本表行列对应,这样定义的视图一般可以进行查询和更改数据操作 J' Y- X/ o+ P
5、 定义多源表视图—视图数据可以来自多个表中,这样定义的视图一般只用于查询,不用于修改数据。
2 C( y) r! \: Y; m6、 在已有视图上定义新视图—可以在视图上再建立视图,这时作为数据源的视图必须是已经建立好的。
) T: ]# e/ j9 Q+ o# u4 ~1 e8 [1 o7、 定义带表达式的视图—在定义基本表时,为减少数据库中的冗余数据,表中只存放基本数据,由基本数据经过各种计算派生出的数据一般是不存储的。所以定义视图时可以根据需要设置一些派生属性列,在这些派生属性列中保存经过计算的值。这些派生属性由于在基本表中并不实际存在,因此,也称它们为虚拟列。包含虚拟列的视图也称为带表达式的视图。
' o+ l' [4 W4 a+ Q$ C/ m: S8、 含分组统计信息的视图—指定义视图的查询语句中含有GROUP BY 子句,这样的视图只能用于查询,不能修改数据。+ c2 D& X! U \2 l
8.5.2 删除视图
7 c7 D/ X n1 a q( s1、 格式为:DROP VIEW 《视图名》& D9 n8 E7 c3 @8 B
8.5.3 视图的作用
5 _5 _: b/ l0 N+ W k7 A0 y k1、 简化数据查询语句;& t7 a0 L/ ^7 J, {, Z
2、 使用户能从多角度看到同一数据;4 R$ }$ o+ m. L3 E% E, ]
3、 提高了数据的安全性;
* t5 K/ m4 J# K# n4、 提供了一定程度的逻辑独立性 |