基本的DML與DDL綜合介紹_第1頁
基本的DML與DDL綜合介紹_第2頁
基本的DML與DDL綜合介紹_第3頁
基本的DML與DDL綜合介紹_第4頁
基本的DML與DDL綜合介紹_第5頁
已閱讀5頁,還剩77頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基本的DML和DDL介紹1.0目標通過這部分課程的學習,您將了解以下內容:Select語句的功能執行基本的Select語句描述DML語句在表中插入數據行在表中修改數據行從表中刪除數據行合并表中的數據行控制事務處理SELECT語句的功能

SelectionProjectionTable1Table2Table1Table1Join基礎SELECT

語句語法SELECT *|{[DISTINCT]column|expression[alias],...}FROM table;

SELECT*FROMdepartments;選擇所有的列

選擇指定的列SELECTdepartment_id,location_idFROMdepartments;如何寫SQL語句SQL語句不區分大小寫關鍵字不能分行隔開條件通常被分行放置縮進被用來提高語句的可讀性算術表達式通過使用算術操作符來表達數值型和日期型數據.Operator+-*/ 描述加Add減Subtract乘Multiply除Divide

使用算術操作符SELECTlast_name,salary,salary+300FROMemployees;…算術操作符優先級乘除的優先級高于加減.相同優先級從左到右依次處理.括號被要求優先執行.*/+_操作優優先級級SELECTlast_name,salary,12*salary+100FROMemployees;…使用圓圓括號號SELECTlast_name,salary,12*(salary+100)FROMemployees;…定義空值值空值是一一種不可可用、不不被指派派、未知知、不確確定的值值空值不同同于零或或一個空空格SELECTlast_name,job_id,salary,commission_pctFROMemployees;……SELECTlast_name,12*salary*commission_pctFROMemployees;在算術操操作中的的空值算術操作作中如有有空值,,運算結結果返回回為空.……使用列的的別名SELECTlast_name"Name",salary*12"AnnualSalary"FROMemployees;SELECTlast_nameASname,commission_pctcommFROMemployees;……使用連接接符SELECTlast_name||job_idAS"Employees"FROMemployees;…使用字符符串SELECTlast_name ||'isa'||job_idAS"EmployeeDetails"FROMemployees;…重復的行行查詢結果果缺省顯顯示所有有的行,,包括重重復的行行.SELECTdepartment_idFROMemployees;…排除重復復的行SELECTDISTINCTdepartment_idFROMemployees;使用SQL語句句限制顯顯示的行行“retrieveallemployees

indepartment90””EMPLOYEES…限制挑選選出來的的行SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable[WHEREcondition(s)];使用WHERE語句限限制返回回的行WHERE語句句應該寫寫在FROM語語句之后后使用WHERE條件SELECTemployee_id,last_name,job_id,department_idFROMemployeesWHEREdepartment_id=90;字符串和和日期值值都使用單單引號字符串值值區分大大小寫,,日期值值需注意意格式SELECTlast_name,job_id,department_idFROMemployeesWHERElast_name='Whalen';比較條件件操作符=>>=<<=<>含義等于大于大于或等等于小于小于或等等于不等于SELECTlast_name,salaryFROMemployeesWHEREsalary<=3000;使用比較較條件其它的比比較條件件操作符BETWEEN

