国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)庫(kù)第四章習(xí)題_完整版

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)庫(kù)第四章習(xí)題_完整版。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

數(shù)據(jù)庫(kù)系統(tǒng)概念第 4 章課后習(xí)題(完整版)


1. 實(shí)踐習(xí)題

1.1 請(qǐng)考慮以下 SQL 查詢(xún),該查詢(xún)旨在查找 2017 年春季講授的所有課程的標(biāo)題以及教師的姓名的列表。

select name, title
from instructor natural join teaches natural join section natural join course
where semeser = 'Spring' and year = 2017

請(qǐng)問(wèn)這個(gè)查詢(xún)有什么問(wèn)題?

首先 section 中并沒(méi)有我們需要使用到的屬性,所以這里 “natural join setion” 是多余的。

其次,更重要的一點(diǎn)是:在 instructor 關(guān)系和 course 關(guān)系中都有 dept_name 屬性,但是它們代表著不同的含義,一個(gè)指教師所屬的院系,一個(gè)指開(kāi)課院系。這兩個(gè)含義不同的屬性因?yàn)槊Q(chēng)相同,會(huì)被 natural join 合并,結(jié)果是:那些由非開(kāi)課院系的老師教授的課程不會(huì)被顯示在查詢(xún)結(jié)果中。

1.2 用 SQL 寫(xiě)出下面的查詢(xún):

  1. 請(qǐng)顯示所有教師的列表,展示每位教師的 ID 以及所講授課程段的編號(hào)(據(jù)網(wǎng)上查到的信息,應(yīng)該是講授的課程數(shù)量)。對(duì)于沒(méi)有講授任何課程段的教師,確保將課程段編號(hào)顯示為 0。你的查詢(xún)應(yīng)該使用外連接,且不能使用子查詢(xún)。
   select ID, coalesce(sec_id,0)	# 如果 sec_id 為空,則返回 0,否則返回 sec_id
   from instructor natural left outer join teaches
   order by ID;
   select ID, count(sec_id)
   from instructor natural left join teaches
   group by ID;
  1. 請(qǐng)使用標(biāo)量子查詢(xún)且不使用外連接來(lái)寫(xiě)出 1 中的查詢(xún)。

    SELECT
    	ID,
    	(SELECT count(sec_id) FROM teaches
    		WHERE teaches.ID = instructor.ID)
    FROM instructor;
    
  2. 請(qǐng)顯示 2018 年春季開(kāi)設(shè)的所有課程段的列表,包括講授課程段的每位教師的 ID 和姓名。如果一個(gè)課程段有不止一位教師講授,那么有多少位教師,此課程段在結(jié)果中就出現(xiàn)多少次。如果一個(gè)課程段并沒(méi)有任何教師,它也要出現(xiàn)在結(jié)果中,相應(yīng)的教師姓名被置為“一” 。

    網(wǎng)上查到的需要使用 decode() 函數(shù),但是 decode() 函數(shù)是 oracle 特有的,在 mysql 中可以用 case 或 if 實(shí)現(xiàn)。

    select
        year,
        semester,
        sec_id,
        case
            when ID is null then "--"
            ELSE ID
        end,
        case
            when name is null then "--"
            else name
        end
    from
        section natural left join teaches natural left join instructor
    where
        year = 2018
        and semester = "Spring";
    
  3. 請(qǐng)顯示所有系的列表,包括每個(gè)系中教師的總數(shù),不能使用子查詢(xún)。請(qǐng)確保顯示沒(méi)有教師的系,并用教師計(jì)數(shù)為零的方式來(lái)列出這些系。

    insert into department values("tmp", "tmp", 666);
    select dept_name, count(ID)
    from department natural left join instructor
    group by dept_name;
    

1.3 不使用 SQL 外連接 (outer join) 運(yùn)算也可以在 SQL 中計(jì)算外連接表達(dá)式。為了闡明這個(gè)事實(shí),請(qǐng)展示如何不使用外連接 (outer join) 表達(dá)式來(lái)重寫(xiě)下面的每個(gè) SQL 查詢(xún):

  1. select* from student natural left outer join takes

    (select * from student natural join takes)
    UNION
    (select ID, name, dept_name, tot_cred, NULL, NULL, NULL, NULL, NULL
    	from student
    	where ID not in (select ID from takes)
    );
    
    -- not exists
    (select * from student natural join takes)
    union(
    	select ID, name, dept_name, tot_cred, NULL, NULL, NULL, NULL, NULL
        from student
        where not exists(select * from takes where takes.ID = student.ID)
    )
    
  2. select* from student natural full outer join takes

    (select * from student natural join takes)
    UNION(
        select ID, name, dept_name, tot_cred, NULL, NULL, NULL, NULL, NULL
    	from student
    	where ID not in (select ID from takes)
    )
    UNION(
        select NULL, NULL, NULL, NULL, course_id, sec_id, semester, year, grade
        from takes
        where ID not in (select ID from student
    ));
    

