Oracle開發(fā)實用教程課件_第1頁
Oracle開發(fā)實用教程課件_第2頁
Oracle開發(fā)實用教程課件_第3頁
Oracle開發(fā)實用教程課件_第4頁
Oracle開發(fā)實用教程課件_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第3章SQL語言與查詢學(xué)習(xí)要點基本查詢多表聯(lián)接子查詢集合運算聚合函數(shù)第3章SQL語言與查詢學(xué)習(xí)要點

本章主要內(nèi)容SQL語言概述SQL語言的功能種類數(shù)據(jù)類型、運算符與表達式基本查詢多表聯(lián)接子查詢集合運算聚合函數(shù) 本章主要內(nèi)容3.1SQL語言概述SQL(StructuredQueryLanguage)是一種結(jié)構(gòu)化查詢語言,簡稱為SQL。它是1972年在SQUARE(SpecifyingQueriesAsRelationalExpression)語言的基礎(chǔ)上由Boyce和Chamberlin提出的一個標準的、通用的結(jié)構(gòu)化查詢語言,后來將SEQUEL改為SQL。1989年,美國ANSI采納了ANSIX3.134—1989報告中定義的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的SQL標準語言,稱為ANSISQL89。該標準被國際標準化組織(ISO)和美國聯(lián)邦政府組織所采納。

3.1SQL語言概述3.2SQL語言的功能種類SQL語言按照功能可以分為四大類:(1)數(shù)據(jù)查詢語言,主要用于查詢數(shù)據(jù),以SELECT語句為主要關(guān)鍵詞。(2)數(shù)據(jù)定義語言DDL,用于定義SQL模式、基本表、視圖和索引。(3)數(shù)據(jù)操縱語言DML,主要用于完成數(shù)據(jù)修改操作。(4)數(shù)據(jù)控制語言DCL,用于控制對數(shù)據(jù)庫的訪問,服務(wù)器的關(guān)閉、啟動等

3.2SQL語言的功能種類SQL語言按照功能可以3.3數(shù)據(jù)類型、運算符與表達式3.3.1簡單數(shù)據(jù)類型常用的簡單數(shù)據(jù)類型分為9個:Number(p,s)、smallint、integer、float、double、char(n)、varchar(n)、date、time,下面一一進行介紹。(1)Number(p,s)。p是數(shù)字的整個位數(shù),s是小數(shù)點后的位數(shù)。如:number(8,4)是一個8位數(shù)字,其中小數(shù)點后有4位。如果沒有特別指定,例如:number,則系統(tǒng)會設(shè)為p=5;s=0。(2)smallint。表示16位的整數(shù)。(3)integer。表示32位的整數(shù)。(4)float。表示32位的實數(shù)。(5)double。表示64位的實數(shù)。(6)char(n)。表示固定長度為n的字符串,n不能超過254。(7)varchar(n)。表示可變長度的字符串且其最大長度為n,n不能超過4000。(8)date。表示日期,包含年份、月份。(9)time。表示時間,包含小時、分鐘、秒。3.3數(shù)據(jù)類型、運算符與表達式3.3.2運算符SQL的運算符分為如下幾種:(1)算術(shù)運算符。加(+),減(-),乘(*),除(/)。(2)比較運算符。(3)邏輯運算符(4)范圍運算符(5)列表運算符。3.3.2運算符3.3.3表達式SQL語言的表達式分為三類:①算術(shù)表達式;②關(guān)系表達式;③邏輯表達式。(1)算術(shù)表達式。用算術(shù)運算符連接的表達式稱為算術(shù)表達式。如:sal+2000。(2)關(guān)系表達式。用比較運算符連接的表達式稱為關(guān)系表達式。如:sal>2000。(3)邏輯表達式。用邏輯運算符連接的表達式稱為邏輯表達式。如:name='HERY'ANDSAL=2000。3.3.3表達式3.4基本查詢SELECT語句的功能是從指定的數(shù)據(jù)庫的表中提取數(shù)據(jù)。其語法格式為:SELECT[ALL|DISTINCT]{字段名列表}FROM表名[WHERE{條件表達式}][GROUPBY{group_by_list}][ORDERBY{order_by_list}[ASC/DESC]];說明:這條語句分為三大部分:(1)SELECT:SELECT子句用于指定檢索數(shù)據(jù)庫中的哪些列。(2)FROM:FROM子句用于指定從哪一個表或視圖中檢索數(shù)據(jù)。(3)WHERE:WHERE字句用于在查詢過程中的限制條件。關(guān)于DISTINCT子句、GROUPBY子句、ORDERBY子句的使用在本節(jié)后面介紹。3.4基本查詢3.4.1簡單查詢簡單查詢格式如下:SELECT{字段名列表}FROM表名;3.4.1簡單查詢【例】假設(shè)關(guān)于一個企業(yè)信息的數(shù)據(jù)庫中有三個表:職工表EMP、部門表DEPT、崗位(或工種)表JOBLEVEL。其中:表EMP有如下字段:【例】假設(shè)關(guān)于一個企業(yè)信息的數(shù)據(jù)庫中有三個表:序號字段名稱字段類型字段說明1name字符型職工姓名2sex字符型性別3birth日期型出生日期4phone字符型員工個人聯(lián)系方式5deptname字符型所在部門6salary實型數(shù)據(jù)工資7job字符型崗位(或工種)8title字符型職務(wù)(無職務(wù),可以為空)序號字段名稱字段類型字段說明1name字符型職工姓名2sex這個表主要描述企業(yè)的職工信息,數(shù)據(jù)如下