...AND...IN(set)LIKEISNULL含義兩個值之之間匹配值列列表中值值匹配一個個字符樣樣式空值使用BETWEEN條件可以使用用該條件件顯示某某范圍內內的值.SELECTlast_name,salaryFROMemployeesWHEREsalaryBETWEEN2500AND3500;LowerlimitUpperlimitSELECTemployee_id,last_name,salary,manager_idFROMemployeesWHEREmanager_idIN(100,101,201);使用IN條件滿足成員員列表中中的條件件.使用LIKE條件搜索條件件能包括括兩種模模式匹配配類型:%表示許多多字符_表示一個個字符SELECTfirst_nameFROMemployeesWHEREfirst_nameLIKE'S%';可混合兩種模模式匹配類型型使用LIKE條件SELECTlast_nameFROMemployeesWHERElast_nameLIKE'_o%';使用NULL條件測驗空值使用用ISNULL條件.SELECTlast_name,manager_idFROMemployeesWHEREmanager_idISNULL;邏輯條件OperatorANDORNOT含義義兩部部分分條條件件都都返返回回真真值值則則結結果果返返回回真真值值兩部部分分條條件件中中有有任任意意一一部部分分返返回回真真值值則則結結果果返返回回真真值值如果果條條件件返返回回假假則則結結果果返返回回真真值值使用用AND操作作符符要求求條條件件都都為為真真SELECTemployee_id,last_name,job_id,salaryFROMemployeesWHEREsalary>=10000ANDjob_idLIKE'%MAN%';使用OR操作符SELECTemployee_id,last_name,job_id,salaryFROMemployeesWHEREsalary>=10000ORjob_idLIKE'%MAN%';滿足任意一個個條件即可返返回真值SELECTlast_name,job_idFROMemployeesWHEREjob_idNOTIN('IT_PROG','ST_CLERK','SA_REP');使用NOT操作符優先規則使用括號可不不遵照上述優優先規則.優先級別操操作符符1算術操作符2連接操作符3比較操作符4IS[NOT]NULL,LIKE,[NOT]IN5[NOT]BETWEEN6NOT邏輯條件7AND邏輯條件8OR邏輯條件SELECTlast_name,job_id,salaryFROMemployeesWHEREjob_id='SA_REP'ORjob_id='AD_PRES'ANDsalary>15000;優先規則SELECTlast_name,job_id,salaryFROMemployeesWHERE(job_id='SA_REP'ORjob_id='AD_PRES')ANDsalary>15000;優先規則使用括號SELECTlast_name,job_id,department_id,hire_dateFROMemployeesORDERBYhire_date;ORDERBY條件帶ORDERBY條件的排序ASC:升序,缺省DESC:降序ORDERBY條件在Select語句最后…降序排列SELECTlast_name,job_id,department_id,hire_dateFROMemployeesORDERBYhire_dateDESC;…使用列別名排排序SELECTemployee_id,last_name,salary*12annsalFROMemployeesORDERBYannsal;…按ORDERBY列表中的列名名順序依次排排序.SELECTlast_name,department_id,salaryFROMemployeesORDERBYdepartment_id,salaryDESC;多列排排序…數據操作語語句一條DML語句在下列列情況下被被執行:向表中增加加新的數據據行修改表中存存在的數據據從表中刪除除數據一個事務由由DML語句集合形形成的邏輯輯工作單元元構成.向表中增加加新的數據據行DEPARTMENTSNewrow…insertanewrowintotheDEPARMENTStable…INSERT語句語法.INSERTINTOtable[(column[,column...])]VALUES(value[,value...]);向表中插入入新的數據據行插入的新行行應包括所所有的列值值.插入的值應應按照表中中列缺省的的順序排列列.如插入所有有的列,INSERT條件中可隨隨意選擇是是否列出所所有列.INSERTINTOdepartments(department_id,department_name,manager_id,location_id)VALUES(70,'PublicRelations',100,1700);1rowcreated.INSERTINTOdepartmentsVALUES(100,'Finance',NULL,NULL);1rowcreated.INSERTINTOdepartments(department_id,department_name)VALUES(30,'Purchasing');1rowcreated.插入帶空值值的數據行行隱性的方法法:省略略為空的列列名.顯性的方法法:使用用關鍵字NULL來指定為空空的列.INSERTINTOemployees(employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,commission_pct,manager_id,department_id)VALUES(113,'Louis','Popp','LPOPP','515.124.4567',SYSDATE,'AC_ACCOUNT',6900,NULL,205,100);1rowcreated.插入特殊的的值SYSDATE函數記錄當當前的日期期和時間.INSERTINTOemployeesVALUES(114,'Den','Raphealy','DRAPHEAL','515.127.4561',TO_DATE('FEB3,1999','MONDD,YYYY'),'AC_ACCOUNT',11000,NULL,100,30);1rowcreated.插入特殊的的日期型值值增加一行數數據:驗證:帶子查詢的的INSERT語句字段的數據據類型必須須匹配INSERTINTOsales_reps(id,name,salary,commission_pct)SELECTemployee_id,last_name,salary,commission_pctFROMemployeesWHEREjob_idLIKE'%REP%';4rowscreated.從另外一個個表中復制制行修改表中數數據EMPLOYEES修改EMPLOYEES表中的某些些行.UPDATE語句語法可一次性修修改多行UPDATEtableSETcolumn=value[,column=value,...][WHEREcondition];UPDATEemployeesSETdepartment_id=70WHEREemployee_id=113;1rowupdated.在WHERE條件中指定需需要修改的行行.修改表中所有有的行.修改表中數據據UPDATE copy_empSETdepartment_id=110;22rowsupdated.UPDATEemployeesSETjob_id=(SELECTjob_idFROMemployeesWHEREemployee_id=205),salary=(SELECTsalaryFROMemployeesWHEREemployee_id=205)WHEREemployee_id=114;1rowupdated.使用子查詢修修改兩列的值值UPDATEcopy_empSETdepartment_id=(SELECTdepartment_idFROMemployeesWHEREemployee_id=100)WHEREjob_id=(SELECTjob_idFROMemployeesWHEREemployee_id=200);1rowupdated.基于另外表SELECT得到的值修修改數據使用子查詢實實現:UPDATEemployees*ERRORatline1:ORA-02291:integrityconstraint(HR.EMP_DEPT_FK)violated-parentkeynotfoundUPDATEemployeesSETdepartment_id=55WHEREdepartment_id=110;修改行時:完完整性約束束錯誤Departmentnumber55doesnotexist從DEPARTMENTS表中刪除一行行.從表中刪除一一行DEPARTMENTSDELETE語句語法法DELETE[FROM]table[WHEREcondition];通過WHERE條件指定刪除除的行.省略WHERE條件,所有的的行都將被刪刪除.從表中刪除多多行DELETEFROMdepartmentsWHEREdepartment_name='Finance';1rowdeleted.DELETEFROMcopy_emp;22rowsdeleted.DELETEFROMemployeesWHEREdepartment_id=(SELECTdepartment_idFROMdepartmentsWHEREdepartment_nameLIKE'%Public%');1rowdeleted.基于另外表SELECT得到的值刪刪除數據通過子查詢語語句從另外表表中得到值作作為刪除條件件.刪除行時:完完整性約束束錯誤DELETEFROMdepartmentsWHEREdepartment_id=60;DELETEFROMdepartments*ERRORatline1:ORA-02292:integrityconstraint(HR.EMP_DEPT_FK)violated-childrecordfound不能刪除被另另外一個表作作為外鍵的主主鍵對應的行行.在INSERT語句中中使用用子查查詢INSERTINTO(SELECTemployee_id,last_name,email,hire_date,job_id,salary,department_idFROMemployeesWHEREdepartment_id=50)VALUES(99999,'Taylor','DTAYLOR',TO_DATE('07-JUN-99','DD-MON-RR'),'ST_CLERK',5000,50);1rowcreated.在INSERT語句中中使用用的子子查詢詢驗證結結果SELECTemployee_id,last_name,email,hire_date,job_id,salary,department_idFROMemployeesWHEREdepartment_id=50;在DML語句中中使用用WITHCHECKOPTION關鍵字字WITHCHECKOPTION關鍵字字禁止止改變變不在在子查查詢結結果中中的值值.INSERTINTO(SELECTemployee_id,last_name,email,hire_date,job_id,salaryFROMemployeesWHEREdepartment_id=50WITHCHECKOPTION)VALUES(99998,'Smith','JSMITH',TO_DATE('07-JUN-99','DD-MON-RR'),'ST_CLERK',5000);INSERTINTO*ERRORatline1:ORA-01402:viewWITHCHECKOPTIONwhere-clauseviolation使用顯性的缺缺省值INSERTINTOdepartments(department_id,department_name,manager_id)VALUES(300,'Engineering',DEFAULT);UPDATEdepartmentsSETmanager_id=DEFAULTWHEREdepartment_id=10;INSERT中使用缺省值值:UPDATE中使用缺省值值:數據庫事務一個數據庫完完整事務包含含以下情況:構成對數據的的一次一致性性改變的DML語句(一條或或多條)一條DDL語句數據庫事務當第一條DMLSQL語句執行時開開始當下列任意事事件發生時結結束:提交或回滾語語句執行一條DDL執行(自動提提交)系統崩潰COMMIT和ROLLBACK語句的優勢保證數據一致致性在改變永久生生效之前預覽覽改變可以將一些操操作按邏輯相相關性分組控制事務SAVEPOINTBSAVEPOINTADELETEINSERTUPDATEINSERTCOMMITTimeTransactionROLLBACKtoSAVEPOINTBROLLBACKtoSAVEPOINTAROLLBACKUPDATE...SAVEPOINTupdate_done;Savepointcreated.INSERT...ROLLBACKTOupdate_done;Rollbackcomplete.回滾改變到一一個標記在當前的事務務中可通過SAVEPOINT語句創建標記記.ROLLBACKTOSAVEPOINT語句可回滾到到標記.自動的commit發生在:DDL語句執行隱性的事務處處理COMMIT或ROLLBACK前數據狀態數據可恢復到到原先狀態..當前用戶通過過SELECT看到DML操作后后數據的結果果其它它用用戶戶不不能能SELECT看看到到當當前前用用戶戶DML操操作作后后數數據據的的結結果果.受影影響響的的行行可可能能被被鎖鎖,,其其它它用用戶戶不不能能改改變變受受影影響響的的行行.COMMIT后數數據據狀狀態態被改改變變的的數數據據在在數數據據庫庫中中永永久久改改變變.前面面的的數數據據狀狀態態信信息息被被永永久久丟丟失失.所有有用用戶戶將將看看到到同同樣樣的的數數據據結結果果.受影響的行行鎖被釋放放;這些些行能被其其它用戶使使用.COMMIT;Commitcomplete.改變數據.Commit改變.DELETEFROMemployeesWHEREemployee_id=99999;1rowdeleted.INSERTINTOdepartmentsVALUES(290,'CorporateTax',NULL,1700);1rowinserted.提交數據回滾后數據據狀態將丟棄所有有未COMMIT的改變:DELETEFROMcopy_emp;22rowsdeleted.ROLLBACK;Rollbackcomplete.讀一致性讀一致性保保證數據視視圖一直保保持一致一個用戶所所作的改變變不會與另另外用戶的的改變相沖沖突.讀一致性保保證對同一一數據:讀操作不等等待寫操作作寫操作不等等待讀操作作SELECT*

