第8章 关系数据库操作语言SQL 8.1 SQL支持的数据类型, h" c" n/ f, L6 L
8.1.1 数值型
; S3 X5 c, i: ~2 x! R/ U& H 1、 准确型
# h3 D( [. N+ k2 w 2、 近似型
! Z, ]) p" A7 L& D 8.1.2 字符串型
% c! w, T$ h7 j/ o( V9 l 1、 普通编码字符串类型;0 H- v5 j0 d* s( Q
2、 统一编码字符串类型—Unicode编码;% w1 W* o% c% O+ T& f$ t
3、 二进制字符串类型;
/ X d t8 A3 B 8.1.3 日期时间类型
) D A0 k7 i4 f. F; @! ?# _ 8.1.4 货币类型
; [9 e3 t: g& z4 V) O 8.2 定义和维护关系表9 B% ^/ B; h/ p. Z' W5 P
8.2.1 关系表的定义与删除0 x( ]! ^* l( B) }
1、定义表7 ]. N, P* i" f- h5 g. E/ P1 d* x
CREATE TABLE ([列级完整性约束定义]{, [列级完整性约束定义]…}[,表级完整性约束定义])0 Z: g$ f. R- J, _ L
1、 列级完整性约束:
! |1 f$ B/ m4 |# o (1) NOT NULL:取值非空;$ d0 s5 k/ K7 H
(2) DEFAULT:指定列的默认值,形式:DEFAULT 常量;0 }" L. P" y; J
(3) UNIQUE:列取值不重复;
' t% X/ Z# j* E5 Q (4) CHECK:列的取值范围,形式:CHECK(约束表达式);
7 V8 H8 A I) p, F# v) I4 P3 V (5) PRIMARY KEY:指定本列为主码;6 J8 V8 X. h1 ~8 K! k' b
(6) FOREIGN KEY:定义本列为引用其他表的外码;! i6 F' _" W, c4 d2 F
2、 删除表
3 L( ^' a0 [4 a/ ?4 Q DROP TABLE 2 C* o) \& O3 h% w
8.2.2 修改表结构
9 H. S! c$ b |" D ALTER TABLE 6 o# y$ J# u) i- _5 \# ?8 S+ S0 P
8.3 数据操作语言. S. Q4 i1 r! r* e; F
8.3.1 数据查询
; w8 F6 Y5 P- I. h; _# Q) ] a 1、查询语句的基本结构:1 J; E0 Q1 y! I$ k
SELECT FROM {WHERE , GROUP BY , HAVING , ORGER BY}
, m4 h% I7 {# O P' M+ h& ~ (1) 比较:SELECT A,B,C FROM TABLE_A WHERE A>30;
* _) P+ n3 u) K& z, T (2) 确定范围:WHERE A (NOT)BETWEEN 初始值 AND 结束值;
) l+ x3 Y0 Z+ v w (3) 确定集合:WHERE A (NOT)IN (‘A1’,‘A2’….‘A3’);- \! |8 S X% ?/ K! ^( ?, ^& T& j }0 A
(4) 字符串匹配:WHERE A LIKE ;7 ?9 I2 u* s; o0 \ f9 v8 E% u
(5) 四种:0 _5 {" ?6 ?; n# H
(A)_(下划线):匹配任意一个字符;6 k+ G2 A5 b$ t& X6 u- R
(B)%(百分号):匹配0个或多个字符;- f5 h; w1 g9 h: O4 U
(C)[ ]:匹配[ ]中的任意一个字符;
* X* F; Q$ R) p- v (D)[^]:不匹配[ ]中的任意一个字符;
! K+ r" t+ L: `5 i' A9 r (6) 涉及空值的查询:WHERE A IS (NOT)NULL; B8 u& U8 _6 d4 w; a+ }7 j
(7) 多重条件查询:AND(条件必须全部为TRUE,结果才为TRUE),OR(任一条件为TRUE,结果即为TRUE);
& A3 k+ t+ i7 k$ C* u- r (8) 对查询结果进行排序:ORDER BY A [ASC(顺序) | DESC(逆序)];
: `- Z. a9 G# m6 S r" ~4 C (9) 列别名:列名 AS 新列名;- a& h; W* H. o P
(10) 消除取值相同的行:SELECT DISTINCT A FROM TABLE_A;
2 q$ s* [& G4 T (11) 使用聚合函数统计数据:SQL的聚合函数:3 o6 H( E% g6 X1 S% C+ M
(A) COUNT(*):统计表中元组的个数;- S* ?1 |" U* g" U: C, l2 K) V8 f1 ~
(B) COUNT([ALL (全部)| DISTINCT(无重复)] ):统计本列非空列值的个数;
* j4 x; @4 P/ r' q* j* A+ F+ F (C) SUM(列名):计算列值的总和(必须是数值型列);
) x$ D, B8 U* G! e (D) AVG(列名):计算列值平均值(必须是数值型列);' ~/ l. ?$ P* G) C! B3 s' E7 D+ s3 x
(E) MAX(列名):求列最大值;
3 G: j# x# x6 A' ~ (F) MIN(列名):求列最小值;
+ h4 }. l( t3 z& y! T/ b (12) 对查询结果进行分组计算:
9 H: a- B. ?' H9 n) F! M (A) 使用GROUP BY; q" f) x' S z* v" H+ y3 d9 V
(B) 使用HAVING子句;) l: P1 y, \0 r
3、 连接查询
% u g7 d; @) g- {" d2 W1 Y) Z (1) 内连接:FROM 表1 JOIN 表2 ON (连接条件);( N! H" i$ P* x. \5 }" k
(2) 自连接:一种特殊的内连接,相互连接的表在物理上是同一张表,但通过为表取别名的方法,在逻辑上分为两张表;) n8 Y5 h/ T+ O8 P6 n
(3) 外连接:输出不满足连接条件的元组,格式:
1 H: B4 t7 |" G; J& W4 [ FROM 表1 LEFT|RIGHT OUTER JOIN 表2 ON (连接条件) |