oracle的用法
在Oracle資料庫內有一種特殊的表Dual。Dual表是Oracle中的一個實際存在的表,任何使用者均可讀取,常用在沒有目標表的Select中。Dual表由Oracle連同資料字典一同建立,所有的使用者都可以用名稱DUAL訪問該表。這個表裡只有一列DUMMY,該列定義為VARCHAR2(1)型別,有一行值X。從DUAL表選擇資料常被用來通過SELECT語句計算常數表示式,由於DUAL只有一行資料,所以常數只返回一次。
1、檢查系統時間
select SYSDATE FROM dual;
2、利用dual查1+1的結果
SELECT 1+1 from dual;
3、建立新表EMP4
CREATE TABLE emp4(
id NUMBER(4),
name VARCHAR2(20),
gender CHAR(1),
birth DATE,
salary NUMBER(6,2),
job VARCHAR2(30),
deptno NUMBER(2)
)
4、--設定預設值。在資料庫中,無論欄位是什麼型別,預設值都是null,但是可以在建立表的時候通過default關鍵字未指定的列單獨設定預設值,在資料庫中,字串單引號表示字面量這一點與JAVA不同notnull 約束指定的欄位可以確保不允許為
建立EMP2表,觀察與EMP4不同的地方
CREATE TABLE emp2( id NUMBER(4), name VARCHAR2(20) NOT NULL, gender CHAR(1) DEFAULT 'M', birth DATE, salaty Number(6,12), deptno number(2) )
5、修改表名 RENAME EMP2 TO EMP1;
6、--2 修改表結構 新增新欄位向表中新增新的欄位,只能在當前表的末尾追加。可以同時追加多個列,只需要 使用逗號隔開即可與建立表宣告的時的語法一樣。注意:orale與MYSQL的不同之處
ALTER TABLE EMP2 ADD (
hiredate DATE DEFAULT SYSDATE;
)
7、刪除表中的現有欄位 ALTER TABLE EMP1 DROP (HIREDATE);
8、 修改表中現有的欄位 可以修改欄位的型別、長度、預設值、非空約束
ALTER TABLE EMP2 MODIFY ( NAME VARCHAR2 (40) DEFAULT 'ZHANGSHAN'; )
9、 DML 語句 用於修改表中資料分為增刪改 9.1.插入資料
INSERT INTO EMP (ID, NAME, JOB, SALARY)
VALUES
(1, 'luban', 'ADC', 500);
10、修改表中現有資料,將魯班的工資修改為20
UPDATE EMP
SET SALARY = 20
WHERE
NAME = 'luban';
11、修改表的資料,通常指定where 過濾條件,這樣只會滿足條件的記錄修改,若不指定where條件則是全表資料修改 --刪除表現有資料。將魯班刪除
DELETE from EMP WHERE NAME='luban';
12、刪除表中的資料同樣需要指定的where條件否則就是清空表操作
SELECT *FROM EMP;
SELECT null+12 FROM dual;
13、字串拼接 SELECT 'sad'||'ret' from dual;
14、select 語句 DQL、select 語句是用來查詢資料的語句查詢EMP指定的欄位的值
SELECT NAME ,JOB,DEPTNO FROM EMP;
15、DQL必須包含的部分是select子句與FROM字句。select用來確定查詢的,可以使用的欄位有表的欄位,函式。from 子句用來確定查詢的表。檢視員工的年薪
SELECT NAME,SALARY*12 FROM EMP;
16、字串函式,連線字串
SELECT "CONCAT"(NAME,SALARY) FROM EMP;
17、連線字串還有一個簡單的方法:“||”
SELECT NAME || ':' ||Salary FROM EMP;
18、"LENGTH"(ch)函式 ,獲取字元長度
select NAME,"LENGTH"(NAME) FROM EMP;
19、"UPPER"(ch)/""LOWER"(ch)/"INITCAP"(ch)將字元轉為大寫、小寫、首字元大寫 --DUYAL:偽表,當前的內容與任何一張表中的資料無關是,可以查詢偽表。
將大寫字母轉換為小寫
SELECT LOWER('HELLOWORLD') FROM DUAL;
將小寫轉換為大寫
SELECT UPPER ('hellooworld') from dual;
將字串的第一個字母大寫
SELECT INITCAP('HELLO WORLD') FROM DUAL;
20、--SELECT 語句 DQL -SELECT 語句是用來查詢資料的DQL語句 --查詢EMP指定欄位的值
SELECT NAME,JOB,DEPTNO FROM EMP
21、DQL必須包含的部分是select子句與FROM子句,select用來確定查詢的欄位可以使用的欄位有表的欄位,函式,表示式from子句用來確定查詢的表SELECT中使用表示式檢視每個員工的年薪
SELECT NAME,SALARY*12 FROM EMP
22、字串函式,連線字串
SELECT CONCAT(NAME, SALARY) FROM EMP
23、
SELECT CONCAT(CONCAT(NAME,':'),SALARY) FROM EMP
24、連線字串還有一種簡單的方式:“||”
SELECT NAME || ':' || SALARY FROM EMP
25、LENGTH(ch)函式,獲取字元長度
SELECT NAME,LENGTH(NAME) FROM EMP
26、TRIM/"LTRIM"(ch)/"RTRIM"(ch)去除字串兩邊的指定字元
從符合條件前後都存在e,中間取得字串
SELECT TRIM('e' FROM 'eseltese')
FROM dual;
從se後擷取得到字串
SELECT LTRIM('eseselitsese','se')
FROM dual;
27、LPAD/RPAD補位函式要求顯示指定內容指定位數,若不滿足則補充若干指定字元以達到顯示的長度
SELECT NAME,RPAD(SALARY,6,'$')
FROM EMP;
28、--SUBSTR擷取字串。擷取給定字串,從指定位置開始擷取指定個字元。在資料庫中,下標從1開始計算
在題中從第四個字元之後開始,取得四個字元
SELECT SUBSTR('Thinking in java',4,4) FROM dual;
29、"INSTR"(ch1, ch2[n,m]),查詢ch2在ch1中的位置,n為從指定位置開始查詢,可以不寫,m為第幾次出現,可以不寫n,m不寫預設值為1
SELECT INSTR('Thinking in java','in',4,2)
FROM dual;
30、
SELECT NAME,SALARY,DEPTNO
FROM EMP
WHERE SUBSTR(NAME,1,1)='l'
31、--數字函式1."ROUND"(n, [m]),對n進行四捨五入,保留到小數點後m位,m可以不寫,不寫預設為0 保留到整數位1位 10 位。
SELECT ROUND(45.678,2) FROM dual;
SELECT ROUND(45.678,0) FROM dual;
SELECT ROUND(45.678,-1)FROM dual;
32、2."TRUNC"(n1 n2)函式,與ROUND用法一致只是不再進行四捨五入,而是直接擷取
SELECT TRUNC(45.678, 2) FROM dual;
SELECT TRUNC(45.678, 0) FROM dual;
SELECT TRUNC(45.678, -1) FROM dual;
33、"MOD"(n1, n2)函式是求餘
SELECT NAME,SALARY,MOD(SALARY, 1000)
FROM EMP;
34、CElL() 和 FLOOR()向上取整與向下取整
1、celL向上取整
SELECT CEIL(45.678) FROM dual;
2、FLOOR向下取整
SELECT FLOOR(45.678) FROM dual;
35、日期型別 DATE:7個位元組。儲存世紀、年月日時分秒 --TIMESTAMP:時間戳,比DATE多4個位元組,可以 --儲存秒以下的精度,前7個位元組與DATE一致 --SYSDATE:對應一個內建函式,返回一個表示 --當前系統時間的DATE型別值 --SYSTIMESTAMP :同樣的,返回的是表示當前系統 --時間的時間戳型別的值
SELECT SYSDATE FROM DUAL;
SELECT SYSTIMESTAMP FROM DUAL;
36、--"TO_DATE"(ch, fmt)按照給定的日期格式將字串轉換為DATE型別
SELECT TO_DATE('1998-11-01 23:22:11',
'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
37、在日期格式字串中,凡不是英文,符號和數字的其他字元都要用雙引號括起來
SELECT TO_DATE('1998年11月01日 23:22:11',
'YYYY"年"MM"月"DD"日" HH24:MI:SS')
FROM DUAL;
38、DATE是可以比較大小的,越晚的越大,檢視1989年以後出生的員工
SELECT NAME,BIRTH FROM EMP
WHERE BIRTH > TO_DATE
('1989-01-01','YYYY-MM-DD');
39、DATE之間可以做加減法,差值為相差的天數檢視每個員工至今活了多少天?
SELECT NAME,TRUNC(SYSDATE - BIRTH)
FROM EMP
40、89年到現在多少天了?
SELECT TRUNC(SYSDATE - TO_DATE('1998-01-01','YYYY-MM-DD'))
FROM DUAL;