前言:
1.認識Oracle
oracle:商業運用第一的關系型資料庫,實質上就是一種關系型資料庫,
2.資料庫與關系型資料庫
資料庫:資料存盤的倉庫
關系型資料庫:資料庫中保存的物件之間可以存在一定的關聯關系,并非完全獨立,主要反映到以后學習的主外鍵.
關系資料庫是關系或二維表的集合:
Orcale資料庫
/ \
table_1 table_2
關系資料庫是:
由關系型資料庫物件組成的,
由關系操作管理,
受資料完整性約束控制,
3.三個名詞
(1) sql:結構化的查詢陳述句,操作oracle資料庫的語言 (Structured Query Language, SQL),第四代編程語言,之關心做什么,不關心怎么做,結構化查詢,易學易用
(2) sqlplus:oracle軟體自帶的終端可以輸入sql,且將sql執行結果顯示
SQL*Plus
↓
SQL*Plus: 如同作業系統中的SHELL,SQL——>Oracle,就是說在Oracle資料庫執行SQL陳述句之前,需要SQL*Plus進行編譯,
(3) pl/sql:這是一種程序化語言,純SQL中沒有邏輯的控制,而在PL/SQL中存在邏輯控制:像存盤程序和函式就是一種典型的PL/SQL語言的實作
4.資料庫中的物件
table:表格(物體OR關系),由行和列組成,列又稱欄位,每一行內容為表格的一條完整的資料,
view: 視圖,一張表或者多張表的部分或者完整的映射,好比表格照鏡子,鏡子里面的虛像就是view
除去常見的table和view兩種物件以外,oracle資料庫還支持如下四種物件
sequence:序列,生成主鍵值
index:索引,提高資料的訪問效率
synonym:同義,方便物件的操作
program unit:程式單元,pl/sql操作的物件
5.五種分類
sql的五大分類:
資料查詢(DQL):SELECT
資料操作(DML): INSERT, UPDATE, DELETE (增刪改) 需要commit
資料定義(DDL): CREATE, ALTER, DROP, RENAME, TRUNCATE
資料控制(DCL): GRANT, REVOKE
事務控制(DTL): COMMIT(事務提交), ROLLBACK(事務回滾), SAVEPOINT(設定回滾點)
6.delete,truncate區別:
delete: 洗掉表中的一潭訓者多條記錄,該操作需要提交事務
truncate:清空表格,該操作不需要提交事務
7.oracle資料庫環境準備(一般現在使用mysql資料庫的是一種趨勢):
三種登錄方式:
sqlplus "/as sysdba"
sqlplus system/*******
sqlplus username/password
8.去重
distinct關鍵詞只能放在select關鍵詞后面.
如果distinct關鍵詞后面如果出現多列,表示多列聯合去重,即多列的值都相同的時候才會認為是重復的記錄,
7.select陳述句永遠不對原始資料進行修改,
8.加減乘除有優先級,加小括號可以改變運算的順序
9.字串拼接select id,first_name||' '||last_name||','||title as name from s_emp;
10.sqlplus 登錄之后,可以使用buff(快取)來存盤/執行/修改要執行的sql陳述句
這里的buff的特點:
1.buff中只能存盤一條sql陳述句(但是這條sql陳述句可能有很多行)
2.每次放入新的sql陳述句,會把之前的覆寫掉
3.每次執行sql陳述句,都會把這個sql陳述句放到buff里面
11.sqlplus基礎操作
直接輸入該行的行號就是定位
l 查看快取中的sql陳述句
del 洗掉[定位]的那一行內容
! 后面接終端命令 !clear:清屏 windows中使用$符號 例如:$cls
/ 執行快取sql命令
clear buffer:清空當前快取的命令
save test.sql buff中的sql陳述句保存在test.sql檔案中
get test.sql 把test.sql中的內容在加載到buff中,但是沒有運行
匯入:
start test.sql 把test.sql中的內容在加載到buff中并且執行
@test.sql 把test.sql中的內容在加載到buff中并且執行
edit file_name 使用系統默認編輯器去編輯檔案
錄制:
spool file_name //將接下來的sql陳述句以及sql的運行結果保存到檔案
sql1
result1
sql2
result2
...
spool off 關閉spool功能
exit:退出
12.查詢結果不好看
通過column使我們的顯示界面好看:COLUMN last_name FORMAT a15; 可以簡寫為:col last_name for a15;
13.order by
desc(降序) asc(默認升序),優先級最低
限制查詢:
14.邏輯比較運算子:
select col_name,...
from tb_name
where col_name 比較操作運算式
邏輯運算子 and or not
col_name 比較操作運算式
...
15.邏輯比較運算子 = > < >= <= !=
不等于:三個都表示不等于的意思(經常用的是!=) != <> ^=
16.注意:
1.限制查詢條件,使用where子句
2.條件可以多個,使用邏輯運算子和()進行條件的邏輯整合
3.where子句的優先級別最高
4.比較操作運算式由運算子和值組成
sql比較運算子:
17.between and:在什么范圍之內
需求:查看員工工資在700 到 1500之間的員工id,和名字
select id,last_name,salary
from s_emp
where salary between 700 and 1500;
18.in(list):在一個串列中
需求:查看員工號1,3,5,7,9員工的工資
select id,last_name,salary
from s_emp
where id in (1,3,5,7,9);
19.like:模糊查詢,即值不是精確的值的時候使用
通配符,即可以代替任何內容的符號
% :通配0到多個字符
_ : 當且僅當通配一個字符
轉義字符:默認為\,可以指定 指定的時候用escape 符號指明即可,轉義字符只能轉義后面的一個字符
eg:查看員工名字中包換一個_的員工id和工資
select id,last_name,salary
from s_emp
where last_name like '%\_%' escape '\';
20.is null:對null值操作特定義的運算子,不能使用=
eg:查看員工提成為為空的員工的id和名字
select id,last_name,commission_pct
from s_emp
where commission_pct is null;
21.邏輯運算子,當條件有多個的時候使用
and:且邏輯
or:或邏輯
注意:and邏輯比or邏輯要高
not:非邏輯
函式:
單值函式
1.字符函式 lower upper initcap concat substr length nvl
2.日期函式
3.轉換函式 to_char to_number to_date
4.數字函式 round trunc mod
分組函式
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
22.字符函式
LOWER 把字符轉為小寫
UPPER 把字符轉換為大寫
INITCAP 把字串首字母轉換為大寫
CONCAT 把倆個字串連接在一起(類似之前的||的作用)
select concat('hello','world') msg from dual;
select 'hello'||'world' msg from dual;
SUBSTR 截取字串
select last_name,substr(last_name,3) from s_emp;第二個引數從1開始為正;(從前往后)
select last_name,substr(last_name,-1) from s_emp;第二個引數從-1開始為負;(從后往前)
第三個字符表示截取多少個:
select last_name,substr(last_name,-3,2) from s_emp;
select last_name,substr(last_name,3,2) from s_emp;
LENGTH 獲得字串長度
select length('world')from dual;
NVL 替換列中為null的值
select last_name,nvl(commission_pct,0)from s_emp;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23.數字函式
ROUND 四舍五入
select round(45.923,2) from dual;保留到小數點后面2位
select round(45.923,0) from dual;保留到個位 (個十百千萬...)
select round(45.923,-1) from dual;保留到十位 (個十百千萬...)
TRUNC 截取到某一位
select trunc(45.929,2) from dual;截取到小數點后面2位
select trunc(45.923,0) from dual;截取到個位 (個十百千萬...)
select trunc(45.923,-1) from dual;截取到十位 (個十百千萬...)
MOD 取余
select mod(10,3) from dual;把10和3進行取余 (10除以3然后獲取余數)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24.日期函式(sysdate關鍵字,表示系統的當前時間
例如:顯示時間:當前時間
select sysdate from dual;
注意:sysdate進行加減操作的時候,單位是天)
MONTHS_BETWEEN 倆個日期之間相差多少個月(單位是月)
select months_between(sysdate+30,sysdate) from dual;
select months_between('01-2月-2019','01-2月-2019') from dual;
ADD_MONTHS 回傳一個日期資料:表示一個時間點,往后推x月的日期
select add_months('01-2月-2019',2) from dual;
select add_months(sysdate,4) from dual;
注意:這個數字也可以是負數,表示往前推x月
NEXT_DAY 回傳一個日期資料:表示一個時間點后的下一個星期幾在哪一天
select next_day(sysdate,'星期五') from dual;
select next_day('01-2月-2019','星期五') from dual;
如果要使用'FRIDAY',那么需要把當前會話的語言環境修改為英文
alter session set nls_language=english;
alter session set nls_language='simplified chinese';
LAST_DAY 回傳一個日期資料:表示一個日期所在月份的最后一天
select last_day(sysdate) from dual;當前日期所在月份的最后一天(月底) 15.16?
ROUND 對日期進四舍五入,回傳操作后的日期資料
select round(sysdate,'MONTH') from dual;
//這個寫法是錯誤的
//數字函式也有一個round
//倆個ronnd函式有沖突
//所以這里不能使用默認的日期格式
select round('01-2月-2019','MONTH')
from dual;
TRUNC 對日期進行截取 和round類似,但是只舍棄不進位
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25.四.型別轉換函式
TO_CHAR 把日期或數字轉換為字符
TO_NUMBER 把字符轉換為數字
TO_DATE 把字符轉換為日期
所以在日常的編程中若要向資料庫中存一個日期,我們可以使用to_date函式
若要將一個日期資料以字串形式從資料庫中取出,我們可以使用to_char函式,
使用形式:fx(value,changed model);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/5512.html
標籤:Oracle