namesexbirthdeptnametitlephonesalaryjob歐陽軍女1986-09-01辦公室867988212500文員底雪洋男1998-10-09軟件開發(fā)部867988233800軟件開發(fā)李一嵐女1984-10-01軟件開發(fā)部139123454500軟件開發(fā)白海燕女1978-02-09市場部867988251700產(chǎn)品銷售劉紫羽女1989-01-09辦公室主任867988213000文員劉徐貝爾女1989-01-09軟件開發(fā)部經(jīng)理867988234500軟件開發(fā)周楚遠男1989-01-09市場部經(jīng)理867988252000產(chǎn)品銷售這個表主要描述企業(yè)的職工信息,數(shù)據(jù)如下namesexbir表DEPT有如下字段

序號字段名稱字段類型字段說明1deptname字符型部門名2manager字符型部門經(jīng)理姓名3addr字符型部門地址4phone字符型電話號碼表DEPT有如下字段序號字段名稱字段類型字段說明1dept表JOBLEVEL有如下字段:序號字段名稱字段類型字段說明1job字符型崗位名字2level1數(shù)字型工資等級13level2數(shù)字型工資等級24level3數(shù)字型工資等級3表JOBLEVEL有如下字段:序號字段名稱字段類型字段說明13.4.2帶條件的簡單查詢SELECT{字段名列表}FROM表名WHERE{條件表達式}]這里講的帶條件的簡單查詢指單條件的查詢和組合條件的查詢。下面分別介紹。1.單條件的查詢【例】查詢企業(yè)中工資超過2100元(包括2100元)的所有員工的姓名及其崗位。SQL語句如下:SQL>SELECTname,salary,jobFROMEMPWHEREsalary>=2100;3.4.2帶條件的簡單查詢2.組合條件的查詢組合條件指WHERE子句中的條件由多個條件組成,這些組合主要是由邏輯運算符(AND、OR、NOT)組成。看下面的例子?!纠空页銎髽I(yè)員工中做軟件開發(fā)工作并且工資在4000元以上的員工姓名和所在部門。SQL語句如下:SQL>SELECTname,deptname,salary,job FROMEMP WHEREjob='軟件開發(fā)'andsalary>4000;2.組合條件的查詢3.4.3單表查詢應(yīng)用1.查詢某些字段不同的記錄在查詢工程中,可能發(fā)現(xiàn)有某些相同的數(shù)據(jù),為了只顯示不同的數(shù)據(jù),可以使用DISTINCT關(guān)鍵字?!纠坎樵兤髽I(yè)中有多少種不同的崗位。SQL語句如下:SQL>SELECTDISTINCTjobFROMEMP;3.4.3單表查詢應(yīng)用2.BETWEEN…AND關(guān)鍵字的使用BETWEEN…AND關(guān)鍵字給出了查詢范圍內(nèi)的字段,而NOTBETWEEN…AND則給出了查詢選擇范圍之外的某些列?!纠空页龉べY在2000元到3500元的所有員工。SQL語句如下:SQL>SELECTname,salaryFROMEMPWHEREsalaryBETWEEN2000AND3500;2.BETWEEN…AND關(guān)鍵字的使用3.模糊查詢前面的查詢都是精確查詢,但是我們平時查詢時經(jīng)常會使用模糊查詢,比如“找姓陳的先生”,“找員工名字中最后一個字是琳的小姐”等,這些只給出某個字段得到部分關(guān)鍵詞而不是字段的整個數(shù)據(jù)時,就可以使用LIKE關(guān)鍵字了。而NOTLIKE的意思正好相反。這里介紹幾個通配符,如表3-3所示。3.模糊查詢序號通配符說明1%代表0到多個字符2_代表單個字符序號通配符說明1%代表0到多個字符2_代表單個字符4.NULL和NOTNULL關(guān)鍵字的使用NULL和NOTNULL主要用于找出下落不明值的記錄。例如,在公司人員招聘過程中,查詢出尚未安排面試的候選人名單?!纠坎樵冝k公室中一般員工的基本信息(不帶職務(wù)的員工)。SQL語句如下:SQL>SELECT* FROMEMP WHEREdeptname="辦公室"ANDtitle=null;4.NULL和NOTNULL關(guān)鍵字的使用NULL和N5.查詢結(jié)果排序ORDERBY子句使得SQL在顯示查詢結(jié)果時將各返回行按順序排列,返回行的排列順序由ORDERBY子句指定的表達式的值A(chǔ)SC或DESC確定。SELECT[ALL|DISTINCT]{字段名列表}FROM表名[WHERE{條件表達式}][GROUPBY{group_by_list}][ORDERBY{order_by_list}[ASC/DESC]];其中:ASC:升序。表示按照遞增順序從低到高對指定的列值排序。DESC:降序。表示按照遞減順序從高到低對指定的列值排序。5.查詢結(jié)果排序ORDERBY子句使得SQL在顯示查詢結(jié)6.字段運算查詢在數(shù)據(jù)庫查詢時,我們希望把表中的數(shù)據(jù)進行基本的算術(shù)運算,然后顯示出來。常見的算術(shù)運算有:+(加)、-(減)、*(乘)、/(除)四種。【例】如果將軟件開發(fā)部的所有員工工資增加1000元,請顯示出此部門的員工姓名和工資。SQL語句如下:SQL>SELECTname,salary+1000 FROMEMP WHEREdeptname='軟件開發(fā)部';6.字段運算查詢在數(shù)據(jù)庫查詢時,我們希望把表中的數(shù)據(jù)進行基本7.rowid和rownumrowid和rownum是很有用的兩個數(shù)據(jù)庫表中隱含的字段。rowid是數(shù)據(jù)庫內(nèi)部的十六進制的數(shù)據(jù)地址,表明信息放在第幾塊第幾行。rownum是行號,并且順序排列,根據(jù)你的select語句的執(zhí)行動態(tài)生成。它表示是表的邏輯上的第幾行【例】區(qū)別rowid和rownum。SQL>SELECTrownum,rowid,enameFROMEMP;執(zhí)行結(jié)果:rownumrowidename-----------------------------------------------------------------1D9B3333C.0003.0002 白海燕2DAAAA66D.0002.0002 周楚遠3BAA33331.0003.0002 底雪洋4D555DFD.0005.0002 歐陽軍5DB133344.0006.0002 劉徐貝爾…………….7.rowid和rownumrowid和rownum是很有用8.別名的使用在前面的查詢中,顯示的結(jié)果都是用字段名來顯示的,這樣不是很直觀,我們可以給顯示的字段名起一個直觀的名字(叫“別名”),以這個別名來顯示。格式是:字段名[as]別名在“字段名”和“別名”之間加空格或者“as”即可,可以將默認的字段名以設(shè)定的名稱顯示?!纠匡@示出軟件開發(fā)部的每個員工工資增加1000元后的信息。SQL>SELECTname員工姓名,salary+1000增加工資

