亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

數(shù)據(jù)查詢語言(Oracle VS MySQL)

系統(tǒng) 1768 0

簡單查詢

假設(shè)有這樣一張表students:

STUDENT_ID?MONITOR_ID? NAME ???????SEX????DOB????????????SPECIALTY

----------?----------?----------?------?--------------?----------

?????10101????????????王曉芳?????女?????07-5月?-88?????計算機

?????10205????????????李秋楓?????男?????25-11月-90?????自動化

?????10102??????10101?劉春蘋?????女?????12-8月?-91?????計算機

?????10301????????????高山???????男?????08-10月-90?????機電工程

?????10207??????10205?王剛???????男?????03-4月?-87?????自動化

?????10112??????10101?張純玉?????男?????21-7月?-89?????計算機

?????10318??????10301?張冬云?????女?????26-12月-89?????機電工程

?????10103??????10101?王天儀?????男?????26-12月-89?????計算機

?????10201??????10205?趙風雨?????男?????25-10月-90?????自動化

?????10105??????10101?韓劉???????男?????03-8月?-91?????計算機

?????10311??????10301?張楊???????男?????08-5月?-90?????機電工程

?????10213??????10205?高淼???????男?????11-3月?-87?????自動化

?????10212??????10205?歐陽春嵐???女?????12-3月?-89?????自動化

?????10314??????10301?趙迪帆?????男?????22-9月?-89?????機電工程

?????10312??????10301?白菲菲?????女?????07-5月?-88?????機電工程

?????10328??????10301?曾程程?????男????????????????????機電工程

?????10128??????10101?白昕???????男????????????????????計算機

?????10228??????10205?林紫寒?????女????????????????????自動化

?

查詢表中所有信息

select ?*? from ?[tableName];

eg:? select ?*? from ?students;

顯示指定列的信息:

select ?[columnName1?< as ?otherName1>,columnName2?< as ?otherName2>,?...]? from ?[tableName];

columnName列名,?columnName?< as ?otherName>表示將columnName這個列名改成別名otherName,如果別名otherName有大小之分,或者?包含特殊字符或空格,則別名必須用""引上;如果不改名則可以省略?< as ?otherName>;

eg: select ?student_id,?monitor_id? as ?班長ID,? name ? as ?姓名? from ?students;

?

?

空值處理

空值( NULL )用來在數(shù)據(jù)庫中表示未知或未確定的值。任何類型的列,只要沒有使用非空( NOT ? NULL )或主鍵( PRIMARY ? KEY )完整性限制,都可能出現(xiàn)空值( NULL ).

空值沒有數(shù)據(jù)類型,在數(shù)據(jù)庫中表示未知或未確定的值,無論是數(shù)字類型、文本類型或日期類型,都可以用統(tǒng)一的空值( NULL )表示。

1.如果表中某列沒有使用非空( NOT ? NULL )或主鍵( PRIMARY ? KEY )完整性限制,其默認值為空值。使用insert語句插入數(shù)據(jù)時未指定該列的值,則其值為空值;指定的列, 如果其值確實為空,則可以用NULL表示;使用UPDATE語句將表中某列數(shù)據(jù)改成空值,可以用NULL表示。

2.空值參與運算時,如果在算術(shù)表達式中,其結(jié)果為宿空值,Oracle中不顯示任何值,MySQL上顯示NULL。如果在字符串連接表達式中,Oracle將其作為空串處理;

MySQL中好像沒有字符串連接的操作,但在搜索的結(jié)果中表示成為NULL。 為了正確解決上述因為NULL參加運算時出現(xiàn)的問題,Oracle提供了3個函數(shù)可以進行處理。3個函數(shù)的用法如下:

(1).NVL(expr1,?expr2);

????expr1,?expr2為函數(shù)參數(shù)表達式,可以是任意的Oracle內(nèi)部數(shù)據(jù)類型,但expr1與expr2的數(shù)據(jù)類型必須要匹配;

函數(shù)的功能:如果expr1為NULL,則返回expr2的值,否則如果不為NULL則返回expr1的值。

eg.有teachers表如下:

TEACHER_ID? NAME ??TITLE??HIRE_DATE??????????BONUS??????WAGE??DEPARTMENT_ID

------?--------?------?--------------?----------?----------?-------------

?????10210?楊文化???教授???03-10月-89???????????1000???????3100???????????102

?????10206?崔天?????助教???05-9月?-00????????????500???????1900???????????102

?????10209?孫晴碧???講師???11-5月?-98????????????600???????2500???????????102

