DML(數據操做語言)、DDL(數據定義語言)、DCL(數據控制語言)
sql
desc table_name
描述表結構、類型、約束數據庫
select last_name , salary*12 "year_sal" from employee
; (別名也能夠不加雙引號)bash
select first_name || ' ' || last_name || ','|| title "Employees" from employee
;服務器
select last_name , title , salary*NVL(commission_pct , 0)/100 COMM from s_emp
;數據庫設計
若是某一個字段爲NULL,則對該字段進行任何操做後仍爲NULL;函數
NVL函數:表示該字段爲NULL時,則用第二個參數值來代替
;大數據
select last_name from s_emp where last_name like 'M%'
; 匹配多個字符ui
select last_name from s_emp where last_name like '_M%'
;匹配單個字符spa
select last_name from s_emp where last_name like 'S\_M%' escape '\'
;設計
escape:指定一個字符爲拖字符,意義指拖字符後面的字符再也不爲關鍵字,僅是一個字符。
select last_name , salay * 12 from s_emp order by 2
; 表明按查詢結果的第二列升序排列。(默認爲升序排序)
LOWER('Sql Course')
=> sql course 轉換爲小寫形式
UPPER('Sql Course')
=> SQL COURSE 轉換爲大寫形式
INITCAP('SQL COURSE')
=> Sql Course 轉換爲每一個單詞首字母大寫
CONCAT('Good','String')
=> GoodString 鏈接字符串
SUBSTR('String',1,3)
=>Str 1表明起始位置,3表明截取的長度
LENGTH('String')
=>6 獲取字符串長度
ROUND(45.923,2)
=>45.92 作四捨五入處理 表示保留到小數點後2位
ROUND(45.923,0)
=>46 作四捨五入處理 表示保留到個位,若第二個參數省略,默認爲0
ROUND(45.923,-1)
=>50 作四捨五入處理 表示保留到十位
TRUNC(45.923,2)
=>45.92 作直接截斷處理,不進行四捨五入處理,表示保留到小數點後2位
TRUNC(45.923,0)
=>45 作直接截斷處理,不進行四捨五入處理,表示保留到個位,若第二個參數省略,默認爲0
TRUNC(45.923,-1)
=>40 作直接截斷處理,不進行四捨五入處理,表示保留到十位
TO_CHAR(birthday,'YYYY-MM-DD')
Date轉爲字符串
TO_DATE('1980-03-04','YYYY-MM-DD')
字符串轉爲Date
TO_NUMBER('1980')
字符串轉爲數字
MOD(id,2)
表示對2進行求餘運算
select last_name , NVL(TO_CHAR(manager_id),'No Manager')
from s_emp where manager_id is null;
select name , birthday , SYSDATE
from employee;
等值鏈接、交叉鏈接、外鏈接、自鏈接
SELECT 後可出現分組依據字段、分組函數
FROM 表名
WHERE 後不可以使用分組函數做爲條件的,是對分組前數據篩選
,由於數據尚未分組,因此就沒有分組函數可言。
GROUP BY 指定分組依據字段
HAVING 對分組記錄進行篩選,並且必須伴隨group by 出現,後能跟分組依據字段、分組函數
ORDER BY 對分組記錄進行排序,後能跟分組依據字段、分組函數
AVG()=>平均值;COUNT()=>計數;MAX()=>最大值;MIN()=>最小值;SUM()=>求和值;
實體完整性
:規定表的每一行在表中是唯一的實體。
列完整性
: 是指表中的列必須知足某種特定的數據類型約束,其中約束又包括取值範圍、精度等規定。
參照完整性
: 是指兩個表的主鍵字段和外鍵字段的數據應一致,保證了表之間的數據的一致性,防止了數據丟失或無心義的數據在數據庫中擴散。
用戶定義的完整性
: 不一樣的關係數據庫系統根據其應用環境的不一樣,每每還須要一些特殊的約束條件。用戶定義的完整性便是針對某個特定關係數據庫的約束條件,它反映某一具體應用必須知足的語義要求。
第一範式(確保每列保持原子性)
:最基本的範式。若是數據庫表中的全部字段值都是不可分解的原子值,就說明該數據庫表知足了第一範式。
第二範式(確保表中的每列都和主鍵相關)
:在第一範式的基礎之上更進一層。第二範式須要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能保存一種數據,不能夠把多種數據保存在同一張數據庫表中。
第三範式(確保每列都和主鍵列直接相關,而不是間接相關)
:在第二範式的基礎之上更進一層 。要確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關。
varchar2(size) 可變長度的字符值,節省空間,查詢效率低
char(size) 固定長度的字符值,浪費空間,查詢效率高
NUMBER(8,2) 8位有效數字,小數點後有效位數2位
CLOB 字符大數據,保存很長的文本,最大可爲4G
BLOB 二進制大數據,保存圖片,最大可爲4G
select SYSDATE from DUAL
可查看日期
MONTHS_BETWEEN('01-12-95','01-10-94')
得到相隔的月數
ADD_MONTHS('01-10-95',2)
得到2個月後的日期
NEXT_DAY('01-10-95','FRIDAY')
從該日期開始的星期五是幾號
LAST_DAY('01-10-95')
該月份的最後一天
ROUND(SYSDATE,'MONTH')
對月份作四捨五入處理
ROUND(SYSDATE,'YEAR')
對年份作四捨五入處理
TRUNC(SYSDATE,'MONTH')
對月份直接進行截斷處理
TRUNC(SYSDATE,'YEAR')
對年份直接進行截斷處理
主鍵字段:
一個表只能建立一個主鍵;
主鍵字段的值惟一;
主鍵字段的任意部分都不容許爲空;
凡是建立了主鍵約束的列,在主鍵列都會自動建立惟一性索引;
create table stu
(
id number(7) constraint stu_id_pk PRIMARY KEY , 列約束
name varchar2(20) constraint stu_name_nn not null, 列約束
constraint stu_id_name_pk PRIMARY KEY(id,name) 表約束
);
複製代碼
表約束能夠定義組合字段爲主鍵約束,列約束是不能夠的。
列約束:
create table s_emp
(
... dept_id number(7) constraint s_emp_dept_id_fk references s_dept(id),...
);
複製代碼
表約束:
create table s_emp
(
... constraint s_emp_dept_id_fk FOREIGN KEY(dept_id) references s_dept(id),...
);
複製代碼
on delete cascade : 級聯刪除(把主鍵表中的記錄刪除,則外鍵表中自動刪除相應的記錄) on delete set null :刪除後,字段置空
列約束:
create table s_emp
(
...,phone varchar2(10) constraint s_emp_phone_uk UNIQUE,...
);
複製代碼
表約束:
create table s_emp
(
...,constraint s_emp_phone_uk UNIQUE(phone,name),...
);
複製代碼
若是定義了惟一約束字段,會自動給該列添加惟一索引。
表約束:
create table s_emp
(
...,constraint s_emp_com_pct_ck CHECK(com_pct in(10,12.5,15,17.5,20)),...
);
複製代碼
create table s_emp_41
AS
select id , last_name , userid , start_date
from s_emp
where dept_id=41
複製代碼
原來表中僅有非空約束被拷貝,其餘約束都沒有被拷貝。
alter table s_emp add(comments varchar2(255));
僅能添加非空約束/無約束的列,其餘約束不能夠。當表中有記錄時,添加一個非空的列,則會報錯。
alter table s_emp drop(comments);
alter table s_emp modify(comments varchar2(50));
僅能修改字段的數據類型、非空約束、默認值。
alter table s_emp
add constraint s_emp_manager_id_fk FOREIGN KEY(manager_id) REFERENCES s_emp(id);
alter table s_emp
drop constraint s_emp_manager_id_fk ;
alter table s_emp
drop PRIMARY KEY cascade;級聯刪除外鍵約束;刪除主鍵約束時,能夠不用寫約束名;(由於主鍵約束惟一)
alter table s_emp
disable constraint s_emp_id_pk cascade;外鍵約束級聯失效
alter table s_emp
enable constraint s_emp_id_pk cascade;外鍵約束級聯生效
複製代碼
drop table s_emp cascade constraints;
在刪除表的同時,級聯刪除該表上的全部約束。屬於DDL,刪除表的結構,釋放表的空間,不可恢復。
truncate table s_emp;
屬於DDL,刪除表記錄,保留表結構,不可恢復。
delete table s_empl;
屬於DML,刪除表記錄,保留表接口,可按條件刪除,可恢復。
rename s_emp to s_emp_new;
重命名錶名。
insert into s_emp (...,...,...) values('','','');
insert into s_emp(...)
select id , last_name , salary
from s_emp
where start_date <'01-02-94';
update s_emp set dept_id=10 where id=2;
delete from s_emp where id=2; 刪除記錄時不能違反表的參照完整性約束;
複製代碼
凡是增長、刪除、修改,均要使用commit提交!
一個或多個DML語句組成,各DML語句是不被打斷的,可爲一事務。
一個DDL語句組成,可爲一事務。
一個DCL語句組成,可爲一事務。
commit/rollback。(rollback 回滾到最近一次commit位置)
執行到一個DDL/DCL,事務結束,事務會自動提交。
系統崩潰,自動回滾。
可以自動產生一個惟一數字的對象;
能夠被共享的對象;
只能保證給出的值是有序的;
典型的建立主鍵值的方法;
索引的原理:二叉樹結構;
若是在表中的某個字段加上了主鍵約束或惟一約束,系統會自動爲該字段建立惟一索引;
索引是建在字段上的,是與字段相關的;
使用索引能減小磁盤的IO,索引是自動被Oracle服務器使用和維護;
一張虛表,與表有相同的結構,虛表不存儲數據,只保留結構,數據都從表中來;
UNION
:並集,去掉兩個查詢結果中重複的記錄;
UNIONALL
:並集,不會去掉重複記錄;
INTERSECT
:交集,取兩查詢結果中相同記錄;
MINUS
:取相應的補集;