FROMEMP WHEREdeptname='軟件開發(fā)部';8.別名的使用在前面的查詢中,顯示的結(jié)果都是用字段名來顯示的3.4.4多表查詢多表查詢是指查詢結(jié)果要從兩個以上的表中檢索結(jié)果?!纠坎樵儐T工“劉紫羽”所在的部門地址。分析:首先確定要求中的關(guān)鍵字:劉紫羽,部門地址。然后確定查詢的表有哪些?!安块T名稱”在部門表DEPT中,但是“劉紫羽”是員工名稱,“員工名稱”在表EMP中。所以我們確定查詢的表涉及兩個表:EMP和DEPT。SQL語句如下:SQL>SELECTd.addr FROMEMPe,DEPTd WHERE='劉紫羽';3.4.4多表查詢多表查詢是指查詢結(jié)果要從兩個以上的表中3.5子查詢?nèi)绻骋粋€SELECT命令(查詢1)出現(xiàn)在另一個SQL命令(查詢2)的一個子句中,則稱查詢1是查詢2的子查詢,又稱為“嵌套查詢”。在SELECT查詢語句里可以嵌入SELECT查詢語句,稱為嵌套查詢。有些書中將內(nèi)嵌的SELECT語句稱為“子查詢”,子查詢形成的結(jié)果又稱為父查詢的條件。下面是嵌套查詢的格式:SELECT字段列表FROM表名WHERE操作符