?????10207?張珂?????講師???16-8月?-97????????????700???????2700???????????102

?????10308?齊沈陽???高工???03-10月-89???????????1000???????3100???????????103

?????10306?車東日???助教???05-9月?-01????????????500???????1900???????????103

?????10309?臧海濤???工程師?29-6月?-99????????????600???????2400???????????103

?????10307?趙昆?????講師???18-2月?-96????????????800???????2700???????????103

?????10128?王曉????????????05-9月?-07??????????????????????1000???????????101

?????10328?張笑????????????29-9月?-07??????????????????????1000???????????103

?????10228?趙天宇??????????18-9月?-07??????????????????????1000???????????102


SQL >? SELECT ? name ? AS ?"姓名", ?NVL(bonus,0)+wage ? AS ? "月總收入" ? FROM ? teachers;

姓名???????月總收入

--------?----------

楊文化?????????4100

崔天???????????2400

孫晴碧?????????3100

張珂???????????3400

齊沈陽?????????4100

車東日?????????2400

臧海濤?????????3000

趙昆???????????3500

王曉???????????1000

張笑???????????1000

趙天宇?????????1000

(2).NVL2(expr1,?expr2,?expr3);

????expr1,?expr2為函數(shù)參數(shù)表達式,取Oracle內(nèi)部數(shù)據(jù)類型,但expr2、expr3的數(shù)據(jù)類型必須要與expr1的數(shù)據(jù)類型相匹配;

函數(shù)的功能:如果expr1的值為空,則返回expr3的值;如果expr1的值不為空,則返回expr2的值。


SQL >? SELECT ? name ? AS ?"姓名",?NVL2(bonus,bonus+wage,wage)? AS ?"月總收入"? FROM ?teachers;

姓名???????月總收入

--------?----------

楊文化?????????4100

崔天???????????2400

孫晴碧?????????3100

張珂???????????3400

齊沈陽?????????4100

車東日?????????2400

臧海濤?????????3000

趙昆???????????3500

王曉???????????1000

張笑???????????1000

趙天宇?????????1000

(3). COALESCE (expr,?[,?expr]?...);

????其中,expr1、expr2、...為函數(shù)參數(shù)表達式,取Oracle的內(nèi)部數(shù)據(jù)類型;函數(shù)功能:返回參數(shù)列表中的第一個非空值。如果表達式都是空值,則返回一個空值。

?

?

條件查詢

select ?*? from ?[tableName]? where ?[condition];

select ?[columnName1?< as ?otherName1>,columnName2?< as ?otherName2>,?...]? from ?[tableName]? where ?[condition];

where子句用于指定查詢條件,condition是具體的條件表達式。當condition的值值為true時檢索相應(yīng)的數(shù)據(jù)。

比較條件

功能描述

例子

算術(shù)比較條件

=

等于

Name=’張三’

>

大于

Bonus>500

>=

大于等于

Bonus>=500

<

小于

Bonus<1000

<=

小于等于

Hire_date?<?‘06-7 -2001

<>

不等于

Bonus>=1000

包含測試

IN

在指定的集合中

Student_id?in(10101 10102)

NOT??IN

不在指定的集合中

Student_id?not?in(10101 10102)

范圍測試

BETWEEN?...?AND

在指定的范圍內(nèi)

Age?between?10?and?40

NOT?BETWEEN?...?AND

不在指定的范圍內(nèi)

Age?between?0?and?15

匹配測試

LIKE

與指定模式匹配

Name?like?‘羅 %

NOT??LIKE

不與指定模式匹配

Name?not?lik?‘李 %

NULL 測試

IS?NULL

是NULL

Name?is?null

IS??NOT??NULL

不是NULL

Name?is?not?null

邏輯運算符

AND

邏輯與運算

Bouns?>500?and?bounus?<?=1000

OR

邏輯或運算

Bouns>500?or?name?like?‘王 %

NOT

邏輯非運算

Not?bonus=500

?

單一條件查詢

在condition中,值使用一個比較符構(gòu)成的條件查詢條件。如:


SQL >? select ?*? from ?students? where ?student_id<=10128;

?

STUDENT_ID?MONITOR_ID? NAME ???????SEX????DOB????????????SPECIALTY

----------?----------?----------?------?--------------?----------

?????10101????????????王曉芳?????女?????07-5月?-88?????計算機

?????10102??????10101?劉春蘋?????女?????12-8月?-91?????計算機

?????10103??????10101?王天儀?????男?????26-12月-89?????計算機