1.4 假設(shè)我們有三個(gè)關(guān)系: r(A, B)、s(B, C) 和 t(B, D),其中所有屬性都聲明為非空 (not null)。

  1. 請(qǐng)給出關(guān)系r、s 和 t 的實(shí)例,使得在 (r natural left outer join s ) natural left outer join t 的結(jié)果中,屬性 C C C 具有一個(gè)空值,但屬性 D D D 具有一個(gè)非空值。

    滿(mǎn)足條件的關(guān)系實(shí)例如下圖:

數(shù)據(jù)庫(kù)練習(xí)4,數(shù)據(jù)庫(kù),sql,java

  1. 是否存在 r、s 和 t 的實(shí)例,使得在 r natural left outer join (s natural left outer join t) 的結(jié)果中, C C C 有一個(gè)空值, 但 D D D 有一個(gè)非空值? 請(qǐng)解釋為什么存在或?yàn)槭裁床淮嬖凇?/p>

    答:不存在。上述式子會(huì)先執(zhí)行:s natural left outer join t,因?yàn)樗亲笸膺B接,所以 s 中 的元組會(huì)被全部保留,也就是結(jié)果中不可能會(huì)有 C 為空值的元組;接下來(lái)會(huì)執(zhí)行:r natural left outer join res(B, C, D),它也是左外連接,所以會(huì)保留 r 中的全部元組,對(duì)那些 B 值只出現(xiàn)在 r 中而不出現(xiàn)在 res(B, C, D) 中的元組,C, D 的值都會(huì)被置為空值。也就是說(shuō) C D要么同時(shí)非空,要么同時(shí)為空值?!緍es(B, C, D) ← \leftarrow s natural left outer join t】

1.5 測(cè)試 SQL 查詢(xún): 為了測(cè)試是否正確地用 SQL 寫(xiě)出了一個(gè)用文字表達(dá)的查詢(xún),通常會(huì)讓 SQL 查詢(xún)?cè)诙鄠€(gè)測(cè)試數(shù)據(jù)庫(kù)上執(zhí)行,并人工檢測(cè)每個(gè)測(cè)試數(shù)據(jù)庫(kù)上的 SQL 查詢(xún)結(jié)果是否與用文字表達(dá)的意圖相匹配。

  1. 在4.1.1節(jié)中我們見(jiàn)過(guò)一個(gè)錯(cuò)誤的 SQL 查詢(xún)示例,它希望找出每位教師講授了哪些課程; 該查詢(xún)計(jì)算instructor, teaches 和 course 的自然連接,其結(jié)果是它無(wú)意地造成了讓 instructor 和course 的 dept_name 屬性取值相等。請(qǐng)給出一個(gè)數(shù)據(jù)集的樣例,它能有助于捕捉這種特別的錯(cuò)誤。

    錯(cuò)誤的原因是:連接后的關(guān)系中只會(huì)顯示那些所在院系和所講授課程的院系相同的元組,講授非本院院系的老師不會(huì)被顯示。所以滿(mǎn)足題目的數(shù)據(jù)集樣例是那些具有如上數(shù)據(jù)的。