(SELECTselect_listFROMtable);3.5子查詢?nèi)绻骋粋€SELECT命令(查詢1)出現(xiàn)在另3.5.1簡單子查詢【例】查詢員工中所有高于員工底雪洋薪水的員工信息。SQL語句如下:SQL>SELECTname,sex,salary FROMEMP WHEREsalary>= (SELECTsalaryFROMEMPWHEREname='底雪洋');3.5.1簡單子查詢【例】查詢員工中所有高于員工底雪洋薪3.5.2單行子查詢單行子查詢的結(jié)果僅返回一行記錄。一般使用比較運算符(<、>、<=、>=、<>)?!纠块喿x下面的SQL語句,并解釋其含義。SQL>SELECTname,sex,salaryFROMEMPWHEREjob= (SELECTjob FROMEMP WHEREname='底雪洋')ANDsalary> (SELECTsalary FROMEMP WHEREname='李一嵐');3.5.2單行子查詢單行子查詢的結(jié)果僅返回一行記錄。一般3.6集合運算3.6.1UNIONUNION是集合的并運算,并運算的結(jié)果是參加運算的集合元素的總和,相當于數(shù)學(xué)的加法。如圖3-1所示。其中集合A和集合B的交叉部分為集合C。3.6集合運算3.6.1UNION集合A集合B集合A集合B3.6.2INTERSECTINTERSECT是集合的交運算。交運算的結(jié)果是參加運算的集合元素的公共元素。假設(shè):集合A={1,2,3},集合B={2,3,5},那么執(zhí)行INTERSECT運算的結(jié)果是{2,3}。數(shù)學(xué)符號記為:A∩B。在SQL語言中它返回查詢結(jié)果中的相同部分?!纠空页鯽ccount、research、sales中都存在的工種。SQL>SELECTjobFROMaccount INTERSECT SELECTjobFROMresearch INTERSECT SELECTjobFROMsales;3.6.2INTERSECTINTERSECT是集合的交3.6.3MINUSMINUS是集合的差運算。差運算的結(jié)果是參加運算的集合元素中從第一個集合中去掉二者相同部分元素后剩余的元素,相當于數(shù)學(xué)的減法。假設(shè):集合A={1,2,3},集合B={2,3,5},那么執(zhí)行MINUS運算的結(jié)果是{1}。數(shù)學(xué)符號記為:A-B。在SQL語言中它返回在第一次查詢結(jié)果中而不在第二次查詢結(jié)果中的記錄?!纠空页鲈赼ccount中存在而在research中不存在的工種。SQL>SELECTjobFROMaccountMINUSSELECTjobFROMresearch;3.6.3MINUSMINUS是集合的差運算。差運算的結(jié)3.7聚合函數(shù)常用的聚合函數(shù)包括如下幾種函數(shù):AVG()、MIN()、MAX()、SUM()、COUNT()。3.7聚合函數(shù)常用的聚合函數(shù)包括如下幾種函數(shù):AVG()1.MAX格式:MAX(x)返回一個字段的所有值中的最大值。如果x是VARCHAR2數(shù)據(jù)類型,返回一個字符串;如果x是一個DATE數(shù)據(jù)類型,返回一個日期;如果x是number數(shù)據(jù)類型,返回一個數(shù)字?!纠坎樵僂MP表中的最高工資。SQL>SELECTmax(salary)AS最高薪水FROMEMP;1.MAX格式:MAX(x)2.MIN格式:MIN(x)返回一個字段的所有值中的最小值。如果字段是空的,函數(shù)MIN()返回空值?!纠坎樵僂MP表中的最低工資。SQL>SELECTMIN(salary)AS最少薪水FROMEMP;【例】查詢公司中工資最高和工資最低的員工。SQL>SELECTename,salFROMEMPHAVINGsal=(SELECTMAX(SAL)FROMEMP)ANDsal=(SELECTMIN(SAL)FROMEMP);2.MIN格式:MIN(x)3.AVG格式:AVG({x}返回指定字段中的平均值。注意,函數(shù)AVG()只能對數(shù)值型字段使用,即x的數(shù)據(jù)類型只能是數(shù)值型,如果空值即AVG(''),忽略不計。缺省設(shè)置為ALL?!纠坎樵冘浖_發(fā)部人員的平均工資。SQL>SELECTavg(salary)AS平均工資FROMEMPWHEREdeptname='軟件開發(fā)部';3.AVG格式:AVG({x}4.COUNT格式:COUNT(*)返回查詢中行的數(shù)目,缺省值是ALL,*表示返回所有的行。用來統(tǒng)計一個表中有多少條記錄,包括有空值的記錄。因此,不需要指定要被計算的特定字段?!纠拷y(tǒng)計EMP表目前有多少條記錄。SQL>SELECTcount(*)AS記錄總數(shù)FROMEMP;4.COUNT格式:COUNT(*)5.SUM格式:SUM(x)返回選擇列表項目x的數(shù)值的總和?!纠壳笏胁块T的工資總和。SQL>SELECTSUM(salary)AS薪水總和FROMEMP;5.SUM格式:SUM(x)3.7.2GROUPBY的應(yīng)用聚合函數(shù)就是操作那些已經(jīng)分好組的數(shù)據(jù),可以用GROUPBY給數(shù)據(jù)分組或者分類?!纠繉τ趩T工表EMP和部門表DEPT,查詢各個部門的職工數(shù)。SQL>SELECTd.deptno,COUNT()FROMEMPe,deptdWHEREe.deptno=d.deptnoGROUPBYd.deptno;3.7.2GROUPBY的應(yīng)用聚合函數(shù)就是操作那些已經(jīng)3.7.3HAVING與WHERE關(guān)鍵詞的使用

在使用聚合函數(shù)時一定要小心,如果在SELECT查詢語句的條件表達式中出現(xiàn)聚合函數(shù)時不要使用WHERE條件句,而要使用HAVING條件句?!纠坎樵兡男┎块T的工資總和超過了10000元。SQL>SELECTdeptno,SUM(salary)FROMEMPGROUPBYdeptnoHAVINGAVG(salary)>10000;3.7.3HAVING與WHERE關(guān)鍵詞的使用

在使3.7.4ORDERBY的應(yīng)用使用ORDERBY子句可以對查詢結(jié)果進行排序,其中包括升序和降序。升序使用ASC關(guān)鍵字(缺省值),降序使用DESC關(guān)鍵字。【例】查詢EMP表中所有男員工的信息,按照工資從大到小進行排序。SQL>SELECT*FROMEMP WHEREsex='男' ORDERBYsalary;3.7.4ORDERBY的應(yīng)用使用ORDERBY子3.8本章小結(jié)本章介紹了SQL語言的功能和種類,數(shù)據(jù)類型、運算符和表達式,還介紹了本章的重點—SQL語言的數(shù)據(jù)查詢語句SELECT、多表查詢和子查詢,最后介紹了集合運算和聚合函數(shù)的應(yīng)用。注意,聚合函數(shù)在SELECT語句中的使用,即WHERE條件句和HAVING條件句的區(qū)別。3.8本章小結(jié)本章介紹了SQL語言的功能和種類,數(shù)據(jù)類型第3章SQL語言與查詢學(xué)習(xí)要點基本查詢多表聯(lián)接子查詢集合運算聚合函數(shù)第3章SQL語言與查詢學(xué)習(xí)要點

本章主要內(nèi)容SQL語言概述SQL語言的功能種類數(shù)據(jù)類型、運算符與表達式基本查詢多表聯(lián)接子查詢集合運算聚合函數(shù) 本章主要內(nèi)容3.1SQL語言概述SQL(StructuredQueryLanguage)是一種結(jié)構(gòu)化查詢語言,簡稱為SQL。它是1972年在SQUARE(SpecifyingQueriesAsRelationalExpression)語言的基礎(chǔ)上由Boyce和Chamberlin提出的一個標準的、通用的結(jié)構(gòu)化查詢語言,后來將SEQUEL改為SQL。1989年,美國ANSI采納了ANSIX3.134—1989報告中定義的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的SQL標準語言,稱為ANSISQL89。該標準被國際標準化組織(ISO)和美國聯(lián)邦政府組織所采納。

3.1SQL語言概述3.2SQL語言的功能種類SQL語言按照功能可以分為四大類:(1)數(shù)據(jù)查詢語言,主要用于查詢數(shù)據(jù),以SELECT語句為主要關(guān)鍵詞。(2)數(shù)據(jù)定義語言DDL,用于定義SQL模式、基本表、視圖和索引。(3)數(shù)據(jù)操縱語言DML,主要用于完成數(shù)據(jù)修改操作。(4)數(shù)據(jù)控制語言DCL,用于控制對數(shù)據(jù)庫的訪問,服務(wù)器的關(guān)閉、啟動等

3.2SQL語言的功能種類SQL語言按照功能可以3.3數(shù)據(jù)類型、運算符與表達式3.3.1簡單數(shù)據(jù)類型常用的簡單數(shù)據(jù)類型分為9個:Number(p,s)、smallint、integer、float、double、char(n)、varchar(n)、date、time,下面一一進行介紹。(1)Number(p,s)。p是數(shù)字的整個位數(shù),s是小數(shù)點后的位數(shù)。如:number(8,4)是一個8位數(shù)字,其中小數(shù)點后有4位。如果沒有特別指定,例如:number,則系統(tǒng)會設(shè)為p=5;s=0。(2)smallint。表示16位的整數(shù)。(3)integer。表示32位的整數(shù)。(4)float。表示32位的實數(shù)。(5)double。表示64位的實數(shù)。(6)char(n)。表示固定長度為n的字符串,n不能超過254。(7)varchar(n)。表示可變長度的字符串且其最大長度為n,n不能超過4000。(8)date。表示日期,包含年份、月份。(9)time。表示時間,包含小時、分鐘、秒。3.3數(shù)據(jù)類型、運算符與表達式3.3.2運算符SQL的運算符分為如下幾種:(1)算術(shù)運算符。加(+),減(-),乘(*),除(/)。(2)比較運算符。(3)邏輯運算符(4)范圍運算符(5)列表運算符。3.3.2運算符3.3.3表達式SQL語言的表達式分為三類:①算術(shù)表達式;②關(guān)系表達式;③邏輯表達式。(1)算術(shù)表達式。用算術(shù)運算符連接的表達式稱為算術(shù)表達式。如:sal+2000。(2)關(guān)系表達式。用比較運算符連接的表達式稱為關(guān)系表達式。如:sal>2000。(3)邏輯表達式。用邏輯運算符連接的表達式稱為邏輯表達式。如:name='HERY'ANDSAL=2000。3.3.3表達式3.4基本查詢SELECT語句的功能是從指定的數(shù)據(jù)庫的表中提取數(shù)據(jù)。其語法格式為:SELECT[ALL|DISTINCT]{字段名列表}FROM表名[WHERE{條件表達式}][GROUPBY{group_by_list}][ORDERBY{order_by_list}[ASC/DESC]];說明:這條語句分為三大部分:(1)SELECT:SELECT子句用于指定檢索數(shù)據(jù)庫中的哪些列。(2)FROM:FROM子句用于指定從哪一個表或視圖中檢索數(shù)據(jù)。(3)WHERE:WHERE字句用于在查詢過程中的限制條件。關(guān)于DISTINCT子句、GROUPBY子句、ORDERBY子句的使用在本節(jié)后面介紹。3.4基本查詢3.4.1簡單查詢簡單查詢格式如下:SELECT{字段名列表}FROM表名;3.4.1簡單查詢【例】假設(shè)關(guān)于一個企業(yè)信息的數(shù)據(jù)庫中有三個表:職工表EMP、部門表DEPT、崗位(或工種)表JOBLEVEL。其中:表EMP有如下字段:【例】假設(shè)關(guān)于一個企業(yè)信息的數(shù)據(jù)庫中有三個表:序號字段名稱字段類型字段說明1name字符型職工姓名2sex字符型性別3birth日期型出生日期4phone字符型員工個人聯(lián)系方式5deptname字符型所在部門6salary實型數(shù)據(jù)工資7job字符型崗位(或工種)8title字符型職務(wù)(無職務(wù),可以為空)序號字段名稱字段類型字段說明1name字符型職工姓名2sex這個表主要描述企業(yè)的職工信息,數(shù)據(jù)如下

namesexbirthdeptnametitlephonesalaryjob歐陽軍女1986-09-01辦公室867988212500文員底雪洋男1998-10-09軟件開發(fā)部867988233800軟件開發(fā)李一嵐女1984-10-01軟件開發(fā)部139123454500軟件開發(fā)白海燕女1978-02-09市場部867988251700產(chǎn)品銷售劉紫羽女1989-01-09辦公室主任867988213000文員劉徐貝爾女1989-01-09軟件開發(fā)部經(jīng)理867988234500軟件開發(fā)周楚遠男1989-01-09市場部經(jīng)理867988252000產(chǎn)品銷售這個表主要描述企業(yè)的職工信息,數(shù)據(jù)如下namesexbir表DEPT有如下字段

序號字段名稱字段類型字段說明1deptname字符型部門名2manager字符型部門經(jīng)理姓名3addr字符型部門地址4phone字符型電話號碼表DEPT有如下字段序號字段名稱字段類型字段說明1dept表JOBLEVEL有如下字段:序號字段名稱字段類型字段說明1job字符型崗位名字2level1數(shù)字型工資等級13level2數(shù)字型工資等級24level3數(shù)字型工資等級3表JOBLEVEL有如下字段:序號字段名稱字段類型字段說明13.4.2帶條件的簡單查詢SELECT{字段名列表}FROM表名WHERE{條件表達式}]這里講的帶條件的簡單查詢指單條件的查詢和組合條件的查詢。下面分別介紹。1.單條件的查詢【例】查詢企業(yè)中工資超過2100元(包括2100元)的所有員工的姓名及其崗位。SQL語句如下:SQL>SELECTname,salary,jobFROMEMPWHEREsalary>=2100;3.4.2帶條件的簡單查詢2.組合條件的查詢組合條件指WHERE子句中的條件由多個條件組成,這些組合主要是由邏輯運算符(AND、OR、NOT)組成??聪旅娴睦印!纠空页銎髽I(yè)員工中做軟件開發(fā)工作并且工資在4000元以上的員工姓名和所在部門。SQL語句如下:SQL>SELECTname,deptname,salary,job FROMEMP WHEREjob='軟件開發(fā)'andsalary>4000;2.組合條件的查詢3.4.3單表查詢應(yīng)用1.查詢某些字段不同的記錄在查詢工程中,可能發(fā)現(xiàn)有某些相同的數(shù)據(jù),為了只顯示不同的數(shù)據(jù),可以使用DISTINCT關(guān)鍵字?!纠坎樵兤髽I(yè)中有多少種不同的崗位。SQL語句如下:SQL>SELECTDISTINCTjobFROMEMP;3.4.3單表查詢應(yīng)用2.BETWEEN…AND關(guān)鍵字的使用BETWEEN…AND關(guān)鍵字給出了查詢范圍內(nèi)的字段,而NOTBETWEEN…AND則給出了查詢選擇范圍之外的某些列。【例】找出工資在2000元到3500元的所有員工。SQL語句如下:SQL>SELECTname,salaryFROMEMPWHEREsalaryBETWEEN2000AND3500;2.BETWEEN…AND關(guān)鍵字的使用3.模糊查詢前面的查詢都是精確查詢,但是我們平時查詢時經(jīng)常會使用模糊查詢,比如“找姓陳的先生”,“找員工名字中最后一個字是琳的小姐”等,這些只給出某個字段得到部分關(guān)鍵詞而不是字段的整個數(shù)據(jù)時,就可以使用LIKE關(guān)鍵字了。而NOTLIKE的意思正好相反。這里介紹幾個通配符,如表3-3所示。3.模糊查詢序號通配符說明1%代表0到多個字符2_代表單個字符序號通配符說明1%代表0到多個字符2_代表單個字符4.NULL和NOTNULL關(guān)鍵字的使用NULL和NOTNULL主要用于找出下落不明值的記錄。例如,在公司人員招聘過程中,查詢出尚未安排面試的候選人名單?!纠坎樵冝k公室中一般員工的基本信息(不帶職務(wù)的員工)。SQL語句如下:SQL>SELECT* FROMEMP WHEREdeptname="辦公室"ANDtitle=null;4.NULL和NOTNULL關(guān)鍵字的使用NULL和N5.查詢結(jié)果排序ORDERBY子句使得SQL在顯示查詢結(jié)果時將各返回行按順序排列,返回行的排列順序由ORDERBY子句指定的表達式的值A(chǔ)SC或DESC確定。SELECT[ALL|DISTINCT]{字段名列表}FROM表名[WHERE{條件表達式}][GROUPBY{group_by_list}][ORDERBY{order_by_list}[ASC/DESC]];其中:ASC:升序。表示按照遞增順序從低到高對指定的列值排序。DESC:降序。表示按照遞減順序從高到低對指定的列值排序。5.查詢結(jié)果排序ORDERBY子句使得SQL在顯示查詢結(jié)6.字段運算查詢在數(shù)據(jù)庫查詢時,我們希望把表中的數(shù)據(jù)進行基本的算術(shù)運算,然后顯示出來。常見的算術(shù)運算有:+(加)、-(減)、*(乘)、/(除)四種。【例】如果將軟件開發(fā)部的所有員工工資增加1000元,請顯示出此部門的員工姓名和工資。SQL語句如下:SQL>SELECTname,salary+1000 FROMEMP WHEREdeptname='軟件開發(fā)部';6.字段運算查詢在數(shù)據(jù)庫查詢時,我們希望把表中的數(shù)據(jù)進行基本7.rowid和rownumrowid和rownum是很有用的兩個數(shù)據(jù)庫表中隱含的字段。rowid是數(shù)據(jù)庫內(nèi)部的十六進制的數(shù)據(jù)地址,表明信息放在第幾塊第幾行。rownum是行號,并且順序排列,根據(jù)你的select語句的執(zhí)行動態(tài)生成。它表示是表的邏輯上的第幾行【例】區(qū)別rowid和rownum。SQL>SELECTrownum,rowid,enameFROMEMP;執(zhí)行結(jié)果:rownumrowidename-----------------------------------------------------------------1D9B3333C.0003.0002 白海燕2DAAAA66D.0002.0002 周楚遠3BAA33331.0003.0002 底雪洋4D555DFD.0005.0002 歐陽軍5DB133344.0006.0002 劉徐貝爾…………….7.rowid和rownumrowid和rownum是很有用8.別名的使用在前面的查詢中,顯示的結(jié)果都是用字段名來顯示的,這樣不是很直觀,我們可以給顯示的字段名起一個直觀的名字(叫“別名”),以這個別名來顯示。格式是:字段名[as]別名在“字段名”和“別名”之間加空格或者“as”即可,可以將默認的字段名以設(shè)定的名稱顯示?!纠匡@示出軟件開發(fā)部的每個員工工資增加1000元后的信息。SQL>SELECTname員工姓名,salary+1000增加工資

FROMEMP WHEREdeptname='軟件開發(fā)部';8.別名的使用在前面的查詢中,顯示的結(jié)果都是用字段名來顯示的3.4.4多表查詢多表查詢是指查詢結(jié)果要從兩個以上的表中檢索結(jié)果?!纠坎樵儐T工“劉紫羽”所在的部門地址。分析:首先確定要求中的關(guān)鍵字:劉紫羽,部門地址。然后確定查詢的表有哪些?!安块T名稱”在部門表DEPT中,但是“劉紫羽”是員工名稱,“員工名稱”在表EMP中。所以我們確定查詢的表涉及兩個表:EMP和DEPT。SQL語句如下:SQL>SELECTd.addr FROMEMPe,DEPTd WHERE='劉紫羽';3.4.4多表查詢多表查詢是指查詢結(jié)果要從兩個以上的表中3.5子查詢?nèi)绻骋粋€SELECT命令(查詢1)出現(xiàn)在另一個SQL命令(查詢2)的一個子句中,則稱查詢1是查詢2的子查詢,又稱為“嵌套查詢”。在SELECT查詢語句里可以嵌入SELECT查詢語句,稱為嵌套查詢。有些書中將內(nèi)嵌的SELECT語句稱為“子查詢”,子查詢形成的結(jié)果又稱為父查詢的條件。下面是嵌套查詢的格式:SELECT字段列表FROM表名WHERE操作符

