典型子查詢
一個(gè)查詢的輸出是另一個(gè)查詢的輸入,也稱為嵌套子查詢

5個(gè)關(guān)鍵點(diǎn):
1、在查詢時(shí)基于未知時(shí)應(yīng)考慮使用子查詢
2、子查詢必須包含在括號(hào)內(nèi)
3、將子查詢放在比較運(yùn)算符的右側(cè)以增強(qiáng)可讀性
4、對單行子查詢使用單行運(yùn)算符
5、對多行子查詢使用多行運(yùn)算符
種類:
返回結(jié)果分類:
單行子查詢、多行子查詢、空值子查詢
返回結(jié)果為一行且只有一列為單行子查詢
例如:1、薪水比RACHEL高的員工
select ename,sal from emp where sal > (select sal from emp where ename='RACHEL')
2、薪水最低的員工
select ename,sal from emp where sal = (select min(sal) from emp);
返回結(jié)果為多行且只有一列是多行子查詢

例如:1、查詢所有經(jīng)理的信息
select * from emp where empno in (select mgr from emp);
2、薪水低于銷售部任意員工的非銷售部員工
select empno,enma,job,sal from emp where sal < any(select sal from emp where job='salesman') and job <> 'salesman';
返回值為空值就是空值子查詢
表結(jié)構(gòu)操作語句
表示數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)的邏輯概念,表分為行和列。
創(chuàng)建表

數(shù)據(jù)類型:
varchar(l) 可變長度的字符串 l是數(shù)字
DATE 日期數(shù)據(jù)類型(日-月-年)
NUMBER(p,s) 數(shù)字類型p為整數(shù)位,s為小數(shù)位
BOOLEAN 布爾,僅僅可以表示TRUE FALSE NULL
列和表的約束

主鍵有兩個(gè)特殊性:1、非空 2、唯一
可以理解成是一個(gè)索引, 我們可以通過這個(gè)找到這一行的內(nèi)容‘’
外鍵
可以這樣理解,當(dāng)前我們有兩張表,一張A表,一張B表如果說兩張表存在這樣一種關(guān)系,在A表的某一個(gè)字段它里面所得的值必須要在B表存在,也就是說A和B它有這種相互之間的關(guān)系。我們對A操作的時(shí)候,首先要確認(rèn)B中有相應(yīng)的字段是存在的。

例如:CREATE TABLE EMP(ID VARCHAR(6) PRIMARY KEY,NAME VARCHAR(20) NOT NULL,HIREDATE DATE DEFAULT SYSDATE NOT NULL,SALARY NUMBER(7,2))CONSTRAINT EMP_SAL_MIN CHECK (SALARY>1000));
default sysdate是缺省時(shí)間。
CONSTRAINT是一個(gè)約束,是check(salary>1000)也就是說這個(gè)表里面,當(dāng)我們往表插入數(shù)據(jù)的時(shí)候,salary的值不能小于1000
增加列

例如 alter table emp add address varchar(40);
刪除列

例如:alter table emp drop column address;
修改表名

例如 alter table emp rename to emps;
修改表的列名

alter table emps rename column name to ename;
刪除表格

CASCADE CONSTRAINTS 是刪除表的內(nèi)容以及表的定義,釋放空間,就是刪除了整個(gè)表。
查看表結(jié)構(gòu)

典型數(shù)據(jù)操作語句
數(shù)據(jù)操作語言是SQL語言的核心部分,當(dāng)你做下列操作時(shí) DM(manipulation)L語句將會(huì)被執(zhí)行;
insert 增加新的一行到表中
update 修改現(xiàn)有的表中的行
delete 刪除現(xiàn)有的表中的行。
增加新的行到表中:

插入時(shí)候需要注意的點(diǎn):
該語句一次只能插入一行到表中
插入新的一行,每列都包含值
按照表中列的默認(rèn)順序列出數(shù)值
在INSERT字句中列出列是可選的
將日期和字符數(shù)值放入單引號(hào)中
插入空值的行:隱式和顯式
隱式方法:從列列表中將這些列忽略

顯式方法:在VALUES字句中指定NULL關(guān)鍵字

插入日期值:TO_DATE()
SYSDATE函數(shù)記錄當(dāng)前的日期和時(shí)間

修改表中的行:
使用UPDATE修改已經(jīng)存在的行

使用where子句,指定要修改的行
不使用where子句,表中所有的行都被修改
例如:update emp set deptno=60,job='trainer' where ename = 'elina';
修改ename為elina的這個(gè)人的job字段為trainer和deptno為60.
刪除表中的行

例如:delete from emp where ename='elina';
數(shù)據(jù)庫事務(wù)
事務(wù)可以看作是由對數(shù)據(jù)庫的若干操作組成的一個(gè)單元。
要求:這些操作要么都完成,要么都取消,從而保證數(shù)據(jù)滿足一致性的要求。
例如:銀行轉(zhuǎn)賬 A給B轉(zhuǎn)了50元
一個(gè)事務(wù):A銀行賬戶減少50,B銀行賬戶增加50。
事務(wù)開始于第一個(gè)DML SQL語句執(zhí)行時(shí),結(jié)束于下列事件之一:
1、發(fā)出COMMIT或ROLLBACK語句
2、一個(gè)DDL(數(shù)據(jù)定義語言)或DCL( 數(shù)據(jù)控制語言)語句執(zhí)行(隱式提交)
例如:數(shù)據(jù)定義語言:創(chuàng)建表,創(chuàng)建索引、創(chuàng)建視圖的時(shí)候的創(chuàng)建語句。
數(shù)據(jù)控制語言就是commit rollback這些。
3、用戶退出iSQL *Plus (默認(rèn)提交)oracle的圖形化界面
4、系統(tǒng)崩潰(隱式提交)
控制事務(wù)的常用命令


表示我們把之前的那個(gè)事務(wù)成功提交了,關(guān)閉掉。接下來我們做下一個(gè)事務(wù)
其實(shí)在我們做commit命令的前后數(shù)據(jù)庫是有變化的。



做某些點(diǎn)的回退:

例子:


SQL語句簡單優(yōu)化
1、避免使用‘’
在解析過程中,會(huì)將‘’一次轉(zhuǎn)換成所有的列名,并通過查詢數(shù)據(jù)字典完成,意味著耗費(fèi)更多的時(shí)間。
2、使用表的別名

3、where子句中的連接順序
盡量把能夠快速縮小查詢范圍的語句放在最后,然后在依次往前的一個(gè)操作。

4、 使用“>=”代替“>”
5、用truncate代替delete

6、盡量多使用COMMIT
會(huì)釋放的數(shù)據(jù):

7、避免在索引列上使用函數(shù)
例如:
