第05章-SQL語(yǔ)言基礎(chǔ)_第1頁(yè)
第05章-SQL語(yǔ)言基礎(chǔ)_第2頁(yè)
第05章-SQL語(yǔ)言基礎(chǔ)_第3頁(yè)
第05章-SQL語(yǔ)言基礎(chǔ)_第4頁(yè)
第05章-SQL語(yǔ)言基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩96頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Oracle應(yīng)用開發(fā)第05章SQL語(yǔ)言基礎(chǔ)本章內(nèi)容ODP-C05-01關(guān)系型數(shù)據(jù)庫(kù)概述

ODP-C05-02SQL語(yǔ)言概述

ODP-C05-03檢索數(shù)據(jù)

ODP-C05-04多表關(guān)聯(lián)查詢

ODP-C05-05Oracle常用系統(tǒng)函數(shù)

ODP-C05-06子查詢

ODP-C05-07操作數(shù)據(jù)庫(kù)

ODP-C05-08事務(wù)處理

本章目標(biāo)1、掌握數(shù)據(jù)庫(kù)操作的基本語(yǔ)法。2、掌握數(shù)據(jù)庫(kù)的多種查詢方法。3、掌握數(shù)據(jù)庫(kù)的關(guān)聯(lián)查詢方法。4、掌握數(shù)據(jù)庫(kù)的條件查詢方法。5、掌握數(shù)據(jù)庫(kù)查詢過(guò)程中可使用的函數(shù)6、掌握數(shù)據(jù)庫(kù)的子查詢方法。7、掌握數(shù)據(jù)庫(kù)的插入、更新和刪除方法。8、掌握數(shù)據(jù)庫(kù)的事務(wù)概念。9、掌握數(shù)據(jù)庫(kù)的事務(wù)操作方法。第01節(jié)

關(guān)系型數(shù)據(jù)庫(kù)概述知識(shí)點(diǎn)預(yù)覽#節(jié)知識(shí)點(diǎn)難點(diǎn)重點(diǎn)應(yīng)用1ODP-C05-01關(guān)系型數(shù)據(jù)庫(kù)概述1、XML與數(shù)據(jù)庫(kù)比較

2、關(guān)系型數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)管理系統(tǒng)

3、關(guān)系型數(shù)據(jù)庫(kù)的E-R模型√√4、1-1關(guān)聯(lián)關(guān)系√√5、1-N關(guān)聯(lián)關(guān)系√√6、N-N關(guān)聯(lián)關(guān)系√√7、關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)范式√1、XML與數(shù)據(jù)庫(kù)比較XML語(yǔ)言優(yōu)勢(shì):是自描述性的(所用的標(biāo)記描述了數(shù)據(jù)的結(jié)構(gòu)和類型,盡管缺乏語(yǔ)義)可交換的,能夠以樹型或圖形結(jié)構(gòu)描述的數(shù)據(jù)XML語(yǔ)言缺陷:較繁瑣,要對(duì)它進(jìn)行解析和文本轉(zhuǎn)換,所以數(shù)據(jù)訪問(wèn)速度較慢XML語(yǔ)言的數(shù)據(jù)庫(kù)特性:XML文件是以文檔為中心的數(shù)據(jù)的集合存儲(chǔ)特性——XML文檔模式——DTD,XMLschema等查詢語(yǔ)言特性——XQuery,XPath,XQL等編程接口特性——SAX,DOM,JDOM等XML缺乏的數(shù)據(jù)庫(kù)特性:高效的存儲(chǔ)、索引、安全機(jī)制、事務(wù)和數(shù)據(jù)一致性、多用戶訪問(wèn)、觸發(fā)器等結(jié)論:在數(shù)據(jù)量小、用戶少和性能要求不太高的環(huán)境下,可以將XML文檔用作數(shù)據(jù)庫(kù),但是卻不適用于用戶量大、數(shù)據(jù)集成度高以及性能要求高的作業(yè)環(huán)境。2、關(guān)系型數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)-1數(shù)據(jù)(Data):描述事物的符號(hào)記錄稱為數(shù)據(jù)數(shù)據(jù)的種類有數(shù)字、文字、圖形、圖像、聲音、文本等數(shù)據(jù)庫(kù)(DataBase,簡(jiǎn)稱DB):存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù)數(shù)據(jù)之間存在一定的關(guān)聯(lián)關(guān)系,并非完全獨(dú)立,數(shù)據(jù)庫(kù)是儲(chǔ)存在計(jì)算機(jī)內(nèi)的、有組織的、可共享的數(shù)據(jù)集合數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定的數(shù)據(jù)模型儲(chǔ)存和管理,具有較小的冗余度、較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,并可為各種用戶共享數(shù)據(jù)庫(kù)使得我們對(duì)數(shù)據(jù)的操作更加高效數(shù)據(jù)庫(kù)模型層次結(jié)構(gòu)模型:該模型的實(shí)質(zhì)是將數(shù)據(jù)以一棵定向有序樹的結(jié)構(gòu)存儲(chǔ)網(wǎng)狀結(jié)構(gòu)模型:是對(duì)層次結(jié)構(gòu)模型的提升,能更靈活地描述關(guān)系關(guān)系結(jié)構(gòu)模型:該模型把一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)歸結(jié)為簡(jiǎn)單的二元關(guān)系(即二維表格形式);由關(guān)系結(jié)構(gòu)模型組成的數(shù)據(jù)庫(kù)系統(tǒng)被稱為關(guān)系型數(shù)據(jù)庫(kù)2、關(guān)系型數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)-2關(guān)系模型E.F.Codd博士在1970年提出了數(shù)據(jù)庫(kù)系統(tǒng)的關(guān)系模型關(guān)系模型是將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)歸結(jié)為簡(jiǎn)單的二元關(guān)系,用二維表格的形式表示實(shí)體和實(shí)體間聯(lián)系的數(shù)據(jù)模型關(guān)系模型的組成由大量對(duì)象或關(guān)系組成的集合對(duì)關(guān)系可進(jìn)行一系列操作的運(yùn)算符可保證數(shù)據(jù)的完整性和一致性要求關(guān)系型數(shù)據(jù)庫(kù)使用關(guān)系模型建立的數(shù)據(jù)庫(kù)包含一組被組織為表結(jié)構(gòu)(table)的相關(guān)信息的集合,表結(jié)構(gòu)包括:列(Column):又稱為字段,包含類型和約束信息行(row):又稱為記錄,每條記錄描述一個(gè)實(shí)例表在數(shù)據(jù)庫(kù)中被存儲(chǔ)在稱為模式(schema)的結(jié)構(gòu)中2、關(guān)系型數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)-3OracleServer

ID LAST_NAME FIRST_NAME 10 Havel Marta 11 Magee Colin 12 Giljum Henry 14 Nguyen Mai