數(shù)據(jù)庫(kù)練習(xí)4,數(shù)據(jù)庫(kù),sql,java

  1. 在創(chuàng)建測(cè)試數(shù)據(jù)庫(kù)時(shí), 對(duì)每個(gè)外碼來(lái)說(shuō),在被引用關(guān)系中創(chuàng)建與引用關(guān)系中任何元組都不匹配的元組是很重要的。請(qǐng)用大學(xué)數(shù)據(jù)庫(kù)上的一個(gè)查詢(xún)樣例來(lái)解釋原因。

    原因:用于檢測(cè)查詢(xún)的連接條件是否合適。比如要查詢(xún)學(xué)生的ID及他所選修過(guò)的課程數(shù)目時(shí),如果 takes 表中引用了 student 表中所有的 ID 值,那么使用自然連接和外連接都可以得到正確的查詢(xún)結(jié)果;但是如果 student 表中有一些 ID 值在 takes 表中沒(méi)有出現(xiàn),那么就只有外連接可以得到正確的查詢(xún)結(jié)果,如果使用自然連接的話(huà),那些沒(méi)有在 takes 表中出現(xiàn)的 ID 就不會(huì)在查詢(xún)結(jié)果中出現(xiàn)了(而實(shí)際上他們應(yīng)該出現(xiàn),且被顯示為:(ID, 0) )

  2. 在創(chuàng)建測(cè)試數(shù)據(jù)庫(kù)時(shí),倘若外碼屬性可空,為外碼屬性創(chuàng)建具有空值的元組是重要的 ( SQL允許外碼屬性取空值,只要它們不是主碼的一部分, 并且沒(méi)有被聲明為非空 ( not null )。請(qǐng)用大學(xué)數(shù)據(jù)庫(kù)上的一個(gè)查詢(xún)樣例來(lái)解釋原因。

    原因:用于檢測(cè)查詢(xún)的連接條件是否合適。比如要查詢(xún)每個(gè)課程的 ID 及開(kāi)課院系所在的辦公樓時(shí),如果 course 表中的外碼 dept_name 全部非空,那么使用自然連接和外連接都可以得到正確的查詢(xún)結(jié)果;但是如果 course 表中有一個(gè)元組在外碼 dept_name 上取空值,那就只能使用外連接了,如果使用自然連接的話(huà),course 表中 dept_name 取值為空的元組就不會(huì)被顯示在查詢(xún)結(jié)果中了。

提示: 請(qǐng)使用來(lái)自實(shí)踐習(xí)題 2 的查詢(xún)。

1.6 基于實(shí)踐習(xí)題 3.2 中的查詢(xún),請(qǐng)展示如何定義視圖 student_ grades (ID, GPA), 它給出了每名學(xué)生的平均績(jī)點(diǎn); 請(qǐng)回憶一下,我們用關(guān)系 grade_ points (grade, points) 來(lái)把用字母表示的成績(jī)等級(jí)轉(zhuǎn)換為用數(shù)字表示的得分。請(qǐng)確保你的視圖定義能夠正確處理在 takes 關(guān)系的 grade 屬性上取空 (null) 值的情況。

答:這里 takes 關(guān)系的 grade 屬性為空代表這門(mén)課程正在修讀中,還沒(méi)有成績(jī),所以在計(jì)算均績(jī)時(shí) 需忽略這門(mén)課程,也就是使用自然連接。

create view student_grade(ID, GPA) as
select ID, sum(points)/count(points)
from takes natural join grade_points
group by ID;

select * from student_grade;

1.7 請(qǐng)考慮圖 4-12中的員工數(shù)據(jù)庫(kù)。請(qǐng)給出這個(gè)數(shù)據(jù)庫(kù) SQL DDL 定義。請(qǐng)指出應(yīng)該保持的引用完整性約束,并把它們包括在 DDL 定義中。

數(shù)據(jù)庫(kù)練習(xí)4,數(shù)據(jù)庫(kù),sql,java

create database employees;

create table employee(
    ID  varchar(5) primary key,
    person_name     varchar(20) not null,
    street          varchar(30),
    city            varchar(10)
);

create table company(
    company_name    varchar(25) primary key,
    city            varchar(10)
);

create table works(
    ID              varchar(5) primary key,
    company_name    varchar(25),
    salary          decimal(10, 2),
    foreign key (ID) references employee(ID),
    foreign key (company_name) references company(company_name)
);

create table manages(
    ID              varchar(5) primary key,
    manager_id      varchar(5),
    foreign key (ID) references employee(ID),
    foreign key (manager_id) references employee(ID)
);

1.8 正如在 4.4.8 節(jié)中所討論的,我們希望能夠滿(mǎn)足約束“每位教師不能在同一個(gè)學(xué)期的同一個(gè)時(shí)間段在兩個(gè)不同的教室授課"。

  1. 請(qǐng)寫(xiě)出一個(gè)SQL查詢(xún),它返回違反此約束的所有(Instructor, section)組合。

    select * from (select * from teaches natural join section) as S
    where exists(
    	select * from (select * from teaches natural join section) as T
        where T.ID = S.ID
        and T.year = S.year
        and T.semester = S.semester
        and T.sec_id = S.sec_id
        and (T.building <> S.building or T.room_number <> S.room_number)
    ) order by ID;
    
  2. 請(qǐng)寫(xiě)出一個(gè)SQL斷言來(lái)強(qiáng)制實(shí)現(xiàn)此約束 (正如在4.4.8節(jié)中所討論的那樣,當(dāng)今的數(shù)據(jù)庫(kù)系統(tǒng)并不支持這樣的斷言,盡管它們是SQL標(biāo)準(zhǔn)的一部分)。

    create assertion teacher_time check(
        not exists(
            select * from ( select * teaches natural join section ) as S
            where
                exists (
                    select * from ( select * teaches natural join section ) as T
                    where
                        T.ID = S.ID
                        and T.year = S.year
                        and T.semester = S.semester
                        and T.sec_id = S.sec_id
                        and (
                            S.building <> T.building
                            or S.room_number <> T.room_number
                        )
                )
        )
    );
    

1.9 SQL 允許外碼依賴(lài)引用同一個(gè)關(guān)系,如下所示:

create table manager (
    employee_ID char(20),
    manager_ID char(20),
    primary key employee_lD,
    foreign key (manager.ID) references manager(employee.ID) on delete cascade
)

在此,employee. ID 是 manager 表的碼,這意味著每位員工最多只有一位經(jīng)理。外碼子句要求每
位經(jīng)理也是一位員工。請(qǐng)準(zhǔn)確解釋當(dāng) manager 關(guān)系中-一個(gè)元組被刪除時(shí)會(huì)發(fā)生什么情況。

答:DDL 中 manager_ID 被定義為外鍵的語(yǔ)句中有 “on delete cascade”,說(shuō)明:當(dāng) manager 關(guān)系中一個(gè)元組被刪除時(shí),假設(shè)這個(gè)被刪除元組中的 employee_ID 為 xxx,那么 manager 關(guān)系中所有 manager_ID 為 xxx 的元組也都會(huì)被刪除(就是經(jīng)理被刪掉了,經(jīng)理手下直接或間接帶的員工也都會(huì)被刪掉),接著那些以被刪掉的員工為經(jīng)理的員工也會(huì)被刪掉…即會(huì)發(fā)生級(jí)聯(lián)刪除。

1.10 SQL-92 provides an n-ary operation called coalesce, which is defined as follows: c o a l e s c e ( A 1 , A 2 , … , A n ) coalesce(A_1, A_2, \dots, A_n) coalesce(A1?,A2?,,An?) returns the first nonull A i A_i Ai? in the list A 1 , A 2 , … , A n A_1, A_2, \dots, A_n A1?,A2?,,An? and return null if all of A 1 , A 2 , … , A n A_1, A_2, \dots, A_n A1?,A2?,,An? are null.

Let a and b be relations with the schemas A ( n a m e , a d d r e s s , t i t l e ) A(name, address, title) A(name,address,title) and B ( n a m e , a d d r e s s , s a l a r y ) B(name, address, salary) B(name,address,salary), respectively. Show how to express a natural full outer join b using the full outer join operation with an on condition and the coalesce operation. Make sure that the result relation does not contain two copies of the attributes n a m e name name and a d d r e s s address address, and that the solution is correct even if some tuples in a a a and b b b have null values for attributes n a m e name name or a d d r e s s address address.

(select coalesce(a.name, b.name), coalesce(a.address, b.address), title, salary
from a left outer join b on a.name = b.name and a.address = b.address)
UNION
(select coalesce(b.name, a.name), coalesce(b.address, a.address), title, salary
from b left outer join a on a.name = b.name and a.address = b.address);


-- 或者不用 coalesce()
(select a.name, a.address, title, salary
from a left outer join b on a.name = b.name and a.address = b.address)
UNION
(select b.name, b.address, title, salary
from b left outer join a on a.name = b.name and a.address = b.address);

NOTE:下面這樣的代碼是錯(cuò)誤的噢

(select a.name, a.address, title, salary
from a left outer join b on a.name = b.name and a.address = b.address)
UNION
(select a.name, a.address, title, salary
from b left outer join a on a.name = b.name and a.address = b.address);

這里面要注意的點(diǎn)在于:b left outer join a 的時(shí)候,如果 b 中有一個(gè)元組,它的 addresss 屬性值為空(name 屬性值不為空),那么在連接時(shí),由于空值的特殊性,是找不到一個(gè) a 中的元組與這個(gè) address 為空的元組匹配的,也就是說(shuō),這個(gè) b 中的 address 屬性為空的元組對(duì)應(yīng)的連接結(jié)果中 a.name, a.address, a.title 都為空值;由于 select a.name 所以結(jié)果中 name 值也為空了,實(shí)際上不應(yīng)該為空而應(yīng)該是 b.name 的值。所以需要把下面一個(gè)左外連接改為 select b.name, b.address。

當(dāng)然,如果使用 coalesce() 就不會(huì)這么麻煩了,因?yàn)椋?/p>

  • a.name, b.name 都不為空時(shí),on 條件限制了 a.name = b.name,所以返回哪一個(gè)都是對(duì)的
  • a.name, b.name 中有一個(gè)為空時(shí),需要返回不為空的那一個(gè)
  • a.name, b.name 都為空時(shí),返回空值即可