FROMuserA.employees;執行讀一致致性UPDATEemployeesSETsalary=7000WHERElast_name='Goyal';DatablocksRollbacksegmentschangedandunchangeddatabeforechange

“old”dataUserAUserBReadconsistentimage鎖Oracle數據庫中的鎖鎖:阻止并發事務務中破壞性的的交互操作要求不需要用用戶參與自動使用低級級別受限制的的鎖在事務執行期期間保留顯性和隱性兩兩種類型隱性的鎖兩種鎖的模式式:獨占型:排排除其它用戶戶共享型:允允許其它用戶戶介入高級別的并發發數據處理:DML:表共享,行行獨占Queries:沒有鎖要求DDL:保護對象定義義鎖保留到commit或rollback總結通過這部分課課程的學習,您將了解以以下內容:寫一個SELECT語句:從一個表中返返回所有的行行和列從一個表中返返回指定的列列使用列別名描描述列頭描述DML語句在表中中插入入數據據行在表中中修改改數據據行從表中中刪除除數據據行合并表表中的的數據據行控制事事務處處理練習這部分分練習習包括括以下下主題題:從不同同的表表中選選出所所有數數據執行算算術運運算并并指定定相應應的列列9、靜夜四無鄰鄰,荒居舊業業貧。。12月-2212月-22Friday,December23,202210、雨中黃葉樹樹,燈下白頭頭人。。06:46:4406:46:4406:4612/23/20226:46:44AM11、以我獨沈久久,愧君相見見頻。。12月-2206:46:4406:46Dec-2223-Dec-2212、故人江海海別,幾度度隔山川。。。06:46:4406:46:4406:46Friday,December23,202213、乍見見翻疑疑夢,,相悲悲各問問年。。。12月月-2212月月-2206:46:4506:46:45December23,202214、他鄉生生白發,,舊國見見青山。。。23十十二月20226:46:45上午午06:46:4512月-2215、比不了了得就不不比,得得不到的的就不要要。。。十二月226:46上午午12月-2206:46December23,202216、行動出出成果,,工作出出財富。。。2022/12/236:46:4506:46:4523December202217、做前,能能夠環視四四周;做時時,你只能能或者最好好沿著以腳腳為起點的的射線向前前。。6:46:45上上午6:46上上午06:46:4512月-229、沒有失敗敗,只有暫暫時停止成成功!。12月-2212月-22Friday,December23,202210、很多事情情努力了未未必有結果果,但是不不努力卻什什么改變也也沒有。。。06:46:4506:46:4506:4612/23/20226:46:45AM11、成功功就是是日復復一日日那一一點點點小小小努力力的積積累。。。12月月-2206:46:4506:46Dec-2223-Dec-2212、世間間成事事,不不求其其絕對對圓滿滿,留留一份份不足足,可可得無無限完完美。。。06:46:4506:46:4506:46Friday,December23,202213、不知知香積積寺,,數里里入云云峰。。。12月月-2212月月-2206:46:4506:46:45December23,202214、意志堅強強的人能把把世界放在在手中像泥泥塊一樣任任意揉捏。。23十二

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論