SALES_ ID NAME PHONE REP_ID 201 Unisports 55-2066101 12 202 SimmsAtheletics 81-20101 14 203 DelhiSports 91-10351 14 204 Womansport 1-206-104-0103 11TableName:S_CUSTOMERTableName:S_EMPRow(行)Column(列)2、關(guān)系型數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)-4數(shù)據(jù)庫(kù)系統(tǒng)(DataBase

Sytem,簡(jiǎn)稱DBS):數(shù)據(jù)庫(kù)系統(tǒng)是指在計(jì)算機(jī)系統(tǒng)中引入數(shù)據(jù)庫(kù)后的系統(tǒng)構(gòu)成通常數(shù)據(jù)庫(kù)系統(tǒng)由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)(及其開發(fā)工具)、應(yīng)用系統(tǒng)、數(shù)據(jù)庫(kù)管理員等構(gòu)成數(shù)據(jù)庫(kù)管理系統(tǒng)(DataBase

Management

Sytem,簡(jiǎn)稱DBMS)數(shù)據(jù)庫(kù)管理系統(tǒng)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,用于科學(xué)地組織和存儲(chǔ)數(shù)據(jù)、高效地獲取和維護(hù)數(shù)據(jù)DBMS的主要功能包括數(shù)據(jù)定義功能、數(shù)據(jù)操縱功能、數(shù)據(jù)庫(kù)的運(yùn)行管理功能、數(shù)據(jù)庫(kù)的建立和維護(hù)功能常見(jiàn)的DBMS工具Oracle

DB2SQLServerMySQLDBMS主要功能數(shù)據(jù)庫(kù)定義功能數(shù)據(jù)庫(kù)操縱功能數(shù)據(jù)庫(kù)運(yùn)行管理數(shù)據(jù)庫(kù)的建立和維護(hù)功能2、關(guān)系型數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)-5核心OS操作系統(tǒng)3、關(guān)系型數(shù)據(jù)庫(kù)的ER模型-1關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)的三個(gè)階段

概要設(shè)計(jì)將用戶需求轉(zhuǎn)換為概念模式設(shè)計(jì)數(shù)據(jù)庫(kù)E-R模型圖

邏輯設(shè)計(jì)將概念模型轉(zhuǎn)換為關(guān)系型數(shù)據(jù)模型E-R模型轉(zhuǎn)換為數(shù)據(jù)庫(kù)表運(yùn)用數(shù)據(jù)庫(kù)設(shè)計(jì)三大范式進(jìn)行審核

物理設(shè)計(jì)選擇具體數(shù)據(jù)庫(kù)進(jìn)行物理實(shí)現(xiàn)建立表結(jié)構(gòu),并編寫代碼實(shí)現(xiàn)前端應(yīng)用用戶需求概念模式(E-R模型)數(shù)據(jù)模式(關(guān)系模型)DB數(shù)據(jù)庫(kù)概要設(shè)計(jì)邏輯設(shè)計(jì)物理設(shè)計(jì)3、關(guān)系型數(shù)據(jù)庫(kù)的ER模型-2E-R模型(E-R圖)使用E-R圖描述概念模型,反映實(shí)體集和實(shí)體集間的關(guān)系E-R模型基本組成實(shí)體(Entity):表示客觀存在且相互區(qū)別的事物,使用矩形框表示屬性(Attribute):表示實(shí)體所具有的特性,使用橢圓形表示聯(lián)系(Relationship):表示事物(實(shí)體)間的聯(lián)系,使用菱形框表示一對(duì)一聯(lián)系:反映在E-R圖中為1:1一對(duì)多聯(lián)系:反映在E-R圖中為1:n多對(duì)多聯(lián)系:反映在E-R圖中為m:n學(xué)生隸屬學(xué)號(hào)年齡名稱年級(jí)班級(jí)n1姓名4、1-1關(guān)聯(lián)關(guān)系1-1關(guān)聯(lián)關(guān)系(1:1)如果實(shí)體集E1中的每個(gè)實(shí)體只能和實(shí)體集E2中的一個(gè)實(shí)體有聯(lián)系,反之亦然,則稱實(shí)體集E1和E2是一對(duì)一的聯(lián)系,表示為1:1

關(guān)系模型設(shè)計(jì)一對(duì)一的關(guān)系模型,設(shè)計(jì)時(shí)可分為兩張表或合并為一張表需要設(shè)計(jì)兩張表時(shí),可在其中一張表中建立新的字段,使其關(guān)聯(lián)另一張表的主鍵字段首都隸屬名稱人口名稱位置國(guó)家11IDCOUNTRYLOCATION1中國(guó)亞洲2美國(guó)北美洲IDNAMEPEOPLESCOUNTRYID1北京1000萬(wàn)12紐約1500萬(wàn)25、1-N關(guān)聯(lián)關(guān)系1-N關(guān)聯(lián)關(guān)系(1:n)如果實(shí)體集E1中的每個(gè)實(shí)體能和實(shí)體集E2中的多個(gè)實(shí)體有聯(lián)系,而反之E2中的每個(gè)實(shí)體只能關(guān)聯(lián)E1中的一個(gè)實(shí)體,則稱實(shí)體集E1(父/一)和E2(子/多)是一對(duì)多的聯(lián)系,表示為1:n

關(guān)系模型設(shè)計(jì)一對(duì)多的關(guān)系模型,設(shè)計(jì)時(shí)需將父表中的主關(guān)鍵字放入子表中IDNAMEGRADES1軟件一班03H2硬件二班04IDNAMEAGECLASSID1001Angel21S11002Sandy20S1學(xué)生隸屬學(xué)號(hào)年齡名稱年級(jí)班級(jí)n1姓名6、N-N關(guān)聯(lián)關(guān)系N-N關(guān)聯(lián)關(guān)系(n:n)實(shí)體集E1中的每個(gè)實(shí)體能和實(shí)體集E2中的多個(gè)實(shí)體有聯(lián)系,反之E2中的每個(gè)實(shí)體也能關(guān)聯(lián)E1中的多個(gè)實(shí)體,則稱實(shí)體集E1和E2是多對(duì)多的聯(lián)系,表示為n:n

關(guān)系模型設(shè)計(jì)多對(duì)多的關(guān)系模型,設(shè)計(jì)時(shí)需新增一個(gè)表,稱為關(guān)聯(lián)表,在關(guān)聯(lián)表中分別添加兩個(gè)表的主鍵和其他關(guān)聯(lián)字段學(xué)生選修學(xué)號(hào)年齡名稱學(xué)時(shí)課程nnIDNAMETIMEJ001Java語(yǔ)言48C002C++語(yǔ)言64STUIDNAMEAGES1Angel21S2Sandy20姓名編號(hào)STUIDCIDSCORES1J00185S2J00164S1C00278成績(jī)7、關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)范式-1關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)范式

關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)標(biāo)準(zhǔn)就是三個(gè)范式:第一范式(1NF–FirstNormalFromate):

要求數(shù)據(jù)庫(kù)表中的字段都是不可再分的最小數(shù)據(jù)單元例如:地址Address字段,可進(jìn)一步拆分為多個(gè)字段7、關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)范式-2第二范式(2NF–SecondNormalFromate):

要求數(shù)據(jù)庫(kù)表中不存在非主鍵字段對(duì)任一候選關(guān)鍵字段的部分函數(shù)依賴;即對(duì)于組合主鍵(AB),要求里面的A或B與其他字段不能存在組合重復(fù)。解決方式:不采用組合主鍵的方式,盡量使用單一主鍵,確保表中的其他字段都只依賴于該單一主鍵7、關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)范式-3第三范式(3NF–ThirdNormalFromate):

要求數(shù)據(jù)庫(kù)表中不存在非主鍵字段對(duì)任一候選關(guān)鍵字段的傳遞函數(shù)依賴;

即如果存在A決定B,B決定C的關(guān)系,則C傳遞依賴于A

解決方法:將不直接依賴于主鍵的列拆分成獨(dú)立的表,確保表中的每個(gè)列只與主鍵直接相關(guān)而非間接相關(guān)第02節(jié)SQL語(yǔ)言概述知識(shí)點(diǎn)預(yù)覽#節(jié)知識(shí)點(diǎn)難點(diǎn)重點(diǎn)應(yīng)用2ODP-C05-02SQL語(yǔ)言概述1、SQL語(yǔ)言的特點(diǎn)

2、DDL數(shù)據(jù)定義語(yǔ)言

√3、DML數(shù)據(jù)操作語(yǔ)言√4、DCL數(shù)據(jù)控制語(yǔ)言√5、數(shù)據(jù)庫(kù)事務(wù)處理√1、SQL語(yǔ)言的特點(diǎn)什么是SQL語(yǔ)言?SQL(StructuredQueryLanguage)語(yǔ)言,全稱叫結(jié)構(gòu)化查詢語(yǔ)言,是一種數(shù)據(jù)庫(kù)訪問(wèn)的通用語(yǔ)言現(xiàn)行的數(shù)據(jù)庫(kù)幾乎都支持SQL語(yǔ)言,如Sybase、Oracle、SQLServer等SQL語(yǔ)言的特點(diǎn)高度非過(guò)程化的語(yǔ)言統(tǒng)一的語(yǔ)法結(jié)構(gòu),可以獨(dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng)語(yǔ)法結(jié)構(gòu)簡(jiǎn)潔,易學(xué)易用所有關(guān)系型數(shù)據(jù)庫(kù)的公共語(yǔ)言SQL的功能與分類定義數(shù)據(jù)庫(kù)中存儲(chǔ)的信息,包括表、視圖、索引等(DDL)對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行增刪改操作(DML)對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行查詢檢索(DQL)對(duì)數(shù)據(jù)庫(kù)中的對(duì)象進(jìn)行權(quán)限管理(DCL)2、DDL數(shù)據(jù)定義語(yǔ)言數(shù)據(jù)定義語(yǔ)言(DataDefinitionLanguage,簡(jiǎn)稱DDL)用于定義數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)DDL語(yǔ)言包括對(duì)數(shù)據(jù)庫(kù)對(duì)象的定義,包括數(shù)據(jù)庫(kù)、數(shù)據(jù)表、視圖或索引的創(chuàng)建、修改、刪除等操作語(yǔ)句說(shuō)明CREATE創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象ALTER修改數(shù)據(jù)庫(kù)對(duì)象DROP刪除數(shù)據(jù)庫(kù)對(duì)象RENAME更改表名TRUNCATE刪除表的全部?jī)?nèi)容3、DML數(shù)據(jù)操作語(yǔ)言數(shù)據(jù)操作語(yǔ)言(DataManipulationLanguage,簡(jiǎn)稱DML)用于對(duì)數(shù)據(jù)庫(kù)表中的數(shù)據(jù)進(jìn)行操作包括對(duì)表中的數(shù)據(jù)進(jìn)行增加、修改、刪除和查詢等操作語(yǔ)句說(shuō)明SELECT從表中查詢數(shù)據(jù)INSERT向表中添加記錄DELETE刪除記錄UPDATE修改記錄的內(nèi)容MERGE將一個(gè)表中的記錄合并到另外一個(gè)表中4、DCL數(shù)據(jù)控制語(yǔ)言數(shù)據(jù)控制語(yǔ)言(DataControlLanguage,簡(jiǎn)稱DCL)用于對(duì)數(shù)據(jù)庫(kù)中的對(duì)象進(jìn)行權(quán)限設(shè)置只有數(shù)據(jù)庫(kù)管理員才有權(quán)限進(jìn)行該操作提高數(shù)據(jù)庫(kù)的安全性語(yǔ)句說(shuō)明GRANT授予其他用戶對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)的訪問(wèn)權(quán)限REVOKE阻止其他用戶訪問(wèn)數(shù)據(jù)庫(kù)結(jié)構(gòu)5、數(shù)據(jù)庫(kù)事物處理事務(wù)控制語(yǔ)言(TransactionControl,簡(jiǎn)稱TCL)用于控制對(duì)表中的記錄所做的一系列修改永久性地存儲(chǔ)到表中,或者取消這些修改操作語(yǔ)句說(shuō)明COMMIT永久性地保存對(duì)數(shù)據(jù)所做的修改ROLLBACK取消對(duì)數(shù)據(jù)所做的修改SAVEPOINT設(shè)置一個(gè)“保存點(diǎn)”,可以將對(duì)行所做的修改回滾到此處第03節(jié)

檢索數(shù)據(jù)知識(shí)點(diǎn)預(yù)覽#節(jié)知識(shí)點(diǎn)難點(diǎn)重點(diǎn)應(yīng)用3ODP-C05-03檢索數(shù)據(jù)1、簡(jiǎn)單查詢

√√2、篩選查詢

√√3、排序查詢√√√4、分組查詢√√√1、簡(jiǎn)單查詢-1基本的SELECT語(yǔ)句SELECT語(yǔ)句用于從數(shù)據(jù)庫(kù)中檢索信息,通常稱為讀數(shù)據(jù)基本語(yǔ)法星號(hào)符(*):表示查詢表中所有的列Col_name:指定要查詢的列名,多個(gè)列之間用逗號(hào)分隔Table_name:要查詢的列所在的表名稱示例SELECT*|{col_name1,col_name2,…}FROMtable_name;SELECT*FROMemp;SELECTempno,ename,job,salFROMemp;1、簡(jiǎn)單查詢-2算術(shù)表達(dá)式Oracle允許在SQL語(yǔ)句中使用算術(shù)表達(dá)式來(lái)進(jìn)行算術(shù)運(yùn)算算數(shù)表達(dá)式可以修改數(shù)據(jù)的顯示方式、執(zhí)行計(jì)算等常用的算術(shù)運(yùn)算符:+:加法-:減法*:乘法/:除法示例查看某個(gè)員工的工號(hào),姓名和年薪,其中員工表中的sal字段只代表月薪,年薪需要進(jìn)行運(yùn)算才能獲得Selectempno,ename,sal*12fromemp;1、簡(jiǎn)單查詢-3使用列別名Oracle允許在查詢語(yǔ)句中重命名列名別名緊跟在列名后(列名和別名之間也可加關(guān)鍵字AS)基本語(yǔ)法示例查看某個(gè)員工的工號(hào),姓名和年薪如果別名包含空格或特殊字符,或者區(qū)分大小寫則需要使用雙引號(hào)Selectempno,ename,sal*12asannual_salaryfromemp;SELECTcol_name[AS]new_col_nameFROMtable_name;Selectempno,ename,sal*12“AnnualSalary”fromemp;1、簡(jiǎn)單查詢-4連接操作符“||”O(jiān)racle允許在SQL中使用”||”連接操作符實(shí)現(xiàn)字符串連接使用||可以使多列的值或者特殊的字符串合并到一個(gè)列進(jìn)行顯示基本語(yǔ)法示例查看某個(gè)員工的工號(hào)和姓名,要求顯示全名SELECTempno,first_name||

