第8章 关系数据库操作语言SQL 8.1 SQL支持的数据类型
p9 {& F7 |2 E! ?3 a 8.1.1 数值型
3 a, e" q X h4 I. a 1、 准确型1 u' ^# O% x& [3 f! U- n' Z
2、 近似型
/ Q1 C* `, }/ k% R3 m L 8.1.2 字符串型
2 |4 w9 |* s% \9 z2 t; }' @ 1、 普通编码字符串类型;
/ p# a) a! I+ p1 s7 } 2、 统一编码字符串类型—Unicode编码;" c' p Q5 W6 F, x* k2 V
3、 二进制字符串类型;
- a- i4 b' G, z4 _: q. r& { 8.1.3 日期时间类型
4 e' V& V3 e, d. }% m 8.1.4 货币类型" Q a; C. s* S% f5 F. K+ G+ J
8.2 定义和维护关系表) P6 Q" m! n2 i2 k
8.2.1 关系表的定义与删除
0 [& q3 @! ]1 s" ^( t 1、定义表
0 l7 ~2 d- z' w# K9 w9 ` CREATE TABLE ([列级完整性约束定义]{, [列级完整性约束定义]…}[,表级完整性约束定义])
% C8 R. ~ y7 m2 A! G- y; {2 }) B 1、 列级完整性约束:8 j1 |1 F" r) Y
(1) NOT NULL:取值非空;, L9 E2 c3 t. F2 _/ j1 ?
(2) DEFAULT:指定列的默认值,形式:DEFAULT 常量;
! @% B" y- a! B. I" j, Y) G- p+ | (3) UNIQUE:列取值不重复;8 w% F- X/ e2 o! r8 N
(4) CHECK:列的取值范围,形式:CHECK(约束表达式);# o6 w- U& R/ \ I4 l
(5) PRIMARY KEY:指定本列为主码;
- O& G, j6 ?# y+ x (6) FOREIGN KEY:定义本列为引用其他表的外码;' ~& |& k5 v+ G( ]2 F( }7 ^
2、 删除表& ]2 y9 ^$ k: Q' \" Q% a1 t
DROP TABLE
$ s5 X( j. _; p" ?- P7 h 8.2.2 修改表结构
9 f' i6 Q3 B' z2 D N' e ALTER TABLE " e) \) k5 h I; Z: }$ P2 S4 z% e
8.3 数据操作语言
6 T# P. l2 A2 U, \/ F 8.3.1 数据查询/ a4 \7 z5 a" h
1、查询语句的基本结构:+ w* A5 A* ~0 x: q: q
SELECT FROM {WHERE , GROUP BY , HAVING , ORGER BY}3 i0 l& W2 C( w" J! Q ?
(1) 比较:SELECT A,B,C FROM TABLE_A WHERE A>30;, t! S4 E8 Q7 I$ @+ Y8 B8 Q7 {
(2) 确定范围:WHERE A (NOT)BETWEEN 初始值 AND 结束值;+ B9 c1 c$ j1 M& _, l
(3) 确定集合:WHERE A (NOT)IN (‘A1’,‘A2’….‘A3’);
+ Q! D: W, | {9 g1 l (4) 字符串匹配:WHERE A LIKE ;
% m2 e' F' I+ F+ k$ @( Y$ ] (5) 四种:
! l |' O; s$ U, ^ (A)_(下划线):匹配任意一个字符;; U* N4 J, z7 L+ P3 k3 g* E% {: s S( ?
(B)%(百分号):匹配0个或多个字符;
! N0 a4 i% ]/ v4 w (C)[ ]:匹配[ ]中的任意一个字符;3 q4 J9 P% a9 O; \: V
(D)[^]:不匹配[ ]中的任意一个字符;5 F5 s' w% t, P$ S: ^+ u# ~
(6) 涉及空值的查询:WHERE A IS (NOT)NULL;
$ _9 P: z. k8 a1 k5 R6 F$ a6 m! X0 i (7) 多重条件查询:AND(条件必须全部为TRUE,结果才为TRUE),OR(任一条件为TRUE,结果即为TRUE);" ^: E3 {: F; F1 p5 E, B1 U
(8) 对查询结果进行排序:ORDER BY A [ASC(顺序) | DESC(逆序)];$ Z7 K* _; k( `0 G, l
(9) 列别名:列名 AS 新列名;3 u& Z7 W+ @$ I8 B
(10) 消除取值相同的行:SELECT DISTINCT A FROM TABLE_A;3 K, E" d a- W
(11) 使用聚合函数统计数据:SQL的聚合函数:- z" J, e7 f3 U$ g. x U
(A) COUNT(*):统计表中元组的个数;# y& V" r! m' `" K
(B) COUNT([ALL (全部)| DISTINCT(无重复)] ):统计本列非空列值的个数;- B* \! G B# M
(C) SUM(列名):计算列值的总和(必须是数值型列);; ^2 @; z. `: P( E; Z
(D) AVG(列名):计算列值平均值(必须是数值型列);7 @/ ~2 o, \/ @7 a* P5 g$ R4 o
(E) MAX(列名):求列最大值;
3 J" Z: o& k; Y5 y. R (F) MIN(列名):求列最小值;$ `! ^8 S# A8 v8 j. o
(12) 对查询结果进行分组计算:1 _$ G/ H* M3 M9 g, B; K4 Y5 s
(A) 使用GROUP BY;
( k6 z9 V% d1 t1 q; q (B) 使用HAVING子句;
' O, C) s8 K* [# `6 b3 Q! H' ] 3、 连接查询" V4 F5 ^" i3 e/ L
(1) 内连接:FROM 表1 JOIN 表2 ON (连接条件);
# k8 G J: `; q- A (2) 自连接:一种特殊的内连接,相互连接的表在物理上是同一张表,但通过为表取别名的方法,在逻辑上分为两张表;' e& `* h0 s o, b8 l
(3) 外连接:输出不满足连接条件的元组,格式:
8 `! M/ U& h! F1 y6 G/ X' j* S FROM 表1 LEFT|RIGHT OUTER JOIN 表2 ON (连接条件) |