(SELECTselect_listFROMtable);3.5子查詢?nèi)绻骋粋€SELECT命令(查詢1)出現(xiàn)在另3.5.1簡單子查詢【例】查詢員工中所有高于員工底雪洋薪水的員工信息。SQL語句如下:SQL>SELECTname,sex,salary FROMEMP WHEREsalary>= (SELECTsalaryFROMEMPWHEREname='底雪洋');3.5.1簡單子查詢【例】查詢員工中所有高于員工底雪洋薪3.5.2單行子查詢單行子查詢的結(jié)果僅返回一行記錄。一般使用比較運算符(<、>、<=、>=、<>)。【例】閱讀下面的SQL語句,并解釋其含義。SQL>SELECTname,sex,salaryFROMEMPWHEREjob= (SELECTjob FROMEMP WHEREname='底雪洋')ANDsalary> (SELECTsalary FROMEMP WHEREname='李一嵐');3.5.2單行子查詢單行子查詢的結(jié)果僅返回一行記錄。一般3.6集合運算3.6.1UNIONUNION是集合的并運算,并運算的結(jié)果是參加運算的集合元素的總和,相當于數(shù)學(xué)的加法。如圖3-1所示。其中集合A和集合B的交叉部分為集合C。3.6集合運算3.6.1UNION集合A集合B集合A集合B3.6.2INTERSECTINTERSECT是集合的交運算。交運算的結(jié)果是參加運算的集合元素的公共元素。假設(shè):集合A={1,2,3},集合B={2,3,5},那么執(zhí)行INTERSECT運算的結(jié)果是{2,3}。數(shù)學(xué)符號記為:A∩B。在SQL語言中它返回查詢結(jié)果中的相同部分?!纠空页鯽ccount、research、sales中都存在的工種。SQL>SELECTjobFROMaccount INTERSECT SELECTjobFROMresearch INTERSECT SELECTjobFROMsales;3.6.2INTERSECTINTERSECT是集合的交3.6.3MINUSMINUS是集合的差運算。差運算的結(jié)果是參加運算的集合元素中從第一個集合中去掉二者相同部分元素后剩余的元素,相當于數(shù)學(xué)的減法。假設(shè):集合A={1,2,3},集合B={2,3,5},那么執(zhí)行MINUS運算的結(jié)果是{1}。數(shù)學(xué)符號記為:A-B。在SQL語言中它返回在第一次查詢結(jié)果中而不在第二次查詢結(jié)果中的記錄?!纠空页鲈赼ccount中存在而在research中不存在的工種。SQL>SELECTjobFROMaccountMINUSSELECTjobFROMresearch;3.6.3MINUSMINUS是集合的差運算。差運算的結(jié)3.7聚合函數(shù)常用的聚合函數(shù)包括如下幾種函數(shù):

溫馨提示

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

評論

0/150

提交評論