第8章 关系数据库操作语言SQL 8.1 SQL支持的数据类型
" ]: R4 m. `0 y& {# M6 v2 Z3 t# c 8.1.1 数值型
T6 u5 L$ K: Z6 \) `( e; } 1、 准确型9 x* H$ Q' d6 K
2、 近似型
% |( n$ j: B- D 8.1.2 字符串型
( q7 k+ X9 H$ b 1、 普通编码字符串类型;
# m! p7 p* E- g# B+ _- v( } 2、 统一编码字符串类型—Unicode编码;! Y! S, k3 N% N. f4 c! ]! s
3、 二进制字符串类型;
5 i* G3 M R- t G) \) n' k 8.1.3 日期时间类型
o% }) j$ C& O3 j- n 8.1.4 货币类型1 i2 T) S) J5 ` `
8.2 定义和维护关系表
" w% L9 u6 s2 w* X! u 8.2.1 关系表的定义与删除) x3 n3 v8 ]4 m3 G. e) z
1、定义表% v9 ]2 b7 D" d
CREATE TABLE ([列级完整性约束定义]{, [列级完整性约束定义]…}[,表级完整性约束定义])3 R7 p* Y9 [$ a N; W, |; k
1、 列级完整性约束:
# R1 Q5 @; `- o" m# ` (1) NOT NULL:取值非空;
: z9 k. V0 v) } (2) DEFAULT:指定列的默认值,形式:DEFAULT 常量;
( t" a, t3 C/ D! r) E4 | (3) UNIQUE:列取值不重复;
; Z }& J2 z8 D5 K (4) CHECK:列的取值范围,形式:CHECK(约束表达式);
. f0 H$ {0 L' n. x (5) PRIMARY KEY:指定本列为主码;! v: Y3 ~( v) g1 g U5 y- @8 S
(6) FOREIGN KEY:定义本列为引用其他表的外码;# e5 V8 [2 @' \# c" h8 @
2、 删除表
) j+ z7 U2 X3 k9 F7 d g DROP TABLE x3 m4 I; N3 ^ ]; s$ [" E9 j# g
8.2.2 修改表结构
" A1 V# x5 B6 Y9 I! A- I ALTER TABLE
/ B: ?. L) h- h" j0 T3 ^ 8.3 数据操作语言/ V$ n( k7 T: \9 p) o5 d
8.3.1 数据查询
( g6 C, t: g! G1 o4 c 1、查询语句的基本结构:
; q1 K0 n7 L- y C SELECT FROM {WHERE , GROUP BY , HAVING , ORGER BY}! e. \% j, y: \" t& r7 R
(1) 比较:SELECT A,B,C FROM TABLE_A WHERE A>30;* E- V/ D' o) Z( i# G4 m
(2) 确定范围:WHERE A (NOT)BETWEEN 初始值 AND 结束值;
A; W. E: _( I7 T+ P7 O (3) 确定集合:WHERE A (NOT)IN (‘A1’,‘A2’….‘A3’);
H) {1 U' V5 b- {/ b (4) 字符串匹配:WHERE A LIKE ;
: x( X2 _; @# D$ | (5) 四种:) G8 a# _; j$ F$ \) y
(A)_(下划线):匹配任意一个字符;& g; S8 S8 Z1 s+ l
(B)%(百分号):匹配0个或多个字符;
. W+ p8 K7 |' f7 k/ A1 ` (C)[ ]:匹配[ ]中的任意一个字符;
: s! G- `% [+ E4 N b- c (D)[^]:不匹配[ ]中的任意一个字符;
% Z8 C; _$ y6 D4 Q9 R (6) 涉及空值的查询:WHERE A IS (NOT)NULL;# m8 i" g1 b- \. X3 g& j
(7) 多重条件查询:AND(条件必须全部为TRUE,结果才为TRUE),OR(任一条件为TRUE,结果即为TRUE); ]. D4 c2 j% G' `
(8) 对查询结果进行排序:ORDER BY A [ASC(顺序) | DESC(逆序)];3 L: S9 p+ [; _4 n% W
(9) 列别名:列名 AS 新列名;; W; ^7 b Y: _
(10) 消除取值相同的行:SELECT DISTINCT A FROM TABLE_A;
1 n9 {8 ]; J4 ~, F% F (11) 使用聚合函数统计数据:SQL的聚合函数:
4 G* Q7 I' S6 f% p% W2 R8 w; n- f. U (A) COUNT(*):统计表中元组的个数;* R( a) v1 S/ d( T
(B) COUNT([ALL (全部)| DISTINCT(无重复)] ):统计本列非空列值的个数;
$ H2 g# J1 L+ c3 Q' T% W" H j+ } (C) SUM(列名):计算列值的总和(必须是数值型列);
- K" L; F( S2 \! R" B (D) AVG(列名):计算列值平均值(必须是数值型列);
4 l3 A( m' b2 C R! }$ u (E) MAX(列名):求列最大值;
$ f* B; _1 X: f( l- F' r% o (F) MIN(列名):求列最小值;# U6 G0 e; `# W s9 }
(12) 对查询结果进行分组计算:( e( W' j" b0 A5 G! a
(A) 使用GROUP BY;
8 Z- K! z& s' Y (B) 使用HAVING子句;2 l3 t! S9 r% q7 @
3、 连接查询
9 H. `, ^- J8 }% n: `2 E (1) 内连接:FROM 表1 JOIN 表2 ON (连接条件);
+ \$ ?9 C- t) S9 o& o0 c2 @ (2) 自连接:一种特殊的内连接,相互连接的表在物理上是同一张表,但通过为表取别名的方法,在逻辑上分为两张表;' m2 p/ c% ^9 _
(3) 外连接:输出不满足连接条件的元组,格式:5 V# \! O* n' G% |% Q
FROM 表1 LEFT|RIGHT OUTER JOIN 表2 ON (连接条件) |