''||last_nameAS“EmployeeName"FROMs_emp;SELECTcol_name1||

‘special_char'||

col_name2FROMtable_name;1、簡(jiǎn)單查詢-5使用DISTINCT關(guān)鍵字在SQL中使用DISTINCT可以確保重復(fù)的記錄只顯示一條基本語(yǔ)法注意:distinct關(guān)鍵詞必須緊跟select關(guān)鍵詞后面如果distinct關(guān)鍵詞后面如果出現(xiàn)多列,表示多列聯(lián)合去重,即多列的值都相同的時(shí)候才會(huì)認(rèn)為是重復(fù)的記錄示例查看所有員工的職位名稱和部門id,要求同職位同部門的只顯示一次SELECTDISTINCTjob,deptnoFROMemp;SELECTDISTINCTcol_name1,col_name2,…FROM

table_name;2、篩選查詢-1限制查詢?cè)贠racle中使用WHERE子句可以指定條件進(jìn)行查詢基本語(yǔ)法注意:where子句的優(yōu)先級(jí)別最高condition條件語(yǔ)句可以包含多個(gè)條件表達(dá)式條件表達(dá)式由列名、表達(dá)式、常數(shù)和比較操作符組成,常見(jiàn)的比較操作符包括:比較運(yùn)算符SQL操作符邏輯操作符SELECTcol_name1,col_name2,…FROM

table_nameWHERE

condition(s);2、篩選查詢-2比較運(yùn)算符運(yùn)算符說(shuō)明=等于<>或!=不等于<小于>大于<=小于或等于>=大于或等于ANY與一個(gè)列表中的任何值進(jìn)行比較ALL與一個(gè)列表中的所有值進(jìn)行比較2、篩選查詢-3使用比較運(yùn)算符查看薪資小于1000的員工查看部門編號(hào)大于20或30中任意一個(gè)的員工記錄查看部門編號(hào)比20和30都大的員工記錄Selectempno,ename,salfromempwheresal<1000;Selectempno,ename,deptnofromempwheredeptno>ANY(20,30);Selectempno,ename,deptnofromempwheredeptno>ALL(20,30);2、篩選查詢-4SQL操作符LIKE操作符使用LIKE能實(shí)現(xiàn)模糊查詢功能,當(dāng)取值不是精確值時(shí)使用搜索條件可包含通配符(代替任何內(nèi)容的符號(hào)):

%:

通配零個(gè)或多個(gè)字符_:僅通配一個(gè)字符示例:查找名字第三個(gè)字母為’O’的員工運(yùn)算符說(shuō)明LIKE模糊查詢,當(dāng)取值不是精確的值時(shí)使用IN與值列表中的任一值匹配BETWEENAND介于兩個(gè)值之間(包含這兩個(gè)值)SELECT*FROMempWHEREenameLIKE‘__O%’;2、篩選查詢-5IN操作符使用IN關(guān)鍵字可以檢索其列值在某個(gè)列表中的記錄示例查看工號(hào)為7788,7844,7566的員工信息BETWEENAND操作符使用BETWEENAND操作符可以檢索值在指定區(qū)間內(nèi)的記錄示例查看工資在700到1500之間的員工信息SELECTempno,ename,salFROMempWHEREsalBETWEEN700AND1500;SELECTempno,ename,salFROMempWHEREempnoIN(7788,7844,7566);2、篩選查詢-6邏輯操作符當(dāng)條件存在多個(gè)的時(shí)候可使用該操作符示例查看員工部門為10或者30號(hào)部門且工資大于1000的員工運(yùn)算符說(shuō)明XANDY當(dāng)x和y都為ture時(shí),返回trueXORY當(dāng)x和y中有一個(gè)為true時(shí),就返回trueNOTX如果x為false,則返回true;如果x為true,則返回falseSELECTempno,ename,deptno,jobFROM

empWHEREsal>1000AND

(deptno=10ORdeptno=30);3、排序查詢-1排序排序就是查詢時(shí)將指定字段的值按照升序或者降序排列ASC:升序排列(默認(rèn))DESC:降序排列注意:使用orderby子句只對(duì)查詢記錄的顯示進(jìn)行調(diào)整,并不改變查詢結(jié)果,所以執(zhí)行權(quán)最低,即最后才執(zhí)行如果有多個(gè)列排序,后面的列排序的前提是前面的列已經(jīng)排好序以后有重復(fù)(相同)的值SELECTcol_name,...FROMtable_nameORDERBYcol_name[ASC|DESC],...3、排序查詢-2示例查看s_emp中的員工信息,并按員工姓名降序排列查看s_emp中的員工信息,并按first_name升序排列,當(dāng)first_name存在重復(fù)值時(shí),將按last_name進(jìn)行降序排列SELECTid,last_name,salaryFROMs_empORDERBYlast_nameDESC;

SELECTid,first_name,last_nameFROMs_empORDERBYfirst_nameASC, last_nameDESC;

4、分組查詢-1使用GROUPBY語(yǔ)句SQL查詢語(yǔ)句中可以使用GROUPBY子句實(shí)現(xiàn)分組查詢,即將某些相同值的列進(jìn)行分組,并實(shí)現(xiàn)對(duì)數(shù)據(jù)的歸納統(tǒng)計(jì)GROUPBY子句通常需要結(jié)合分組函數(shù)實(shí)現(xiàn)統(tǒng)計(jì)功能GROUPBYcol_name:將數(shù)據(jù)按照col_name列進(jìn)行分組常見(jiàn)的組函數(shù):AVG():求平均值COUNT():求總數(shù)MAX():求最大值MIN():求最小值SUM():求和SELECTcol_name,...FROMtable_nameWHEREcondition…GROUPBYcol_name,...[ORDERBYcol_name…]4、分組查詢-2GROUPBY示例查看所有部門的部門員工工資總和,并按照部門工資降序排序注意:沒(méi)有出現(xiàn)在groupby子句中或組函數(shù)中的列,不能出現(xiàn)在select子句中當(dāng)groupby子句中出現(xiàn)多列的時(shí)候,會(huì)按照從左至右的順序進(jìn)行分組,即先按照第一列分組,然后在第一列分好的組里面,再按照第二列進(jìn)行分組,以此類推。。。SELECTdept_id,SUM(salary)dept_salaryFROMs_empGROUPBYdept_idORDERBYdept_salaryDESC;---------------錯(cuò)誤案例---------------SELECTdept_id,last_name,MAX(salary)FROMs_empGROUPBYdept_id;4、分組查詢-3使用HAVING語(yǔ)句HAVING語(yǔ)句通常與GROUPBY一起使用,限制搜索條件,實(shí)現(xiàn)分組過(guò)濾與WHERE語(yǔ)句不同,HAVING子句只與分組相關(guān),不與單個(gè)列值有關(guān)HAVING子句只作用于GROUPBY中創(chuàng)建的組,通常結(jié)合組函數(shù)應(yīng)用如果限制條件中出現(xiàn)組函數(shù),必須使用HAVING,不能使用WHERESELECTcolumn,group_function(column)FROMtable[WHERE condtion][GROUPBYgroup_by_expression][HAVING group_condtion][ORDERBYcolumn];SELECTproduct_type_id,AVG(price)FROMproductsWHEREprice<15GROUPBYproduct_type_idHAVINGAVG(pirce)>13ORDERBYproduct_type_id;第04節(jié)