1.11 操作系統(tǒng)通常只為數(shù)據(jù)文件提供兩種類(lèi)型的授權(quán)控制: 讀訪(fǎng)問(wèn)和寫(xiě)訪(fǎng)問(wèn)。為什么數(shù)據(jù)庫(kù)系統(tǒng)提供這么多種授權(quán)?

通過(guò)操作系統(tǒng)實(shí)現(xiàn)安全性約束比較復(fù)雜?

(我賭期中考試不會(huì)考)

1.12 假設(shè)一個(gè)用戶(hù)想授予另一個(gè)用戶(hù)一個(gè)關(guān)系上的選擇 (select)訪(fǎng)問(wèn)權(quán)限。為什么該用戶(hù)應(yīng)該在授權(quán) (grant) 語(yǔ)句中包含(或不包含) granted by current_role子句?

答:

granted by current_role 是指使用和當(dāng)前會(huì)話(huà)相關(guān)聯(lián)的角色而不是當(dāng)前用戶(hù)來(lái)進(jìn)行授權(quán)行為。

如果使用角色來(lái)授權(quán),那么即使授予權(quán)限的用戶(hù)將來(lái)被撤銷(xiāo)了權(quán)限,只要這個(gè)角色還具有 select 權(quán)限,那么被授予權(quán)限的用戶(hù)將會(huì)繼續(xù)擁有 select 權(quán)限,即可以避免不必要的級(jí)聯(lián)回收。

