1. 程式人生 > >oracle的用法

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;