多表關(guān)聯(lián)查詢知識(shí)點(diǎn)預(yù)覽#節(jié)知識(shí)點(diǎn)難點(diǎn)重點(diǎn)應(yīng)用4ODP-C05-04多表關(guān)聯(lián)查詢1、內(nèi)連接√√√2、左外部連接√√√3、右外部連接4、自連接1、內(nèi)連接-1多表查詢又稱多表聯(lián)合查詢,即查詢語(yǔ)句中涉及到多張表,通過(guò)特定的方式將多個(gè)表進(jìn)行連接,顯示查詢結(jié)果基本語(yǔ)法在WHERE子句中編寫連接條件如果在多個(gè)表中出現(xiàn)了相同的列名,則在列名的前面加上表名作為前綴連接的類型內(nèi)連接:當(dāng)連接中的列滿足連接條件時(shí)才會(huì)返回,只能查出匹配的記錄等值連接:在連接中使用(=)操作符不等值連接:在連接中使用除等號(hào)之外的操作符外連接:即使連接條件中的一列包含空值也會(huì)返回一行自連接:返回連接到同一個(gè)表中的行SELECTtable1.column1,table2.column2FROM

table1,table2WHEREtable1.column3=table2.column3…;1、內(nèi)連接-2customeremps外鍵主鍵等值連接等值連接查詢后結(jié)果列表中不存在207客戶信息1、內(nèi)連接-3內(nèi)連接也稱簡(jiǎn)單連接,只能查詢出匹配的記錄,不匹配的記錄無(wú)法查出內(nèi)連接是最常用的查詢方式可以使用表別名簡(jiǎn)化查詢等值連接使用等號(hào)(=)操作符連接條件示例:查看每個(gè)員工的工號(hào),姓名以及部門名稱和所屬區(qū)域名稱不等值連接使用”>”、”<“、”<>”、”BETWEENAND”等除等號(hào)外的操作符連接多個(gè)表SELECTe.id,e.last_name,d.id,,FROMs_empe,s_deptd,s_regionrWHEREe.detp_id=d.idANDd.region_id=r.id;SELECTtest1.idFROMtest1,test2WHEREtest1.idBETWEENtest2.min_valueANDtest2.max_value;2、左外連接-1外連接使用內(nèi)連接時(shí),如果某個(gè)行不滿足連接條件,那么該行將不會(huì)出現(xiàn)在查詢結(jié)果中當(dāng)一個(gè)表中的記錄在另外一個(gè)表中不存在的時(shí)候,使用外連接可以顯示這些不存在的結(jié)果外連接使用的操作符:(+)外連接的類型左外連接不僅僅返回符合連接條件的行記錄,還保留左邊表中的全部記錄右外連接不僅僅返回符合連接條件的行記錄,還保留右邊表中的全部記錄全外連接不僅僅返回符合連接條件的行記錄,還保留兩個(gè)表中的未匹配記錄2、左外連接-2左外連接使用左外連接,表示當(dāng)左邊表(=號(hào)左邊的表)中的記錄在右邊表中不存在的時(shí)候,依舊顯示左邊表的所有記錄不僅僅返回符合連接條件的記錄,還保留左邊表中的全部記錄未匹配的記錄,其右表對(duì)應(yīng)的列補(bǔ)空值示例:查看所有客戶的工號(hào)、名字和對(duì)應(yīng)的銷售人員姓名,即使無(wú)對(duì)應(yīng)銷售人員也顯示SELECTtb_name,col_name,...FROMtb_name1,tb_name2WHEREtb_name1.col_name=tb_name2.col_name(+);SELECTc.id,,e.last_nameFROMs_customerc,s_empeWHEREc.sales_rep_id=e.id(+)ORDERBYc.id;3、右外連接右外連接使用右外連接,表示當(dāng)右邊表(=號(hào)右邊的表)中的記錄在左邊表中不存在的時(shí)候,依舊顯示右邊表的所有記錄不僅僅返回符合連接條件的記錄,還保留右邊表中的全部記錄未匹配的記錄,其左表對(duì)應(yīng)的列補(bǔ)空值示例:查看所有員工的姓名,及其負(fù)責(zé)的客戶號(hào)和客戶名稱,即使無(wú)對(duì)應(yīng)客戶的也顯示SELECTtb_name,col_name,...FROMtb_name1,tb_name2WHEREtb_name1.col_name(+)=tb_name2.col_name;SELECTc.id,,e.last_nameFROMs_customerc,s_empeWHEREc.sales_rep_id(+)=e.idORDERBYc.id;4、自連接自連接對(duì)同一個(gè)表進(jìn)行的連接必須使用不同的表別名來(lái)標(biāo)識(shí)在查詢中每次對(duì)表的引用示例:查詢員工姓名及其經(jīng)理名字SELECT……FROMtb_namet1,tb_namet2WHEREt1.col_name=t2.another_col_name;SELECTworker.last_name,manager.last_nameFROMemployeesworker,employeesmanagerWHEREworker.manager_id=manager.employee_id;第05節(jié)Oracle常用系統(tǒng)函數(shù)知識(shí)點(diǎn)預(yù)覽#節(jié)知識(shí)點(diǎn)難點(diǎn)重點(diǎn)應(yīng)用5ODP-C05-05Oracle常用系統(tǒng)函數(shù)1、字符類函數(shù)√√2、數(shù)字類函數(shù)√√3、日期和時(shí)間類函數(shù)√√4、轉(zhuǎn)換類函數(shù)√√√5、聚合類函數(shù)√√√1、字符類函數(shù)-1SQL函數(shù)功能進(jìn)行數(shù)據(jù)計(jì)算修改單個(gè)數(shù)據(jù)項(xiàng)處理成組的行的輸出指定日期和數(shù)字的顯示格式轉(zhuǎn)換列的數(shù)據(jù)類型SQL函數(shù)類型單行函數(shù):查詢表或視圖時(shí),作用于單行記錄上,且只返回一個(gè)結(jié)果字符型函數(shù)數(shù)值型函數(shù)日期時(shí)間型函數(shù)轉(zhuǎn)換函數(shù)聚合函數(shù):聚合函數(shù)作用于多行記錄上,返回一個(gè)結(jié)果,主要用于分組查詢中1、字符類函數(shù)-2常用的字符型函數(shù)大小寫處理函數(shù)函數(shù)說(shuō)明LOWER(x)將x中的字母轉(zhuǎn)換成小寫UPPER(x)將x中的字母轉(zhuǎn)換成大寫INITCAP(x)將x中每個(gè)單詞的首字母都轉(zhuǎn)換成大寫,并返回得到的字符串1、字符類函數(shù)-3字符處理函數(shù)函數(shù)說(shuō)明CONCAT(x,y)將y添加到x上,并將得到的字符串作為結(jié)果返回SUBSTR(x,start[,length])返回x中的一個(gè)子字符串,這個(gè)字符串從start處開始,還可以為這個(gè)子字符串指定一個(gè)可選的length參數(shù)LENGTH(x)返回x中字符的個(gè)數(shù)INSTR(x,find_string[,start[,occurrence]])在x中查找字符串find_string,然后返回find_string所在的位置??梢蕴峁┛蛇x的start位置來(lái)指定該函數(shù)從這個(gè)位置開始查找。同樣,也指定一個(gè)可選的occurrence參數(shù),來(lái)說(shuō)明該返回find_string第幾次出現(xiàn)的位置LPAD(x,width[,pad_string])在x的左邊補(bǔ)齊空格,得到總長(zhǎng)為width個(gè)字符的字符串。該函數(shù)可以提供一個(gè)可選的pad_string,這個(gè)參數(shù)用于指定重復(fù)使用哪個(gè)字符串來(lái)補(bǔ)齊x左邊的空位。返回x被補(bǔ)齊之后的結(jié)果字符串RPAD(x,width[,pad_string])與LPAD()類似,不過(guò)要對(duì)x的右邊補(bǔ)齊1、字符類函數(shù)-4示例使用LENGTH函數(shù)顯示name列中字符串的長(zhǎng)度將description列中的每個(gè)單詞的首字母轉(zhuǎn)換成大寫查看員工名字為chang的員工的id和薪資,chang不區(qū)分大小寫,即(CHANGChangchang)都符合SELECTname,LENGTH(name)FROMproducts;SELECTproduct_id,INITCAP(description)FROMproducts;SELECTid,last_name,salaryFROMs_empWHERELOWER(last_name)='chang';2、數(shù)字類函數(shù)-1常見(jiàn)數(shù)值型函數(shù)MOD函數(shù)函數(shù)說(shuō)明MOD(x,y)返回x除以y的余數(shù)ROUND(x[,y])返回對(duì)x取整的結(jié)果,會(huì)進(jìn)行四舍五入;TRUNC(x[,y])返回對(duì)x直接截?cái)嗟慕Y(jié)果,不進(jìn)行四舍五入;SELECTMOD(8,3),MOD(8,4)FROMdual;2、數(shù)字類函數(shù)-2ROUND(x,[y])函數(shù)用于計(jì)算對(duì)x取整的結(jié)果,會(huì)進(jìn)行四舍五入其中y為可選參數(shù),說(shuō)明對(duì)第幾位小數(shù)取整如果沒(méi)有指定y,則x在0位小數(shù)處取整數(shù),取整時(shí)四舍五入如果y是負(fù)數(shù),則對(duì)x在小數(shù)點(diǎn)的左邊的第|y|位處取整數(shù),取整時(shí)四舍五入示例使用ROUND函數(shù)分別對(duì)5.75在0位、1位和-1位取整SELECT