而如果使用當(dāng)前用戶(hù)來(lái)授權(quán),那么當(dāng)授予權(quán)限的用戶(hù)被撤銷(xiāo)權(quán)限時(shí),被授予權(quán)限的用戶(hù)也會(huì)被撤銷(xiāo) select 權(quán)限,即會(huì)進(jìn)行級(jí)聯(lián)回收。

1.13 請(qǐng)考慮一個(gè)視圖 v, 其定義僅引用關(guān)系 r。

  1. 如果一個(gè)用戶(hù)被授予 v 上的選擇 (select) 權(quán)限,該用戶(hù)是否也需要在 r 上具有選擇權(quán)限? 試問(wèn)為什么需要或者為什么不需要?

    答:需要。因?yàn)橐晥D是一個(gè)虛關(guān)系,被存儲(chǔ)起來(lái)的是定義它的查詢(xún)語(yǔ)句,在使用視圖的時(shí)候,數(shù)據(jù)庫(kù)會(huì)執(zhí)行定義視圖的查詢(xún)語(yǔ)句,也就是會(huì)在視圖的引用關(guān)系 r 上執(zhí)行查詢(xún),所以用戶(hù)需要在 r 上具有選擇權(quán)限。

  2. 如果一個(gè)用戶(hù)被授予 v 上的更新 (update) 權(quán)限,該用戶(hù)是否還需要在 r 上具有更新權(quán)限?試問(wèn)為什么需要或者為什么不需要?

    答:需要。因?yàn)樗性谝晥D上執(zhí)行的更新(和插入)操作,都是在視圖的引用關(guān)系 r 上進(jìn)行的,所以需要在 r 上的更新權(quán)限。

  3. 請(qǐng)?jiān)谝晥D v 上給出一個(gè)插入 (insert) 操作的示例,以添加在 select * from v 的結(jié)果中不可見(jiàn)的元組 l。請(qǐng)解釋你的答案。

    答:對(duì)于沒(méi)有 with check option 的視圖定義。比如說(shuō)如下的視圖 v 定義:

    create view v as
    select * from instructor where dept_name="History";
    

    如果對(duì)該視圖執(zhí)行如下的插入操作:

    insert into v values("66666", "bio_teacher", "Biology", 20000);
    

    雖然可以成功執(zhí)行,但是 select * from v 的結(jié)果中不會(huì)出現(xiàn)上面插入的元組。

2 習(xí)題

2.1 請(qǐng)考慮查詢(xún):

select course_id, semester, year, sec_id, avg (tot_cred)
from takes natural join student
where year = 2017
group by course_id, semester, year, sec_id
having count (ID) >= 2;

請(qǐng)解釋為什么在 from 子句中添加 natural join section 不會(huì)改變結(jié)果。

答:

首先, takes 關(guān)系上 ID, course_id, sec_id, semester, year 都為外碼而且被聲明為了非空,所以它們必定滿(mǎn)足外碼約束,所以 takes natural join student 的結(jié)果中不會(huì)有某個(gè)屬性值為空值的元組,takes natural join student natural join section 的結(jié)果中也不會(huì)有某個(gè)屬性值為空值的元組,也就是,takes natural join student 結(jié)果中的元組數(shù)目和 takes natural join student natural join section 結(jié)果中的元組數(shù)目是一樣的。

其次,section 關(guān)系中和 (takes natural join student) 同名的屬性只有:course_id, semester, year, sec_id ,而且這些屬性在 section 表和在 takes 表中的含義是一樣的,所以即使添加了 natural join section 進(jìn)行了合并之后,也不會(huì)改變結(jié)果。

2.2 請(qǐng)重寫(xiě)查詢(xún):

select *
from section natural join classroom

不使用自然連接,而是使用具有 using 條件的內(nèi)連接

答:

select *
from section join classroom using(building, room_number);

2.3 請(qǐng)使用大學(xué)模式來(lái)編寫(xiě)一個(gè) SQL 查詢(xún),以查找從未在大學(xué)上過(guò)課的每名學(xué)生的 ID。不使用子查詢(xún)和集合運(yùn)算(使用外連接)來(lái)執(zhí)行此操作。

答:

select student.ID
from student natural left outer join takes
where course_id is null;

