Www.cxrs.net/bbs程序交流中心,這是壹個專門為初學者設置的學習論壇。
第二,SQL
結構化查詢語言
結構化查詢語言是關系數據庫中的壹個對象。
DDL(數據定義語言)用於創建或刪除表以及修改表約束。
創建表,更改表,刪除表,添加或刪除表結構。
DML(數據操作語言)將記錄插入表中並修改它們。
插入、更新、刪除、合並
事務控制語言Transaction由DML語句、commit,回滾;
選擇查詢語句
Dcl授權聲明授權
第三,甲骨文
DBMS數據庫管理系統
由Oracle提供,以及應用服務器。
DBA數據庫管理員
四、相關操作
1,訪問數據庫的sqlplus命令(本地訪問/遠程訪問)和與數據庫建立連接的命令是數據庫操作的環境。
Sqlplus用戶名/密碼
2.show user顯示當前用戶的用戶名。
妳可以直接連接用戶名/密碼來改變妳的身份——這是sqlplus命令。
可以用在sqlplus中!可以在shell和sqlplus之間切換!Shell命令您可以在sqlplus中使用shell命令。
事實上,sqlplus打開了壹個子進程來執行shell命令。
3.Oracle數據庫中的表分為兩類:用戶表(用戶使用的表)和系統表(數據庫系統維護的表,也叫數據字典)。
用戶表上的DDL操作引發系統表上的DML操作!
動詞 (verb的縮寫)基礎語法
1,選擇查詢語句
從用戶表中選擇表名;(查詢系統表)
上面的查詢語句是為了查詢這個用戶擁有的所有表的表名。
投影操作,只查看所選字段的信息。
選擇壹個操作以查看字段中的特定信息。
Join操作,多表查詢,通過表與表之間的連接,找出多個表中的信息。
(1)從用戶表中選擇表名;(查詢系統表)
上面的查詢語句是為了查詢這個用戶擁有的所有表的表名。
(2)最後壹條sql語句將緩存在2)sqlplus的緩沖區中。您可以使用“/”來執行最後壹條sql語句,也可以使用。
編輯命令來編輯最後壹條sql語句。
l命令(list)(sqlplus命令)可以顯示緩沖區中的最後壹個命令。
sqlplus命令可以縮寫。
(3)desc[表名]
這是壹個sqlplus命令。請註意,它不是sql語句。該命令用於查看表格的結構。描述的簡稱
[字段名稱][字段類型],這是使用desc命令後顯示的表格結構。
(4)選擇[表1的字段名],[表2的字段名],...from表名;
Select * from表名;查找表中所有字段的信息。
(5)不相等的關鍵字拆分,sql語句、表名、字段名不區分大小寫。
sql語句應以“;”開頭End,表示sql語句的結束,如果不添加“;”系統不會執行該sql語句和提示。
在Oracle中,字符的顯示是左對齊的,值是右對齊的。
(6)數學表達式可以用在select語句中。
選擇[表達式(必須包括該表的字段名)],[...], ...from表名;
運算優先級先乘後除再加減,同壹級別從左到右運算。括號改變了優先級。
(7)別名
選擇[字段名或表達式] ["別名"],[...] ["..."], ...from表名;
您可以在字段名或表達式後添加壹個空格“別名”,並且可以為列或表達式指定別名。
別名必須用雙引號表示。
(8)字符串拼接使用||符號。
Select目標字段名|| ""|||從表名中選擇目標字段名;
註意:Oracle中的字符串應該用“...”括起來
別名中需要使用空格,或者需要使用“...”當大小寫敏感時。
練習:
自己寫壹個SQL語句,執行的結果是select * from...;
在哪裏...是每個系統表的名稱。
即在每個系統表的表名前加上“select * from”,然後加上“;”
select ' select * from ' | | table _ name | | ';'from user _ tables
2.處理錯誤
(1)!oerr ora[錯誤號],系統可以顯示錯誤的原因以及如何修改。如果命令輸入不正確,可以使用edit或ed來糾正輸入錯誤。
它實際上是編輯緩存文件中的最後壹條sql語句。
也可以使用(更改)c/error字段/correct字段進行替換和修改。
僅在Linux平臺上使用。
!相當於主機,沒有斷開,只是切換執行了shell命令。
(2)編輯命令編輯最後壹條sql語句。
3、sqlplus設置
設置回車響應暫停,顯示在分屏中,僅在此進程中有效。
將“暫停關閉”設定為關閉分屏顯示。
設置暫停“...”設置分屏顯示的提示信息。
設置pause on先輸出提示信息,然後返回響應,分屏顯示。
關閉收割臺輸出。
關閉進料端輸出。
將回顯關閉寫回關閉。
假脫機文件名。sql寫入指定的文件。
Spool off關閉寫入。
4.sql腳本
也就是說,壹個寫有sql語句的文件可以在sqlplus中運行。
介紹sql腳本
Sqlplus用戶名/密碼@sql腳本(註意:在編寫@sql腳本之前,必須在輸入用戶名和密碼之後添加空格)。
在腳本的最後壹行寫“exit”,運行腳本後返回shell。
5、
Oracle中的空值將被視為無窮大。事實上,null值根本不會被存儲,而會被視為無窮大。
在Oracle中,控制處理程序NVL(字段名,值)用指定的值替換該字段中的空值,如果不為空,則返回其原始值。
示例:select(salary * 12)*(nvl(commission _ pct,0)/100+1) salary,first _ name from s _ EMP
Distinct關鍵字,刪除重復行(該關鍵字將觸發排序操作)
示例:select distinct dept _ id,title from s _ EMP。
部門標識和職位的聯合不是唯壹的。
註意:在distinct之後,from之前的字段將被復制。
6、列命令- sqlplus命令
列命令的列格式定義
列目標列名,以查看該類是否具有定義的格式。
列目標列名格式a..設置列寬。
列姓氏標題“員工|姓名”格式A15
設置標題
中的“|”是壹個換行符。
列薪金左對齊格式$99,990.00
定義數字顯示格式
註意:如果不滿足顯示格式,數據將顯示為“#”。
列薪金左對齊格式$00,000.00
將有$00,928.00,其中將填充0。
列列名清除(清除列格式定義)
註意:只有sqlplus命令是縮寫,使用sqlplus命令時不能在末尾加符號。
六、選擇操作
1、排序依據
排序子句ASC(默認,升序)DESC(降序)
Order by目標列名(別名)排序順序(不寫排序順序,默認為升序排序)。
示例:select first _ name from s _ emporder by first _ name;
select first _ name from s _ EMP order by first _ name desc;
註意:升序空值在結果的末尾,降序空值在結果的前面。
2.where子句
where子句用在select之後...從...選擇所需的(合格的)記錄。
其中後面是表達式XXX=XXX,XXX介於X和X,XXX於(X,X,X)之間。
就像……通配符查詢
在...之間...和...,表示結果介於之間,介於和之間,是壹個封閉區間,
它相當於...
!=,& lt& gt,=,三個標誌都不等於,
...在(va1,val2,...)來確定結果是否存在於此枚舉中。
就像……字符串通配符查詢,' % '表示多個字符,' _ '表示壹個字符。
註意:escape: like' s \ _%' escape' \ '的用法
...和...意味著同時只滿足兩個條件。
...或者...意味著只能滿足其中壹個條件。
全部...就是所有要求都符合條件。
不...,在上述條件下可能會適得其反。
空值將影響not in,也就是說,它們不等於除空值以外的任何值。
...is null用於確定該值是否為空。
註意:Oracle中的字符串嚴格區分大小寫。
(1)註意數據類型。直接寫數字類型,用“...”字符,並使用“...”對於默認的日期格式,只有別名。
只使用" "來包含。
(2)選擇合適的操作員
七、單行功能
1.字符函數
字符區分大小寫。
小寫(字段名)-參數可以是字段名下的字符串常量。
大寫(字段名)
初始資本initcap(字段名)
字符串串聯concat(字段1,字段2)
截取子字符串substr(字段名、起始位置、字符數)
專門用於功能測試和操作的Dual table只有壹條記錄。
字符串串聯concat(...,...)
查找指定的子字符串substr(...起始位置,取字符數)
可以用“-”表示從右向左取,取的時候可以從左取給朋友。
示例:select substr (first _ name,-2,2)sub from s _ EMP;(拿最後兩個)
select substr(first_name,2,2)sub from s _ EMP;(取前兩個)
2、數值函數
Round round(數據,保留幾位小數)
小數點前可以用負數表示,小數點後第壹位用0表示,即保留壹位,用-1表示壹位(保留十位)。
例:從dual中選擇round (15.36,1);
Trunc(數據,保留數字(小數點後的數字))截取數字,然後加0。
例:從dual中選擇trunc (123.456,1);
3、日期功能
日期格式,
完整日期格式的世紀信息,年、月、日、小時和分鐘。
默認日期格式,日-月-YY-月-日
修改當前會話的日期格式將根據指定的格式輸出日期。
alter session set nls _ date _ format = ' yyyy mm DD hh24:mi:ss ';
返回當前日期sysdate
示例:從dual中選擇sysdate
從dual中選擇sysdate+1;獲取明天的日期,加上1,以天為單位。
日期是格式敏感的。
計算兩天之間的月數(date1,date2)。
加減指定的月數add_months(日期,月數),月數可以是負數,負數就是減去對應的月數。
從第二天開始的第壹個星期五(日期,星期五)。
返回月末的最後壹天(日期)。
Trunc(日期,“年或月或日或小時和分鐘”)
示例:select next _ day (sysdate,2)from dual;
示例:select trunc (add _ months (sysdate,1),' month ')from dual;
ROUND(' 95年5月25日','月份')065438+95年6月0日
ROUND(' 95年5月25日','年份')065438+95年1月0日
TRUNC(' 95年5月25日','月份')065438+95年5月0日
TRUNC(' 95年5月25日','年份')065438+95年1月0日
練習:
返回下個月第壹天的日期。
select round(last_day(sysdate),' MONTH ')from dual;
select add_months(trunc(sysdate,' MONTH '),1);
4.不同數據類型之間的轉換函數
將日期轉換為字符tochar(日期,“日期格式”)
日期格式應該有效並區分大小寫' yyyy mm dd hh24:mi:ss ',
“年”(拼寫年份)、“mm”(用數字表示的月份)、“月”(拼寫月份)、“日”(拼寫星期)、“ddspth”(拼寫日期)、“yy mm dd”
示例:select to _ char (sysdate,' yyyymm ddhh 24:mi:ss ')from dual;
將字符轉換為數字to_number(' ... '))
將數字轉換為字符to_char(number,' fmt') fmt是壹種數字格式。
將字符串轉換為日期to_date(' ... '),‘日期格式’)。
示例:select to _ char(to _ date(' 20061103 ',' yyyymm DD ',' DD-month-YY ')from dual;
1,等值聯接
選擇[表格別名1。字段名1],[表別名2。字段名2],...
來自表1表別名1表2表別名2。
其中表別名1。字段名3=表別名2。字段名4;
表格連接時,表格之間存在同名字段時,可以添加表格名稱或表格別名進行區分,使用時使用。
表名。字段名或表別名。字段名(列名)。當表的字段名是唯壹的時,沒有必要添加表名或表的別名。
註意:當表有別名時,不能再使用表名和字段名。
示例:選擇a .名字,a .姓氏,b .姓名
從倉庫a,倉庫b
其中a . dept _ id = b . id;
2.非等聯接
選擇[表格別名1。字段名1],[表別名2。字段名2],...
來自表1表別名1表2表別名2。
其中表別名1。字段名稱3...表別名2。字段名4。
...可以做比較運算符,也可以做除' = '以外的其他運算符。
示例:選擇e.ename、d.grade、e.sal
來自emp e,salgrade d
其中e.sal在d.losal和d.hisal之間;
3.自連接
使用別名將表中的數據分成兩部分,然後使用條件篩選。
選擇[表格別名1。字段名1],[表別名2。字段名2],...
從表1表別名1表別名1表別名2。
其中表別名1。字段名3=表別名2。字段名4;
示例:select a .名字名稱,b .名字名稱。
從s_emp a,s_emp b
其中a . manager _ id = b . id;
上面提到的表連接都稱為內部連接,並且嚴格匹配兩個表的記錄。
4.外接
壹個表中的所有記錄都將用於匹配另壹個表中的記錄,空值也將被匹配。該表中的所有記錄都將顯示出來,數據庫將模擬記錄來匹配那些不匹配的記錄。
示例:select a . first _ name name name me,a.id,b.first _ namecname,b.id
從s_emp a,s_emp b
其中a . manager _ id = b . id(+);
也就是說,表A中的數據用於匹配表B中的數據,如果表B中有null,則系統模擬記錄與之匹配。
註意:應顯示該方的所有記錄,條件(+)應跟隨要選擇的對方。
外部連接的應用:
列出哪些部門沒有員工。
選擇e.deptno,d.deptno
來自員工e部d
其中e.deptno(+)=d.deptno
並且e.deptno為空;
第三,群體功能
團體團體
Group by分組子句,根據指定的分組規則進行分組。這個group by子句可以跟在select語句或having後面。
group by子句還將啟動排序操作,該操作將按分組字段進行排序。
選擇[組函數或分組的字段名],...從表名分組依據[字段名1],[字段名2],...;
示例:select avg(salary)from s _ EMP group by dept _ id;
註意:組函數可以處理壹組數據並返回值。
組函數忽略空值。
avg的參數(..)、平均值、總和(..)和sum只能是number類型。
下面提到的函數可以使用任何類型作為參數。
計數(..),用來統計記錄的數量,可以使用duplicate命令。計數(...)默認情況下使用all。
最大(..),最小(..)求最大值和最小值,
Count(*),統計表中的記錄數。
示例:select max (b.name),avg (a.salary),max (c.name)。
從s_emp a,s_dept b,s_region c
其中a .部門標識=b .標識,b .區域標識=c .標識
按b.dept_id分組;
註意:只要編寫了group by子句,
* * * select之後,只能在group by之後使用字段或分組函數。***
where子句只能過濾記錄和放置單行函數。
having子句可以過濾組函數或組信息的結果,它寫在group by子句之後。
示例:
選擇最高(b.name),平均(a.salary),最高(c.name)
從s_emp a,s_dept b,s_region c
其中a .部門標識=b .標識,b .區域標識=c .標識
按b.id分組
有sum(a.salary)>4000;
Column還可以用別名定義列的格式。
列“別名”格式定義
註意:應先過濾掉不必要的記錄,然後進行分組,以提高效率。
第四,子查詢
子查詢是可以嵌入到任何sql語句中的select語句。
當子查詢嵌套在select語句中時,首先執行子查詢。通常,子查詢會放在運算符的右側。
註意:使用子查詢時,註意該運算符是單行的(即只能是單值的)還是多行的(range,multi-valued,in)。
同時使用子查詢返回的結果必須符合運算符的用法。
示例:
選擇名字,職位
從s_emp
其中title=any(從s_emp中選擇標題
其中姓氏= '史密斯')
和upper(姓氏)!=‘史密斯’;
選擇名字,職位
從s_emp
其中標題在(從s_emp中選擇標題
其中姓氏= '史密斯')
和upper(姓氏)!=‘史密斯’;
動詞 (verb的縮寫)將業務需求轉化為操作表
壹:需求分析
第二:畫壹個E-R圖
三:轉換為表關系
四:割接(新舊系統的交接)
五:
E-R圖屬性:
*是必需的非空屬性。
o可選屬性(可能有也可能沒有值)
# *表示該屬性是唯壹的且不為空。
實體關系:
mastbean maybean
數量關系:多對壹關系
壹對多關系
壹對壹的關系
多對多關系
第壹範式,所有的屬性都必須是單值的,也就是屬性只代表單壹的意義。(記錄可以重復,沒有任何限制)
第二種範式要求惟壹的非空屬性(記錄不能重復,但數據可能是冗余的)。
在第三種範式中,非主屬性只能依賴於主屬性,而不能依賴於其他非主屬性。(解決數據冗余問題)
不及物動詞限制
約束是為表中的字段定義的。
主鍵(PK)保證實體的完整性和記錄的唯壹性。
主鍵約束唯壹非空,每個表只能有壹個主鍵,兩個字段組合起來作為主鍵,只有兩個字段放在壹起唯壹標識記錄,稱為聯合主鍵。
外鍵(FK)保證了引用的完整性,
外鍵約束,外鍵的值被另壹個表中的主鍵或唯壹值約束,不能取其他值,只能引用主鍵的值。被引用的表稱為父表(父表),引用的表稱為子表(子表)。如果要創建子表,必須先創建父表,然後創建子表,記錄插入、先創建父表、再創建子表和刪除也是如此。刪除表時,先刪除子表,再刪除父表。
唯壹鍵,該值是唯壹的。
索引(Index)是數據庫、視圖(圖表)的獨特類別
典型的壹對多班級對應多個學生。
學生表班級表
______________________________ _________________________
| id |姓名|地址|班級id | | id |班級desc |班級編號|
|(PK)| _ _ _ _ _ _ | _ _ _ _ _ _ |(FK)_ _ |(PK)| _ _ _ _ _ _ _ | _ _ _ _ _ _ |
| | | | | | | | |
壹對壹的
學生表申分證表
____________________ _________________________________
| id |姓名|地址| | s _ id | shenfen _ desc | shenfen _ num |
|(PK)| _ _ _ _ _ _ | _ _ _ _ _ _ |(PK,FK)| _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ |
| | | | | | | |
多對多
學生桌鐘健桌柯城桌
____________________ _________________________________ __________________
| id |姓名|地址| | s _ id | Shen fen _ desc | Shen fen _ num | | kid | ke cheng name |
|(PK)| _ _ _ _ _ _ | _ _ _ _ _ _ |(FK,FK)| _ _ _ _ _ _ _ _ _ _ _ _ | _ _ _ _ _ _ |(PK)| _ _ _ _ _ _ _ _ _ _ _ _ |
||||||||聯合主鍵||||||
引用對方表的主鍵作為自己的主鍵,所以這個表的主鍵既是主鍵又是外部主鍵。
表構建和其他相關操作
DDL語句
創建表格:
創建表表名(字段名稱1類型(數據長度)(默認...)約束,字段名2類型(數據長度)約束);
Oracle數據庫中的數據類型
Varchar (length),可變長度字符串,char (length)固定長度
號碼(...,...),而number代表浮點數或整數。
Long large object,帶有clog字符的大型對象,相當於在表中只存儲壹個文本文件,相當於只定位值。
博客二進制大對象也是以指針的形式存儲的。
主鍵約束:
主鍵約束的定義:
第壹種定義形式:
創建表測試(c數主鍵);列級約束
第二種定義形式:
創建表測試(c號,主鍵(c));表級約束
創建表測試(c1數字約束pkc1主鍵);該約束有壹個名稱:pkc1。
創建表測試(c號,c2號,主鍵(c,c 1));聯合主鍵可以通過表級約束來實現。
Foregin key (fk)外鍵約束:
(先定義父表,再定義子表)
carete表父(c1數字主鍵);
創建表子項(c號主鍵,c2號引用父項(c 1));
或表級約束定義:
創建表子項(c數主鍵,c2數,外鍵(c2)引用父項(c 1));
如果兩個字段都唯壹且不為空,則可以定義為UK+NOT NULL。
(PK或英國)壹對多(FK)
(PK+英國)壹對壹(FK)或(PK)壹對壹(PK)
多對多關系壹般通過壹個中間表分解成兩個壹對多表。
建立表格
創建表[模式]表
模式:壹個用戶對應壹個模式,不同用戶下的表不能互相查看。
select count(*)from s _ dept;& lt= = = & gtselect count(*)from SD 0611 . s _ dept;
壹個表中只能存儲壹種LONG類型。
CLOB存儲大型文本對象。
BLOB存儲大型二進制對象。
創建表測試(c1數字主鍵);設置主鍵
創建表測試(c1數字約束測試_c1主鍵);定義約束名,默認約束名為SYS_ Defining約束後列稱為列級約束。
創建表測試(c1號主鍵(c 1));在所有列都定義好之後再定義約束,稱為表級約束(可以定義聯合主鍵)。
cretae表測試(c1號,c2號,主鍵(c1,C2));定義聯合主鍵
創建表子(c1數字主鍵);首先定義父表。
創建子表(c1數字主鍵,c2數字引用父表(c 1));然後定義子表引用父表並定義外鍵。
創建子表(c1數字主鍵,c2數字引用父表(c1)刪除級聯);級聯刪除是級聯刪除。
創建子表(c1數字主鍵,c2數字引用父表(c1)刪除集合null);On delete set null在刪除後將外鍵留空。
創建子表(c1數字主鍵,c2數字,外鍵(c2)引用父表(c 1));
第二,制約因素
1,非空約束(非空)
這是壹個列級約束。
建表時,在數據類型後加not null,即插入時不允許插入空值。
示例:創建表student (id號主鍵,name varchar2 (32) not null,address varchar 2(32));
2.唯壹唯壹約束
忽略空值的唯壹約束要求插入記錄中的值為1。
示例:創建表student(id號,name varchar2 (32),address varchar2 (32),主鍵(id),unique(address));
如果創建英國,系統會自動創建唯壹的索引。
3、pk、英國
Oralce支持級聯刪除,不支持級聯更新。
4.檢查約束
檢查約束。您可以根據指定的條件檢查記錄的插入。check中不能使用尾列、函數等字段。
例:創建表sal (a1數,check(a 1 > 1000));