下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三SQL查第三AnIntroductiontoDatabase本章內AnIntroductiontoDatabase本章要使用SELECT語句檢索數(shù)使用ORDERBY使用GROUPBYAnIntroductiontoDatabase3.1SQL語言概AnIntroductiontoDatabaseSQL語言介SQL(StructuredQueryLanguage)語言是1974年由Boyce和Chamberlin提出的。SAnIntroductiontoDatabaseSQL語言的分數(shù)據(jù)定義語言(DataDefinition用于定義、修改、刪除數(shù)據(jù)庫對象,包括數(shù)據(jù)操縱語言(DataManipulation數(shù)據(jù)查詢語言(DataQuery事務控制(Transaction(SETTRANSACTION)。系統(tǒng)控制(System會話控制(SessionAnIntroductiontoDatabaseSQL語言的分AnIntroductiontoDatabase
SQL語言的特幾乎涵蓋了對數(shù)據(jù)庫的所有操作,語言風格統(tǒng)一用戶只需要說明“做什么”,而不需要說明“怎樣做”。大大輕了用戶的負擔,同時降低了對用戶的技術要求面向集合的極。可以直接以命令方式與數(shù)據(jù)庫進行交互,也可以嵌入到其他的級語言中使用SQL語言命令數(shù)量有限,語法簡單,接近于自然語言(英語)容易學習和掌握AnIntroductiontoDatabase3.4數(shù)據(jù)查詢語AnIntroductiontoDatabase連SQLSELECT語句的功連選表選表投
數(shù)據(jù)查詢基FROMtable1_name[,table2_name,view_name,…][WHEREcondition][GROUPBY[ORDERBYcolumn_name2AnIntroductiontoDatabase基本查AnIntroductiontoDatabase基本語
SELECT語 [DISTINCT]{*,column SELECT標識出所需的數(shù)據(jù)列、函數(shù)、常量和表達式Distinct刪除查詢結果中相同的值星號“*示顯示所有的列COLUMN指定的列名,表中相應列的數(shù)據(jù)顯示在結果集 為列指定一個別名 來自哪個表SELECT語使用以下算術運算符創(chuàng)建一個數(shù)值型或日期型數(shù)據(jù)的表達式操作操作+描加-減*乘/除
優(yōu) 優(yōu)
先順無條件查SQL>SELECT*FROMSQL>SELECTdeptno,dnameFROMSQL>SELECTempno,sal*0.8FROMSQ>SELECTempno,'Nameis:',enameFROMSQL>SELECTempno,LOWER(ename)FROMAnIntroductiontoDatabase(1)無條件查重新命名列標用于計算是很有用處緊跟列名;在列名和別名之間加入可選關鍵字如果別名包含空格或特殊關鍵字符或區(qū)分大小寫則需要使用雙用于連接列與列、列和字符之間的形式上是以兩個豎杠用于創(chuàng)建字符表達式的結果AnIntroductiontoDatabase熟悉AnIntroductiontoDatabase熟悉y熟悉AnIntroductiontoDatabase(1)無條件查SQL>SELECTenameemployeename,salAS思考:如何思考:如何實現(xiàn)如果別名包含空格或號。例如SQL>SELECTFROM
…SQL>SELECT員工號:||empno,員工名:FROMSQL>SELECTALLdeptnoFROMSQL>SELECTDISTINCTdeptnoFROMAnIntroductiontoDatabase如何取消重復行SMITH所在部門,工作,薪水SELECTename"姓名sal*12AS年收入FROMwhere子句AnIntroductiontoDatabase有條件查謂關系運=,>,<,>=,<=,<確定范BETWEENAND,NOTBETWEEN確定集IN,NOT字符匹LIKE,NOT空值判ISNULL,ISNOT邏輯操AnIntroductiontoDatabase有條件查SQL>SELECTempno,ename,salFROMWHEREdeptno!=SQL>SELECTempno,ename,salFROMWHERE確定范使用謂詞BETWEENAND與NOTBETWEENSQL>SQL>SELECT*FROMWHEREdeptnoBETWEEN10ANDSQL>SELECT*FROMWHEREsalNOTBETWEEN1000AND注意:BETWEEN...AND...指定的范圍包括上限值和下限!AnIntroductiontoDatabase
(2)有條件查使用謂詞IN或NOTIN用來查找屬性值屬于/不屬于指定集合的組SQL>SQL>SELECTempno,ename,salFROMWHEREdeptno使用LIKE或NOTLIKE進行模糊查詢。通配符ExceptSQL>SQL>SELECT*FROMempWHEREenameLIKE'%S%';SQL>SELECT*FROMempWHEREenameLIKE'_A%';SQL>select*fromempwhereenamelike'%*_%'escapeAnIntroductiontoDatabase
(2)有條件查SQL>SELECT*FROMempWHEREdeptnoISSQL>SELECT*FROMempWHEREdeptnoISSQL>SELECT*FROMempWHEREcommISNOT用邏輯運算符NOT、AND和OR來聯(lián)結多個查詢條件優(yōu)先級:NOT、AND、OR(用戶可以用括號改變優(yōu)先級)IN謂詞實際上是多個OR運算的縮寫SQL>SELECT*FROMWHEREdeptno=10ANDsalSQL>SELECT*FROM
deptnoIN(10,WHERE(deptno=10ORdeptno=20)ANDAnIntroductiontoDatabase
有條件查使用BETWEEN…AND,NOTBETWEEN…AND,IN,NOTIN算符的查詢條件都可以轉換為NOT,AND,OR的邏輯運算。例如下面兩個語句是等價的SQL>SQL>SELECT*FROMWHEREsal>=1000ANDSQL>SELECT*FROMWHEREsalBETWEEN1000ANDAnIntroductiontoDatabase練如何顯示工資高于3000的員工如何查找1982.1.1后入職的員工如何顯示工資在2000到3000的員如何顯示首字符為S的員工姓名和工資如何顯示第三個字符為大寫O的所有員工的姓名和工資如何顯示empno為78447839,123,456的雇員情況如何顯示沒有上級的雇員的情況查詢工資高于500或者是崗位為MANAGER的雇員,同時還要滿他們的姓名首字母為大寫的找出部門10中既不是經理也不是普通員工,而且工資大于等于的員找出沒有獎金或者獎金低于500的員AnIntroductiontoDatabase查詢排使用ORDERBYASC:(缺省);DESCSQL>SELECTempno,ename,salFROMempORDERBYSQL>SELECTempno,ename,salFROMORDERBYsalSQL>SQL>SELECT*FROMempORDERBYdeptno,salAnIntroductiontoDatabase查詢排可以按特定的表達式進行排序SQL>SQL>SELECTempno,ename,salFROMORDERBY可以使用目標列或表達式的別名進行排序SQL>SQL>SELECTempno,sal*12salaryFROMempORDERBYsalary;如果列名或表達式名稱很長,那么使用位置排序可以縮短排序句的長度SQL>SELECTempno,sal*12SQL>SELECTempno,sal*12salaryFROMempAnIntroductiontoDatabase練AnIntroductiontoDatabase使用統(tǒng)計函AVG([DISTINCT|ALL列名COUNT([DISTINCT|ALL]*COUNT([DISTINCT|ALL]<列名統(tǒng)計一列中非空值的個MAX([DISTINCT|ALL列名MIN([DISTINCT|ALL列名SUM([DISTINCT|ALL列名值列STDDEV(<列名VARIANCE(<列名AnIntroductiontoDatabase(4)使用統(tǒng)計函SQL>SELECTFROMempWHERE
說明:COUNT(expr)返回expr非空行的SELECTFROMWHEREdeptno=
結果例7SQL>SELECTcount(DISTINCTdeptno)FROM 說明:COUNT(DISTINCTexpr)返回對于表達式expr非空并且值不相同的行數(shù)AnIntroductiontoDatabase使用統(tǒng)計函SQL>SQL>SELECTavg(comm),sum(comm)FROMSQL>SELECTvariance(sal),stddev(sal)FROMAnIntroductiontoDatabase
使用統(tǒng)計函分組函數(shù)只能出現(xiàn)在目標列表達式、ORDERBY子句、各個組AnIntroductiontoDatabase練列出員工表中每個部門的員工數(shù),和部門AnIntroductiontoDatabase分組查使用ROLLUP和OracleDB中,分組查詢由GROUPBY子句、分組函數(shù)AnIntroductiontoDatabaseGroupBy子句基本語SELECTcolumn,group_function,…FROMtable[WHERE[GROUPBY[ROOLUP|CUBE|GROUPING[ORDERBYAnIntroductiontoDatabase
分組查SQL>SELECTSQL>SELECTdeptno,count(*),avg(sal)FROMempGROUPBYdeptno;SELECTFROMGROUPBYSQL>SQL>SELECTdeptno,job,count(*),avg(sal)FROMempGROUPBYdeptno,job;AnIntroductiontoDatabase(5)分組查SQL>SQL>SELECTdeptno,count(*),avg(sal)FROMempGROUPBY注意:HAVING子句作用于組,WHERE子句作用于記錄。先根據(jù)WHERE條查詢記錄,最后根據(jù)HAVING條件決定哪些組返例如,統(tǒng)計20號部門中各個工種的員工人數(shù)和平均工資,并返SQL>SELECTFROMempWHEREGROUPBYjobSQL>SELECTFROMempWHEREGROUPBYjobHAVINGAnIntroductiontoDatabase平均工資來代替,別名只能在ORDERBY子句中AnIntroductiontoDatabase(5)分組查使用ROLLUP和SQL>SELECTFROMSQL>SELECTFROMGROUPBYSQL>SELECTdeptno,job,avg(sal)FROMempGROUPSQL>SELECTdeptno,job,avg(sal)FROMempGROUPBYAnIntroductiontoDatabase(5)分組查使用GROUPINGSETSSQL>SQL>SELECTFROMGROUPBYGROUPINGAnIntroductiontoDatabase(5)分組查注意出現(xiàn)在GROUPBY子句中的列或表達式AnIntroductiontoDatabase總分組函數(shù)只能出現(xiàn)在選擇列表、having、orderby(where中如果在selectgroupbyhavingbygroupbyhavingordergroupby子句中,否則就會出SELECTdeptno,AVG(sal),MAX(sal)FROMGROUPbydeptnoHAVINGAVG(sal)<deptnogroupbyAnIntroductiontoDatabase求,(sales部門位置和其員工的姓名),這種情況下需要使用到(deptemp表)10顯示各個員工的姓名,工資及工資的級別AnIntroductiontoDatabase注意事比如FROMdetpd,empeFROM子句WHERE子句中,比如WHERE④如果多個表中有相同列名的列時,在使用這些列時,必須隔開。比如SELECTemp.detpno。AnIntroductiontoDatabase等值連AnIntroductiontoDatabase自連SQLSELECTe.ename雇員,m.ename管理FROMempe,empWHERE4*ANDAnIntroductiontoDatabase不等連SQL>SELECTFROMempe,salgradeWHEREe.salBETWEENs.losalANDANDAnIntroductiontoDatabase使用JOIN連接查內連接(INNER外連接(LEFTLEFTOUTER交叉連接(CROSSJOIN)AnIntroductiontoDatabase等值連selectename,sal,dnamefromempejoindeptdone.deptno=d.deptno;Selectename,sal,dnamefromempe,deptdwheree.deptno=d.deptno;AnIntroductiontoDatabase左外連FROM表1LEFTOUTERJOIN表2ON表1.SQL>SELECTFROMdeptJOINONAnIntroductiontoDatabase右外連FROM表1RIGHTOUTERJOIN表2ON表SQL>SELECTempno,ename,emp.deptno,dept.deptno,locFROMempRIGHTOUTERJOINdeptONWHEREdept.deptno=10ORAnIntroductiontoDatabase全外連FROM表1FULLOUTERJOIN表2ON表1.SQL>INSERTINTO2SQL>SELECTempno,ename,emp.deptno,dept.deptno,locFROMempFULLOUTERJOINdeptONAnIntroductiontoDatabase交叉連Selecte.ename,e.sal,d.dnamefromempecrossjoindeptdwheree.deptno=d.deptno;AnIntroductiontoDatabasesqlselect語句,SMITH同部門的所有員工?SELECT*FROMempWHEREdeptnoselectdeptnofromempWHEREename=AnIntroductiontoDatabase子查多行子查 多行子查詢指返回多行數(shù)據(jù)的子查10的工作相同的雇員的名字、崗allanyAnIntroductiontoDatabase使用使用exists關鍵selecte.ename,e.deptnofromempewhereexists(select*fromdeptwhered.loc='NEWYORK'ANDxsts關鍵字只注重子查詢是否返回行,如果子查詢返回一個或多個行,那么xsts便返回為真,否則返回為假EXISTS的執(zhí)行流select*fromt1whereexists(selectnullfromt2wherey=x可以理解為forxin(select*fromt1if(exists(selectnullfromt2wherey=x.x)OUTPUTTHEendendAnIntroductiontoDatabase使用in和exists的性能區(qū)別該用反之如果外層的主查詢記錄較少,子查詢中的表大,又有索引時使用xsts。其實我們區(qū)分in和exists主要是造成了驅動順序的改變(這是性能變化的關鍵),如果是exists,那么以外層表為驅動表,先被訪問,如果是另外IN是不對U進行處理AnIntroductiontoDatabase子查返回單列多行數(shù)據(jù),都是針對單列而言的,而多列子查詢是指查詢返回多個列數(shù)據(jù)的子查詢語句。請思考如何查詢與SMITH的部門和崗位完全相同的所有雇員from請思考:如何顯示高于自己部門平均工資的員工的信selectrownum,e.*from(select*fromemp)Select*from(select fromemporderbysaldesc)rownum<=AnIntroductionto
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年昌吉職業(yè)技術學院單招綜合素質筆試模擬試題帶答案解析
- 2026年畢節(jié)職業(yè)技術學院單招綜合素質考試參考題庫帶答案解析
- 2026年川北幼兒師范高等??茖W校高職單招職業(yè)適應性考試備考題庫有答案解析
- 2026年安徽電子信息職業(yè)技術學院高職單招職業(yè)適應性考試參考題庫帶答案解析
- 投資協(xié)議(教育行業(yè)2025年)
- 投資合作協(xié)議(股權投資)2025年
- 2026年湖北科技學院繼續(xù)教育學院單招綜合素質考試參考題庫帶答案解析
- 碳交易托管補充合同協(xié)議2025年條款
- 2026年臺州職業(yè)技術學院單招綜合素質筆試備考題庫附答案詳解
- 2026年甘肅有色冶金職業(yè)技術學院單招職業(yè)技能筆試備考題庫帶答案解析
- 2024年廣東省粵科金融集團有限公司招聘筆試參考題庫含答案解析
- 消防設施維保投標方案(技術方案)
- 設備綜合效率OEE統(tǒng)計表(使用)
- WATERS公司的UPLCTQD培訓資料MS7校正課件
- 【超星爾雅學習通】航空與航天網課章節(jié)答案
- 2022年福州大學計算機科學與技術專業(yè)《操作系統(tǒng)》科目期末試卷B(有答案)
- APQP全套資料模板合集
- 學術綜合英語課后題答案羅立勝
- 10kV交聯(lián)聚乙烯電纜熱縮終端頭制作作業(yè)指導書
- GB 15193.19-2015食品安全國家標準致突變物、致畸物和致癌物的處理方法
- 磷石膏抹灰專項施工方案
評論
0/150
提交評論