3. 正規化-Normalization
Edgar F. Codd:在1970提出First Normal Form(1NF)
的觀念,接著在1971年繼續提出Second Normal
Form(2NF)與Third Normal Form(3NF)。︒。最後在1974
年與Raymond F. Boyce共同提出Boyce-Codd
Normal Form(BCNF)。︒。⼤大多數的正規化到此為⽌止。︒。
4NF(Ronald Fagin:1977),5NF(Ronald Fagin:1979)
6NF(C.J.Date,Hugh Darwen,Nikos Lorentzos:2002)
⼀一系列的步驟:藉由刪除重複資料以及將⼤大表格⼀一
個分割為多個⼩小表格的⽅方式,以減少資料儲存空間
與資料內容不⼀一致。︒。
7. 姓名 班級 學號 學科 成績 導師
Frank A 1 國語 90 Richard
Frank A 1 數學 80 Richard
Frank A 1 英⽂文 70 Richard
Linda B 2 國語 80 Vivi
Linda B 2 數學 70 Vivi
Linda B 2 英⽂文 80 Vivi
Gigi B 3 國語 90 Vivi
Gigi B 3 數學 90 Vivi
Gigi B 3 英⽂文 100 Vivi
Wilson A 4 國語 70 Richard
Wilson A 4 數學 100 Richard
Wilson A 4 英⽂文 80 Richard
主鍵
32. ⽐比較運算⼦子-Single Row
= 等於
!=,^=,<> 不等於
> ⼤大於
< ⼩小於
>= ⼤大於等於
<= ⼩小於等於
BETWEEN x AND y ⼤大於等於x並⼩小於等
於y
LIKE 部分相同
IS NULL 是空值
IS NOT NULL 不是空值
salary = 10000
salary != 10000
salary > 10000
salary < 10000
salary >= 10000
salary <= 10000
salary BETWEEN 10000 and
20000
emp_name LIKE ‘_a%’
salary IS NULL
salary IS NOT NULL
33. ⽐比較運算⼦子-Multiple Row
IN 等於其中任何⼀一個
NOT IN不等於其中任何
⼀一個
ANY/ALL必須與single
comparison operator搭配
ANY 任⼀一條件滿⾜足即可
ALL 所有條件皆滿⾜足才⾏行
IN (10,20,30)
=10 OR =20 OR =30
NOT IN (10,20,30)
<>10 AND <>20 AND <>30
>ANY(10,20,30)
>10 OR >20 OR >30
<ALL(10,20,30)
<10 AND <20 AND <30
44. Character Function-1
函數 結果
UPPER(‘HeLLo frAnk’) HELLO FRANK
LOWER(‘HeLLo frAnk’) hello frank
INITCAP(‘HeLLo frAnk’) Hello Frank
LENGTH(‘HeLLo frAnk’) 11
CHR(70) F
ASCII(‘F’) 70
46. Character Function-3
函數 結果
LPAD(‘HeLLo frAnk’,15,’#’) ####HeLLo frAnk
RPAD(‘HeLLo frAnk’,15,’#’) HeLLo frAnk####
TRIM(‘H’ FROM ‘HeLLo frAnk’) eLLo frAnk
TRIM(LEADING ‘H’ FROM ‘HeLLo frAnk’) eLLo frAnk
TRIM(TRAILING ‘H’ FROM ‘HeLLo frAnk’) HeLLo frAnk
REPLACE(‘Black and Blue’,’Bl’,’J’) Jack and Jue
78. DML
INSER(新增)
INSERT INTO 表格 VALUES(值1,值2,值3,..)
INSERT INTO 表格 SELECT 欄位1,欄位2,.. FROM 表格
UPDATE(異動)
UPDATE 表格 SET 欄位1=值1,欄位2=值2 WHERE 謂詞
DELETE(刪除)
DELETE FROM 表格 WHERE 謂詞
89. 薪資前五名
SQL> SELECT rownum sal_rank,emp_name,salary
3> FROM (SELET emp_name,salary
4> FROM emp
5> ORDER BY salary)
6> )
7 WHERE rownum<=5;
SQL> SELECT sal_rank,emp_name,salary
2> FROM (SELECT rank() OVER(ORDER BY salary DESC)
sal_rank,emp_name,salary FROM emp)
3> WHERE sal_rank<=5;
90. 薪資第五名
SQL> SELECT *
2> FROM (SELECT rownum sal_rank,emp_name,salary
3> FROM (SELET emp_name,salary
4> FROM emp
5> ORDER BY salary)
6> )
7 WHERE sal_rank=5;
SQL> SELECT sal_rank,emp_name,salary
2> FROM (SELECT rank() OVER(ORDER BY salary DESC)
sal_rank,emp_name,salary FROM emp)
3> WHERE sal_rank=5;
91. 每部⾨門的薪資前2名
SQL>SELECT *
2>FROM (SELECT rank() OVER(PARTITION BY dept_id
3> ORDER BY salary DESC) sal_rank,
4> emp_name,salary FROM emp)
3> WHERE sal_rank<=2;