ROUND(5.75),ROUND(5.75,1),ROUND(5.75,-1)FROMdual;2、數(shù)字類函數(shù)-3TRUNC(x,[y])函數(shù)用于計(jì)算對(duì)x數(shù)據(jù)直接截?cái)嗟慕Y(jié)果,不會(huì)進(jìn)行四舍五入y為可選參數(shù),說(shuō)明對(duì)第幾位小數(shù)截?cái)嗳绻麤](méi)有y,則對(duì)在0位小數(shù)截?cái)嗳绻鹹為負(fù)數(shù),則對(duì)x在小數(shù)點(diǎn)左邊的第|y|位處截?cái)嗍纠龑?duì)5.75在0位、1位、-1位小數(shù)處截?cái)郤ELECT

TRUNC(5.75),TRUNC(5.75,1),TRUNC(5.75,-1)FROMdual;3、日期和時(shí)間類函數(shù)-1常用日期和時(shí)間函數(shù)函數(shù)說(shuō)明SYSDATE返回系統(tǒng)的當(dāng)前日期SYSTIMESTAMP返回系統(tǒng)當(dāng)前時(shí)間,包含時(shí)區(qū)信息,精確到毫秒ADD_MONTHS(date,integer)返回在指定月份上加指定月數(shù)后的日期NEXT_DAY(date,char)返回當(dāng)前日期向后一周的char所指定的對(duì)應(yīng)日期LAST_DAY(date)返回參數(shù)指定的日期對(duì)應(yīng)月份的最后一天MONTHS_BETWEEN(date1,date2)返回date1和date2之間的月份數(shù)…………3、日期和時(shí)間類函數(shù)-2系統(tǒng)表空間獲取系統(tǒng)當(dāng)前日期返回當(dāng)前日期一周后的星期一所對(duì)應(yīng)的日期返回當(dāng)前日期過(guò)兩個(gè)月后的日期返回當(dāng)前日期和指定日期的間隔月數(shù)SELECTSYSDATEFROMDUAL;SELECTNEXT_DAY(SYSDATE,‘星期一’)FROMDUAL;SELECTADD_MONTHS(SYSDATE,2)FROMDUAL;SELECTMONTHS_BETWEEN(SYSDATE,TO_DATE('2013-04-03','yyyy-mm-dd'))FROMDUAL;4、轉(zhuǎn)換類函數(shù)-1常用轉(zhuǎn)換類函數(shù)函數(shù)說(shuō)明TO_CHAR(x)將一個(gè)日期或數(shù)值類型數(shù)據(jù)轉(zhuǎn)換為一個(gè)字符串TO_NUMBER(x[,format])將一個(gè)字符串類型數(shù)據(jù)轉(zhuǎn)換為一個(gè)NUMBER類型TO_DATE(x[,format])將字符串類型數(shù)據(jù)轉(zhuǎn)換為一個(gè)DATE類型CAST(xAStype)將x轉(zhuǎn)換為type所指定的兼容數(shù)據(jù)庫(kù)類型TO_BLOB(x)將x轉(zhuǎn)換為一個(gè)二進(jìn)制大對(duì)象類型…………4、轉(zhuǎn)換類函數(shù)-2使用TO_CHAR函數(shù)處理數(shù)字其中format參數(shù)參數(shù)格式說(shuō)明9999返回指定位置處的數(shù)字0099999900999:返回一個(gè)數(shù)字,前面補(bǔ)09990:返回一個(gè)數(shù)字,后面補(bǔ)0.999.99在指定位置處返回一個(gè)小數(shù)點(diǎn),9,999在指定位置處返回一個(gè)逗號(hào)$$999在數(shù)字開頭返回一個(gè)美元符號(hào)SELECT

