<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小方的Java博客

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      27 隨筆 :: 17 文章 :: 115 評(píng)論 :: 0 Trackbacks



    表操作

    ?

    1? 對(duì)于表的教學(xué)管理數(shù)據(jù)庫中的表 STUDENTS ,可以定義如下:

    ?? CREATE? TABLE? STUDENTS

    ?? (SNO????? NUMERIC (6, 0) NOT NULL

    ?? SNAME??? CHAR (8) NOT NULL

    ?? AGE????? NUMERIC(3,0)

    ?? SEX????? CHAR(2)

    ?? BPLACE? CHAR(20)

    ?? PRIMARY KEY(SNO))

    2? 對(duì)于表的教學(xué)管理數(shù)據(jù)庫中的表 ENROLLS ,可以定義如下:

    ????? ??CREATE? TABLE? ENROLLS

    ??????? (SNO????? NUMERIC(6,0)? NOT NULL

    ??????? CNO???? CHAR(4)? NOT NULL

    ??????? GRADE?? INT

    ??????? PRIMARY KEY(SNO,CNO)

    ??????? FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO)

    ??????? FOREIGN KEY(CNO) REFERENCES COURSES(CNO)

    ??????? CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100)))

    3? 根據(jù)表的 STUDENTS 表,建立一個(gè)只包含學(xué)號(hào)、姓名、年齡的女學(xué)生表。

    ??????? CREATE TABLE GIRL

    ??????? AS SELECT SNO, SNAME, AGE

    ??????? FROM STUDENTS

    ??????? WHERE SEX=' ';


    ?

    4? 刪除教師表 TEACHER

    ??????? DROP? TABLE? TEACHER

    5? 在教師表中增加住址列。

    ?????? ALTER TABLE TEACHERS

    ?????? ADD (ADDR CHAR(50))

    6? STUDENTS 表中的 BPLACE 列刪除,并且把引用 BPLACE 列的所有視圖和約束也一起刪除。

    ??????? ALTER TABLE STUDENTS

    ??????? DROP BPLACE CASCADE

    7? 補(bǔ)充定義 ENROLLS 表的主關(guān)鍵字。

    ????? ?ALTER TABLE ENROLLS

    ?????? ADD PRIMARY KEY (SNO,CNO)

    ?

    視圖操作(虛表)

    ?

    9? 建立一個(gè)只包括教師號(hào)、姓名和年齡的視圖 FACULTY ( 在視圖定義中不能包含 ORDER BY 子句 )

    ??????? CREATE VIEW FACULTY

    ??????? AS SELECT TNO, TNAME, AGE

    ??????? FROM TEACHERS

    10? 從學(xué)生表、課程表和選課表中產(chǎn)生一個(gè)視圖 GRADE_TABLE 它包括學(xué)生姓名、課程名和成績。

    ??????? CREATE VIEW GRADE_TABLE

    ??????? AS SELECT? SNAME,CNAME,GRADE

    ??????? FROM? STUDENTS,COURSES,ENROLLS

    ??????? WHERE? STUDENTS.SNO ENROLLS.SNO AND

    ??????? COURSES.CNO=ENROLLS.CNO

    11? 刪除視圖 GRADE_TABLE

    ??????? DROP VIEW GRADE_TABLE RESTRICT

    ?

    索引操作

    ?

    12? 在學(xué)生表中按學(xué)號(hào)建立索引。

    ??????? CREATE ?UNIQUE ?INDEX ?ST

    ??????? ON STUDENTS (SNO,ASC)

    13? 刪除按學(xué)號(hào)所建立的索引。

    ??????? DROP INDEX ST

    ?

    數(shù)據(jù)庫模式操作

    ?

    14? 創(chuàng)建一個(gè)簡易教學(xué)數(shù)據(jù)庫的數(shù)據(jù)庫模式 ? TEACHING_DB ,屬主為 ZHANG

    ??????? CREATE SCHEMA TEACHING_DB ?AUTHRIZATION ?ZHANG

    15? 刪除簡易教學(xué)數(shù)據(jù)庫模式 TEACHING_DB 。(( 1 )選用 CASCADE ,即當(dāng)刪除數(shù)據(jù)庫模式時(shí),則本數(shù)據(jù)庫模式和其下屬的基本表、視圖、索引等全部被刪除。( 2 )選用 RESTRICT ,即本數(shù)據(jù)庫模式下屬的基本表、視圖、索引等事先已清除,才能刪除本數(shù)據(jù)庫模式,否則拒絕刪除。)

    ??????? DROP SCHEMA TEACHING_DB CASCADE

    單表操作

    ?

    16? 找出 3 個(gè)學(xué)分的課程號(hào)和課程名。

    ???????? SELECT CNO, CNAME

    ???????? FROM   COURSES

    ???????? WHERE   CREDIT 3

    17? 查詢年齡大于 22 歲的學(xué)生情況。

    ???????? SELECT? *

    ???????? FROM?? STUDENTS

    ???????? WHERE? AGE 22

    18?? 找出籍貫為河北的男生的姓名和年齡。

    ???????? SELECT SNAME, AGE

    ???????? FROM   STUDENTS

    ???????? WHERE   BPLACE ' 河北 ' ?AND? SEX ' '

    19? 找出年齡在 20 23 歲之間的學(xué)生的學(xué)號(hào)、姓名和年齡,并按年齡升序排序。 (ASC (升序)或 DESC (降序)聲明排序的方式,缺省為升序。 )

    ???????? SELECT SNO, SNAME, AGE

    ???????? FROM?? STUDENTS

    ???????? WHERE? AGE BETWEEN 20 AND 23

    ???????? ORDER? BY ?AGE

    20? 找出年齡小于 23 歲、籍貫是湖南或湖北的學(xué)生的姓名和性別。(條件比較運(yùn)算符=、< 和邏輯運(yùn)算符 AND (與),此外還可以使用的運(yùn)算符有:>(大于)、>=(大于等于)、<=(小于等于)、<>(不等于)、 NOT (非)、 OR (或)等。

    謂詞 LIKE 只能與字符串聯(lián)用,常常是 <列名> ? LIKE? pattern” 的格式。特殊字符 “_” “%” 作為通配符。

    謂詞 IN 表示指定的屬性應(yīng)與后面的集合(括號(hào)中的值集或某個(gè)查詢子句的結(jié)果)中的某個(gè)值相匹配,實(shí)際上是一系列的 OR (或)的縮寫。謂詞 NOT IN 表示指定的屬性不與后面的集合中的某個(gè)值相匹配。

    謂詞 BETWEEN 包含于 之中 的意思。)

    ??????? SELECT SNAME, SEX

    ??????? FROM?? STUDENTS

    ??????? WHERE? AGE 23? AND? BPLACE? LIKE' 湖% '

    ???????

    ??????? SELECT SNAME, SEX

    ??????? FROM?? STUDENTS

    ??????? WHERE? AGE 23? AND? BPLACE? IN? ' 湖南 ' ' 湖北 '

    22? 找出學(xué)生表中籍貫是空值的學(xué)生的姓名和性別。(在 SQL 中不能使用條件:<列名>= NULL 。在 SQL 中只有一個(gè)特殊的查詢條件允許查詢 NULL 值:)

    ?????? SELECT SNAME, SEX

    ?????? FROM?? STUDENTS

    ?????? WHERE? BPLACE IS NULL


    ?

    多表操作

    ?

    23? 找出成績?yōu)?/span> 95 分的學(xué)生的姓名。(子查詢)

    ??????? SELECT SNAME

    ??????? FROM   STUDENTS

    ??????? WHERE   SNO

    ????????????? (SELECT SNO

    ?????????????? FROM?? ENROLLS

    ?????????????? WHERE? GRADE 95)

    24? 找出成績?cè)?/span> 90 分以上的學(xué)生的姓名。

    ? ??????SELECT? SNAME

    ??????? FROM?? STUDENTS

    ??????? WHERE? SNO IN

    ??????????????? (SELECT SNO

    ??????????????? FROM ENROLLS

    ??????????????? WHERE GRADE 90)

    ???????

    ??????? SELECT? SNAME

    ??????? FROM?? STUDENTS

    ??????? WHERE? SNO ANY

    ??????????????? (SELECT SNO

    ??????????????? FROM ENROLLS

    ??????????????? WHERE GRADE 90)

    25? 查詢?nèi)繉W(xué)生的學(xué)生名和所學(xué)課程號(hào)及成績。(連接查詢)

    ??????? SELECT? SNAME, CNO, GRADE

    ??????? FROM?? STUDENTS, ENROLLS

    ??????? WHERE? STUDENTS.SNO ENROLLS.SNO

    26? 找出籍貫為山西或河北,成績?yōu)?/span> 90 分以上的學(xué)生的姓名、籍貫和成績。(當(dāng)構(gòu)造多表連接查詢命令時(shí),必須遵循兩條規(guī)則。第一,連接條件數(shù)正好比表數(shù)少 1 (若有三個(gè)表,就有兩個(gè)連接條件 ) ;第二,若一個(gè)表中的主關(guān)鍵字是由多個(gè)列組成,則對(duì)此主關(guān)鍵字中的每一個(gè)列都要有一個(gè)連接條件(也有少數(shù)例外情況))

    ??????? SELECT? SNAME, BPLACE, GRADE

    ??????? FROM?? STUDENTS, ENROLLS

    ??????? WHERE? BPLACE IN (‘ 山西 河北 ’)? AND? GRADE >= 90? AND   STUDENTS.SNO=ENROLLS.SNO

    28? 查出課程成績?cè)?/span> 80 分以上的女學(xué)生的姓名、課程名和成績。( FROM 子句中的子查詢)

    ??????? SELECT? SNAME,CNAME, GRADE

    ??????? FROM?? (SELECT SNAME, CNAME , GRADE

    ??????????????????????? FROM? STUDENTS, ENROLLS,COURSES

    ??????????????????????? WHERE? SEX ' ')

    ??????? AS TEMP (SNAME, CNAME,GRADE)

    ??????? WHERE? GRADE 80

    ?

    ?

    ?

    ?

    表達(dá)式與函數(shù)的使用

    ?

    29? 查詢各課程的學(xué)時(shí)數(shù)。(算術(shù)表達(dá)式由算術(shù)運(yùn)算符+、-、 * 、/與列名或數(shù)值常量所組成。)

    ??????? SELECT? CNAME,COURSE_TIME CREDIT*16

    ??????? FROM?? COURSES

    30? 找出教師的最小年齡。(內(nèi)部函數(shù): SQL 標(biāo)準(zhǔn)中只使用 COUNT SUM AVG MAX MIN 函數(shù),稱之為聚集函數(shù)( Set Function )。 COUNT 函數(shù)的結(jié)果是該列統(tǒng)計(jì)值的總數(shù)目, SUM 函數(shù)求該列統(tǒng)計(jì)值之和, AVG 函數(shù)求該列統(tǒng)計(jì)值之平均值, MAX 函數(shù)求該列最大值, MIN 函數(shù)求該列最小值。)

    ??????? SELECT? MIN(AGE)

    ??????? FROM?? TEACHERS

    31? 統(tǒng)計(jì)年齡小于等于 22 歲的學(xué)生人數(shù)。(統(tǒng)計(jì))

    ??????? SELECT? COUNT(*)

    ??????? FROM?? STUDENTS

    ??????? WHERE? AGE < 22

    32? 找出學(xué)生的平均成績和所學(xué)課程門數(shù)。

    ??????? SELECT? SNO, AVG(GRADE), COURSES COUNT(*)

    ??????? FROM?? ENROLLS

    ??????? GROUP? BY SNO

    ?

    34? 找出年齡超過平均年齡的學(xué)生姓名。

    SELECT SNAME

    FROM STUDENTS

    WHERE AGE

    ????? (SELECT? AVG(AGE)

    ??????? FROM?? STUDENTS)


    ?

    35? 找出各課程的平均成績,按課程號(hào)分組,且只選擇學(xué)生超過 3 人的課程的成績。( GROUP BY HAVING

    ??????? GROUP BY 子句把一個(gè)表按某一指定列(或一些列)上的值相等的原則分組,然后再對(duì)每組數(shù)據(jù)進(jìn)行規(guī)定的操作。

    ??????? GROUP BY 子句總是跟在 WHERE 子句后面,當(dāng) WHERE 子句缺省時(shí),它跟在 FROM 子句后面。

    ??????? HAVING 子句常用于在計(jì)算出聚集之后對(duì)行的查詢進(jìn)行控制。)

    ???????? SELECT CNO, AVG(GRADE), STUDENTS COUNT(*)

    ???????? FROM ENROLLS

    ???????? GROUP BY CNO

    ???????? HAVING COUNT(*) >= 3

    ?

    相關(guān)子查詢

    ?

    37? 查詢沒有選任何課程的學(xué)生的學(xué)號(hào)和姓名。(當(dāng)一個(gè)子查詢涉及到一個(gè)來自外部查詢的列時(shí),稱為相關(guān)子查詢( Correlated Subquery) 。相關(guān)子查詢要用到存在測(cè)試謂詞 EXISTS NOT EXISTS ,以及 ALL ANY SOME )等。)

    ??????? SELECT SNO, SNAME

    ??????? FROM?? STUDENTS

    ??????? WHERE? NOT EXISTS

    ????????????? (SELECT *

    ????????????? FROM ENROLLS

    ????????????? WHERE ENROLLS.SNO=STUDENTS.SNO)

    38?? 查詢哪些課程只有男生選讀。

    ??????? SELECT DISTINCT CNAME

    ??????? FROM?? COURSES C

    ??????? WHERE ' ' ALL

    ?????????????? (SELECT SEX

    ??? ????????????FROM? ENROLLS STUDENTS

    ??????????????? WHERE ENROLLS.SNO=STUDENTS.SNO AND

    ????????????????????? ENROLLS.CNO=C.CNO)

    39? 要求給出一張學(xué)生、籍貫列表,該表中的學(xué)生的籍貫省份,也是其他一些學(xué)生的籍貫省份。

    ??????? SELECT? SNAME, BPLACE

    ??????? FROM?? STUDENTS A

    ??????? WHERE? EXISTS

    ??? ???????????(SELECT *

    ???????????????? FROM STUDENTS B

    ???????????????? WHERE A.BPLACE=B.BPLACE AND

    ?????????????????????? A.SNO < > B.SNO)


    ?

    ?

    40? 找出選修了全部課程的學(xué)生的姓名。

    ??????? 本查詢可以改為:查詢這樣一些學(xué)生,沒有一門課程是他不選修的。

    ??????? SELECT? SNAME

    ??????? FROM?? STUDENTS

    ?????? ?WHERE? NOT EXISTS

    ?????????????? (SELECT *

    ??????????????? FROM COURSES

    ??????????????? WHERE? NOT EXISTS

    ??????????????????????? (SELECT *

    ???????????????????????? FROM ENROLLS

    ???????????????????????? WHERE ENROLLS.SNO STUDENTS.SNO

    ??????????????????? ?????????AND ENROLLS.CNO COURSES.CNO))

    關(guān)系代數(shù)運(yùn)算

    ?

    41? 設(shè)有某商場(chǎng)工作人員的兩張表:營業(yè)員表 SP_SUBORD 和營銷經(jīng)理表 SP_MGR ,其關(guān)系數(shù)據(jù)模式如下:

    ??????? SP_SUBORD (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)

    ??????? SP_MGR (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)

    ??????? 其中,屬性 SALPERS_ID 為工作人員的編號(hào) , SALPERS_NAME 為工作人員的姓名 , MANAGER_ID 為所在部門經(jīng)理的編號(hào) , OFFICE 為工作地點(diǎn)。

    若查詢?nèi)可虉?chǎng)工作人員,可以用下面的 SQL 語句:

    ??????? (SELECT * FROM SP_SUBORD)

    ??????? UNION

    ??????? (SELECT * FROM SP_MGR)

    ??????? 或等價(jià)地用下面的 SQL 語句:

    ??????? SELECT *

    ??????? FROM (TABLE SP_SUBORD UNION TABLE SP_MGR)

    2 INTERSECT

    ???????? (SELECT * FROM SP_SUBORD)

    ???????? INTERSECT

    ???????? (SELECT * FROM SP_MGR)

    ??????? 或等價(jià)地用下面的 SQL 語句:

    ??????? SELECT *

    ??????? FROM (TABLE SP_SUBORD INTERSECT TABLE SP_MGR)

    ??????? 或用帶 ALL SQL 語句:

    ??????? (SELECT * FROM SP_SUBORD)

    ? ??????INTERSECT ALL

    ??????? (SELECT * FROM SP_MGR)

    ???????

    ??????? SELECT *

    ??????? FROM (TABLE SP_SUBORD INTERSECT ALL TABLE SP_MGR)

    3 EXCEPT

    ??????? (SELECT * FROM SP_MGR)

    ??????? EXCEPT

    ??????? (SELECT * FROM SP_SUBORD)

    ??????? 或等價(jià)地用下面的 SQL 語句:

    ????? ??SELECT *

    ??????? FROM (TABLE SP_MGR EXCEPT TABLE SP_ SUBORD)

    ??????? 或用帶 ALL SQL 語句:

    ??????? (SELECT * FROM SP_MGR)

    ??????? EXCEPT? ALL

    ??????? (SELECT * FROM SP_SUBORD)

    42? 查詢籍貫為四川、課程成績?cè)?/span> 80 分以上的學(xué)生信息及其成績。(自然連接)

    ??????? (SELECT * FROM STUDENTS

    ???????? WHERE BPLACE=‘ 四川 ’)

    ??????? NATURAL JOIN

    ??????? (SELECT * FROM ENROLLS

    ???????? WHERE GRADE >=80)

    例3.43????????? 列出全部教師的姓名及其任課的課程號(hào)、班級(jí)。

    (外連接與外部并外連接允許在結(jié)果表中保留非匹配元組,空缺部分填以 NULL 。外連接的作用是在做連接操作時(shí)避免丟失信息。

    ??????? 外連接有 3 類:

    1 )左外連接( Left Outer Join )。連接運(yùn)算謂詞為 LEFT [OUTER] JOIN ,其結(jié)果表中保留左關(guān)系的所有元組。

    2 )右外連接( Right Outer Join )。連接運(yùn)算謂詞為 RIGHT [OUTER] JOIN ,其結(jié)果表中保留右關(guān)系的所有元組。

    3 )全外連接( Full Outer Join )。連接運(yùn)算謂詞為 FULL [OUTER] JOIN ,其結(jié)果表中保留左右兩關(guān)系的所有元組。)

    ????????? SELECT TNAME, CNO, CLASS

    ????????? FROM TEACHERS LEFT OUTER JOIN TEACHING USING (TNO)

    ?

    SQL 的數(shù)據(jù)操縱

    ?

    44? 把教師李映雪的記錄加入到教師表 TEACHERS 中。(插入)

    ??????? INSERT INTO TEACHERS

    ??????? VALUES(1476 ' 李映雪 ' 44 ' 副教授 ')

    45? 成績優(yōu)秀的學(xué)生將留下當(dāng)教師。

    ??????? INSERT INTO TEACHERS (TNO TNAME)

    ??????? SELECT DISTINCT SNO SNAME

    ??????? FROM?? STUDENTS ENROLLS

    ??????? WHERE STUDENTS.SNO ENROLLS.SNO AND GRADE >= 90

    47? 把所有學(xué)生的年齡增加一歲。(修改)

    ??????? UPDATE STUDENTS

    ??????? SET AGE AGE+1

    48? 學(xué)生張春明在數(shù)據(jù)庫課考試中作弊,該課成績應(yīng)作零分計(jì)。

    ??????? UPDATE ENROLLS

    ??????? SET GRADE 0

    ??????? WHERE CNO 'C1' AND

    ???????????? ' 張春明 '

    ???????????? (SELECT SNAME

    ???????????? FROM STUDENTS

    ???????????? WHERE STUDENTS.SNO=ENROLLS.SNO)

    49? 從教師表中刪除年齡已到 60 歲的退休教師的數(shù)據(jù)。(刪除)

    ??????? DELETE FROM TEACHERS

    ??????? WHERE? AGE >= 60

    ?

    SQL 的數(shù)據(jù)控制

    ?

    50? 授予 LILI 有對(duì)表 STUDENTS 的查詢權(quán)。(表/視圖特權(quán)的授予

    ??????? 一個(gè) SQL 特權(quán)允許一個(gè)被授權(quán)者在給定的數(shù)據(jù)庫對(duì)象上進(jìn)行特定的操作。授權(quán)操作的數(shù)據(jù)庫對(duì)象包括:表 / 視圖、列、域等。授權(quán)的操作包括: INSERT UPDATE DELETE SELECT REFERENCES TRIGGER UNDER USAGE EXECUTE 等。其中 INSERT UPDATE DELETE SELECT REFERENCES TRIGGER 有對(duì)表做相應(yīng)操作的權(quán)限,故稱為表特權(quán)。)

    ??????? GRANT SELECT ON STUDENTS

    ??????? TO LILI

    ??????? WITH GRANT OPTION

    51? 取消 LILI 的存取 STUDENTS 表的特權(quán)。

    ???? ???REVOKE ALL

    ??????? ON STUDENTS

    ??????? FROM LILI CASCADE

    ?


    不斷補(bǔ)充中:
    1.? 模糊查找:
    它判斷列值是否與指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等類型查詢。
      可使用以下通配字符:
      百分號(hào)%:可匹配任意類型和長度的字符,如果是中文,請(qǐng)使用兩個(gè)百分號(hào)即%%。
      下劃線_:匹配單個(gè)任意字符,它常用來限制表達(dá)式的字符長度。
      方括號(hào)[]:指定一個(gè)字符、字符串或范圍,要求所匹配對(duì)象為它們中的任一個(gè)。[^]:其取值也[] 相同,但它要求所匹配對(duì)象為指定字符以外的任一個(gè)字符。
       例如:
      限制以Publishing結(jié)尾,使用LIKE '%Publishing'
      限制以A開頭:LIKE '[A]%'
      限制以A開頭外:LIKE '[^A]%'


    2.更改表格 
    ???????? ALTER?TABLE?table_name?
    ????????ADD?COLUMN?column_name?DATATYPE?
    ????????說明:增加一個(gè)欄位(沒有刪除某個(gè)欄位的語法。)
    ????????ALTER?TABLE?table_name
    ????????ADD?PRIMARY?KEY?(column_name)
    ????????說明:更改表得的定義把某個(gè)欄位設(shè)為主鍵。
    ????????ALTER?TABLE?table_name
    ????????DROP?PRIMARY?KEY?(column_name)
    ????????說明:把主鍵的定義刪除。

    3.group by

    在select 語句中可以使用group by 子句將行劃分成較小的組,然后,使用聚組函數(shù)返回每一個(gè)組的匯總信息,另外,可以使用having子句限制返回的結(jié)果集。group by 子句可以將查詢結(jié)果分組,并返回行的匯總信息Oracle 按照group by 子句中指定的表達(dá)式的值分組查詢結(jié)果。

    在帶有g(shù)roup by 子句的查詢語句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚組函數(shù)

    select max(sal),job emp group by job;
    (注意max(sal),job的job并非一定要出現(xiàn),但有意義)

    查詢語句的select 和group by ,having 子句是聚組函數(shù)唯一出現(xiàn)的地方,在where 子句中不能使用聚組函數(shù)。

    select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;

    當(dāng)在gropu by 子句中使用having 子句時(shí),查詢結(jié)果中只返回滿足having條件的組。在一個(gè)sql語句中可以有where子句和having子句。having 與where 子句類似,均用于設(shè)置限定條件

    where 子句的作用是在對(duì)查詢結(jié)果進(jìn)行分組前,將不符合where條件的行去掉,即在分組之前過濾數(shù)據(jù),條件中不能包含聚組函數(shù),使用where條件顯示特定的行。
    having 子句的作用是篩選滿足條件的組,即在分組之后過濾數(shù)據(jù),條件中經(jīng)常包含聚組函數(shù),使用having 條件顯示特定的組,也可以使用多個(gè)分組標(biāo)準(zhǔn)進(jìn)行分組。

    查詢每個(gè)部門的每種職位的雇員數(shù)
    select deptno,job,count(*) from emp group by deptno,job;

    4.外連接與內(nèi)連接

    有時(shí)候,即使在連接的表中沒有相應(yīng)的行,用戶可能想從一張表中看數(shù)據(jù),Oracle提供了外連接實(shí)現(xiàn)該功能。
    內(nèi)連接是指連接查詢只顯示完全滿足連接條件的記錄,即等值連接,外連接的查詢結(jié)果是內(nèi)連接查詢結(jié)果的擴(kuò)展。外連接不僅返回滿足連接條件的所有記錄而且也返回了一個(gè)表中那些在另一個(gè)表中沒有匹配行的記錄。外連接的操作符是“+”。“+”號(hào)放在連接條件中信息不完全的那一邊(即沒有相應(yīng)行的那一邊)。運(yùn)算符“+”影響NULL行的建立。建一行或多行NULL來匹配連接的表中信息完全的行。

    外連接運(yùn)算符“+”只能出現(xiàn)在where子句中表達(dá)式的一邊。

    假如在多張表之間有多個(gè)連接條件,外連接運(yùn)算符不能使用or,in邏輯運(yùn)算符與其它條件組合。


    假如emp表中deptno=10的ename為空值,dept表中deptno=20的loc為空值:

    1.

    select
    ename,dept.deptno,loc
    from
    emp,dept
    where
    emp.depno(+)=dept.deptno;

    如果在dept.deptno中有的數(shù)值在emp.deptno中沒有值,則在做外連接時(shí),
    結(jié)果中ename會(huì)產(chǎn)生一個(gè)空值。(emp.deptno=10)

    2.

    select
    ename,dept.deptno,loc
    from
    emp,dept
    where
    emp.depno=dept.deptno(+);

    如果在emp.deptno中有的數(shù)值在dept.deptno中沒有值,則在做外連接時(shí),
    結(jié)果中l(wèi)oc會(huì)產(chǎn)生一個(gè)空值。。(dept.deptno=20)


    5.自連接

    自連接是指同一張表的不同行間的連接。該連接不受其他表的影響。用自連接可以比較同一張表中不同行的某一列的值。因?yàn)樽赃B接查詢僅涉及到某一張表與其自身的連接。所以在from子句中該表名出現(xiàn)兩次,分別用兩個(gè)不同的別名表示,兩個(gè)別名當(dāng)作兩張不同的表進(jìn)行處理,與其它的表連接一樣,別名之間也使用一個(gè)或多個(gè)相關(guān)的列連接。為了區(qū)分同一張表的不同行的列,在名前永別名加以限制。

    select
    worker.ename,
    manager.ename manager
    from
    emp worker,
    emp manager
    where
    work.mgr=manager.empno;

    6.集合運(yùn)算

    基合運(yùn)算符可以用于從多張表中選擇數(shù)據(jù)。

    ①UNION運(yùn)算
    用于求兩個(gè)結(jié)果集合的并集(兩個(gè)結(jié)果集合的所有記錄),并自動(dòng)去掉重復(fù)行。

    select ename,sal from account where sal>2000
    union
    select ename,sal from research where sal>2000
    union
    select ename,sal from sales where sal>2000;

    注:ename,sal 是必須一致的。

    ②UNION ALL運(yùn)算
    用于求兩個(gè)結(jié)果集合的并集(兩個(gè)結(jié)果集中的所有記錄),并且不去掉重復(fù)行。

    select ename,sal from account where sal>2000
    union
    select ename,sal from research where sal>2000
    union
    select ename,sal from sales where sal>2000;

    ③INTERSECT運(yùn)算
    intersect運(yùn)算返回查詢結(jié)果中相同的部分。

    各部門中有哪些相同的職位?

    select Job from account
    intersect
    select Job from research
    intersect
    select Job from sales;


    ④MINUS運(yùn)算
    minus返回兩個(gè)結(jié)果集的差集。(在第一個(gè)結(jié)果集中存在的,而在第二個(gè)結(jié)果集中不存在的行。)

    有那些職位是財(cái)務(wù)部中有,而在銷售部門中沒有?

    select Job from account
    minus
    select Job from sales;

    posted on 2006-07-19 00:37 方佳瑋 閱讀(5648) 評(píng)論(8)  編輯  收藏 所屬分類: 其他技術(shù)

    評(píng)論

    # re: SQL語句學(xué)習(xí)手冊(cè)實(shí)例版(本人整理,用來查詢) 2006-07-24 12:39 我拉
    小方辛苦了,學(xué)習(xí)了先   回復(fù)  更多評(píng)論
      

    # re: SQL語句學(xué)習(xí)手冊(cè)實(shí)例版(本人整理,用來查詢) 2006-07-25 12:35 redwave
    好東西,收藏了  回復(fù)  更多評(píng)論
      

    # re: SQL語句學(xué)習(xí)手冊(cè)實(shí)例版(本人整理,用來查詢) 2006-11-01 15:56 lala
    謝謝了
    我正在學(xué)習(xí),很使用,比那些純文本好學(xué)多了!!!  回復(fù)  更多評(píng)論
      

    # re: [整理]SQL語句學(xué)習(xí)手冊(cè)實(shí)例版[未登錄] 2007-03-29 17:42 King
    謝謝啦,親耐的~~~~~  回復(fù)  更多評(píng)論
      

    # re: [整理]SQL語句學(xué)習(xí)手冊(cè)實(shí)例版 2007-04-09 11:58 java者
    這樣講解就明白多了,謝謝!!  回復(fù)  更多評(píng)論
      

    # re: [整理]SQL語句學(xué)習(xí)手冊(cè)實(shí)例版 2007-05-17 16:51 heqi
    太棒了,謝謝  回復(fù)  更多評(píng)論
      

    # re: [整理]SQL語句學(xué)習(xí)手冊(cè)實(shí)例版 2007-07-17 16:25 西雨清風(fēng)
    太棒了,收藏~~~
    有PLSQL的就更爽了  回復(fù)  更多評(píng)論
      

    # re: [整理]SQL語句學(xué)習(xí)手冊(cè)實(shí)例版 2009-10-11 15:25 youyouday
    找的您好辛苦!您用心了!  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲中文字幕第一页在线| 羞羞网站免费观看| 人妻无码一区二区三区免费| 亚洲国产精品碰碰| 国产精品无码亚洲精品2021| 成人免费网站在线观看| 亚洲图片中文字幕| 91在线手机精品免费观看| 亚洲av午夜福利精品一区| 黄色网页在线免费观看| 免费人成网站在线高清| 亚洲av无码兔费综合| 成全高清视频免费观看| 国产 亚洲 中文在线 字幕| 无码乱肉视频免费大全合集| 亚洲国产精品乱码在线观看97| 99re热精品视频国产免费| 亚洲人成网址在线观看| 久久国产乱子伦精品免费一 | 亚洲日产韩国一二三四区| 一级人做人a爰免费视频| 亚洲精品tv久久久久久久久久| 免费大片av手机看片| 亚洲成av人片不卡无码久久| 麻豆91免费视频| 亚洲精品无码专区久久同性男| 一区二区三区免费高清视频| 亚洲精品亚洲人成在线观看下载| 特色特黄a毛片高清免费观看| 亚洲狠狠爱综合影院婷婷| gogo免费在线观看| 亚洲精品无码av人在线观看| 国产真人无码作爱免费视频| 亚洲成av人影院| 99re在线精品视频免费| 亚洲精品国产肉丝袜久久| 亚洲三级高清免费| 亚洲中文无码mv| 四虎影永久在线高清免费| 免费视频成人国产精品网站| 老司机亚洲精品影视www|