2.4 在 SQL 中不使用子查詢(xún)和集合運(yùn)算來(lái)表達(dá)下述查詢(xún)。

(
    seleet ID
    from
        student
)
except
    (
        select
            s_ld
        from
            advlsor
        where
            I_ID is not null
    )

答:上述查詢(xún)查找所有沒(méi)有導(dǎo)師的學(xué)生的 ID。

select *
from student left outer join advisor on student.ID = advisor.s_ID
where advisor.i_ID is null;

2.5 對(duì)于圖 4-12 中的數(shù)據(jù)庫(kù),請(qǐng)編寫(xiě)一個(gè)查詢(xún)來(lái)找出沒(méi)有經(jīng)理的每位員工的 ID。請(qǐng)往意,一位員工可能只是沒(méi)有列出經(jīng)理,或者可能經(jīng)理值為空。請(qǐng)使用外連接來(lái)編寫(xiě)你的查詢(xún),然后根本不使用外連接再重寫(xiě)查詢(xún)。

答:使用外連接

select ID
from employee left outer join manages using(ID)
where manager_id is null;

不使用外連接

select ID
from employee
where ID not in (select ID from manages where manager_id is not null);


select ID
from student
where not exists(
	select * from advisor
	where s_ID = ID
);

2.6 在什么情況下,查詢(xún)

select *
from student natural full outer join takes natural full outer join course

會(huì)為 title 屬性包含具有空值的元組?

答:當(dāng) student 中有學(xué)生一節(jié)課都沒(méi)有選過(guò)時(shí)。此時(shí),student natural full outer join 的結(jié)果中會(huì)有一個(gè)元組,它在 course_id, sec_id, semester, year, grade 屬性上的取值為空值,接著再執(zhí)行 natural full outer join course 時(shí),因?yàn)?course_id 的屬性為空,所以這個(gè)元組連接之后得到的元組中 title 的取值也為空。

2.7 請(qǐng)說(shuō)明如何定義視圖 tot_credits(year, num_credits), 它給出每年所修的總學(xué)分?jǐn)?shù)。

drop view if exists tot_credits;

create view tot_credits(year, num_credits) as
select year, sum(credits)
from takes natural join course
where grade is not NULL and grade <> 'F'
group by year;

select * from tot_credits;

2.8 對(duì)于習(xí)題 2.7 中的視圖,請(qǐng)解釋為什么數(shù)據(jù)庫(kù)系統(tǒng)不允許通過(guò)該視圖將元組插入數(shù)據(jù)庫(kù)中。

答:

  1. select 子句中有聚集函數(shù)
  2. from 子句中出現(xiàn)了多于一個(gè)關(guān)系
  3. 視圖定義中有 group by 子句
  4. 沒(méi)有出現(xiàn)在 select 子句中的屬性,比如:ID, course_id, sec_id, semester, year 等不能為空值

2.9 請(qǐng)說(shuō)明:如何使用 case 結(jié)構(gòu)來(lái)表達(dá) coalesce 函數(shù)。

-- coalesce(salary, 0)
case
    when salary is null then 0
    else salary
end;

2.10 請(qǐng)解釋為什么當(dāng)一位經(jīng)理(比如 Satoshi )授予權(quán)限時(shí),授權(quán)應(yīng)該由經(jīng)理角色而不是由用戶(hù) Satoshi 來(lái)完成。

如果是由用戶(hù) Satoshi 來(lái)執(zhí)行授權(quán),那么當(dāng) Satoshi 被撤銷(xiāo)這項(xiàng)權(quán)限時(shí),被 Satoshi 授予權(quán)限的用戶(hù)也會(huì)被收回權(quán)限,即級(jí)聯(lián)回收。

而如果是由經(jīng)理角色來(lái)執(zhí)行授權(quán),那么即使 Satoshi 用戶(hù)被撤銷(xiāo)了這項(xiàng)權(quán)限,只要經(jīng)理角色還具有這項(xiàng)權(quán)限,那么被授予權(quán)限的用戶(hù)就會(huì)繼續(xù)擁有這項(xiàng)權(quán)限。這避免了不必要的權(quán)限回收。

2.11 假設(shè)具有關(guān)系 r 上的所有授權(quán)特權(quán)的用戶(hù) A 使用 grant option 將關(guān)系 r 上的選擇權(quán)限投給公眾 (public)。然后假設(shè)用戶(hù) B 將對(duì) r 的選擇權(quán)限又授予 A。這是否會(huì)導(dǎo)致授權(quán)圖中出現(xiàn)環(huán)路?請(qǐng)解釋為什么。

