-- 建表
CREATE TABLE student (name VARCHAR2(20), age NUMBER(3));
-- 插入
INSERT INTO student VALUES ('stone', 24);
-- 檢視結構
DESC student;
-- 查詢
SELECT * FROM student;
-- 刪除資料
DELETE FROM student WHERE 條件;
-- 刪除表
DROP TABLE student;
VARCHAR2(20):變長字串,上限 20 位元組。NUMBER(3):3 位整數,無小數;單用 NUMBER 預設 10 位整數。COMMIT 提交。--。SELECT * | {欄位名, ...} FROM 表名;
SELECT * FROM emp; 或 SELECT empno, ename, sal FROM emp;| 工具 | 日期/字元 | 數值 | 欄標 |
|---|---|---|---|
| SQL*Plus | 左對齊 | 右對齊 | 大寫 |
| iSQL*Plus | - | - | 大寫置中 |
針對 NUMBER 型別可用 + - * /。
SELECT empno, ename, sal, sal*12 AS 年薪 FROM emp;
SELECT empno, ename, sal, sal*12+1000 FROM emp;
SELECT empno, ename, sal, sal*(12+1000) FROM emp; -- 括號改變優先序
將欄位、字串、運算式合併為新字串欄位。
SELECT ename || ' is a ' || job FROM emp;
SELECT empno, ename || '''s annual salary is ' || sal*12 FROM emp;
SELECT 欄位名 | 運算式 [[AS] 別名], ... FROM 表名;
SELECT empno, ename "Ename", sal*12 "年 薪" FROM emp;
SELECT empno AS 員工編號, ename 員工姓名, sal*12 "年薪" FROM emp;
AS 可省略。INSERT INTO student(age) VALUES(24); → name 自動為 NULL。| 運算類型 | 結果 |
|---|---|
| 算術運算式 | 整個運算式結果為 NULL |
| 串接運算式 | NULL 視為空字串 (長度 0) |
SELECT ename, sal, comm,
ename || ' - ' || comm, -- NULL 視為空字串
sal + comm -- 結果為 NULL
FROM emp;
解決:用 NVL(comm, 0) 給予預設值再運算。
SELECT deptno FROM emp; -- 含重複
SELECT DISTINCT deptno FROM emp; -- 去重
SELECT DISTINCT deptno, job FROM emp; -- 組合不重複即顯示
DISTINCT 作用於後續所有欄位組合。
SELECT empno, ename, sal FROM emp ORDER BY sal; -- 升序 (ASC 預設)
SELECT empno, ename, sal FROM emp ORDER BY sal DESC; -- 降序
SELECT empno, ename, sal*12 annsal FROM emp ORDER BY annsal; -- 別名排序
SELECT deptno, empno, ename, sal FROM emp ORDER BY deptno, sal; -- 多欄位排序
ASC/DESC:deptno, sal DESC、deptno DESC, sal 等。DD-MON-RR。SELECT * FROM emp WHERE ename = 'SMITH'; -- 大小寫敏感
SELECT * FROM emp WHERE hiredate = '02-4月-81'; -- 自動轉型
SELECT SYSDATE FROM dual; -- 取得系統時間
SELECT 3+2 FROM dual; → 1 列結果 5。SELECT 3+2 FROM emp; → 每列各算一次,回傳 N 列 5。| 運算子 | 說明 |
|---|---|
BETWEEN ... AND ... | 包含邊界,小值在前 |
IN (set) | 集合成員檢查 |
LIKE | 模糊比對 |
IS [NOT] NULL | 空值判斷 |
SELECT * FROM emp WHERE sal BETWEEN 1600 AND 2900;
SELECT * FROM emp WHERE ename IN ('SMITH','KING','King'); -- 大小寫敏感
SELECT * FROM emp WHERE comm IS NULL;
SELECT * FROM emp WHERE comm IS NOT NULL; -- 0 ≠ NULL
%:零或多個任意字元。_:單一任意字元。ESCAPE:指定跳脫字元。SELECT * FROM emp WHERE ename LIKE 'S%'; -- 以 S 開頭
SELECT * FROM emp WHERE ename LIKE '_A%'; -- 第 2 字母為 A
SELECT * FROM emp WHERE ename LIKE '%_%' ESCAPE '\'; -- 含底線的姓名
優先序:NOT → AND → OR
SELECT * FROM emp WHERE deptno = 20 AND sal > 2000;
SELECT * FROM emp WHERE deptno = 20 OR sal > 2000;
SELECT * FROM emp WHERE deptno NOT IN (20, 30, 40);
簡單資料處理(查詢、組合、過濾、型別轉換、分組統計、去重、去空格等)交由資料庫層完成;複雜商業邏輯置於應用層,實現鬆耦合,利於維護與擴展。