SQL語句分爲以下三種類型:
DDL: Data Definition Language數據定義語言
DCL: Data Control Language數據控制語言
DML用於查詢與修改數據記錄,包括如下SQL語句:
DDL用於定義數據庫的結構,比如創建、修改或刪除數據庫對象,包括如下SQL語句:
DCL用來控制數據庫的訪問,包括如下SQL語句:
SAVEPOINT:設置保存點
在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;
字符和日期:
例子:
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函數:
單行函數:一個數據,出來一個結果。
多行函數:多個數據,出來一個結果
字符函數:
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;
通用函數:
這些函數適用於任何數據類型,同時也適用於空值:
當expr1爲空的時候,用expr2代替,如果不爲空,取它自己。
expr1和expr2的數據類型必須一致,如果不一致,得需要轉換函數。
select nvl(to_char(department_id),'沒有部門') from employees;(department_id是number類型的)
expr1不爲NULL,返回expr2;爲NULL,返回expr3。
相等返回NULL,不等返回expr1
條件表達式:
case表達式:
decode表達式:
多表查詢:
等值連接:
非等值連接:
有兩個表,一個是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) ;