答:會(huì)出現(xiàn)環(huán)路,但是并不會(huì)使得 A 和 B 所擁有的 select 權(quán)限不可撤銷(xiāo)。因?yàn)橛脩?hù)具有某項(xiàng)權(quán)限的充分必要條件是:在授權(quán)圖中存在一條從根節(jié)點(diǎn)(管理員用戶(hù))到該用戶(hù)的路徑。所以即使授權(quán)圖中 A 和 B 之間有回路,只要管理員撤銷(xiāo)了 A 上的權(quán)限,從根節(jié)點(diǎn)到 A、B 就不存在路徑了,即仍然可以成功撤銷(xiāo) A B 上的權(quán)限。

2.12 假設(shè)一個(gè)用戶(hù)創(chuàng)建了一個(gè)帶外碼的新關(guān)系 r1,且該外碼引用另一個(gè)關(guān)系 r2。則此用戶(hù)在 r2 上需要什么授權(quán)特權(quán)? 為什么在沒(méi)有任何此類(lèi)權(quán)限的情況下,不能簡(jiǎn)單地允許這樣做?

答:此用戶(hù)需要具有 r2 上的 references 授權(quán)。

因?yàn)?,?dāng) r1 引用了關(guān)系 r2 后,外碼約束會(huì)限制 r2 上的刪除和更新操作,所以不能簡(jiǎn)單地允許 r1 印用 r2,而是需要先進(jìn)行 references 授權(quán)。

2.13 請(qǐng)解釋完整性約束和授權(quán)約束之間的區(qū)別

答:

完整性約束是針對(duì)為了保證數(shù)據(jù)庫(kù)中數(shù)據(jù)一致性、防止對(duì)數(shù)據(jù)的意外破壞的約束。

授權(quán)約束則是對(duì)允許用戶(hù)對(duì)什么關(guān)系進(jìn)行哪些操作的約束。

用戶(hù)想要修改數(shù)據(jù)庫(kù)中的某個(gè)關(guān)系,需要首先具有修改這個(gè)關(guān)系的權(quán)限,然后還要保證所做出的修改滿(mǎn)足完整性約束,才能成功進(jìn)行修改。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-731915.html

