oracle sql學習一

SQL語句分爲以下三種類型:

DML: Data ManipulationLanguage數據操縱語言
DDL:  Data Definition Language數據定義語言

DCL:  Data Control Language數據控制語言

DML用於查詢與修改數據記錄,包括如下SQL語句:

INSERT:添加數據到數據庫中
UPDATE:修改數據庫中的數據
DELETE:刪除數據庫中的數據
SELECT:選擇(查詢)數據
SELECTSQL語言的基礎,最爲重要。

DDL用於定義數據庫的結構,比如創建、修改或刪除數據庫對象,包括如下SQL語句:

CREATE TABLE:創建數據庫表
ALTER  TABLE更改表結構、添加、刪除、修改列長度
DROP TABLE:刪除表
CREATE INDEX:在表上建立索引
DROP INDEX:刪除索引

DCL用來控制數據庫的訪問,包括如下SQL語句:

GRANT:授予訪問權限
REVOKE:撤銷訪問權限
COMMIT:提交事務處理
ROLLBACK:事務處理回退
SAVEPOINT:設置保存點
LOCK:對數據庫的特定部分進行鎖定

SELECT子句中使用關鍵字 ‘DISTINCT’ 刪除重複行。



日期可以進行加減,但是不能進行乘除,例如:
select sysdate+1 from dual;正確的
select sysdate*2 from dual;錯誤的

空值不同於0,凡是空值參與的運算結果都爲空。

列的別名:在列的後面空格+別名 或者列後面+ as +別名
別名不加雙引號,則別名就全大寫,例如



別名加雙引號,則別名就是別名字符,例如


連接符:

把列與列,列與字符連接在一起。
||’表示。
可以用來‘合成’列。
例子:select first_name||'`s job is'||job_id from employees;

過濾和排序數據:

通過本章學習,您將可以:

在查詢中過濾行。
在查詢中對行進行排序

過濾的話,直接在後面加where語句。
where後面不可以用別名來做篩選條件,
如select first_name,salary*12 annul_sal from employees whereannul_sal>100000(錯誤的)
select * from employees where id=900;
字符和日期:
字符和日期要包含在單引號
字符大小寫敏感,日期格式敏感
默認的日期格式是DD-MON-RR(不需要記憶)
例子:



sql中的不等於可以是!=也可以是<>.


例子:
where salary between 4000 and 7000
where salary in (4000,5000,6000)
模糊查詢
% 代表零個或多個字符(任意個字符)
_ 代表一個字符
名字中包含a的員工:
where first_name like '%a%'

轉譯字符escape,例如我要查詢名字中包含‘_’的員工
where first_name like '%\_%'  escape  '\'
也可以是where first_name like '%#_%' escape '#'
具體是\還是#,是自己指定的。

is null,查詢是空值的,也可以查詢不是空值的,is not null;

排序:

不寫desc,asc,默認情況下是asc。




先按照department_id 升序排列,如果department_id 一樣,再按照salary 降序排列。

單行函數:

通過本章學習,您將可以:

SQL中不同類型的函數
SELECT語句中使用字符,數字,日期和轉換函數
使用條件表達式

兩種sql函數:
單行函數:一個數據,出來一個結果。
多行函數:多個數據,出來一個結果



字符函數:



initcap()首字母大寫


substr('hello',2,5) 從第二個開始,取五個字符。
instr('hello','l') 某個字符在字符串中首次出現的位置。如果不存在返回0.
trim()去除首位的字符。
replace()替換所有的。


日期函數:

兩個日期只可以做減法,或者日期跟數字做運算。
select (sysdate-hire_date)/30 months  from employees;//求入職的月份


months_between(sysdate,hire_date)
add_months(sysdate,2)
next_day(sysdate,'星期五')
last_day(sysdate)




SELECT TO_CHAR(sysdate,'yyyy-MM-dd HH24:mi:ss') FROM dual;

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; 

通用函數:

這些函數適用於任何數據類型,同時也適用於空值

NVL (expr1, expr2):
當expr1爲空的時候,用expr2代替,如果不爲空,取它自己。
expr1和expr2的數據類型必須一致,如果不一致,得需要轉換函數。
select nvl(to_char(department_id),'沒有部門') from employees;(department_id是number類型的)

NVL2 (expr1, expr2, expr3)

 expr1不爲NULL,返回expr2;爲NULL,返回expr3

NULLIF (expr1, expr2)
相等返回NULL,不等返回expr1

條件表達式:

case表達式:



decode表達式:





多表查詢:

使用等值不等值連接在SELECT語句中查詢多個表中的數據。
使用自連接
使用外連接查詢不滿足連接條件的數據

等值連接:



非等值連接:
有兩個表,一個是employees,每個員工有工資salary,還有一個工資等級表,1000到3000是A,3000到6000是B,以此類推。
現在想知道每個員工的工資等級。

SELECT e.last_name,e.salary,j.grade_level

FROM   employees e,job_grades j

WHERE  e.salary

       BETWEENj.lowest_sal ANDj.highest_sal;


外連接:

外連接:兩個表在連接過程中除了返回滿足連接條件的行以外還返回左(或右)表中不滿足條件的行,這種連接稱爲左(或右) 外連接


左外連接:

SELECT  table1.column, table2.column

FROM  table1, table2

WHERE  table1.column= table2.column(+);


右外連接:

SELECT  table1.column, table2.column

FROM  table1, table2

WHERE  table1.column(+)= table2.column;


sql99語法:

內連接:

SELECT e.employee_id,e.last_name,e.department_id,

       d.department_id,d.location_id

FROM   employees eJOIN  departments d

ON     (e.department_id =d.department_id);


多表連接:

SELECT employee_id, city,department_name

FROM   employees e

JOIN   departments d

ON     d.department_id =e.department_id

JOIN   locations l

ON     d.location_id =l.location_id;


左外連接:

SELECTe.last_name,e.department_id,d.department_name

FROM   employees e

LEFT OUTER JOINdepartments d

ON   (e.department_id =d.department_id) ;


右外連接:

SELECTe.last_name,e.department_id,d.department_name

FROM   employees e

RIGHT OUTER JOINdepartments d

ON    (e.department_id =d.department_id) ;


滿外連接:

SELECTe.last_name,e.department_id,d.department_name

FROM   employees e

FULL OUTER JOINdepartments d

ON   (e.department_id =d.department_id) ;




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章