?????10105??????10101?韓劉???????男?????03-8月?-91?????計算機

?????10112??????10101?張純玉?????男?????21-7月?-89?????計算機

?????10128??????10101?白昕???????男????????????????????計算機

?

?

復(fù)合條件查詢

復(fù)合條件查詢用邏輯運算符and、 or 、not將多個條件連接起來作為查詢條件。如:

SQL >? select ?*? from ?students? where ?student_id<=10128? and ?sex= '女' ;

?

STUDENT_ID?MONITOR_ID? NAME ???????SEX????DOB????????????SPECIALTY

----------?----------?----------?------?--------------?----------

?????10101????????????王曉芳?????女?????07-5月?-88?????計算機

?????10102??????10101?劉春蘋?????女?????12-8月?-91?????計算機

?

?

記錄排序

執(zhí)行select語句時如果沒有指定顯示查詢結(jié)果的先后順序,此時會按照表中數(shù)據(jù)的插入的順序顯示數(shù)據(jù)行。要對查找到的數(shù)據(jù)按某種順序進行顯示, 可以使用order?by子句的select語句來達到此目的。格式如下:

select ?*? from ?[tableName]? from ?[tableName]?< where ?[condition]>? order ? by ?[columnName]?< ASC | DESC >;

select ?[columnName1?< as ?otherName1>,columnName2?< as ?otherName2>,?...]? from ?[tableName]?< where ?[condition]>? order ? by ?[columnName]?< ASC | DESC >;

其中condition指排序所依據(jù)的列或表達式,ASC表示按升序排序(默認),DESC表示按降序排序;?< ASC | DESC >值可以缺省,缺省是默認是ASC升序方式排序。

?

按單一列排序

按單一列排序,是指order? by ?子句的columnName只指一個列或一個表達式。 如departments表


DEPARTMENT_ID?DEPARTME?ADDRESS

-------------?--------?------------

??????????101?信息工程?1號教學樓

??????????102?電氣工程?2號教學樓

??????????103?機電工程?3號教學樓

??????????104?工商管理?4號教學樓

select ?*? from ?departments? order ? by ?department_name? asc ;

DEPARTMENT_ID?DEPARTME?ADDRESS

-------------?--------?-----------

??????????102?電氣工程?2號教學樓

??????????104?工商管理?4號教學樓

??????????103?機電工程?3號教學樓

??????????101?信息工程?1號教學樓

按多列排序

按多列排序是指order?by子句的columnName只指一個以上列或一個表達式。?查詢結(jié)果中的數(shù)據(jù)首先按columnName指定的第一個列進行排序,然后根據(jù)columnName指定的

第三個列進行排序,以此類推。


SQL >? select ?student_id,?monitor_id,?sex,? name ? from ?

students? order ? by ?sex,?monitor_id;

?

STUDENT_ID?MONITOR_ID?SEX???? NAME

----------?----------?------?----------

?????10128??????10101?男?????白昕

?????10105??????10101?男?????韓劉

?????10103??????10101?男?????王天儀

?????10112??????10101?男?????張純玉

?????10207??????10205?男?????王剛

?????10201??????10205?男?????趙風雨

?????10213??????10205?男?????高淼

?????10314??????10301?男?????趙迪帆

?????10311??????10301?男?????張楊

?????10328??????10301?男?????曾程程

?????10205????????????男?????李秋楓

?????10301????????????男?????高山

?????10102??????10101?女?????劉春蘋

?????10228??????10205?女?????林紫寒

?????10212??????10205?女?????歐陽春嵐

?????10318??????10301?女?????張冬云

?????10312??????10301?女?????白菲菲

?????10101????????????女?????王曉芳

?

?

?

分組查詢

列函數(shù)及其應(yīng)用

分組查詢主要是用于查詢整個表中的統(tǒng)計信息,通過使用列(aggregate)函數(shù)、 group ? by ?子句及having?子句來共同完成此類的操作。

分株查詢的格式:

select ?[columnName1?< as ?otherName1>,columnName2?< as ?otherName2>,?...]? from ?[tableName]?< where ?[condition]>? group ? by ?[columnName1,?columnName2,?...]

?< having ?condition>;

列函數(shù)概述

(Aggregate) 函數(shù)

功能描述

用于字符、數(shù)值、日期型數(shù)據(jù)的列函數(shù)

MAX(column)

列中的最大值

MIN(column)

列中的最小值

COUNT(*)

表中行的總數(shù)

COUNT(column)

列不為NULL 的行數(shù)

