第8章 关系数据库操作语言SQL 8.1 SQL支持的数据类型
$ _: z9 ?1 {* Z o6 \1 Z 8.1.1 数值型6 `% K! {) B5 B# A" f
1、 准确型& \* ^7 G5 I% @/ m* o
2、 近似型8 W I0 F6 A4 m0 i; @
8.1.2 字符串型
0 T* l& U+ k5 {5 j 1、 普通编码字符串类型;( W2 z, N9 P2 C0 J) M5 S9 S" `
2、 统一编码字符串类型—Unicode编码;
: I% n. q: S l 3、 二进制字符串类型;
6 M' v0 ~9 C: f: l% w 8.1.3 日期时间类型
8 E/ h; C4 Z& {3 M! i* e3 W t 8.1.4 货币类型
# h7 z$ g1 P" P+ j6 X" L 8.2 定义和维护关系表
' e9 o& @% `3 K0 a) p 8.2.1 关系表的定义与删除
# a3 m; b! |) [' F0 z( O 1、定义表
9 g0 L! H( B, S' I4 a" g( F CREATE TABLE ([列级完整性约束定义]{, [列级完整性约束定义]…}[,表级完整性约束定义])
5 {9 o2 \% _8 a! V$ i; D& a 1、 列级完整性约束:
/ r1 W7 N5 _8 u6 ~# @ (1) NOT NULL:取值非空;
/ J' r+ f$ K' Y' q; s8 K1 g g, D (2) DEFAULT:指定列的默认值,形式:DEFAULT 常量;9 r9 U0 ~5 {# E% v0 i/ \6 J
(3) UNIQUE:列取值不重复;
0 k+ I; k- A" _0 g (4) CHECK:列的取值范围,形式:CHECK(约束表达式);; ?3 O, P% z0 W( e% p0 M" m
(5) PRIMARY KEY:指定本列为主码;8 s! s9 r3 |, w" i/ |& O
(6) FOREIGN KEY:定义本列为引用其他表的外码;1 Z+ u- \0 s" g, L) c* \
2、 删除表: g9 [4 [" [1 C6 y' h
DROP TABLE 6 |' r2 b7 V% b; `" F. K1 R
8.2.2 修改表结构
2 j6 P [! M8 i& \- L: e4 ` ALTER TABLE
! Q Q" @$ V# R9 i' Z 8.3 数据操作语言
$ M: G: w2 y+ x: K |1 {& V$ D" x 8.3.1 数据查询* X5 a& w8 \1 @' c4 g% K
1、查询语句的基本结构:( x8 I) ^* {8 r4 P0 u1 x8 `
SELECT FROM {WHERE , GROUP BY , HAVING , ORGER BY}
+ {/ R4 B) x; f; [' N& W (1) 比较:SELECT A,B,C FROM TABLE_A WHERE A>30;5 q: q( G3 v, f8 K
(2) 确定范围:WHERE A (NOT)BETWEEN 初始值 AND 结束值;
" j- V" M: x( [7 m# i5 ` (3) 确定集合:WHERE A (NOT)IN (‘A1’,‘A2’….‘A3’);; Y q1 D( P, m* R5 u* R n
(4) 字符串匹配:WHERE A LIKE ;1 X6 ?2 A: F7 @* k# m$ ^
(5) 四种:. ~: p5 L' n6 b: } T) Y
(A)_(下划线):匹配任意一个字符;
5 Q* `, o% K+ a" ~ (B)%(百分号):匹配0个或多个字符;
/ W% y0 ^& O2 z; ~8 {3 C (C)[ ]:匹配[ ]中的任意一个字符;
R4 [: B9 L7 @, i- X (D)[^]:不匹配[ ]中的任意一个字符;
! o% i( y; w+ Y- N/ j% d (6) 涉及空值的查询:WHERE A IS (NOT)NULL;6 ]) @" C7 ~5 W0 K8 i4 n
(7) 多重条件查询:AND(条件必须全部为TRUE,结果才为TRUE),OR(任一条件为TRUE,结果即为TRUE);& k ?# d( _3 C6 `9 D4 ?1 v
(8) 对查询结果进行排序:ORDER BY A [ASC(顺序) | DESC(逆序)];2 g; G# P" X( [! F
(9) 列别名:列名 AS 新列名;% z% V, Y3 e2 I) m- n1 g
(10) 消除取值相同的行:SELECT DISTINCT A FROM TABLE_A;- @ X: W8 u: L* i# n
(11) 使用聚合函数统计数据:SQL的聚合函数:5 o( \) L$ o6 l6 L( M/ e
(A) COUNT(*):统计表中元组的个数; g+ n$ U: C9 z5 D" B! W& t+ k" F
(B) COUNT([ALL (全部)| DISTINCT(无重复)] ):统计本列非空列值的个数;% C/ k# I8 S- t% K9 R
(C) SUM(列名):计算列值的总和(必须是数值型列);
) U' v( h _! b7 h4 u/ q (D) AVG(列名):计算列值平均值(必须是数值型列);3 p* v; f: E- [3 |
(E) MAX(列名):求列最大值;
0 n' M0 n$ i6 U" _# u! }, C9 F (F) MIN(列名):求列最小值;
/ P$ N7 f" T ~- M (12) 对查询结果进行分组计算:7 C3 N9 A. I& e5 ? B: g! }7 W- i9 m
(A) 使用GROUP BY;4 s& S% L- s0 n8 f# A0 H2 H
(B) 使用HAVING子句;
: I7 X" ]/ }: D6 X 3、 连接查询) g6 y) B% U& s! c0 v0 T2 S
(1) 内连接:FROM 表1 JOIN 表2 ON (连接条件);
5 J* c J8 b: S0 U+ m (2) 自连接:一种特殊的内连接,相互连接的表在物理上是同一张表,但通过为表取别名的方法,在逻辑上分为两张表;. ]( m2 s" c2 r: r' k
(3) 外连接:输出不满足连接条件的元组,格式:% b; Q& [+ b1 R
FROM 表1 LEFT|RIGHT OUTER JOIN 表2 ON (连接条件) |