TO_CHAR(12345.67,'99,999.99')FROMdual;4、轉(zhuǎn)換類函數(shù)-3使用TO_CHAR函數(shù)處理日期其中format參數(shù)參數(shù)說(shuō)明YYYY用數(shù)字表示完整年份YEAR拼寫出的年份(用英文標(biāo)識(shí))MM月份的兩位數(shù)值MONTH月份的完整名稱MON月份的三個(gè)字母縮寫DY一周中某日的三個(gè)字母縮寫DAY一周中某日的完整名稱DD用數(shù)字表示的月份中某日4、轉(zhuǎn)換類函數(shù)-4格式樣式具有以下特點(diǎn)必須放在單引號(hào)內(nèi)區(qū)分大小寫可以包含任何有效的日期格式元素輸出的日和月的名稱會(huì)自動(dòng)用空白進(jìn)行填充與日期之間用逗號(hào)分隔示例SELECTcustomer_id,TO_CHAR(reg_date,'MONTHDD,YYYY')FROMcustomers;4、轉(zhuǎn)換類函數(shù)-5TO_NUMBER函數(shù)用于將字符串轉(zhuǎn)換為一個(gè)數(shù)字指定一個(gè)可選參數(shù)format字符來(lái)說(shuō)明char的格式示例使用TO_NUMBER函數(shù)將字符串970.13轉(zhuǎn)換為一個(gè)數(shù)字,然后加25.5SELECTto_number('970.13')+25.5fromdual;TO_NUMBER(char[,’format’])5、聚合類函數(shù)-1聚合函數(shù)聚合函數(shù)主要用于分組查詢操作中,因此又稱組函數(shù)參數(shù)說(shuō)明AVG(x)返回x的平均值COUNT(x)統(tǒng)計(jì)指定列的查詢返回的行數(shù)MAX(x)返回x的最大值MEDIAN(x)返回x的中間值MIN(x)返回x的最小值STDDEV(x)返回x的標(biāo)準(zhǔn)差SUM(x)返回x的和VARIANCE(x)返回x的方差5、聚合類函數(shù)-2示例統(tǒng)計(jì)產(chǎn)品價(jià)格的平均值統(tǒng)計(jì)產(chǎn)品的數(shù)量統(tǒng)計(jì)產(chǎn)品價(jià)格的最大值和最小值統(tǒng)計(jì)所有產(chǎn)品價(jià)格之和SELECTAVG(price)FROMproducts;SELECTCOUNT(product_id)FROMproducts;SELECTMAX(price),MIN(price)FROMproducts;SELECTSUM(price)FROMproducts;第06節(jié)

子查詢知識(shí)點(diǎn)預(yù)覽#節(jié)知識(shí)點(diǎn)難點(diǎn)重點(diǎn)應(yīng)用6ODP-C05-06子查詢1、子查詢概述√√2、單行子查詢√√3、多行子查詢√√4、關(guān)聯(lián)子查詢√1、子查詢概述-1為什么需要子查詢?通常當(dāng)WHERE子句后面的條件不是一個(gè)確切的值或表達(dá)式,要依賴于另一個(gè)查詢語(yǔ)句的查詢結(jié)果時(shí),需要使用子查詢什么是子查詢?子查詢也稱嵌套查詢,是嵌套在另一個(gè)SQL語(yǔ)句中的SELECT查詢語(yǔ)句子查詢可以嵌套在SELECT、UPDATE和DELETE語(yǔ)句中子查詢本質(zhì)是WHERE子句的一個(gè)條件表達(dá)式SELECTcol_name,…FROMtable_nameWHEREcol_name比較操作符( SELECTcol_name1,.. FROMtb_name [WHEREcondition…])1、子查詢概述-2使用子查詢的準(zhǔn)則將子查詢擴(kuò)在括號(hào)內(nèi)將子查詢放置在比較條件的右側(cè)比較條件雙方數(shù)據(jù)類型和數(shù)量要匹配單行運(yùn)算符用于單行子查詢,而多行運(yùn)算符用于多行子查詢子查詢的類型單行子查詢從內(nèi)部SELECT語(yǔ)句中僅返回一行的查詢使用單行比較操作符:=、>、>=、<、<=、<>多行子查詢從內(nèi)部SELECT語(yǔ)句中返回多行的查詢使用量化操作符:IN、ANY、ALL、SOME2、單行子查詢-1單行子查詢從內(nèi)部SELECT語(yǔ)句中僅返回一行的查詢使用單行比較操作符:=、>、>=、<、<=、<>示例查看職位名稱和名字為Chang的員工一樣的所有員工工號(hào)和名字SELECTid,last_name,titleFROMs_empWHEREtitle=(

SELECTtitle FROMs_emp WHERElast_name='Chang’);2、單行子查詢-2示例查詢所有價(jià)格高于商品平均價(jià)格的產(chǎn)品號(hào)、產(chǎn)品名稱和產(chǎn)品價(jià)格SELECTproduct_id,name,priceFROMproductsWHERE