COUNT(distinct?column)

Column 指定列中相異值的數(shù)量

只用于數(shù)值型數(shù)據(jù)的列函數(shù)

SUM(column)

列中所有值的總和

AVG(column)

列中所有值的平均數(shù)

STDDEV(column)

列的標準偏差

VARIANCE(column)

列的方差

?

eg:求students表中的學生人數(shù)

SQL >? select ? count (*)? from ?students;

?? COUNT (*)

----------

????????18

?

mysql>? select ? count (*)? from ?students;

+ ----------+

|? count (*)?|

+ ----------+

|????????7?|

+ ----------+

1? row ? in ? set ?(0.00?sec)

?

group ? by ?子句

通過group? by ?子句,可以在表中達到將數(shù)據(jù)分組的目的。將表的行分為若于組,這些組中的行并不重復(fù)。然后通過列函數(shù)分別組詩每個級,這樣每個組都有一個統(tǒng)計值。

group ? by ?子句中,columnName用于指定分組的列或表達式,可以指定一個或多個表達式作為分組依據(jù)。當依據(jù)單列分組時,會基于列的每個不同值生成一個數(shù)據(jù)統(tǒng)計結(jié)果;

當依據(jù)多列分組時會基于多個列的不同值生成統(tǒng)計結(jié)果,MySQL好像不支持依據(jù)多列進行統(tǒng)計。

eg;按班長ID對students表進行排序

SQL >? select ?monitor_id? from ?students? group ? by ?monitor_id;

MONITOR_ID

----------

?

?????10101

?????10301

?????10205

?

mysql>? select ?monitor_id? from ?students? group ? by ?monitor_id;

+ ------------+

|?monitor_id?|

+ ------------+

|??????? NULL ?|

|??????10101?|

|??????10205?|

|??????10301?|

+ ------------+

4? rows ? in ? set ?(0.20?sec)

?

eg:按專業(yè)及班長ID對students表進行分組

SQL >? select ?specialty,monitor_id? from ?students? group ? by ?specialty,?monitor_id;

SPECIALTY??MONITOR_ID

----------?----------

計算機

機電工程

自動化

自動化??????????10205

機電工程????????10301

計算機??????????10101

?

eg:求students表中男生和女生的人數(shù)分別為多少 。

SQL >? select ?sex,? count (sex)? from ?students? group ? by ?sex;

?

SEX???? COUNT (SEX)

------?----------

男?????????????12

女??????????????6

?

?

having ?子句

group ? by ?子句用于指定分組的依據(jù),而having子句則指定條件,用于限制分組顯示的結(jié)果。 having ?子句中的condition用于指定限制分組的條件。

having子句必須與group?by子句一起使用,而group?by子句通常是單獨使用的。

eg:檢索教師平均工資高于2000的系部,顯示系部號、平均工資。

SQL >? select ?department_id,? avg (wage)? from ?teachers? group ? by ?department_id? having

? avg (wage)>2000;

DEPARTMENT_ID?? AVG (WAGE)

-------------?----------

??????????102???????2240

??????????103???????2220

?

?

?

數(shù)據(jù)查詢語言(Oracle VS MySQL)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99国产精品视频免费观看 | 天天做夜夜做 | 亚洲精品一区最新 | 久热re在线视频精品免费 | 伊人75| 国产这里只有精品 | 99久久精品视香蕉蕉er热资源 | 四虎综合网 | 毛片3| 亚洲成在人天堂一区二区 | 欧美a视频在线观看 | 亚洲欧美大片 | 天天操人人干 | 秒播影视 午夜福利毛片 | 精品哟哟哟国产在线观看不卡 | 成人毛片在线播放 | 色域综合| 999成人国产精品 | 五月天婷婷一区二区三区久久 | 精品日韩二区三区精品视频 | 免费观看大片bbb | 精品午夜寂寞黄网站在线 | 99成人免费视频 | 国产一级毛片视频在线! | 中文字幕在线观 | wwxx全免费视频 | 国产a级高清版毛片 | 人人爱操| 伊人涩| 国产一区二区三区在线观看视频 | 男女拍拍视频黄的全免费 | 欧美特级毛片aaaa | 国产精品午夜在线观看 | 欧美麻豆久久久久久中文 | 国产成人18黄禁网站免费观看 | 国产亚洲精品久久久久久久软件 | 久久99青青久久99久久 | 国产成人网 | 91精品成人免费国产 | 久久九九亚洲精品 | 国产激情一区二区三区在线观看 |