資料庫設計過程
選擇資料庫
- Oracle 大規模的通路
- MySQL 小規模的通路
- SQL server 運作速率較慢
需求分析
- 收集使用者的資訊要求、處理要求、安全性與完整性要求。
- 自頂向下的分析方法,structured analysis (SA方法)
- 逐層分解的方式分析系統
- 資料流圖(看懂)、ER圖、資料字典
概念結構設計
- 将需求分析得到的使用者需求抽象為
- 設計概念結構的四類方法:自頂向下、自底向上、逐漸擴張、混合政策
- 混合政策:将自頂向下和自底向上相結合,用自頂向下的政策設計一個全局概念結構的架構,以它為骨架內建自底向上政策中設計各局部概念結構。
視圖的內建
- 屬性沖突
- 命名沖突
- 機構沖突
資料模型的優化
- Oracle
- win10 裝12C
資料庫的實施
- 用DDL定義資料庫結構
- 組織資料入庫
- 編制與調試應用程式
資料庫的運作與維護
Oracle伺服器
- 資料庫及其執行個體
執行個體名
- 大寫英文字母,不能包含特殊字元。
記憶體結構
- 塊緩沖區、重做日志緩沖區、共享池、固定SGA、大池、Java池
oracle的使用
安裝及連接配接
- 不要安裝執行個體方案
- 建立過程中需要關閉防火牆
- 啟動資料庫方式:
- dos指令:
sqlplus 使用者名/密碼
- 超級管理者::
sqlplus 使用者名/密碼 as sysdba
- sqlplus:主機字元串
SQLPLUS.EXE
- dos指令與圖形化操作的轉換:
- dos指令:
- 檢視目前帳号:
show user
- 連接配接資料庫:
conn 使用者名/密碼
- 加鎖、解鎖:
alter user 使用者名 account lock|unlock
- 斷開資料庫:
disc
- set linesize 500
- 設定頁面大小:
set pagesize 20
編輯緩沖區
- run:執行緩沖區并顯示緩沖區内容
- /:不顯示緩沖區内容
- list顯示緩沖區
- 修改密碼:password 使用者名
- 密碼失效:alter user 使用者名 PASSWORD expire
檔案操作
建立腳本檔案
- save d:\abc.sql
- select ename,sal from emp;
- save 檔案 append
- save 檔案 replace
載入sql腳本檔案
- 裝載:
get 檔案.sql 展示腳本檔案的内容
- 裝載:
get 檔案.sql nolist 不顯示緩沖區内容
- 腳本檔案的裝載+執行:
或者start 檔案.sql 裝載并且執行
@檔案名.sql
- 如果是.sql結尾的檔案,可以不寫字尾名,但如果是其他格式,需要寫。
注釋
- 單行:
或者--
隻能放在頭remark
- 多行:
清除螢幕
-
clear screen
- 清除螢幕緩沖區:快捷鍵
SHIFT+DELETE
Clear SCR
CLEA SCR
CLE SCR
CLE SCREE
CLE SCRE
幫助指令
help 指令
環境變量的設定與顯示
show --顯示
set --設定
其他
autocommit:是否自動送出DML語句
autocommit on/off
COLSEP:設定列之間的間隔符。
feedback:顯示回報資訊的最低行數,預設值是6。
heading:是否顯示列标題。
time:指令提示符前面顯示時間。
timing:顯示執行slq語句的時間。
環境變量的備份
store set 檔案
arraysize:設定從資料庫中提取的行數,預設值是15。
SQL語句
1. 查詢
SELECT 列名 FROM 表名;
- 查詢所有資訊
SELECT empno,ename,job,mg FROM emp;
SELECT * FROM emp;
2. 算術運算符
+,-,*,/
3. 空值:無效的,未定義的。空值不是0
4. 連接配接
-
列與列之間的合并,列與字元串的合并。||
5. 去重
-
:隻能放在第一列的前面。DISTINCT
6. 排序
SELECT 列名1 【as】 列别名1, 列名2 【as】 列别名2,。。。。
FROM 表名
ORDER BY 排序列名1 【ASC】|DESC, 排序列名2 【ASC】|DESC,….;
7. 過濾查詢
SELECT 列名1 [as] 列别名1, 列名2 [as] 列别名2,。。。。
FROM 表名
WHERE 條件
ORDER BY 排序列名1 [ASC]|[DESC], 排序列名2 [ASC]|[DESC],….;
8. 比較運算符
=
>
<
>=
<=
<> ,!=
BETWEEN AND
IN
9. 模式比對( LKIE
語句)
LKIE
LIKE
%: 任意個數的任意字元
_: 表示一個字元
10. 邏輯運算符
AND, OR, NOT
11. 函數
-
- 單行函數:字元、數值、日期、轉換、通用
-
- 多行函數:
12. 字元函數
-
- 大小寫控制函數(LOWER、upper、initcap)
-
- 字元控制函數(concat、substr、length、instr、lpad、rpad、trim)
- 數值(round、trunc、mod)
12. 日期 (sysdate)
- 日期的算術計算:
- 日期+(-)數字=日期
- 日期-日期=天數
MONTHS_BETWEEN (date1, date2)
MONTHS_BETWEEN (date1, date2)
- 用于計算date1和date2之間有幾個月。
SELECT MONTHS_BETWEEN(to_date('2014-1-10','yyyy-mm-dd'), to_date('2014-3-21','yyyy-mm-dd')) MONTHS
ADD_MONTHS(date, integer)
ADD_MONTHS(date, integer)
- ADD_MONTHS傳回日期日期加上INT月份。 date參數可以是datetime值或可以隐式轉換為DATE的任何值。 INT參數可以是整數或可以隐式轉換為整數的任何值。如果始終是該月的最後一天,或者如果結果月份有更多的日期,或者結果月份是日期的月份組成部分的更多日期,則結果是結果月份的最後一天。結果與日期具有相同的日期元件。
SELECT TO_CHAR(
ADD_MONTHS(hire_date,1),
'DD-MON-YYYY') "Next month"
FROM employees
WHERE last_name = 'Baer';
Next Month
-----------
07-JUL-1994
NEXT_DAY(date, char)
NEXT_DAY(date, char)
- 傳回
後面的第一個由date
描述的日期,傳回值為char
類型。date
描述的日期必須是char
中的一個。Monday, Tuesday, Wednesday, Thirsday, Friday, Saturday, Sunday
- Example: Returns the date of the next Tuesday after February 2, 2001
SELECT NEXT_DAY('02-FEB-2001','TUESDAY') "NEXT DAY"
FROM DUAL;
NEXT DAY
-----------
06-FEB-2001
LAST_DAY(date)
LAST_DAY(date)
- 傳回
所在月的最後一天,date
是日期類型,傳回值也是date
類型。date
- Example: The following statement determines how many days are left in the current month.
SELECT SYSDATE,
LAST_DAY(SYSDATE) "Last",
LAST_DAY(SYSDATE) - SYSDATE "Days Left"
FROM DUAL;
SYSDATE Last Days Left
--------- --------- ----------
30-MAY-01 31-MAY-01 1
- Example: The following example adds 5 months to the hire date of each employee to give an evaluation date:
SELECT last_name, hire_date, TO_CHAR(
ADD_MONTHS(LAST_DAY(hire_date), 5)) "Eval Date"
FROM employees;
LAST_NAME HIRE_DATE Eval Date
------------------------- --------- ---------
King 17-JUN-87 30-NOV-87
Kochhar 21-SEP-89 28-FEB-90
De Haan 13-JAN-93 30-JUN-93
Hunold 03-JAN-90 30-JUN-90
Ernst 21-MAY-91 31-OCT-91
Austin 25-JUN-97 30-NOV-97
Pataballa 05-FEB-98 31-JUL-98
Lorentz 07-FEB-99 31-JUL-99
. . .
EXTRACT
EXTRACT
- 文法結構:
Oracle資料庫函數
轉換函數
-
:TO_CHAR
-
:TO_DATE
-
:TO_NUMBER(expr [, fmt [, 'nlsparam' ] ])
通用
NVL(expr1, expr2)
NVL(expr1, expr2)
- 如果
非空,傳回expr1
,如果expr1
為空,傳回expr1
。expr2
DECODE(expr, search,result[, search, result ]...[, default ])
DECODE(expr, search,result[, search, result ]...[, default ])