price>( SELECTAVG(price)

FROMproducts);2、單行子查詢-3在HAVING子句中使用子查詢Oracle允許在分組查詢中的HAVING子句中使用子查詢示例查詢平均價(jià)格低于同產(chǎn)品組平均價(jià)格最大值的產(chǎn)品的product_id和平均價(jià)格注意:ORDERBY排序子句不能出現(xiàn)在子查詢中,只能用于外部查詢SELECTproduct_type_id,AVG(price)FROMproductsGROUPBYproduct_type_idHAVINGAVG(price)<( SELECTMAX(AVG(price)) FROMproducts GROUPBYproduct_type_id)ORDERBYproduct_type_id;2、單行子查詢-4在FROM中使用子查詢?cè)谕獠坎樵兊腇ROM子句中使用子查詢,子查詢?yōu)镕ROM子句提供內(nèi)聯(lián)數(shù)據(jù),也稱為內(nèi)聯(lián)視圖示例:在外部查詢中從products表中檢索product_id和price列,在子查詢中檢索一種產(chǎn)品已經(jīng)被購(gòu)買的次數(shù)SELECTduct_id,price,purchases_duct_countFROMproductsprds,( SELECTproduct_id,COUNT(product_id)product_count FROMpurchases GROUPBYproduct_id)purchases_dataWHEREduct_id=purchases_duct_id;3、多行子查詢-1多行子查詢返回多個(gè)行的子查詢稱為多行子查詢使用的是量化運(yùn)算符:函數(shù)說(shuō)明IN匹配子查詢返回的結(jié)果列表中的任意一個(gè)即可ANY將值與子查詢返回的任意一個(gè)值進(jìn)行比較ALL將值與子查詢返回的每個(gè)值進(jìn)行比較SOME與ANY含義類似,ANY多用于非”=”的情況3、多行子查詢-2IN操作符用來(lái)檢查在一個(gè)值中是否包含指定的值這個(gè)值列表可以是來(lái)自一個(gè)子查詢返回的結(jié)果示例查找在子查詢中所返回的product_id值列表中是否包含指定的product_id,并顯示其產(chǎn)品號(hào)和產(chǎn)品名稱SELECTproduct_id,nameFROMproductsWHEREproduct_idIN( SELECTproduct_id FROMproducts WHEREnameLIKE'%e%‘);3、多行子查詢-3ANY操作符用來(lái)將一個(gè)值與一個(gè)列表中的任何值進(jìn)行比較在ANY操作符前,必須使用一個(gè)=、<>、<、>、<=或>=操作符示例檢查是否有員工的工資低于salary_grades表中任何一級(jí)最低工資SELECTemployee_id,last_nameFROMemployeesWHEREsalary<ANY

( SELECTlow_salary FROMsalary_grades);3、多行子查詢-4ALL操作符用來(lái)將一個(gè)值與一個(gè)列表中的所有值進(jìn)行比較在ALL操作符前,必須使用一個(gè)=、<>、<、>、<=或>=操作符示例檢查是否有員工的工資高于salary_grades表中所有級(jí)別的最高工資SELECTemployee_id,last_nameFROMemployeesWHEREsalary>ALL

( SELECThigh_salary FROMsalary_grades);4、關(guān)聯(lián)子查詢-1集合操作符使用集合操作符可以將兩個(gè)或多個(gè)查詢返回的記錄組合起來(lái)集合運(yùn)算符的準(zhǔn)則SELECT列表中的表達(dá)式在數(shù)量上必須匹配第二個(gè)查詢中每一列的數(shù)據(jù)類型必須與第一個(gè)查詢中對(duì)應(yīng)列的數(shù)據(jù)類型相匹配ORDERBY子句只能出現(xiàn)在語(yǔ)句的末尾函數(shù)說(shuō)明UNIONALL合并各個(gè)檢索出的所有行,包括重復(fù)行UNION合并各個(gè)檢索出的所有行,不包括重復(fù)行MINUS返回從第一個(gè)查詢檢索出的行減去第二個(gè)查詢檢索出的行之后剩余的記錄(差集)INTERSECT返回兩個(gè)查詢檢索出的公有記錄(交集)4、關(guān)聯(lián)子查詢-2示例表使用UNIONALL操作符SELECTproduct_id,product_type_id,nameFROMproductsUNIONALLSELECTprd_id,prd_type_id,nameFROMmore_products;4、關(guān)聯(lián)子查詢-3使用UNION操作符使用INTERSECT操作符SELECTproduct_id,product_type_id,nameFROMproductsUNIONSELECTprd_id,prd_type_id,nameFROMmore_products;SELECTproduct_id,product_type_id,nameFROMproductsINTERSECTSELECTprd_id,prd_type_id,nameFROMmore_products;4、關(guān)聯(lián)子查詢-4使用MINUS操作符SELECTproduct_id,product_type_id,nameFROMproductsMINUSSELECTprd_id,prd_type_id,nameFROMmore_products;第07節(jié)

操作數(shù)據(jù)庫(kù)知識(shí)點(diǎn)預(yù)覽#節(jié)知識(shí)點(diǎn)難點(diǎn)重點(diǎn)應(yīng)用7ODP-C05-07操作數(shù)據(jù)庫(kù)1、插入數(shù)據(jù)√√2、更新數(shù)據(jù)√√3、刪除數(shù)據(jù)√√4、TRUNCATE語(yǔ)句√1、插入數(shù)據(jù)-1INSERT語(yǔ)句使用INSERT語(yǔ)句可以向數(shù)據(jù)庫(kù)表中插入記錄INSERT語(yǔ)句一次只能插入一條記錄基本語(yǔ)法注意插入一行新記錄時(shí),該記錄的每一列都含有值,沒(méi)有顯式指定值的列會(huì)使用NULL空值INSERT語(yǔ)句中允許只指定表名不指定列名,要求插入時(shí)各個(gè)值的順序是按照表中列的默認(rèn)順序排列的,且數(shù)據(jù)類型相互匹配要求字符型和日期型數(shù)據(jù)用單引號(hào)括起來(lái)INSERTINTOtable_name[(column1[,column2…])]VALUES(value1[,value2…]);1、插入數(shù)據(jù)-2示例向S_CUSTOMERS表中插入一條新記錄顯式插入空值,要求對(duì)應(yīng)的列沒(méi)有非空約束隱式插入空值INSERTINTO

s_customers(customer_id,first_name,last_name,dob,phone)VALUES(6,'fred','brown','01-1月-1970','800-555-1215');INSERTINTO

s_customersVALUES(6,'fred','brown',NULL,NULL);INSERTINTO

s_customers(customer_id,first_name,last_name)VALUES(6,'fred','brown');1、插入數(shù)據(jù)-3常見(jiàn)錯(cuò)誤示例錯(cuò)誤1:主鍵值為NULL空值錯(cuò)誤2:插入的主鍵值與表中其他記錄的主鍵值重復(fù)錯(cuò)誤3:對(duì)存在NOTNULL非空約束的列插入NULL值INSERTINTO

s_customers(customer_id,first_name,last_name)VALUES(NULL,'fred','brown');INSERTINTO

s_customers(customer_id,first_name)VALUES(6,NULL);INSERTINTO

s_customers(customer_id,first_name,last_name)VALUES(1,'fred','brown');1、插入數(shù)據(jù)-4INSERT中使用子查詢INSERT語(yǔ)句中,可以不使用列值,而是使用查詢從一個(gè)表向另外一個(gè)表復(fù)制行要求源表和目標(biāo)表的列數(shù)和列的類型匹配不要使用VALUES子句示例使用SELECT語(yǔ)句檢索顧客編號(hào)為1的first_name和last_name值,并將其作為顧客號(hào)10的顧客的姓名插入數(shù)據(jù)庫(kù)表中INSERTINTOs_customers(customer_id,first_name,last_name)SELECT10,first_name,last_nameFROMs_customersWHEREcustomer_id=1;2、更新數(shù)據(jù)-1UPDATE語(yǔ)句使用UPDATE語(yǔ)句可以更新數(shù)據(jù)庫(kù)表中的記錄UPDATE語(yǔ)句一次可以更新多條記錄基本語(yǔ)法注意可以指定WHERE條件語(yǔ)句,指定要更新的記錄如果不指定WHERE條件語(yǔ)句,將更新表中的所有記錄可以在UPDATE語(yǔ)句中使用子查詢UPDATEtable_nameSETcolumn=value[,column=value,…][WHEREconditions…];2、更新數(shù)據(jù)-2UPDATE示例修改滿足WHERE條件的記錄沒(méi)有指定WHERE條件時(shí),會(huì)修改表中的所有記錄UPDATEs_customersSETlast_name=‘Oracle’WHEREcustomer_id=1;UPDATEs_customersSETlast_name=‘Oracle’;2、更新數(shù)據(jù)-3UPDATE中使用子查詢可以在UPDATE語(yǔ)句的SET子句中使用子查詢更新列值示例更新工號(hào)為4的員工的職位與薪資,使之與工號(hào)為2的員工的職務(wù)薪資相同UPDATE s_empsSETtitle=(SELECTtitle FROMs_emps WHEREemp_id=2),

salary=(SELECTsalary FROMs_emps WHEREemp_id=2)WHERE emp_id=4;3、刪除數(shù)據(jù)-1DELETE語(yǔ)句使用DELETE語(yǔ)句可以刪除數(shù)據(jù)庫(kù)表中的記錄DELETE語(yǔ)句一次可以刪除多條記錄基本語(yǔ)法注意可以使用WHERE條件語(yǔ)句刪除指定的記錄如果不使用WEHER語(yǔ)句,將刪除表中的所有記錄在DELETE語(yǔ)句中也可以使用子查詢DELETE[FROM]table_name[WHEREconditions…];3、刪除數(shù)據(jù)-2DELETE示例刪除滿足WHERE條件的記錄沒(méi)有指定WHERE條件時(shí),會(huì)刪除表中的所有記錄使用子查詢,從products表中刪除產(chǎn)品類型名稱為Book的產(chǎn)品DELETEFROMs_customersWHEREcustomer_id=1;DELETEFROMs_customers;DELETEFROMproductsWHEREproduct_id= (SELECTpro

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論