查看Oracle用戶可以使用那些表數據字典表(管理用戶所有表)
desc user_tables;(查看可以操作的表)
select tables_name from user_tables;(SCOTT用戶可以使用四個表)
字符類型都是左對齊,數字類型的都是右對齊
空值是不可用的、未分配的、未知的或不使用的值空值不同於零或空格
設置顯示行間距
set linesize 200;寬度爲200
set pagesize 50;每頁現實50行
create table test(hiredate varchar(20));創建表
查看當前用戶可以使用的表
select table_name from user_tables;
標題的默認設置
字符和日期列標題的對齊方式爲:左對齊
數字列標題的對齊方式:右對齊
默認的標題顯示方式:大寫
空值不等同於零或者空格
空值帶入四則運算仍然還是空值
定義別名
列別名具有以下特徵
可重命名標題、有助於計算、緊跟在列名後(列名和別名之間也可以加上可選關鍵詞AS)如果別名包括空格或特殊字符、或者區分大小寫則需要雙引號
鏈接字符串
select ename||job from emp;
把兩個列名合併一塊顯示出來
重複行
select distinct deptno from emp;
distinct (去重)
只顯示空值
select * from emp where mgr is null ;
邏輯判斷
AND 如果兩個條件都爲真,則返回true(兩個條件都爲真時則返回值)
OR 如果其中一個條件爲真。則返回true
NOT 如果條件爲假則返回true
sqlplus 下清屏 clear screen
優先級規則
運算符 | 含義 |
---|---|
加減乘除 | 算數運算符 |
管道符號 | 鏈接運算符 |
where | 比較運算符 |
空值 | IS 、[not]、 null、like、[not]、in |
5 | [not] DETWEEN(在什麼什麼之間、在什麼什麼之外) |
!= | 不等於 |
條件爲假則返回true | NOT 邏輯條件 |
和 | AND 邏輯條件 |
或 | OR 邏輯條件 |
使用ORDER BY 句子
使用order by 子句可以對檢索進行排序
ASC:升序 (默認升序)從小到大
DESC:降序
order by 子句位於select 語句的最後
排序可以用別名或者數字
select ename,sal gz from emp order by 2;
結果就是工資爲降序排列
也可按章多個列進行排序
select ename,sal,deptno from emp order by 3,2 desc;
已sal降序排列(從大到小)
關閉數據庫和開啓
shutdown normal (關閉)
startup mount (開啓)
替代變量
使用單與號(&)及雙(&&)(多次)可代替臨時存儲值where條件order by子句
列表達式、表名、整個select語句
緩存在內存中
指定列名、表達式和文本
變量字符類型要加單引號
使用DEFIN 命令
使用define命令可以創建變量併爲其賦值
使用undefine 可以刪除變量
先進行賦值
define abc=20
select * from emp where depton=&abc;(調用賦值的變量)
刪除變量undefine abc=20
再出調用則搜懂輸入
SQL 函數
單行函數(每一個返回一個結果)
多行函數(每一行集返回一個結果)
處理數據項、接受參數並返回一個值、對每個返回進行處理、爲每個行返回一個結果、可能會修改數據類型、可以嵌套、接受參數、這些參數可以是列或表達式
單行函數
字符、數字、常規、日期、轉換
字符函數
大小寫轉化函數
LOWER、UPPER、INITCAP、
字符處理函數
CONCAT、SUDSTR、LENGTH、
函數 | 結果 |
---|---|
LOWER(‘SQL Course’) | (sql course)全部小寫 |
UPPER(‘SQL Course’) | (SQL COURSE)全部大寫 |
INITCAP('SQL Course') | (Sql Course)首字母大寫 |
dual 僞表(存在內存中的不存在數據庫中)
字符處理
函數 | 結果 |
---|---|
CONCAT(‘Hello','World’) | HelloWorld(拼接在一塊)支持兩個字符串 |
SUDSTR ('HelloWorld',1,5) | Hello(1到5)字符串截取 |
LENGTH ('HelloWorld') | 10(字符串長度) |
INSTR('HelloWorld','W') | 6 (定位字符位置) |
LPAD(salary,10,'*') | **24000(左填充) |
RPAD(salary,10,'*') | 24000**(右填充) |
REPLACE ('JACK and JUE','J','BL') | BLACK and BLUE |
TRIM('H'FROM 'HelloWorld') | elloWorld(去除指定字符) |
數字函數
ROUND:將值舍入到指定的小數位(-1精確的個位)
select round(45.923,2) from dual;
返回45.92
TRUNC:將值截斷到指定的小數位
返回40
MOD:返回除法運算的餘數
select mob(10,3) from dual;
返回1
處理日期
oracle DB 以內部數字格式存儲日期:世紀、年、月、日、小時、分鐘、秒
默認的日期格式DD(月2位字符)-MON(月1月到12月)-RR(兩位的寄點法)世紀21世紀還是20世紀
通過僅指定年份的後兩位可以在20世紀存儲21世紀的日期、也可以在21世紀存儲20世紀的日期
RR日期格式
當前年份 | 指定的日期 | RR格式 | YY格式 |
---|---|---|---|
1995 | 27-OCT-95 | 1995 | 1995 |
1995 | 27-OCT-17 | 2017 | 1997 |
2001 | 27-OCT-17 | 2017 | 2017 |
2001 | 27-OCT-95 | 1995 | 2095 |
- 如果當前年份的兩位數爲0-49返回日期當前世紀中
- 如果當前年份的兩位數爲50-99返回日期當前世紀的下一個世紀中
- 如果指定的兩位數年份爲0-49返回日期當前世紀中
- 如果指定的兩位數年份爲50-99返回日期當前世紀的下一個世紀中
sysdate 是返回一下對象的函數:-日期-時間
日期處理函數
函數 | 結果 |
---|---|
MONTHS_DETWEEN | 兩個日期之間的月數 |
ADD_MONTHS | 將日曆月添加到日期 |
NEXT_DAY | 指定日期之後的下一個日期 |
LAST_DAY | 當月最後一天 |
ROUND | 舍入日期 |
TRUNC | 截斷日期 |
MONTHS_BETWEEN('01-sep-95','11-jan-94') | 19.6774194 |
ADD_MONTHS('31-jan-96',1) | 29-feb-96 |
NEXT_DAY('01-SEP-95',FRIDAY) | 08-SEP-95 |
LAST_DAY('01-FEB-95') | 28-FEB-95 |
ROUND(SYSDATE,'MONTH')(month月)假設sysdate='25-jul-03' | 01-AUG-03(大於等於15則月份進一) |
ROUND(SYSDATE,'YEAR')(year年) | 01-JAN-04(年份進行進一(月)大於等於6則年份進一月份大於等) |
TRUNC(SYSDATE,'MONTH') | 01-JUL-03 |
TRUNC(SYSDATE,'YEAR') | 01-JAN-03 |
轉換函數和條件表達式
- 隱式數據類型轉換
- 顯示數據類型轉換
- 數字類型、字符類型、時間類型的轉換
使用TO_CHAR 函數處理日期
必須放在單引號內
區分大小寫
可以包含任何有效的日期格式元素
具有一個fm元素、用於刪除填充的空格或隱藏前導零
與日期值之間用逗號分隔
元素 | 結果 |
---|---|
YYYY | 用數字表示的完整年份 |
YEAR | 用英文表示的年份 |
MM | 月份的倆位數值 |
MONTH | 月份的完整名稱 |
MON | 月份的三位字母縮寫 |
DY | 一週中某日的三個字母縮寫 |
DAY | 一週中某日的完整名稱 |
DD | 用數字表示的月份中某日 |
9 | 代表一個數字 |
0 | 強制顯示0 |
$ | 放置一個浮動的美元符號 |
L | 使用浮動的本地貨幣符號 |
. | 顯示小數點 |
, | 顯示作爲千位指示的逗號 |
嵌套函數
- 單行函數可以嵌套到任意層
- 嵌套函數的計算順序是從最內層到最外層
- 嵌套函數從內到外
常規函數、且合適使用空值的場合
將空值轉換爲實際值、可以使用的數據類型爲日期、字符和數字、數據類型必須匹配:
NVL(expr1,exrp2)
NVL2(EXPR1,EXRP2,EXRP3)
NULLIF(expr1,expr2)
組函數報告聚集數據
AVG | 計算平均值 |
---|---|
count | 一個字段有多少行 |
max | 最大值 |
min | 最小值 |
sum | 一個字段的和 |
count | 顯示行數 |
distinct | 去除重複行 |
創建數據組
group by 分組
select deptno,avg(sal) from emp group by deptno;
分組求平均數
- 多列分組
select deptno,avg(sal),job from emp group by deptno,job;
- HAVING子句限定組結果
select deptno,max(sal) from emp group by hacing max(sal)>=3000;
- 使用聯接顯示多個表的數據
使用outer 聯接查詢通常不滿足聯接條件的數據 生成兩個或多個表中所有行的笛卡爾積
- 聯接類型
自然鏈接 natural join 子句 using 子句 outer鏈接(外鏈接) left outer join right outer join full outer join 交叉鏈接
- 創建自然鏈接
natural join 子句以兩個表中具有相同名稱的所有列爲基礎
它從兩個表中選擇在所有匹列中具有相同值得哪些行
如果名稱相同的列具有不同的數據類型,則返回一個錯誤
- select deptno from dept natural join emp
兩個查詢內容一樣則顯示公有值
- 使用using語句創建鏈接
如果多個列具有相同的名稱,但數據類型不匹配,請使用using子句指定等值聯接的列 當有多個列想匹配時,使用using 子句可僅與一列相匹配 natural loin 和using 語句是互相排斥的。
- select ename,deptno feom emp join dept using(deptno);
- 在using子句中使用表別名
不要對using 子句中使用的列加以限定 如果在sql語句的另一個位置使用了同一列,則不要對其設置別名
- 使用ON子句創建鏈接
自然聯接的基本聯接條件是對具有相同名稱的所有列進行等值鏈接 使用ON子句可指定任意條件或指定要聯接的列 聯動條件獨立於其他搜索條件 使用ON子句可以代碼易於理解
inner聯接與outer聯接
在sql:1999中,如果兩個表的聯接只返回相匹配的行,則稱聯接inner 兩個表直接的聯接不僅返回inner聯接的結果,還返回左(或右)表中不匹配的行,則稱爲該聯接爲左(或右)outer鏈接 兩個表之間的聯接不僅返回inner鏈接的結果,還返回左和右聯接的結果,則稱該鏈接爲完全outer聯接
- 子查詢
先執行子查詢(內部查詢),再執行主查詢(外部查詢)主查詢會使用子查詢的結果
- 當行子查詢
僅返回一行
運算符 | 含義 |
---|---|
= | 等於 |
> | 大於 |
>= | 大於等於 |
< | 小於 |
<= | 小於等於 |
<> | 不等於 |
- 多行子查詢
- 集合操作符
聯合運算 交集預算 普及運算 select 列表中的表達式在數量上必須匹配 第二個查詢中每一列的數據類型必須與第一個查詢中列的數據類型相匹配 可以使用括號更改執行順序 order dy 子句只能出現在語句的末尾 Oracle server 和集合運算符 除非使用union all 運算符、否則會自動刪除重複行 第一個查詢彙總的列名將顯示在結果中 除非使用union all 運算符,否則默認情況下輸出按照升序進行排序
- union 運算符
uninon 運算符從兩個查詢中分會不包括重複行的那些行
數據操縱語句
DML語句
增刪改查
- 增加 insert into
- 修改 update 必須要跟條件
- 刪除行 delete 必須要跟條件
delet from (表) where=(條件)
DDL語句
數據庫事務處理由於以下語句組成
用於對數據進行一次一致更改的DML語句
一條DDL語句一條數據控制語句(DCL)語句
在執行第一條DML SQL 語句時開始
在發生下列事件之一時結束:
發出COMMIT或ROLLDACK語句
執行DDL或DCL語句(自動提交)
用戶推出SAQL Developer或SQL*Plus 系統崩潰
使用commit和rolldack提交、回滾
確保數據的一致性
數據庫事務處理
使用savepoint (a) 語句可在當前事務處理中創建一個標記
使用rollback to savepoint 語句可以回退到該標記
先還原B 在還原A
如先還原A則B也消失
執行COMMIT之後的數據狀態
數據更改已保存在數據庫中
已改寫以前的數據狀態
搜遊用戶都可以查詢看的結果
受影響行上的鎖已被釋放、其他用戶可以進行處理
搜遊保存都被清除
執行ROLLBACK操作之後的數據狀態
數據已還原到以前狀態
受影響行上的鎖一杯釋放
delete from copy_emp;
rollback;