到了這里,關(guān)于數(shù)據(jù)庫(kù)第四章習(xí)題_完整版的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)挖掘(Data Mining)第四章課后習(xí)題

    1、數(shù)據(jù)倉(cāng)庫(kù)是隨著時(shí)間變化的,下面的描述不正確的是(??數(shù)據(jù)倉(cāng)庫(kù)隨著事件變化不斷刪去舊的數(shù)據(jù)內(nèi)容? ) 2、下面關(guān)于數(shù)據(jù)粒度的描述不正確的是(??數(shù)據(jù)綜合度越高,粒度也就越大,級(jí)別也就越高? ) 3、在有關(guān)數(shù)據(jù)倉(cāng)庫(kù)測(cè)試,下列說(shuō)法不正確的是(??在數(shù)據(jù)倉(cāng)庫(kù)進(jìn)

    2024年02月07日
    瀏覽(22)
  • GO語(yǔ)言圣經(jīng) 第四章習(xí)題

    編寫(xiě)一個(gè)函數(shù),計(jì)算兩個(gè)SHA256哈希碼中不同bit的數(shù)目。(參考2.6.2節(jié)的PopCount函數(shù)。) 編寫(xiě)一個(gè)程序,默認(rèn)情況下打印標(biāo)準(zhǔn)輸入的SHA256編碼,并支持通過(guò)命令行flag定制,輸出SHA384或SHA512哈希算法。 重寫(xiě)reverse函數(shù),使用數(shù)組指針代替slice。 編寫(xiě)一個(gè)rotate函數(shù),通過(guò)一次循環(huán)完成

    2024年02月11日
    瀏覽(23)
  • 第四章:課后習(xí)題SAS代碼

    4.1.某公司過(guò)去50個(gè)月每月盈虧情況 (1)繪制該序列時(shí)序圖; (2)判斷該序列的平穩(wěn)性與純隨機(jī)性; (3)考察該序列的自相關(guān)系數(shù)和偏自相關(guān)系數(shù)的性質(zhì); (4)選擇適當(dāng)模型擬合該序列的發(fā)展; (5)利用擬合模型預(yù)測(cè)該公司未來(lái)五年的盈虧情況。 本題SAS 代碼 data a; inp

    2024年02月05日
    瀏覽(28)
  • 操作系統(tǒng)第四章練習(xí)題

    第三部分 填空題 將作業(yè)地址空間中的邏輯地址轉(zhuǎn)換為主存中的物理地址的過(guò)程稱(chēng)為(????? )。地址變換 ? 分區(qū)分配中的存儲(chǔ)保護(hù)通常采用(????? )方法。界限寄存器和存儲(chǔ)保護(hù)鍵 把(????? )地址轉(zhuǎn)換為(????? )地址的工作稱(chēng)為地址映射。邏輯、物理 重定位的

    2024年02月11日
    瀏覽(27)
  • 自動(dòng)駕駛SLAM技術(shù)第四章習(xí)題2

    自動(dòng)駕駛SLAM技術(shù)第四章習(xí)題2

    在g2o的基礎(chǔ)上改成ceres優(yōu)化,高博都寫(xiě)好了其他的部分, 后面改ceres就很簡(jiǎn)單了. 這塊我用的是ceres的自動(dòng)求導(dǎo),很方便,就是轉(zhuǎn)化為模板仿函數(shù)的時(shí)候有點(diǎn)麻煩, 代碼部分如下 這個(gè)文件寫(xiě)的內(nèi)容ceres優(yōu)化的殘差塊. 把i, j時(shí)刻的狀態(tài)都寫(xiě)成15維的數(shù)組, 順序是r,p,v,bg,ba. 每個(gè)元素都

    2024年02月11日
    瀏覽(22)
  • 計(jì)算機(jī)網(wǎng)絡(luò)——第四章網(wǎng)絡(luò)層習(xí)題(部分)

    計(jì)算機(jī)網(wǎng)絡(luò)——第四章網(wǎng)絡(luò)層習(xí)題(部分)

    ?思路:將前綴匹配全部轉(zhuǎn)換為二進(jìn)制,每八位之間用“ . ”隔開(kāi)。然后用目的地址對(duì)應(yīng)的二進(jìn)制,找到與前綴匹配的,即為下一跳地址 ???????? ? ? 為了方便計(jì)算,記一下: ????????????????2的1次方:2 ????????????????2的2次方:4 ??????????????

    2024年02月09日
    瀏覽(22)
  • 計(jì)量經(jīng)濟(jì)學(xué)及Stata應(yīng)用 第四章習(xí)題

    計(jì)量經(jīng)濟(jì)學(xué)及Stata應(yīng)用 第四章習(xí)題

    考慮以下消費(fèi)函數(shù):Ci = α+βYi+si 共中,Ci為個(gè)體i的消費(fèi)開(kāi)支,而只Yi為個(gè)體三的可支配收入。假設(shè)OLS因歸所得的樣木回歸線(xiàn)為: ?(1)斜率β尖的經(jīng)濟(jì)含義是什么? (2)截距項(xiàng)α尖的經(jīng)濟(jì)含義是什么?. (3)對(duì)于個(gè)體i,計(jì)算其平均消費(fèi)傾向(average?propensity?to?consume)Ci/Yi。假設(shè)α尖0,

    2024年02月02日
    瀏覽(28)
  • 【機(jī)器學(xué)習(xí)】第四章決策樹(shù)練習(xí)題及答案

    一. 單選題(共10題,66分) 1.?【單選題】以下關(guān)于決策樹(shù)特點(diǎn)分析的說(shuō)法錯(cuò)誤的有 ( )。 A. 推理過(guò)程容易理解,計(jì)算簡(jiǎn)單 B. 算法容易造成過(guò)擬合 C. 算法自動(dòng)忽略了對(duì)模型沒(méi)有貢獻(xiàn)的屬性變量 D. 算法考慮了數(shù)據(jù)屬性之間的相關(guān)性 正確答案:?D 2.?【單選題】以下關(guān)于決策樹(shù)原理

    2024年02月01日
    瀏覽(24)
  • 計(jì)算機(jī)網(wǎng)絡(luò)/謝希仁(第八版)第四章習(xí)題

    計(jì)算機(jī)網(wǎng)絡(luò)/謝希仁(第八版)第四章習(xí)題

    【4-01】網(wǎng)絡(luò)層向上提供的服務(wù)有哪兩種?試比較其優(yōu)缺點(diǎn)。 答: (1)面向連接服務(wù)(或虛電路服務(wù))和無(wú)連接服務(wù)(或數(shù)據(jù)報(bào)服務(wù)) (2)比較二者的優(yōu)缺點(diǎn): ①、虛電路服務(wù)是面向連接的,提供的服務(wù)可以保證數(shù)據(jù)傳輸?shù)目煽啃院屯哆f順序的正確性;數(shù)據(jù)報(bào)服務(wù)是無(wú)連接

    2024年02月04日
    瀏覽(26)
  • Java Web程序設(shè)計(jì)課后習(xí)題答案 第四章

    第4章 一、填空 1.如果當(dāng)前Web資源不想處理請(qǐng)求, RequestDispatcher接口提供了一個(gè) forward()方法,該方法可以將當(dāng)前請(qǐng)求傳遞給其他Web資源對(duì)這些信息進(jìn)行處理并響應(yīng)給客戶(hù)端,這種方式稱(chēng)為請(qǐng)求轉(zhuǎn)發(fā)。 2.Servlet API中,專(zhuān)門(mén)用來(lái)封裝HTTP響應(yīng)消息的接口是HttpServletResponse。 3. 重定向指

    2024年04月23日
    瀏覽(94)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包