[{"data":1,"prerenderedAt":1564},["ShallowReactive",2],{"note:cs\u002Fdb\u002F100+70\u002FDay06-数据库70题-试题01-11":3},{"id":4,"title":5,"body":6,"description":16,"extension":1558,"meta":1559,"navigation":218,"path":1560,"seo":1561,"stem":1562,"__hash__":1563},"notes\u002Fsource\u002Fcs\u002Fdb\u002F100+70\u002FDay06-数据库70题-试题01-11.md","Day 06 - 数据库70题：试题 1-11",{"type":7,"value":8,"toc":1523},"minimark",[9,13,17,22,25,28,47,50,54,56,64,67,71,74,101,151,160,368,390,394,419,423,443,453,457,477,481,516,531,535,565,569,638,641,645,706,709,713,778,784,788,812,816,848,866,870,904,911,923,925,978,1000,1011,1013,1054,1076,1084,1087,1089,1128,1138,1146,1148,1188,1191,1202,1208,1238,1245,1248,1259,1261,1332,1339,1347,1349,1416,1419,1427,1429,1512,1519],[10,11,5],"h1",{"id":12},"day-06-数据库70题试题-1-11",[14,15,16],"p",{},"参考重点：教材第 3 章 SQL、第 6 章关系数据理论。SQL 均按 SQL Server 写法。",[18,19,21],"h2",{"id":20},"_1-简述在-sql-中使用视图的优点","1. 简述在 SQL 中使用视图的优点。",[14,23,24],{},"答案：",[14,26,27],{},"视图的主要优点有：",[29,30,31,35,38,41,44],"ol",{},[32,33,34],"li",{},"简化用户操作，把复杂查询封装成一个虚表。",[32,36,37],{},"提高数据安全性，让用户只能看到授权范围内的列和行。",[32,39,40],{},"提供一定的逻辑独立性，基本表结构局部变化时可通过修改视图屏蔽影响。",[32,42,43],{},"使同一数据能按不同用户需求呈现不同外模式。",[32,45,46],{},"便于复用常用查询逻辑，统一统计口径。",[14,48,49],{},"讲解：视图不一定保存数据，普通视图保存的是查询定义。教材第 3 章把视图作为 SQL 的重要对象，重点强调“虚表”“简化查询”“安全控制”“逻辑独立性”。",[18,51,53],{"id":52},"_2-简述游标的作用","2. 简述游标的作用。",[14,55,24],{},[14,57,58,59,63],{},"游标用于在过程化程序中逐行处理 SQL 查询结果集。它可以打开一个结果集，定位当前行，逐行 ",[60,61,62],"code",{},"FETCH","，并可结合当前行进行更新或删除。",[14,65,66],{},"讲解：SQL 本身是面向集合的语言，但宿主语言或存储过程有时需要逐行处理，例如复杂业务校验、逐行调用过程。游标就是集合操作和逐行过程逻辑之间的桥。能用集合 SQL 解决时，SQL Server 中通常优先使用集合操作，游标只在确实需要逐行处理时使用。",[18,68,70],{"id":69},"_3-对于下列四个关系模式试分别用-sql-语句表示各类查询","3. 对于下列四个关系模式，试分别用 SQL 语句表示各类查询。",[14,72,73],{},"题面：",[75,76,77,83,89,95],"ul",{},[32,78,79,80],{},"供应商关系：",[60,81,82],{},"SUPPLIERS(SNUMBER, SNAME, STATUS, SCITY)",[32,84,85,86],{},"零件关系：",[60,87,88],{},"PARTS(PNUMBER, PNAME, COLOR, WEIGHT)",[32,90,91,92],{},"工程项目关系：",[60,93,94],{},"JOBS(JNUMBER, JNAME, JCITY)",[32,96,97,98],{},"供应关系：",[60,99,100],{},"SPJ(SNUMBER, PNUMBER, JNUMBER, QUANTITIES)",[14,102,103,104,107,108,111,112,115,116,119,120,123,124,127,128,131,132,135,136,139,140,143,144,119,147,150],{},"属性含义：",[60,105,106],{},"SNUMBER"," 供应商编号，",[60,109,110],{},"SNAME"," 供应商姓名，",[60,113,114],{},"STATUS"," 状态，",[60,117,118],{},"SCITY"," 城市，",[60,121,122],{},"PNUMBER"," 零件编号，",[60,125,126],{},"PNAME"," 零件名，",[60,129,130],{},"COLOR"," 颜色，",[60,133,134],{},"WEIGHT"," 重量，",[60,137,138],{},"JNUMBER"," 工程项目编号，",[60,141,142],{},"JNAME"," 工程项目名，",[60,145,146],{},"JCITY",[60,148,149],{},"QUANTITIES"," 数量。",[152,153,155,156,159],"h3",{"id":154},"_31-用-create-table-建立上述四张表并指出主键和外键","3.1 用 ",[60,157,158],{},"CREATE TABLE"," 建立上述四张表，并指出主键和外键。",[161,162,167],"pre",{"className":163,"code":164,"language":165,"meta":166,"style":166},"language-sql shiki shiki-themes github-light github-dark","CREATE TABLE dbo.Suppliers (\n    SNumber varchar(20) NOT NULL,\n    SName nvarchar(50) NOT NULL,\n    [Status] int NULL,\n    SCity nvarchar(50) NULL,\n    CONSTRAINT PK_Suppliers PRIMARY KEY (SNumber)\n);\n\nCREATE TABLE dbo.Parts (\n    PNumber varchar(20) NOT NULL,\n    PName nvarchar(50) NOT NULL,\n    Color nvarchar(20) NULL,\n    [Weight] decimal(10, 2) NULL,\n    CONSTRAINT PK_Parts PRIMARY KEY (PNumber)\n);\n\nCREATE TABLE dbo.Jobs (\n    JNumber varchar(20) NOT NULL,\n    JName nvarchar(50) NOT NULL,\n    JCity nvarchar(50) NULL,\n    CONSTRAINT PK_Jobs PRIMARY KEY (JNumber)\n);\n\nCREATE TABLE dbo.SPJ (\n    SNumber varchar(20) NOT NULL,\n    PNumber varchar(20) NOT NULL,\n    JNumber varchar(20) NOT NULL,\n    Quantities int NOT NULL,\n    CONSTRAINT PK_SPJ PRIMARY KEY (SNumber, PNumber, JNumber),\n    CONSTRAINT FK_SPJ_Suppliers FOREIGN KEY (SNumber) REFERENCES dbo.Suppliers(SNumber),\n    CONSTRAINT FK_SPJ_Parts FOREIGN KEY (PNumber) REFERENCES dbo.Parts(PNumber),\n    CONSTRAINT FK_SPJ_Jobs FOREIGN KEY (JNumber) REFERENCES dbo.Jobs(JNumber),\n    CONSTRAINT CK_SPJ_Quantities CHECK (Quantities >= 0)\n);\n","sql","",[60,168,169,177,183,189,195,201,207,213,220,226,232,238,244,250,256,261,266,272,278,284,290,296,301,306,312,317,322,327,333,339,345,351,357,363],{"__ignoreMap":166},[170,171,174],"span",{"class":172,"line":173},"line",1,[170,175,176],{},"CREATE TABLE dbo.Suppliers (\n",[170,178,180],{"class":172,"line":179},2,[170,181,182],{},"    SNumber varchar(20) NOT NULL,\n",[170,184,186],{"class":172,"line":185},3,[170,187,188],{},"    SName nvarchar(50) NOT NULL,\n",[170,190,192],{"class":172,"line":191},4,[170,193,194],{},"    [Status] int NULL,\n",[170,196,198],{"class":172,"line":197},5,[170,199,200],{},"    SCity nvarchar(50) NULL,\n",[170,202,204],{"class":172,"line":203},6,[170,205,206],{},"    CONSTRAINT PK_Suppliers PRIMARY KEY (SNumber)\n",[170,208,210],{"class":172,"line":209},7,[170,211,212],{},");\n",[170,214,216],{"class":172,"line":215},8,[170,217,219],{"emptyLinePlaceholder":218},true,"\n",[170,221,223],{"class":172,"line":222},9,[170,224,225],{},"CREATE TABLE dbo.Parts (\n",[170,227,229],{"class":172,"line":228},10,[170,230,231],{},"    PNumber varchar(20) NOT NULL,\n",[170,233,235],{"class":172,"line":234},11,[170,236,237],{},"    PName nvarchar(50) NOT NULL,\n",[170,239,241],{"class":172,"line":240},12,[170,242,243],{},"    Color nvarchar(20) NULL,\n",[170,245,247],{"class":172,"line":246},13,[170,248,249],{},"    [Weight] decimal(10, 2) NULL,\n",[170,251,253],{"class":172,"line":252},14,[170,254,255],{},"    CONSTRAINT PK_Parts PRIMARY KEY (PNumber)\n",[170,257,259],{"class":172,"line":258},15,[170,260,212],{},[170,262,264],{"class":172,"line":263},16,[170,265,219],{"emptyLinePlaceholder":218},[170,267,269],{"class":172,"line":268},17,[170,270,271],{},"CREATE TABLE dbo.Jobs (\n",[170,273,275],{"class":172,"line":274},18,[170,276,277],{},"    JNumber varchar(20) NOT NULL,\n",[170,279,281],{"class":172,"line":280},19,[170,282,283],{},"    JName nvarchar(50) NOT NULL,\n",[170,285,287],{"class":172,"line":286},20,[170,288,289],{},"    JCity nvarchar(50) NULL,\n",[170,291,293],{"class":172,"line":292},21,[170,294,295],{},"    CONSTRAINT PK_Jobs PRIMARY KEY (JNumber)\n",[170,297,299],{"class":172,"line":298},22,[170,300,212],{},[170,302,304],{"class":172,"line":303},23,[170,305,219],{"emptyLinePlaceholder":218},[170,307,309],{"class":172,"line":308},24,[170,310,311],{},"CREATE TABLE dbo.SPJ (\n",[170,313,315],{"class":172,"line":314},25,[170,316,182],{},[170,318,320],{"class":172,"line":319},26,[170,321,231],{},[170,323,325],{"class":172,"line":324},27,[170,326,277],{},[170,328,330],{"class":172,"line":329},28,[170,331,332],{},"    Quantities int NOT NULL,\n",[170,334,336],{"class":172,"line":335},29,[170,337,338],{},"    CONSTRAINT PK_SPJ PRIMARY KEY (SNumber, PNumber, JNumber),\n",[170,340,342],{"class":172,"line":341},30,[170,343,344],{},"    CONSTRAINT FK_SPJ_Suppliers FOREIGN KEY (SNumber) REFERENCES dbo.Suppliers(SNumber),\n",[170,346,348],{"class":172,"line":347},31,[170,349,350],{},"    CONSTRAINT FK_SPJ_Parts FOREIGN KEY (PNumber) REFERENCES dbo.Parts(PNumber),\n",[170,352,354],{"class":172,"line":353},32,[170,355,356],{},"    CONSTRAINT FK_SPJ_Jobs FOREIGN KEY (JNumber) REFERENCES dbo.Jobs(JNumber),\n",[170,358,360],{"class":172,"line":359},33,[170,361,362],{},"    CONSTRAINT CK_SPJ_Quantities CHECK (Quantities >= 0)\n",[170,364,366],{"class":172,"line":365},34,[170,367,212],{},[14,369,370,371,374,375,374,378,381,382,385,386,389],{},"讲解：",[60,372,373],{},"Suppliers","、",[60,376,377],{},"Parts",[60,379,380],{},"Jobs"," 的主键分别是各自编号。",[60,383,384],{},"SPJ"," 表描述三者联系，常用 ",[60,387,388],{},"(SNumber, PNumber, JNumber)"," 作为组合主键，并分别引用三张实体表。",[152,391,393],{"id":392},"_32-检索供应工程-j1-零件-p1-的供应商编号","3.2 检索供应工程 J1 零件 P1 的供应商编号。",[161,395,397],{"className":163,"code":396,"language":165,"meta":166,"style":166},"SELECT SNumber\nFROM dbo.SPJ\nWHERE JNumber = 'J1'\n  AND PNumber = 'P1';\n",[60,398,399,404,409,414],{"__ignoreMap":166},[170,400,401],{"class":172,"line":173},[170,402,403],{},"SELECT SNumber\n",[170,405,406],{"class":172,"line":179},[170,407,408],{},"FROM dbo.SPJ\n",[170,410,411],{"class":172,"line":185},[170,412,413],{},"WHERE JNumber = 'J1'\n",[170,415,416],{"class":172,"line":191},[170,417,418],{},"  AND PNumber = 'P1';\n",[152,420,422],{"id":421},"_33-检索零件重量在-16-19-之间的零件的全部信息","3.3 检索零件重量在 16-19 之间的零件的全部信息。",[161,424,426],{"className":163,"code":425,"language":165,"meta":166,"style":166},"SELECT *\nFROM dbo.Parts\nWHERE [Weight] BETWEEN 16 AND 19;\n",[60,427,428,433,438],{"__ignoreMap":166},[170,429,430],{"class":172,"line":173},[170,431,432],{},"SELECT *\n",[170,434,435],{"class":172,"line":179},[170,436,437],{},"FROM dbo.Parts\n",[170,439,440],{"class":172,"line":185},[170,441,442],{},"WHERE [Weight] BETWEEN 16 AND 19;\n",[14,444,370,445,448,449,452],{},[60,446,447],{},"BETWEEN 16 AND 19"," 包含边界，相当于 ",[60,450,451],{},"Weight >= 16 AND Weight \u003C= 19","。",[152,454,456],{"id":455},"_34-检索上海的供应商姓名","3.4 检索上海的供应商姓名。",[161,458,460],{"className":163,"code":459,"language":165,"meta":166,"style":166},"SELECT SName\nFROM dbo.Suppliers\nWHERE SCity = N'上海';\n",[60,461,462,467,472],{"__ignoreMap":166},[170,463,464],{"class":172,"line":173},[170,465,466],{},"SELECT SName\n",[170,468,469],{"class":172,"line":179},[170,470,471],{},"FROM dbo.Suppliers\n",[170,473,474],{"class":172,"line":185},[170,475,476],{},"WHERE SCity = N'上海';\n",[152,478,480],{"id":479},"_35-检索住在同一个城市的一对供应商编号","3.5 检索住在同一个城市的一对供应商编号。",[161,482,484],{"className":163,"code":483,"language":165,"meta":166,"style":166},"SELECT s1.SNumber AS SNumber1,\n       s2.SNumber AS SNumber2\nFROM dbo.Suppliers AS s1\nJOIN dbo.Suppliers AS s2\n  ON s1.SCity = s2.SCity\n AND s1.SNumber \u003C s2.SNumber;\n",[60,485,486,491,496,501,506,511],{"__ignoreMap":166},[170,487,488],{"class":172,"line":173},[170,489,490],{},"SELECT s1.SNumber AS SNumber1,\n",[170,492,493],{"class":172,"line":179},[170,494,495],{},"       s2.SNumber AS SNumber2\n",[170,497,498],{"class":172,"line":185},[170,499,500],{},"FROM dbo.Suppliers AS s1\n",[170,502,503],{"class":172,"line":191},[170,504,505],{},"JOIN dbo.Suppliers AS s2\n",[170,507,508],{"class":172,"line":197},[170,509,510],{},"  ON s1.SCity = s2.SCity\n",[170,512,513],{"class":172,"line":203},[170,514,515],{}," AND s1.SNumber \u003C s2.SNumber;\n",[14,517,518,519,522,523,526,527,530],{},"讲解：自连接用于比较同一张表中的不同行。",[60,520,521],{},"s1.SNumber \u003C s2.SNumber"," 避免自己和自己配对，也避免 ",[60,524,525],{},"(S1,S2)"," 与 ",[60,528,529],{},"(S2,S1)"," 重复。",[152,532,534],{"id":533},"_36-检索供应商-s1-提供零件的工程项目名称","3.6 检索供应商 S1 提供零件的工程项目名称。",[161,536,538],{"className":163,"code":537,"language":165,"meta":166,"style":166},"SELECT DISTINCT j.JName\nFROM dbo.SPJ AS spj\nJOIN dbo.Jobs AS j\n  ON j.JNumber = spj.JNumber\nWHERE spj.SNumber = 'S1';\n",[60,539,540,545,550,555,560],{"__ignoreMap":166},[170,541,542],{"class":172,"line":173},[170,543,544],{},"SELECT DISTINCT j.JName\n",[170,546,547],{"class":172,"line":179},[170,548,549],{},"FROM dbo.SPJ AS spj\n",[170,551,552],{"class":172,"line":185},[170,553,554],{},"JOIN dbo.Jobs AS j\n",[170,556,557],{"class":172,"line":191},[170,558,559],{},"  ON j.JNumber = spj.JNumber\n",[170,561,562],{"class":172,"line":197},[170,563,564],{},"WHERE spj.SNumber = 'S1';\n",[152,566,568],{"id":567},"_37-求没有使用天津生产的红色零件的工程项目号","3.7 求没有使用天津生产的红色零件的工程项目号。",[161,570,572],{"className":163,"code":571,"language":165,"meta":166,"style":166},"SELECT j.JNumber\nFROM dbo.Jobs AS j\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM dbo.SPJ AS spj\n    JOIN dbo.Suppliers AS s\n      ON s.SNumber = spj.SNumber\n    JOIN dbo.Parts AS p\n      ON p.PNumber = spj.PNumber\n    WHERE spj.JNumber = j.JNumber\n      AND s.SCity = N'天津'\n      AND p.Color = N'红色'\n);\n",[60,573,574,579,584,589,594,599,604,609,614,619,624,629,634],{"__ignoreMap":166},[170,575,576],{"class":172,"line":173},[170,577,578],{},"SELECT j.JNumber\n",[170,580,581],{"class":172,"line":179},[170,582,583],{},"FROM dbo.Jobs AS j\n",[170,585,586],{"class":172,"line":185},[170,587,588],{},"WHERE NOT EXISTS (\n",[170,590,591],{"class":172,"line":191},[170,592,593],{},"    SELECT 1\n",[170,595,596],{"class":172,"line":197},[170,597,598],{},"    FROM dbo.SPJ AS spj\n",[170,600,601],{"class":172,"line":203},[170,602,603],{},"    JOIN dbo.Suppliers AS s\n",[170,605,606],{"class":172,"line":209},[170,607,608],{},"      ON s.SNumber = spj.SNumber\n",[170,610,611],{"class":172,"line":215},[170,612,613],{},"    JOIN dbo.Parts AS p\n",[170,615,616],{"class":172,"line":222},[170,617,618],{},"      ON p.PNumber = spj.PNumber\n",[170,620,621],{"class":172,"line":228},[170,622,623],{},"    WHERE spj.JNumber = j.JNumber\n",[170,625,626],{"class":172,"line":234},[170,627,628],{},"      AND s.SCity = N'天津'\n",[170,630,631],{"class":172,"line":240},[170,632,633],{},"      AND p.Color = N'红色'\n",[170,635,636],{"class":172,"line":246},[170,637,212],{},[14,639,640],{},"讲解：题面中“天津生产”没有单独的零件产地属性，只能按供应商所在城市理解为“天津供应商供应的红色零件”。双重语义题优先写清假设。",[152,642,644],{"id":643},"_38-求使用全部零件的工程项目名称","3.8 求使用全部零件的工程项目名称。",[161,646,648],{"className":163,"code":647,"language":165,"meta":166,"style":166},"SELECT j.JName\nFROM dbo.Jobs AS j\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM dbo.Parts AS p\n    WHERE NOT EXISTS (\n        SELECT 1\n        FROM dbo.SPJ AS spj\n        WHERE spj.JNumber = j.JNumber\n          AND spj.PNumber = p.PNumber\n    )\n);\n",[60,649,650,655,659,663,667,672,677,682,687,692,697,702],{"__ignoreMap":166},[170,651,652],{"class":172,"line":173},[170,653,654],{},"SELECT j.JName\n",[170,656,657],{"class":172,"line":179},[170,658,583],{},[170,660,661],{"class":172,"line":185},[170,662,588],{},[170,664,665],{"class":172,"line":191},[170,666,593],{},[170,668,669],{"class":172,"line":197},[170,670,671],{},"    FROM dbo.Parts AS p\n",[170,673,674],{"class":172,"line":203},[170,675,676],{},"    WHERE NOT EXISTS (\n",[170,678,679],{"class":172,"line":209},[170,680,681],{},"        SELECT 1\n",[170,683,684],{"class":172,"line":215},[170,685,686],{},"        FROM dbo.SPJ AS spj\n",[170,688,689],{"class":172,"line":222},[170,690,691],{},"        WHERE spj.JNumber = j.JNumber\n",[170,693,694],{"class":172,"line":228},[170,695,696],{},"          AND spj.PNumber = p.PNumber\n",[170,698,699],{"class":172,"line":234},[170,700,701],{},"    )\n",[170,703,704],{"class":172,"line":240},[170,705,212],{},[14,707,708],{},"讲解：这是关系除法的 SQL 写法。外层意思是“不存在某个零件，使得该工程没有使用它”。",[152,710,712],{"id":711},"_39-求使用供应商-s1-所提供的全部零件的工程项目号","3.9 求使用供应商 S1 所提供的全部零件的工程项目号。",[161,714,716],{"className":163,"code":715,"language":165,"meta":166,"style":166},"SELECT j.JNumber\nFROM dbo.Jobs AS j\nWHERE NOT EXISTS (\n    SELECT 1\n    FROM dbo.SPJ AS s1parts\n    WHERE s1parts.SNumber = 'S1'\n      AND NOT EXISTS (\n          SELECT 1\n          FROM dbo.SPJ AS spj\n          WHERE spj.JNumber = j.JNumber\n            AND spj.PNumber = s1parts.PNumber\n      )\n);\n",[60,717,718,722,726,730,734,739,744,749,754,759,764,769,774],{"__ignoreMap":166},[170,719,720],{"class":172,"line":173},[170,721,578],{},[170,723,724],{"class":172,"line":179},[170,725,583],{},[170,727,728],{"class":172,"line":185},[170,729,588],{},[170,731,732],{"class":172,"line":191},[170,733,593],{},[170,735,736],{"class":172,"line":197},[170,737,738],{},"    FROM dbo.SPJ AS s1parts\n",[170,740,741],{"class":172,"line":203},[170,742,743],{},"    WHERE s1parts.SNumber = 'S1'\n",[170,745,746],{"class":172,"line":209},[170,747,748],{},"      AND NOT EXISTS (\n",[170,750,751],{"class":172,"line":215},[170,752,753],{},"          SELECT 1\n",[170,755,756],{"class":172,"line":222},[170,757,758],{},"          FROM dbo.SPJ AS spj\n",[170,760,761],{"class":172,"line":228},[170,762,763],{},"          WHERE spj.JNumber = j.JNumber\n",[170,765,766],{"class":172,"line":234},[170,767,768],{},"            AND spj.PNumber = s1parts.PNumber\n",[170,770,771],{"class":172,"line":240},[170,772,773],{},"      )\n",[170,775,776],{"class":172,"line":246},[170,777,212],{},[14,779,780,781,783],{},"讲解：这里“全部零件”的范围不是 ",[60,782,377],{}," 表的所有零件，而是供应商 S1 曾经供应过的零件集合。",[152,785,787],{"id":786},"_310-求由一个以上供应者提供的零件号","3.10 求由一个以上供应者提供的零件号。",[161,789,791],{"className":163,"code":790,"language":165,"meta":166,"style":166},"SELECT PNumber\nFROM dbo.SPJ\nGROUP BY PNumber\nHAVING COUNT(DISTINCT SNumber) > 1;\n",[60,792,793,798,802,807],{"__ignoreMap":166},[170,794,795],{"class":172,"line":173},[170,796,797],{},"SELECT PNumber\n",[170,799,800],{"class":172,"line":179},[170,801,408],{},[170,803,804],{"class":172,"line":185},[170,805,806],{},"GROUP BY PNumber\n",[170,808,809],{"class":172,"line":191},[170,810,811],{},"HAVING COUNT(DISTINCT SNumber) > 1;\n",[152,813,815],{"id":814},"_311-将工程名为环保的所有供应数量提高-10","3.11 将工程名为“环保”的所有供应数量提高 10%。",[161,817,819],{"className":163,"code":818,"language":165,"meta":166,"style":166},"UPDATE spj\nSET Quantities = CAST(ROUND(Quantities * 1.10, 0) AS int)\nFROM dbo.SPJ AS spj\nJOIN dbo.Jobs AS j\n  ON j.JNumber = spj.JNumber\nWHERE j.JName = N'环保';\n",[60,820,821,826,831,835,839,843],{"__ignoreMap":166},[170,822,823],{"class":172,"line":173},[170,824,825],{},"UPDATE spj\n",[170,827,828],{"class":172,"line":179},[170,829,830],{},"SET Quantities = CAST(ROUND(Quantities * 1.10, 0) AS int)\n",[170,832,833],{"class":172,"line":185},[170,834,549],{},[170,836,837],{"class":172,"line":191},[170,838,554],{},[170,840,841],{"class":172,"line":197},[170,842,559],{},[170,844,845],{"class":172,"line":203},[170,846,847],{},"WHERE j.JName = N'环保';\n",[14,849,850,851,854,855,858,859,862,863,452],{},"讲解：SQL Server 的多表更新常用 ",[60,852,853],{},"UPDATE 别名 SET ... FROM ... JOIN ...","。如果 ",[60,856,857],{},"Quantities"," 允许小数，可去掉 ",[60,860,861],{},"ROUND"," 和 ",[60,864,865],{},"CAST",[152,867,869],{"id":868},"_312-建立一个视图包括每个工程项目使用零件的总数","3.12 建立一个视图，包括每个工程项目使用零件的总数。",[161,871,873],{"className":163,"code":872,"language":165,"meta":166,"style":166},"CREATE VIEW dbo.ProjectPartTotals\nAS\nSELECT JNumber,\n       SUM(Quantities) AS TotalQuantities\nFROM dbo.SPJ\nGROUP BY JNumber;\n",[60,874,875,880,885,890,895,899],{"__ignoreMap":166},[170,876,877],{"class":172,"line":173},[170,878,879],{},"CREATE VIEW dbo.ProjectPartTotals\n",[170,881,882],{"class":172,"line":179},[170,883,884],{},"AS\n",[170,886,887],{"class":172,"line":185},[170,888,889],{},"SELECT JNumber,\n",[170,891,892],{"class":172,"line":191},[170,893,894],{},"       SUM(Quantities) AS TotalQuantities\n",[170,896,897],{"class":172,"line":197},[170,898,408],{},[170,900,901],{"class":172,"line":203},[170,902,903],{},"GROUP BY JNumber;\n",[14,905,906,907,910],{},"讲解：视图中可以包含聚合查询。SQL Server 创建普通视图时不要在视图定义中写裸 ",[60,908,909],{},"ORDER BY","，排序应放在查询视图时完成。",[18,912,914,915,918,919,922],{"id":913},"_4-设关系模式-ra-b-c-dfab-cd-a-d说明为什么-r-不是-2nf并分解成-2nf-模式集","4. 设关系模式 ",[60,916,917],{},"R(A, B, C, D)","，",[60,920,921],{},"F={AB -> CD, A -> D}","。说明为什么 R 不是 2NF，并分解成 2NF 模式集。",[14,924,24],{},[75,926,927,933,954,969],{},[32,928,929,930,452],{},"候选码：",[60,931,932],{},"AB",[32,934,935,936,939,940,943,944,918,947,950,951,953],{},"因为 ",[60,937,938],{},"AB -> CD","，所以 ",[60,941,942],{},"AB+ = ABCD","；",[60,945,946],{},"A+ = AD",[60,948,949],{},"B+ = B","，因此只有 ",[60,952,932],{}," 能推出全部属性。",[32,955,956,957,960,961,964,965,968],{},"非主属性 ",[60,958,959],{},"D"," 部分依赖于候选码的一部分 ",[60,962,963],{},"A","，即 ",[60,966,967],{},"A -> D","，所以 R 不满足 2NF。",[32,970,971,972,526,975,452],{},"分解为：",[60,973,974],{},"R1(A, D)",[60,976,977],{},"R2(A, B, C)",[14,979,980,981,984,985,918,987,984,990,993,994,996,997,999],{},"讲解：2NF 的核心是“非主属性不能部分依赖于候选码”。分解后，",[60,982,983],{},"R1"," 保存 ",[60,986,967],{},[60,988,989],{},"R2",[60,991,992],{},"AB -> C","，消除了 ",[60,995,959],{}," 对组合码 ",[60,998,932],{}," 的部分依赖。",[18,1001,1003,1004,918,1007,1010],{"id":1002},"_5-设关系模式-ra-b-cfc-b-b-a说明为什么-r-不是-3nf并分解成-3nf-模式集","5. 设关系模式 ",[60,1005,1006],{},"R(A, B, C)",[60,1008,1009],{},"F={C -> B, B -> A}","。说明为什么 R 不是 3NF，并分解成 3NF 模式集。",[14,1012,24],{},[75,1014,1015,1031,1037,1046],{},[32,1016,929,1017,1020,1021,1024,1025,939,1028,452],{},[60,1018,1019],{},"C","，因为 ",[60,1022,1023],{},"C -> B"," 且 ",[60,1026,1027],{},"B -> A",[60,1029,1030],{},"C+ = ABC",[32,1032,1033,1034,452],{},"存在传递依赖：",[60,1035,1036],{},"C -> B -> A",[32,1038,1039,1042,1043,1045],{},[60,1040,1041],{},"B"," 不是超码，",[60,1044,963],{}," 是非主属性，因此违反 3NF。",[32,1047,971,1048,526,1051,452],{},[60,1049,1050],{},"R1(C, B)",[60,1052,1053],{},"R2(B, A)",[14,1055,1056,1057,1060,1061,1064,1065,1067,1068,1070,1071,1042,1073,1075],{},"讲解：3NF 允许依赖 ",[60,1058,1059],{},"X -> A"," 的情况是：",[60,1062,1063],{},"X"," 是超码，或 ",[60,1066,963],{}," 是主属性。这里 ",[60,1069,1027],{}," 中 ",[60,1072,1041],{},[60,1074,963],{}," 不是主属性，所以不满足 3NF。",[18,1077,1079,1080,1083],{"id":1078},"_6-设关系模式-rs-c-tname属性为学生学号课程号任课教师姓名每个学生可选多门课每门课只有一个教师任教","6. 设关系模式 ",[60,1081,1082],{},"R(S#, C#, TNAME)","，属性为学生学号、课程号、任课教师姓名。每个学生可选多门课，每门课只有一个教师任教。",[14,1085,1086],{},"要求：写出基本 FD 和关键码；说明为什么不是 2NF；举例说明冗余；分解成 2NF。",[14,1088,24],{},[75,1090,1091,1101,1106,1116,1119],{},[32,1092,1093,1094,918,1097,1100],{},"基本函数依赖：",[60,1095,1096],{},"C# -> TNAME",[60,1098,1099],{},"(S#, C#) -> TNAME"," 可由前者推出。",[32,1102,929,1103,452],{},[60,1104,1105],{},"(S#, C#)",[32,1107,1108,1109,1112,1113,452],{},"不满足 2NF：",[60,1110,1111],{},"TNAME"," 是非主属性，却依赖于组合码的一部分 ",[60,1114,1115],{},"C#",[32,1117,1118],{},"冗余示例：很多学生选同一门课时，该课程教师姓名会重复存储多次。",[32,1120,1121,1122,526,1125,452],{},"2NF 分解：",[60,1123,1124],{},"SC(S#, C#)",[60,1126,1127],{},"CT(C#, TNAME)",[14,1129,1130,1131,1134,1135,452],{},"讲解：选课事实和课程任课教师事实是两类信息，混在一个关系里会导致教师名重复。分解后，一个学生选一门课记录在 ",[60,1132,1133],{},"SC","，一门课对应一个教师记录在 ",[60,1136,1137],{},"CT",[18,1139,1141,1142,1145],{"id":1140},"_7-设关系模式-rs-tname-taddr属性分别表示学生学号指导教师姓名指导教师地址每个学生只有一个指导老师每个教师只有一个联系地址教师不允许同名同姓","7. 设关系模式 ",[60,1143,1144],{},"R(S#, TNAME, TADDR)","，属性分别表示学生学号、指导教师姓名、指导教师地址。每个学生只有一个指导老师；每个教师只有一个联系地址；教师不允许同名同姓。",[14,1147,24],{},[75,1149,1150,1158,1163,1176,1179],{},[32,1151,1093,1152,918,1155,452],{},[60,1153,1154],{},"S# -> TNAME",[60,1156,1157],{},"TNAME -> TADDR",[32,1159,929,1160,452],{},[60,1161,1162],{},"S#",[32,1164,1165,1166,1169,1170,1042,1172,1175],{},"不满足 3NF：存在传递依赖 ",[60,1167,1168],{},"S# -> TNAME -> TADDR","，且 ",[60,1171,1111],{},[60,1173,1174],{},"TADDR"," 是非主属性。",[32,1177,1178],{},"冗余示例：同一导师指导多个学生时，导师地址重复出现多次。",[32,1180,1181,1182,526,1185,452],{},"3NF 分解：",[60,1183,1184],{},"ST(S#, TNAME)",[60,1186,1187],{},"TA(TNAME, TADDR)",[14,1189,1190],{},"讲解：单属性候选码时不会有部分依赖，所以它至少满足 2NF；问题在于传递依赖，因此要分解到 3NF。",[18,1192,1194,1195,1197,1198,1201],{"id":1193},"_8-设关系模式-ra-b-c-d函数依赖集-fa-b-a-c写出-r-的关键码并说明理由","8. 设关系模式 ",[60,1196,917],{},"，函数依赖集 ",[60,1199,1200],{},"F={A -> B, A -> C}","。写出 R 的关键码，并说明理由。",[14,1203,1204,1205,452],{},"答案：候选码是 ",[60,1206,1207],{},"AD",[14,1209,370,1210,1212,1213,862,1215,1217,1218,943,1220,1222,1223,452,1225,1169,1228,862,1231,1234,1235,1237],{},[60,1211,963],{}," 能推出 ",[60,1214,1041],{},[60,1216,1019],{},"，但不能推出 ",[60,1219,959],{},[60,1221,959],{}," 不出现在任何函数依赖右部，所以任何候选码都必须包含 ",[60,1224,959],{},[60,1226,1227],{},"AD+ = ABCD",[60,1229,1230],{},"A+",[60,1232,1233],{},"D+"," 都不能推出全部属性，所以 ",[60,1236,1207],{}," 是候选码。",[18,1239,1241,1242,452],{"id":1240},"_9-设某商业集团数据库中有关系模式-r商店编码-顾客编码-消费总额-顾客单位-地址-电话","9. 设某商业集团数据库中有关系模式 ",[60,1243,1244],{},"R(商店编码, 顾客编码, 消费总额, 顾客单位, 地址, 电话)",[14,1246,1247],{},"规定：",[29,1249,1250,1253,1256],{},[32,1251,1252],{},"每个顾客在每个商店只有一个消费总额。",[32,1254,1255],{},"每个顾客只属于一个单位。",[32,1257,1258],{},"每个顾客单位只有一个地址、一个电话。",[14,1260,24],{},[75,1262,1263,1283,1288,1298,1313],{},[32,1264,1265,1266],{},"基本函数依赖：\n",[75,1267,1268,1273,1278],{},[32,1269,1270],{},[60,1271,1272],{},"(商店编码, 顾客编码) -> 消费总额",[32,1274,1275],{},[60,1276,1277],{},"顾客编码 -> 顾客单位",[32,1279,1280],{},[60,1281,1282],{},"顾客单位 -> 地址, 电话",[32,1284,929,1285,452],{},[60,1286,1287],{},"(商店编码, 顾客编码)",[32,1289,1108,1290,1293,1294,1297],{},[60,1291,1292],{},"顾客单位"," 部分依赖于组合码的一部分 ",[60,1295,1296],{},"顾客编码","，并且地址、电话也间接依赖于顾客编码。",[32,1299,1300,1301],{},"2NF 分解：\n",[75,1302,1303,1308],{},[32,1304,1305],{},[60,1306,1307],{},"R1(商店编码, 顾客编码, 消费总额)",[32,1309,1310],{},[60,1311,1312],{},"R2(顾客编码, 顾客单位, 地址, 电话)",[32,1314,1315,1316],{},"3NF 分解：\n",[75,1317,1318,1322,1327],{},[32,1319,1320],{},[60,1321,1307],{},[32,1323,1324],{},[60,1325,1326],{},"R2(顾客编码, 顾客单位)",[32,1328,1329],{},[60,1330,1331],{},"R3(顾客单位, 地址, 电话)",[14,1333,1334,1335,1338],{},"讲解：2NF 先消除组合码上的部分依赖，3NF 继续消除 ",[60,1336,1337],{},"顾客编码 -> 顾客单位 -> 地址, 电话"," 这种传递依赖。",[18,1340,1342,1343,1346],{"id":1341},"_10-设计一个记录各个球队队员每场比赛进球数的关系模式r队员编号-比赛场次-进球数-球队名-队长名每个队员只能属于一个球队每个球队只有一个队长","10. 设计一个记录各个球队队员每场比赛进球数的关系模式：",[60,1344,1345],{},"R(队员编号, 比赛场次, 进球数, 球队名, 队长名)","。每个队员只能属于一个球队，每个球队只有一个队长。",[14,1348,24],{},[75,1350,1351,1370,1375,1384,1398],{},[32,1352,1265,1353],{},[75,1354,1355,1360,1365],{},[32,1356,1357],{},[60,1358,1359],{},"(队员编号, 比赛场次) -> 进球数",[32,1361,1362],{},[60,1363,1364],{},"队员编号 -> 球队名",[32,1366,1367],{},[60,1368,1369],{},"球队名 -> 队长名",[32,1371,929,1372,452],{},[60,1373,1374],{},"(队员编号, 比赛场次)",[32,1376,1108,1377,1380,1381,452],{},[60,1378,1379],{},"球队名"," 部分依赖于组合码中的 ",[60,1382,1383],{},"队员编号",[32,1385,1300,1386],{},[75,1387,1388,1393],{},[32,1389,1390],{},[60,1391,1392],{},"R1(队员编号, 比赛场次, 进球数)",[32,1394,1395],{},[60,1396,1397],{},"R2(队员编号, 球队名, 队长名)",[32,1399,1315,1400],{},[75,1401,1402,1406,1411],{},[32,1403,1404],{},[60,1405,1392],{},[32,1407,1408],{},[60,1409,1410],{},"R2(队员编号, 球队名)",[32,1412,1413],{},[60,1414,1415],{},"R3(球队名, 队长名)",[14,1417,1418],{},"讲解：比赛进球数是“队员-比赛”的事实；队员所属球队是“队员”的事实；球队队长是“球队”的事实。分开存储后冗余更少，更新异常也更少。",[18,1420,1422,1423,1426],{"id":1421},"_11-设有关系模式-r职工名-项目名-工资-部门名-部门经理每个职工可参加多个项目各领一份工资每个项目只属于一个部门每个部门只有一个经理","11. 设有关系模式 ",[60,1424,1425],{},"R(职工名, 项目名, 工资, 部门名, 部门经理)","。每个职工可参加多个项目，各领一份工资；每个项目只属于一个部门；每个部门只有一个经理。",[14,1428,24],{},[75,1430,1431,1450,1456,1471,1490],{},[32,1432,1265,1433],{},[75,1434,1435,1440,1445],{},[32,1436,1437],{},[60,1438,1439],{},"职工名 -> 工资",[32,1441,1442],{},[60,1443,1444],{},"项目名 -> 部门名",[32,1446,1447],{},[60,1448,1449],{},"部门名 -> 部门经理",[32,1451,929,1452,1455],{},[60,1453,1454],{},"(职工名, 项目名)","，用来标识某职工参加某项目这一事实。",[32,1457,1108,1458,1461,1462,918,1465,1461,1468,452],{},[60,1459,1460],{},"工资"," 部分依赖于 ",[60,1463,1464],{},"职工名",[60,1466,1467],{},"部门名",[60,1469,1470],{},"项目名",[32,1472,1300,1473],{},[75,1474,1475,1480,1485],{},[32,1476,1477],{},[60,1478,1479],{},"R1(职工名, 项目名)",[32,1481,1482],{},[60,1483,1484],{},"R2(职工名, 工资)",[32,1486,1487],{},[60,1488,1489],{},"R3(项目名, 部门名, 部门经理)",[32,1491,1315,1492],{},[75,1493,1494,1498,1502,1507],{},[32,1495,1496],{},[60,1497,1479],{},[32,1499,1500],{},[60,1501,1484],{},[32,1503,1504],{},[60,1505,1506],{},"R3(项目名, 部门名)",[32,1508,1509],{},[60,1510,1511],{},"R4(部门名, 部门经理)",[14,1513,1514,1515,1518],{},"讲解：题中“各领一份工资”按每个职工有一份工资理解。若某课程老师要求“工资随项目不同而不同”，则应把 ",[60,1516,1517],{},"(职工名, 项目名) -> 工资"," 写入依赖，并相应调整分解；但按题面常规语义，工资是职工属性。",[1520,1521,1522],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":166,"searchDepth":179,"depth":179,"links":1524},[1525,1526,1527,1542,1544,1546,1548,1550,1552,1554,1556],{"id":20,"depth":179,"text":21},{"id":52,"depth":179,"text":53},{"id":69,"depth":179,"text":70,"children":1528},[1529,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541],{"id":154,"depth":185,"text":1530},"3.1 用 CREATE TABLE 建立上述四张表，并指出主键和外键。",{"id":392,"depth":185,"text":393},{"id":421,"depth":185,"text":422},{"id":455,"depth":185,"text":456},{"id":479,"depth":185,"text":480},{"id":533,"depth":185,"text":534},{"id":567,"depth":185,"text":568},{"id":643,"depth":185,"text":644},{"id":711,"depth":185,"text":712},{"id":786,"depth":185,"text":787},{"id":814,"depth":185,"text":815},{"id":868,"depth":185,"text":869},{"id":913,"depth":179,"text":1543},"4. 设关系模式 R(A, B, C, D)，F={AB -> CD, A -> D}。说明为什么 R 不是 2NF，并分解成 2NF 模式集。",{"id":1002,"depth":179,"text":1545},"5. 设关系模式 R(A, B, C)，F={C -> B, B -> A}。说明为什么 R 不是 3NF，并分解成 3NF 模式集。",{"id":1078,"depth":179,"text":1547},"6. 设关系模式 R(S#, C#, TNAME)，属性为学生学号、课程号、任课教师姓名。每个学生可选多门课，每门课只有一个教师任教。",{"id":1140,"depth":179,"text":1549},"7. 设关系模式 R(S#, TNAME, TADDR)，属性分别表示学生学号、指导教师姓名、指导教师地址。每个学生只有一个指导老师；每个教师只有一个联系地址；教师不允许同名同姓。",{"id":1193,"depth":179,"text":1551},"8. 设关系模式 R(A, B, C, D)，函数依赖集 F={A -> B, A -> C}。写出 R 的关键码，并说明理由。",{"id":1240,"depth":179,"text":1553},"9. 设某商业集团数据库中有关系模式 R(商店编码, 顾客编码, 消费总额, 顾客单位, 地址, 电话)。",{"id":1341,"depth":179,"text":1555},"10. 设计一个记录各个球队队员每场比赛进球数的关系模式：R(队员编号, 比赛场次, 进球数, 球队名, 队长名)。每个队员只能属于一个球队，每个球队只有一个队长。",{"id":1421,"depth":179,"text":1557},"11. 设有关系模式 R(职工名, 项目名, 工资, 部门名, 部门经理)。每个职工可参加多个项目，各领一份工资；每个项目只属于一个部门；每个部门只有一个经理。","md",{},"\u002Fsource\u002Fcs\u002Fdb\u002F100+70\u002Fday06-70-01-11",{"title":5,"description":16},"source\u002Fcs\u002Fdb\u002F100+70\u002FDay06-数据库70题-试题01-11","h-7ouEFAKK5R-RtQOKLxol1TeY3OxEl8pvIe3f5QlDU",1793692174926]