oracle 单表查询 详细图文
1.簡單查詢
1.1查詢指定列
???? (1)指定部分列
?????????????? 檢索所有教師的姓名,名稱,工資,參加工作時(shí)間等信息
???????? SELECT? <*/expression1 [AS alias1],....>FROM talbe;
???????? SELECT 子句<>中的內(nèi)容用于指定要檢索的列,星號*表示檢索所有列,expression用于指定要檢索的列或表達(dá)式,alias用于指定列或表達(dá)式的別名,FROM 子句用于指定要檢索的表
檢索所有教師的姓名,職稱,工資,參加工作的世界等
檢索所有教師的姓名,職稱,工資,參加工作的世界等,日期日期格式按照YYYY-MM-DD輸出
??????? 2.指定全部列
?????????? 指定全部列有兩種方法,其一是在SELECT子句<>中選出*號,其二是在SELECT 子句expression中指定全部列名
??????????? 一在顯示檢索結(jié)果時(shí),列的順序不可以改變(與DESCRIBE命令顯示的表結(jié)構(gòu)的順序一致)
??????? 3重復(fù)記錄行的處理(DISTINCT關(guān)鍵字)
??????? 當(dāng)選擇主鍵以外的列執(zhí)行查詢操作時(shí),可能會出現(xiàn)兩行或多行完全相同的查詢結(jié)果,沒有實(shí)際意義,一般需要取消完全重復(fù)的記錄行,使用DISTINCT關(guān)鍵字來完成
??????? 未使用DISTINCT
????????
使用DISTINCT
????????? 3.改變輸出
??????????? 使用SELECT語句執(zhí)行查詢操作時(shí),首先會顯示列標(biāo)題,然后顯示記錄行數(shù)據(jù),為了更清晰的顯示查詢結(jié)果,有時(shí)需要改變列標(biāo)題的顯示樣式,有時(shí)需要改變顯示的數(shù)據(jù)。使用列別名。字符串連接和算式表達(dá)式可達(dá)到目的?
??????????? (1)使用列別名
??????????????? SELECT<>子句中,alias用于指定列或表達(dá)式的別名。通過使用列別名可以改變表達(dá)式的顯示樣式。如果別名有大小寫之分,或者包含特殊字符或空格,那么別名上必須加""(英文雙引號)
????????????
??????????? 2.使用字符串連接
??????????? SELECT<>子句中,expression可以使用字符串連接,以顯示更有意義的查詢結(jié)果。使用“||”操作符實(shí)現(xiàn)字符串連接。連接的字符串上要使用''(英文單引號)
????????????
??????????? 3.使用算術(shù)表達(dá)式
????????????? SELECT<>子句中,expression可以使用含有加減乘除運(yùn)算符的算術(shù)表達(dá)式,運(yùn)算次序與數(shù)學(xué)上的規(guī)定一致,若要改變運(yùn)算次序,也可以使用括號
????????????
??????????? 空值處理
??????????? 空值(NULL)用來在數(shù)據(jù)庫中表示未知或未確定的值,任何數(shù)據(jù)類型的列,只要沒有使用非空(NOT NULL)或主鍵(PRIMARY KEY)完整性限制,都可能出現(xiàn)控制(NULL)
??????????? 空值(NULL)沒有數(shù)據(jù)類型,在oracle數(shù)據(jù)庫中表示未知或未確定的值,無論是數(shù)字類,文本類,或者日期類,都可以用同一的空值NULL表示
??????????? 1.空值null的形成
??????????? 通過使用SQL語句INSERT插入數(shù)據(jù)或UPDATE來修改數(shù)據(jù)時(shí),可以在表中某列形成空值(NULL)。
??????????? 2.空值(null)參與運(yùn)算
??????????? 當(dāng)空值(NULL)參與運(yùn)算時(shí),如果空值(null)出現(xiàn)在算術(shù)表達(dá)式中,其運(yùn)算結(jié)果也為NULL,如果空值NULL出現(xiàn)在字符串連接表達(dá)式中,ORALCE將其作為空串即等價(jià)于零個(gè)字符串處理
??????????? oracle提供了3個(gè)函數(shù)
??????????? (1)NVL(expression,expr2)其中expr1與expr2為函數(shù)表達(dá)式,可以是任意oracle內(nèi)部數(shù)據(jù)類型,但expr1與epxr2數(shù)據(jù)類型必須匹配,NVL()功能為,如果參數(shù)表達(dá)式expr1值為null,則nvl()函數(shù)返回expr2的值:如果參數(shù)表達(dá)式expr1值不為null,則nul()函數(shù)返回參數(shù)表達(dá)式expr1的值
?????????????? (2)NVL2(expr1,expr2,expr3)expr1,expr2,expr3
?????????????????? expr1的值為null,返回expr3的值? expr1的值不為null,則返回expr2的值(expr1,expr2,expr3數(shù)據(jù)類型匹配且為oralce內(nèi)部類型)
??????????????? (3)函數(shù)COALESCE()
??????????????? COALESCE(expr1[ , expr2 ].....)expr1,expr2,expr3數(shù)據(jù)類型匹配且為oralce內(nèi)部類型,函數(shù) 功能為:返回參數(shù)列表中的第一個(gè)非空值,如果所有表達(dá)式都是空值,最終將返回一個(gè)空值。
???????????? 4.2條件查詢
??????????? 使用WHERE子句可以指定約束條件。
??????????? SELECT<*/expression1 [AS alias1],..........> FROM talbe [WHERE condition(s) ]
??????????? WHERE用于指定條件,condition(s)給出具體的條件表達(dá)式。當(dāng)條件表達(dá)式取TRUE值時(shí),會檢索相應(yīng)行的數(shù)據(jù):當(dāng)條件表達(dá)式為FALSE值時(shí),則不會檢索該行數(shù)據(jù)
?????????????????????????? WHERE子句中常見的比較條件
?? = ??????? 等于????
??? >??????? 大于
??? >=?????? 大于等于
??? <??????? 小于
??? <=??????? 小于等于
??? <>.!=??????? 不等于
???
??? 包含測試????
??? IN??????? 在指定集合中
??? NOT IN??????? 不在指定集合中
??? 范圍測試
??? BETWEEN AND??????? 在指定范圍內(nèi)
??? NOT BETWEEN AND??????? 不在指定范圍內(nèi)
??? 匹配測試
??? LIKE??????? 于指定模式匹配
??? NOTLIKE??????? 不與指定模式匹配
??? NULL測試????????
??? IS NULL??????? 是NULL值
??? IS NOT NULL??????? 不是NULL值
????邏輯運(yùn)算符
??? AND??????? 邏輯與運(yùn)算符????????
??? OR??????????? 邏輯或運(yùn)算符
??? NOT??????????? 邏輯非運(yùn)算符
????????????????
?? 2單一條件查詢???
??????? 單一條件查詢:是指在WHERE子句condition(s)中,同時(shí)使用一個(gè)比較符構(gòu)成查詢條件
??? (1)使用算術(shù)運(yùn)算比較符
????????
?????????
??????? (2)使用包含測試
??????????? 在where語句中使用IN條件,IN條件被用來顯示一個(gè)組中的成員關(guān)系。當(dāng)有一個(gè)滿足條件的離散值列表時(shí),會用到IN條件。所有這些有效值將被作為一個(gè)逗號分隔的列表放入圓括號中。所有這些值必須有相同的數(shù)據(jù)類型---數(shù)字 字符 日期。混合使用這些類型是不合理的,在測試列的時(shí)候 這些值必須有相同的數(shù)據(jù)類型。
????????
??????? 3使用范圍測試
??????? WHERE 子句中使用BETWEEN-AND操作符用于指定一個(gè)范圍測試條件,在BETWEEN操作符后指定較小的一個(gè)值,在AND操作符后指定較大的一個(gè)值。BETWEEN-AND條件可以用于數(shù)字,字符和日期型數(shù)據(jù)。
????????
??????? 4使用匹配測試LIKE
??????? WHERE子句中LIKE條件的查詢,用于數(shù)據(jù)的查找模式。這些模式是使用通配符指定的,通配符中用于LIKE條件。可以使用一種模式類匹配測試任意一種主要數(shù)據(jù)類型(文本數(shù)字日期)的一個(gè)列
??????? %百分號?????? 表示0個(gè)或多個(gè)字符
??????? _下劃線??????? 表示單個(gè)字符
????????
??????? 5使用空值測試IS NULL
??????? WHERE子句中使用IS NULL條件,空值(NULL)用來在數(shù)據(jù)庫表示實(shí)際值未知或未確定的情況? 必須將條件寫為IS NULL,任何數(shù)據(jù)類型的值只要沒有使用非空NUT NULL或主鍵PRIMARY KEY完整性限制,都可能出現(xiàn)空值。
?????? 復(fù)合條件查詢
?????? 1.分別使用邏輯運(yùn)算符AND,OR,NOT
????????
??? ????
????????
??????? 2組合使用邏輯條件
??????? 在邏輯運(yùn)算符中AND,OR,NOT中,NOT優(yōu)先級最高,AND其次,OR最低,并且他們優(yōu)先級低于任何一種操作符,要改變優(yōu)先級則需要使用括號
????????
??????? 3記錄排序
??????? 執(zhí)行SELECT語句時(shí),若沒有指定顯示查詢結(jié)果數(shù)據(jù)行的先后順序,此時(shí)會按照表中數(shù)據(jù)插入的先后順序來顯示數(shù)據(jù)行。但在實(shí)際應(yīng)用中,經(jīng)常需要按特定的順序排列數(shù)據(jù)。使用含有OREDR BY子句的SELECT語句可以達(dá)到目的
?????????? SELECT <*/expression1 [AS alias1],......> FROM? table [ WHERE condition(s) ]? [ORDER BY expressino1 [ AS1 | DESC] ,.........];
??????? ORDER BY 子句的expression用于指定排序所依據(jù)的列或表達(dá)式,ASC關(guān)鍵字指定進(jìn)行升序排序(默認(rèn)),DESC關(guān)鍵字指定進(jìn)行降序排序.
????????? (1).按單一序列排序
??????????????? 1升序排序 按照ORDER BY子句的expression指定的列或表達(dá)式的值,從小到大排列數(shù)據(jù)行,在ORACLE數(shù)據(jù)庫中,當(dāng)按升序排序時(shí),如果指定的排序列包含有NULL值的記錄行,那么這些記錄行會排列到最后面
????????????????
??????????????? 升序排序可省略ASC
????????????????
??????????? (2)降序排序
??????????????? 降序排序是按照ORDER BY子句的expression指定的列或表達(dá)式的值,從大到小排列數(shù)據(jù)行,在ORACLE數(shù)據(jù)庫中,當(dāng)按降序排序時(shí),如果所指定的排序列包含有NULL值的記錄行,那么這些記錄行會排列在最前面.
????????????????? 如果在SELECT子句中為列或表達(dá)式指定了別名,那么當(dāng)執(zhí)行排序操作時(shí),既可以使用列或表達(dá)式進(jìn)行排序,也可以使用列或表達(dá)式別名進(jìn)行排序,如果列名或表達(dá)式名稱較長,那么使用列位置序號排序可以縮短排序語句的長度。
??????????? 使用列序號
????????????
??????????? 使用列別名
????????????
??????????? (2)按多列排序
????????????????
??????? ??? 4.4分組查詢
??????????? 查詢結(jié)果中的數(shù)據(jù)可以是原表整個(gè)列中數(shù)據(jù)分組統(tǒng)計(jì)值。比如經(jīng)常需要統(tǒng)計(jì)不同專業(yè)的學(xué)生人數(shù),教師的平均工資,教師的工資總和等,通過使用列(Agfgregate)函數(shù)。GROUP BY子句。以及HAVING子句來共同完成
?????????? SELECT <*/expression1 [AS alias1],....>? FROM table? [WHERE condition(s) ] [GROUP BY expression1,......] [HAVING condition(s) ];
??????????? SELECT 子句中 ,expressio用于指定選擇列表中的列或表達(dá)式,其中可以包含列函數(shù),用有指定分組函數(shù):GROUP BY子句中,expression用于指定分組表達(dá)式,HAVING子句中,condition用于指定限制分組結(jié)果的條件
??????????? (1)列函數(shù)及其應(yīng)用
??????????? 表中的數(shù)據(jù)使用列函數(shù)進(jìn)行統(tǒng)計(jì),列函數(shù)會檢查列中的所有數(shù)據(jù),原表中的每個(gè)行總是形成一個(gè)單行的統(tǒng)計(jì)結(jié)果
??????????????????????????????????????????????????? 列函數(shù)概述
用于字符。數(shù)值。日期型數(shù)據(jù)的列函數(shù)
MAX (column) ????? 列中的最大值
MIN (column) ????? 列中的最小值
COUNT(*) ?? 表中行的總數(shù)
COUNT(COLUMN)??? 列不為null的行
COUNT(distince column)? Column指定列中 相異值的數(shù)量
只用于數(shù)值型數(shù)據(jù)的列函數(shù)
SUM(column)??????? 列中所有值的總和
AVG(column)??????? 列中所有值的平均數(shù)
STDDEV(column) ??????? 列的標(biāo)準(zhǔn)偏差
VARIANCE??????? 列的方差
????????
????????
????????
????????
??????? 4.2GROUP? BY子句
??????? 通過使用GROUP BY子句,可以在表中達(dá)到數(shù)據(jù)分組的目的
??????? 在GROPOUP BY子句中,expression用于指定分組表達(dá)式,可以指定一個(gè)或多個(gè)表達(dá)式作為分組依據(jù),當(dāng)依據(jù)單列或單個(gè)表達(dá)式進(jìn)行分組時(shí),會基于列的每個(gè)不同值生成一個(gè)數(shù)據(jù)統(tǒng)計(jì)結(jié)果,當(dāng)依據(jù)多列或多個(gè)表達(dá)式分組時(shí),會基于多個(gè)列的不同值生成數(shù)據(jù)統(tǒng)計(jì)結(jié)果
????????`
????????
????????
????????
??????? 4.3HAVING子句
??????? GROUP BY子句用于指定分組的依據(jù),而HAVING子句則指定條件,用于限制分組顯示結(jié)果。HAVING子句中condition用于限定分組結(jié)果的條件,HAVING子句必須與GROUP BY子句一起使用,而GROUP BY子句通常是單獨(dú)使用的
????????
????????????
?????
總結(jié)
以上是生活随笔為你收集整理的oracle 单表查询 详细图文的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神舟Z7 KP5D1驱动
- 下一篇: OSI模型 TCP/IP模型 数据包结构