orcale开篇
1.數據庫系統和數據庫的管理系統
? 數據庫系統=數據庫的管理系統+oper操作員+硬件
2.Oracle的版本
? 8i/ 9i 10g/11g ?12c(cloud)
3.實例和數據庫的關系
? 實例:數據庫服務啟動后,在內存中的單元。
? 數據庫:硬盤上的文件,物理介質硬盤
?4.數據庫的核心部件
???PGA: ? ? (提交給SGA)
? ?SGA: ? ? ?(屬于實例)
? ? ? DBWR(數據的讀取和寫入) ?
? ? ? LGWR(日志文件的讀取寫入)
? ? ? SMON (清理臨時表空間)?
? ? ? PMON (異常中斷之后的清理,處理和釋放資源)?
? ? ? CKPT ?(檢查點,保證數據庫的一致性,這是指將臟數據寫入到硬盤,保證內存和硬盤上的數據是一樣的;)
5.監聽文件的位置
? app----->Happy(用戶名)----->product--->NETWORK----》ADMIN -----》listener.ora
6.服務的開啟順序
? 先監聽,再數據庫服務
@echo
net start OracleOraDb11g_home1TNSListener
net start OracleServiceORCL
@pause
7.數據庫用戶
? ?sys:超級管理員 管理普通的管理員和普通用戶
? ?System:普通管理員
? ?scott:沒有解鎖
8.數據類型
? 字符串 Nvarchar2
? 數字 ?nubmer
? 日期和時間:Date
? 大二進制類型:BLOB
? 大文本類型 :CLOB 類型SQL SErver中的Text或者是nvarchar(max)
9.Oracle中是根據用戶來隔離表的
? 默認情況下,當前登錄的用戶只能看到自己創建的表
? --創建一個用戶
create user happyy2165 identified by happyy2165
--權限
--身份:新員工 100
grant connect to happyy2165
grant RESOURCE to happyy2165
--建立一張數據表
create table userinfo
(id number primary key not null)
##如何查看該用戶管理著的所有表
select * from all_tables where owner='HAPPYY2165'
10.偽列 ?rowid rownum
11.如何查詢表中自然排序的第3條記錄?
? ?select * from ( ?select id,rowid,rownum rn from userinfo ?) userinfo where rn=3
? ?排名第五的員工信息:
? ? select ?* ?from ( select temp2.* ,rownum rn ?from (?
? ? ? ? ? ? ? ? ? ? ? ? ? ? select ?ename,sal from emp order by sasl desc )
? ? ? ? ? ? ? ? ?temp2 )
? ? ? ? ? ? ? ? ?TEMP where rn=5
?檢索5到10的記錄:
? select * from (select temp2.*,rownum rn ?from (
? ? ? ? ? ? ? ? ? ? ? ?select ename ,sal from emp order by sal desc )
? ? ? ? ? ? ? ? ? ? ? temp2 where rownum<=10 )
? ? ? ? ? ? ? ? ? ? ?TEMP where ?rn>5?
1.用戶和模式是等價的
2.創建了一個用戶
create table 用戶名 identified by 密碼
grant connect,resource to 用戶名
用戶名登陸后。創建表
Create table student
(stuno number primary key not null)?
創建一張表,必須隸屬于一個表空間,如果不指定隸屬于哪個表空間,他默認隸屬于users表空間
Create table student
(stuno number primary key not null)TABLESPACE example
STORAGE (INITIAL 8M);
3.表空間
? 邏輯概念
? 一個database 下有1個或者 N個表空間
? 1個表空間有1個或者多個數據文件
??
? 如果創建了一張表,不指定表空間,默認使用users表空間
?
??rownum注意事項:
? ? rownum=1可以 ?,rownum<N,大于 m沒有結果集。如何規避,使用子查詢形成別名列。然后再外層查詢該列。
rownum=3
5. 用戶A(Scott)去訪問用戶B(happyy2165) 里面的student包
Oracle三大系統角色
connect
resource
dba
方案一:直接授權法
? 1.用happyy2165登錄,之后,授權
? grant select on HAPPYY2165.STUDENT to scott
? 2.用scott登錄,用如下代碼去訪問Student表
? select * from HAPPYY2165.student
??
方式二:通過角色去控制
? ? ? ?1.自定義角色 role_testy2165 ?create role role_testy2165
? 2.將查詢表的權限和角色綁定
GRANT select on HAPPYY2165.STUDENT to role_testy2165
? ? ? ? 3.給用戶分配角色
grant role_testy2165 to SCOTT
revoke select on HAPPYY2165.student from SCOTT 回收權限
6.解鎖用戶
alter user hr account unlock
?
7. 刪除stuName、stuAge列重復的行(保留一行) ?保留學號最大的
?
DELETE?FROM?STUDENT?WHERE?"stuno"?NOT?IN? ? (
SELECT?"MAX"("stuno")?FROM?STUDENT?GROUP?BY?"stuname","stuage"
? ? ?)? 8.SQL操作符
? 算術 +/-
? 連接|| 連接兩個字符串
? 比較
? 邏輯 ?And or?
? 集合
? union ?合并記錄
? 連接查詢:合并列
? union all
??
? intersect
??
? select 1+1 from dual
--|| 明天放假但是作業很多
select '明天放假'||'但是作業很多' from dual
select '您的運算結果是'||5 from dual
SELECT deptno?
FROM dept?
INTERSECT --交集(共有內容)
SELECT DISTINCT deptno FROM emp
SELECT deptno?
FROM dept?
minus --減集(第一個查詢減去第二個后的剩余記錄)
SELECT DISTINCT deptno FROM emp
9.SQL函數
? 單行函數
? ? SELECT LOWER('MR. SCOTT MCMILLAN') "Lowercase"
FROM DUAL;
SELECT UPPER('last_name')
FROM dual;
SELECT initcap('username')
FROM dual;
SELECT CONCAT('begin', 'last') "Job"
FROM dual
SELECT SUBSTR('ABCDEFG',3,4) "Substring"
FROM DUAL; Sql中的函數
Sql函數包括:(單行函數)(分組函數)(分析函數)
單行函數:
?????對于從表中查詢出來的每條記錄只顯示一個數據。單行函數可以出現在select子句中,where子句中。單行函數包括:(字符函數)(數字函數)(日期函數)(轉換函數)(其他函數)。?
????
日期函數:對日期進行計算?顯示日期類型或者數字類型。
????SYSDATE????當前日期??eg:select?sysdate?from?dual;?
????current_date????返回當前會話時區中的當前日期
????current_timestamp????以timestamp?with?time?zone數據類型返回當前會話時區中的當前日期
????dbtimezone????返回時區
????ADD_MONTHS????加上月數?eg:select?add_months(sysdate,1)??下個月,?add_months(sysdate,123)?"123個月后"?from?dual?
????MONTHS_BETWEEN??返回兩個日期之間月數?eg:兩個日期相差的月數??select?(sysdate-hiredate)/30?方式一,?months_between(sysdate,hiredate)?方式二?from?emp;??
??????????????--add_months:在指定日期上加上若干個月
????LAST_DAY????返回月的最后一天?eg:select?last_day(sysdate)?from?dual;?
????ROUND????將日期進行四舍五入?eg:select?round(sysdate,'MONTH')??月,round(sysdate,'YEAR')?from?dual;
????NEXT_DAY????指定下一個星期幾的日期?eg:select?next_day(sysdate,'星期-')?from?dual;?
????TRUNC????日期的格式轉換?eg:select?trunc(sysdate,'MONTH')??月,trunc(sysdate,'YEAR')?from?dual;??
????EXTRACT????提起日期中指定的部分?
????字符函數:
????Initcap(char)??大寫首字母。eg:select?INITCAP('hello?world')?from?dual;
????Lower(char)??將大寫字符變成小寫。eg:select?lower('Hello?World')?轉小寫,?upper('Hello?World')?轉大寫?from?dual;?
????數字函數
????Mod(m,n)???m/n?的余數。eg:select?mod(11,10)?from?dual;??
????Power(m,n)???m的n次方。eg:select?power(2,2),power(-1,2),power(1,0)?from?dual;???POWER(2,2)?POWER(-1,2)?POWER(1,0)??
????Round(m,n)????m是小數,n是取的小數位數。四舍五入?eg:select?round(123.5),round(123.46,1),round(126.45,-1)?from?dual;?
?ROUND(123.5)?ROUND(123.46,1)?ROUND(126.45,-1)
????Trunc(m,n)????m是小數,n是取的小數位數。不四舍五入?select?trunc(999.99),trunc(999.99,1),trunc(999.99,-2)?from?dual;??
TRUNC(999.99)?TRUNC(999.99,1)?TRUNC(999.99,-2)?
????轉換函數
????To_char?轉化字符。eg:?SELECT??TO_CHAR(?'AABBCC'?)??FROM??dual;
????To_date??轉換日期。eg:SELECT??TO_DATE(?2454336?,??'J'?)??FROM??dual;??SELECT??TO_DATE(?'2007-8-23?23:25:00'?,??'yyyy-mm-dd?hh24:mi:ss'?)??FROM?dual;
????To_number??轉換數字?eg:?SELECT?TO_NUMBER('-100.00',?'9G999D99')?FROM?dual;?
????其他函數
????NVL(表達式1,表達式2)
????????如果表達式1為null,返回表達式2,否則返回表達式1;
????????如果表達式類型不一致,Oracle將表達式2轉換為表達式1的類型
????NVL2(表達式1,表達式2,表達式3)
????????如果表達式1為空,返回表達式3的值,否則返回表達式2的值
????NULLIF(表達式1,表達式2)
????????如果兩表達式相等,返回空值,否則返回表達式1
??分組函數
????Avg?()取平均數。eg:select?sum(sal)/count(*)?方式一,?avg(sal)?方式二?from?emp;??
????Count?()返回查詢出來的數據。select?count(*)?from?emp;??
????Sum?()取和?eg:select?sum(sal)/count(*)?方式一,?avg(sal)?方式二?from?emp;?求平均
????Max?()取最大值???eg:--max和min:求最高工資和最低工資??select?max(sal)?最高工資,min(sal)?最低工資?from?emp;??
????Min?()取最小值???eg:--max和min:求最高工資和最低工資??select?max(sal)?最高工資,min(sal)?最低工資?from?emp;?
?
轉載于:https://www.cnblogs.com/wangbenqing/p/7545631.html
總結
- 上一篇: python performance m
- 下一篇: 图论 用广搜搜邻接矩阵