С учебника Сибилева Получить полные сведения обо всех производимых изделиях
Скачать 26.63 Kb.
|
С учебника Сибилева Получить полные сведения обо всех производимых изделиях: РА: J; РИ:RANGE OF JX IS J; Получить номера и названия изделий, производимых в Томске. РА: (J WHERE Ci = ‘Томск’)[Jnum, Jnam]; РИ: (JX.Jnum, JX.Jnam) WHERE Ci=‘Томск’; SQL:SELECT Jnum, Jnam FROM J WHERE Ci = ‘Томск’; 3) Получить значения номеров поставщиков, выполняющих поставки для изделия J1. РА: (SPJ WHERE Jnum = ‘J1’)[Snum]; РИ: SPJX.Snum WHERE SPJX.Jnum=‘J1’; SQL: SELECT Snum FROM SPJ WHERE Jnum = ‘J1’; 4) Получить значения номеров поставщиков, поставляющих деталь Р1 для изделия J1. РА:(SPJ WHERE Jnum = ‘J1’ AND Pnum = ‘P1’)[Snum]; РИ: SPJX.Snum WHERE SPJX.Jnum=‘J1’ AND SPJX.Pnum=‘P1’; SQL: SELECT DISTINCT Snum FROM SPJ WHERE Jnum = ‘J1’ AND Pnum = ‘P1’; 5) Получить значения наименований изделий, для которых выполняет поставки поставщик S1. РА:(J JOIN (SPJ WHERE Snum = ‘S1’))[Jnam]; РИ: JX.Jnam WHERE EXISTS SPJX (SPJX.Snum=‘S1’ AND SPJX.Jnum=JX.Jnum); SQL: Вариант 1 SELECT DISTINCT Jnam FROM J JOIN SPJ WHERE Snum = ‘S1’; Вариант 2 SELECT DISTINCT Jnam FROM J JOIN SPJ ON Snum = ‘S1’ AND J.Jnum = SPJ.Jnum; Вариант 3 SELECT Jnam FROM J, (SELECT DISTINCT Jnum FROM SPJ WHERE Snum = ‘S1’) AS JS1 WHERE J.Jnum = JS1.Jnum; Вариант 4 SELECT DISTINCT Jnam FROM J, SPJ WHERE Snum = ‘S1’ AND J.Jnum = SPJ.Jnum; 6) Получить номера поставщиков, поставляющих детали для изделий J1 и J2. РА:(SPJ WHERE Jnum=‘J1’)[Snum] INTERSECT (SPJ WHERE Jnum=‘J2’)[Snum]; РИ: SPJX.Snum WHERE Jnum=‘J1’ AND EXISTS SPJY (SPJY.Snum=SPJX.Snum AND Jnum=‘J2’); SQL: SELECT Snum FROM SPJ WHERE Jnum = ‘J1’ AND Snum IN (SELECT Snum FROM SPJ WHERE Jnum = ‘J2’); 7) Получить значения номеров деталей, поставляемых для каждого изделия, производимого в Томске. РА:SPJ[Pnum, Jnum] DIVIDEBY (J WHERE Ci=‘Томск’)[Jnum]; РИ: SPJX.Pnum WHERE FORALL JX (IF JX.Ci=‘Томск’ THEN EXISTS SPJY (SPJY.Jnum=JX.Jnum AND SPJY.Pnum=SPJX.Pnum)); SQL:SELECT X.Pnum FROM SPJ AS X WHERE NOT EXISTS ( SELECT * FROM J WHERE Ci=‘Томск’ AND NOT EXISTS ( SELECT * FROM SPJ AS Y WHERE Y.Jnum=J.Jnum AND Y.Pnum = X.Pnum ) ); 8) Получить значения номеров поставщиков, поставляющих красные детали для изделий, производимых в Томске или Яе. РА:((P WHERE Co=‘красный’) JOIN SPJ JOIN (J WHERE Ci=‘Томск’ OR Ci=‘Яя’))[Snum]; РИ: SPJX.Snum WHERE EXISTS PX (PX.Co=‘красный’ AND PX.Pnum=SPJX.Pnum) AND EXISTS JX (JX.Jnum=SPJX.Jnum AND (JX.Ci=‘Томск’ OR JX.Ci=‘Яя’)); Получить значения номеров поставщиков, поставляющих красные детали для изделий, производимых в Томске И в Яе. РИ: SPJX.Snum WHERE EXISTS PX EXISTS JX ( PX.Pnum = SPJX.Pnum AND PX.Co = ‘красный’ AND JX.Jnum = SPJX.Jnum AND JX.Ci = ‘Томск’ ) AND EXISTS SPJY EXISTS PX EXISTS JX ( SPJY.Snum = SPJX.Snum AND PX.Pnum = SPJY.Pnum AND PX.Co = ‘красный’ AND JX.Jnum = SPJY.Jnum AND JX.Ci = ‘Яя’ ); SQL: SELECT DISTINCT Snum FROM SPJ, P, J WHERE Co = ‘красный’ AND SPJ.Pnum = P.Pnum AND J.Jnum = SPJ.Jnum AND J.Ci=‘Томск’ OR J.Ci=‘Яя’; 9) Получить значения номеров изделий, снабжаемых, по крайней мере, одним поставщиком, расположенным не в том же самом городе. РА: (((J RENAME Ci AS JCi) JOIN SPJ JOIN (S RENAME Ci AS Sci)) WHERE NOT (JCi=SCi))[Jnum]; РИ: JX.Jnum WHERE EXISTS SPJX EXISTS SX (JX.Jnum=SPJX.Jnum AND SX.Snum=SPJX.Snum AND NOT(JX.Ci=SX.Ci)); SQL: SELECT DISTINCT Jnum FROM SPJ, S, J WHERE J.Jnum = SPJ.Jnum AND S.Snum = SPJ.Snum AND NOT J.Ci = S.Ci; 10) Получить значения номеров изделий, для которых не поставляется ни одной красной детали из Томска. РА: J[Jnum] MINUS ((P WHERE Co=‘красный’ AND Ci=‘Томск’)[Pnum]) JOIN SPJ)[Jnum]; РИ: JX.Jnum WHERE NOT EXISTS SPJX EXISTS PX (SPJX.Pnum=PX.Pnum AND PX.Ci=‘Томск’ AND PX.Co=‘красный’ AND SPJX.Jnum=JX.Jnum); SQL: SELECT Jnum FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ, P WHERE ( SPJ.Jnum = J.Jnum AND SPJ.Pnum = P.Pnum AND P.Ci = ‘Томск’ AND Co = ‘красный’ ) ); 11) Получить имена поставщиков, поставляющих все детали. РА:(( SPJ[Snum, Pnum] DIVIDEBY P[Pnum]) JOIN S)[Snam]; РИ: SX.Snam WHERE FORALL PX (EXISTS SPJX (PX.Pnum=SPJX.Pnum AND PJX.Snum=SX.Snum)); 12) Получить имена всех поставщиков и наименования изделий, для которых они поставляют детали. SQL: SELECT DISTINCT Snam, Jnam FROM S LEFT JOIN (J JOIN SPJ); Получить номера и имена поставщиков, выполняющих поставки для изделий, производимых в Томске и Яе. SQL: SELECT S.Snum, Snam FROM S JOIN (J JOIN SPJ) USING (Snum) WHERE J.Ci = 'Томск' INTERSECT SELECT S.Snum, Snam FROM S JOIN (J JOIN SPJ) USING (Snum) WHERE J.Ci = 'Яя' ORDER BY 2; Получить значения цветов деталей поставляемых поставщиком S1. РА : ( P J O I N ( S PJ W H E R E S n u m = ‘ S 1 ’ ) ) [ C o ]; РИ: PX.Co WHERE EXISTS SPJX ( SPJX.Snum = ‘S1’ AND SPJX.Pnum = PX.Pnum ); SQL: SELECT DISTINCT Co FROM SPJ, P WHERE Snum = ‘S1’ AND SPJ.Pnum = P.Pnum; Получить значения номеров поставщиков, поставляющих для изделия J1 красную деталь РА: ( ( SPJ W H E R E Jnum = ‘J1’) J O I N ( P W H E R E Co = ‘красный’) )[ Snum] ; РИ: SPJX.Snum WHERE SPJX.Jnum = ‘J1’ AND EXISTS PX (PX.Co = ‘красный’ AND PX.Pnum = SPJX.Pnum); SQL: SELECT Snum FROM SPJ, P WHERE Jnum = ‘J1’ AND P.Pnum = SPJ.Pnum AND Co = ‘красный’; Получить имена поставщиков, поставляющих деталь Р2. РА: ( ( SPJ JOIN S) WHERE Pnum = ‘P2’ ) [Snam]; РИ: SX.Snam WHERE EXISTS SPJX (SPJX.Pnum = ‘P2’ AND SPJX.Snum = SX.Snum); SQL: SELECT Sname FROM S, SPJ WHERE SPJ.Pnum = ‘P2’ AND S.Snum = SPJ.Snum; Получить имена поставщиков, поставляющих все поставляемые детали. РА: ( ( SPJ[Snum, Pnum] DIVIDEBY SPJ[Pnum] ) JOIN S) [ Snam] ; РИ: SX.Snam WHERE FOR ALL PX (IF EXISTS SPJX SPJX.Pnum = PX.Pnum THEN EXISTS SPJY (SPJY.Pnum = PX.Pnum AND SPJY.Snum = SX.Snum)); SQL: SELECT Snam FROM S WHERE NOT EXISTS ( SELECT * FROM P WHERE NOT EXISTS ( SELECT * FROM SPJ WHERE ( P.Pnum = SPJ.Pnum AND SPJ.Snum = S.Snum ) ) ); Получить значения номеров поставщиков, поставляющих детали для изделий J1 и J2 РИ: SPJX.Snum WHERE SPJX.Jnum = ‘J1’ AND EXISTS SPJY (SPJY.Snum = SPJX.Snum AND SPJY.Jnum = ‘J2’); Получить номера деталей, поставляемых для какого-либо изделия, производимого в Яе поставщиком из Яи. РА: ((J JOIN S WHERE Ci = ‘Яя’)[Jnum, Snum] JOIN SPJ)[Pnum]; РИ: SPJX.Pnum WHERE EXISTS JX EXISTS SX (JX.Ci = ‘Яя’ AND SX.Ci = ‘Яя’ AND SPJX.Snum = SX.Snum AND SPJX.Jnum = JX.Jnum); Получить номера деталей, поставляемых поставщиком из Яи для изделия, производимого в Яе. РА: ( ( S WHERE Ci = ‘Яя’ )[Snum] JOIN SPJ JOIN ( J WHERE Ci = ‘Яя’ )[Jnum] )[Pnum]; РИ: SPJX.Pnum WHERE EXISTS SX EXISTS JX ( SX.Ci = ‘Яя’ AND JX.Ci = ‘Яя’ AND SPJX.Snum = SX.Snum AND SPJX.Jnum = JX.Jnum ); SQL: SELECT DISTINCT Pnum FROM S, J, SPJ WHERE S.Ci = ‘Яя’ AND J.Ci = ‘Яя’ AND S.Snum = SPJ.Snum AND SPJ.Jnum = J.Jnum ; Получить номера поставщиков, поставляющих хотя бы одну деталь которая поставляется хотя бы одним поставщиком, поставляющим красную деталь. РА: (SPJ JOIN (SPJ JOIN (SPJ JOIN P WHERE Co = ‘красный’) [Snum]) [Pnum]) [Snum]; РИ: SPJX.Snum WHERE EXISTS SPJY EXISTS SPJZ EXISTS PX (PX.Co = ‘красный’ AND SPJZ.Pnum = PX.Pnum AND PJZ.Snum = SPJY.Snum AND SPJY.Pnum = SPJX.Pnum); Получить значение номера поставщика, поставляющего для изделия J1 красную деталь. РИ: SPJX.Snum WHERE SPJX.Jnum = ‘J1’ AND EXISTS PX ( PX.Pnum = SPJX.Pnum AND PX.Co = ‘красный’ ); Получить значение номера детали, поставляемой для каждого изделия, производимого в Томске РИ: SPJX.Pnum WHERE FORALL JX ( IF JX.Ci = ‘Томск’ THEN EXISTS SPJY ( SPJY.Jnum = JX.Jnum AND SPJY.Pnum = SPJX.Pnum ) ); Получить значения номеров изделий, снабжаемых хотя бы одним поставщиком, расположенным не в том же самом городе. РИ: JX.Jnum WHERE EXISTS SPJX EXISTS SX ( JX.Jnum = SPJX.Jnum AND SX.Snum = SPJX.Snum AND NOT (JX.Ci = SX.Ci) ); Получить номер детали, для которой нет детали, имеющей меньшее значение веса. РА: L := ( ( P[Pnum, We] ) RENAME Pnum AS Ln ) RENAME We AS Lw; R := ( ( P[Pnum, We] ) RENAME Pnum AS Rn) RENAME We AS Rw; T1 := ( ( L TIMES R) WHERE Lw < Rw )[Ln, Lw, Rw]; T3 := ( T1 DIVIDE BY T1[Rw] )[Ln]; РИ: PX.Pnum WHERE NOT EXISTS PY ( PX.We > PY.We ); Получить наименования изделий, снабжаемых ТОЛЬКО поставщиком S1 РА: ( ( SPJ JOIN J ) WHERE SPJ.Snum = ‘S1’ ) [J.Jname] MINUS ( ( SPJ JOIN J ) WHERE NOT( SPJ.Snum = ‘S1’ ) )[J.Jname]; РИ: JX.Jname WHERE EXISTS SPJX ( SPJX.Jnum = JX.Jnum AND SPJX.Snum = ‘S1’ ) AND NOT EXISTS SPJY ( SPJY.Jnum = JX.Jnum AND NOT SPJY.Snum = ‘S1’ ); SQL: SELECT DISTINCT J.Jname FROM SPJ, J WHERE SPJ.Jnum = J.Jnum AND SPJ.Snum = ‘S1’ AND NOT EXISTS ( SELECT * FROM SPJ AS SPJX WHERE SPJX.Jnum = J.Jnum AND NOT SPJX.Snum = ‘S1’ ) ; Получить все такие тройки (Snum, Pnum, Jnum), для которых поставщик, деталь и изделие размещены в одном городе. РА: (S JOIN P JOIN J)[Snum, Pnum, Jnum]; РИ: (SX.Snum, PX.Pnum, JX.Jnum) WHERE SX.Ci = PX.Ci AND JX.Ci = PX.Ci; SQL: SELECT S.Snum, P.Pnum, J.Jnum FROM S, P, J WHERE S.Ci = P.Ci AND J.Ci = P.Ci; Получить все тройки (Snum, Pnum, Jnum), такие что поставщик, деталь и изделие НЕ размещены в одном городе. РА: S[Snum] TIMES P[Pnum] TIMES J[Jnum] MINUS ( S JOIN P JOIN J )[Snum, Pnum, Jnum]; РИ: (SX.Snum, PX.Pnum, JX.Jnum) WHERE NOT SX.Ci = PX.Ci AND NOT JX.Ci = PX.Ci AND NOT SX.Ci = JX.Ci ; SQL: SELECT S.Snum, P.Pnum, J.Jnum FROM S, P, J WHERE NOT S.Ci = P.Ci AND NOT J.Ci = P.Ci AND NOT S.Ci = J.Ci; Получить все пары названий городов такие, что поставщик из первого города выполнил поставку для изделия, производимого во втором. РА: ( ( S RENAME Ci AS Sci ) JOIN SPJ JOIN ( J RENAME Ci AS Jci ) ) [Sci, Jci]; РИ: (SX.Ci, JX.Ci) WHERE EXISTS SPJX ( SPJX.Snum = SX.Snum AND SPJX.Jnum = JX.Jnum ); SQL: SELECT DISTINCT S.Ci, J.Ci FROM S, J, SPJ WHERE S.Snum = SPJ.Snum AND J.Jnum = SPJ.Jnum; Получить номера деталей, поставляемых для изделий поставщиками, размещёнными в тех же городах, что и изделия. РА: (S JOIN SPJ JOIN J) [P.Pnum]; РИ: SPJX.Pnum WHERE EXISTS SX EXISTS JX ( SPJX.Snum = SX.Snum AND SPJX.Jnum = JX.Jnum AND SX.Ci = JX.Ci ); SQL: SELECT DISTINCT Pnum FROM S, J, SPJ WHERE S.Snum = SPJ.Snum AND J.Jnum = SPJ.Jnum AND S.Ci = J.Ci; Получить номера поставщиков, поставляющих одну и ту же деталь для всех изделий ( SPJ[Snum, Pnum, Jnum] DIVIDE BY J[Jnum] )[Snum]; SX.Snum WHERE EXISTS PX FORALL JX EXISTS SPJY ( SPJY.Snum = SX.Snum AND SPJY.Pnum = PX.Pnum AND SPJY.Jnum = JX.Jnum ); Получить значение наименования изделия, не получающего ни одной красной детали от какого-либо поставщика из Томска. РИ: JX.Jnam WHERE NOT EXISTS SPJX EXISTS SX EXISTS PX ( SPJX.Jnum = JX.Jnum AND SPJX.Snum = SX.Snum AND SPJX.Pnum = PX.Pnum AND SX.Ci = ‘Томск’ AND PX.Co = ‘красный’ ); SQL: SELECT Jnam FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ, S, P WHERE SPJ.Jnum = J.Jnum AND SPJ.Snum = S.Snum AND SPJ.Pnum = P.Pnum AND P.Co = ‘красный’ AND S.Ci = ‘Томск’ ); Получить значение номера детали, которая поставляется только для изделий, производящихся в том же городе, в котором размещена эта деталь РА: ( J JOIN SPJ JOIN P )[Pnum] MINUS ( J RENAME Ci AS JCi JOIN SPJ JOIN P RENAME Ci AS Pci )[Pnum]; РИ: RANGE OF SPJX IS SPJ; RANGE OF JX IS J; RANGE OF PX IS P; PX.Pnum WHERE EXISTS SPJX ( PX.Pnum = SPJX.Pnum AND EXISTS JX ( JX.Jnum = SPJX.Jnum AND PX.Ci = JX.Ci ) ) AND NOT EXISTS SPJX ( PX.Pnum = SPJX.Pnum AND EXISTS JX ( JX.Jnum = SPJX.Jnum AND NOT PX.Ci = JX.Ci ) ); SQL: SELECT Pnum FROM J, SPJ, P WHERE SPJ.Jnum = J.Jnum AND SPJ.Pnum = P.Pnum AND J.Ci = P.Ci AND NOT EXISTS ( SELECT * FROM SPJ AS SPJX WHERE EXISTS ( SELECT * FROM J AS JX WHERE ( SPJX.Pnum = P.Pnum AND SPJX.Jnum = JX.Jnum AND NOT P.Ci = JX.Ci ) ) ); Получить значение номера детали, которая поставляется для каждого изделия, производимого в Томске. РА: SPJ[Pnum, Jnum] DIVIDE BY ( J WHERE Ci = ‘Томск’ )[Jnum]; РИ: PX.Pnum WHERE FOR ALL JX ( IF JX.Ci = ‘Томск’ THEN EXISTS SPJX ( SPJX.Jnum = JX.Jnum AND SPJX.Pnum = PX.Pnum ) ); SQL: SELECT Pnum FROM P WHERE NOT EXISTS ( SELECT * FROM J WHERE J.Ci = ’Томск’ AND NOT EXISTS ( SELECT * FROM SPJ WHERE SPJ.Pnum = P.Pnum AND SPJ.Jnum = J.Jnum ) ); Получить значение номера поставщика, поставляющего все детали, размещённые в его городе. РА: ( (S JOIN P)[Snum, Pnum] MINUS ( SPJ JOIN (S JOIN P)[Snum, Pnum] ) )[Snum]; РИ: SX.Snum WHERE FOR ALL PX ( IF PX.Ci = SX.Ci THEN EXISTS SPJX ( SPJX.Pnum = PX.Pnum AND SPJX.Snum = SX.Num ) ); SQL: SELECT S.Snum FROM S WHERE NOT EXISTS ( SELECT * FROM P WHERE P.Ci = S.Ci AND NOT EXISTS SELECT * FROM SPJ WHERE SPJ.Snum = S.Snum AND SPJ.Pnum = P.Pnum ); Получить значение номера поставщика, поставляющего хотя бы одну деталь, которая поставляется хотя бы одним поставщиком, поставляющим хотя бы одну красную деталь.. РА: ( ( ( SPJ JOIN ( P WHERE Co = ‘красный’ )[Pnum] )[Snum] JOIN SPJ )[Pnum] JOIN SPJ )[Snum]; РИ: SPJX.Snum WHERE EXISTS SPJY EXISTS SPJZ EXISTS PX ( SPJX.Pnum = SPJY.Pnum AND SPJY.Snum = SPJZ.Snum AND SPJZ.Pnum = PX.Pnum AND PX.Co = ‘красный’ ); SQL: SELECT DISTINCT SPJX.Snum FROM SPJ AS SPJX, SPJ AS SPJY, SPJ AS SPJZ WHERE SPJX.Pnum = SPJY.Pnum AND SPJY.Snum = SPJZ.Snum AND ( SELECT P.Co FROM P WHERE P.Pnum =SPJZ.Pnum ) = ‘красный’; Из другого файла 100% правильные: Определить номера деталей, поставляемых либо томским поставщиком, либо для томского изделия. SQL: SELECT DISTINCT Pnum FROM S, J, SPJ WHERE (S.Snum = SPJ.Snum AND S.Ci= ‘Томск’) OR (J.Jnum = SPJ.Jnum AND J.Ci= ‘Томск’) ; Получить все пары названий городов такие, что деталь в первом городе поставляется поставщиком во втором городе. SQL: SELECT DISTINCT P.Ci, S.Ci FROM S, P, SPJ WHERE S.Snum = SPJ.Snum AND P.Pnum = SPJ.Pnum; Найти все такие тройки значений "номер поставщика, номер детали, номер изделия", для которых указанные поставщик, деталь и изделие находятся в одном городе. РА: (S JOIN P JOIN J) [Snum, Pnum, Jnum]; РИ: RANGE OF SX IS S; RANGE OF PX IS P; RANGE OF JX IS J; (SX.Snum, PX.Pnum, JX.Jnum) WHERE SX.Ci = PX.Ci AND JX.Ci = PX.Ci; SQL: SELECT Snum, Pnum, Jnum FROM S, P, J WHERE S.Ci = P.Ci AND J.Ci = P.Ci; Получить значение номера изделия, снабжаемого, по крайней мере, одним поставщиком, находящимся не в том же самом городе. РА: ( (S RENAME Ci AS SCi) JOIN SPJ JOIN (J RENAME Ci AS JCI) WHERE NOT (SCi = JCi)) [Jnum]; РИ: RANGE OF JX IS J; RANGE OF SPJX IS SPJ; RANGE OF SX IS S; JX.Jnum WHERE EXISTS SPJX EXISTS SX (SPJX.Jnum = JX.Jnum AND SPJX.Snum = SX.Snum AND NOT (SX.Ci = JX.Ci)); SQL: SELECT DISTINCT Jnum FROM J, S, SPJ WHERE SPJ.Snum = S.Snum AND SPJ.Jnum = J.Jnum AND NOT( J.Ci = S.CI); Получить значение номера детали, поставляемой каждым поставщиком, размещенным в Томске SQL: SELECT X.Pnum FROM SPJ AS X WHERE NOT EXISTS ( SELECT * FROM S WHERE Ci=’Томск’ AND NOT EXISTS ( SELECT * FROM SPJ AS Y WHERE Y.Snum=S.Snum AND Y.Pnum = X.Pnum ) ); Получить все пары названий городов такие, что деталь в первом городе поставляется поставщиком во втором городе. SQL: SELECT P.Ci, S.Ci FROM SPJ, P, S WHERE SPJ.Snum=S.Snum and SPJ.Pnum=P.Pnum; Получить пары значений (Snum, Pnum) такие, что поставщик Snum не поставляет деталь Pnum. SQL: SELECT X.Snum, X.Pnum FROM spj as X WHERE NOT EXISTS ( SELECT * FROM spj as Y WHERE Y.Snum = X.Snum AND Y.Pnum = X.Pnum ); РА: (S[Snum] TIMES P[Pnum] ) MINUS SPJ[Snum, Pnum]; Получить все пары названий городов такие, что деталь в первом городе поставляется поставщиком во втором городе. SQL: SELECT P.Ci, S.Ci FROM SPJ, P, S WHERE SPJ.Snum=S.Snum and SPJ.Pnum=P.Pnum; РА: ((P RENAМE Ci AS PCITY) JOIN SPJ JOIN (S RENAМE Ci AS SCIТY)) [PCIТY, SCIТY]; Получить значение наименования поставщика, поставляющего для изделия J1 красную деталь. РА:(S JOIN ((P WHERE Co = ‘Красный’) JOIN (SPJ WHERE Jnum = ‘J1’)))[Snam]; РИ: SX.Snam WHERE EXISTS SPJX ( SPJX.Jnum = ‘J1’ AND SPJX.Snum = SX.Snum) AND EXISTS PX ( PX.Pnum = SPJX.Pnum AND PX.Co = ‘красный’ ); SQL :SELECT DISTINCT S.Snam FROM S,J,SPJ WHERE S.Snum = SPJ.Snum AND J.Jnum = SPJ.Jnum AND P.Pnum = SPJ.Pnum AND P.Co = ‘Красный’ AND SPJ.Jnum = ‘J1’; Получить пары значений (Pnum, Jnum) такие, что деталь Pnum поставляется для изделия Jnum поставщиком, расположенным в том же городе, в котором производится изделие. РА: ( ( (S RENAME Ci AS SCi) JOIN SPJ JOIN (J RENAME Ci AS JCi) ) JOIN P ) WHERE (SCi = JCi) [Pnum,Jnum]; РИ: RANGE OF SPJX IS SPJ; RANGE OF SX IS S; RANGE OF JX IS J; RANGE OF PX IS P (SPJX.Pnum, SPJX.Jnum) WHERE EXISTS SX EXISTS JX EXIST PX ( SX.Snum = SPJX.Snum AND JX.Jnum = SPJX.Jnum AND SX.Ci=JX.Ci AND SPJX.Pnum = PX.Pnum ); SQL: SELECT SPJ.Pnum, SPJ.Jnum FROM S,J,SPJ WHERE S.Snum = SPJ.Snum AND J.Jnum = SPJ.Jnum AND P.Pnum = SPJ.Pnum AND S.Ci = J.Ci; Получить значения троек (Snum, Pnum, Jnum), для которых поставщик, деталь и изделие размещены в одном городе, и поставщик Snum поставляет деталь Pnum для изделия Jnum РА: (((S RENAME Ci AS SCi JOIN SPJ) JOIN P RENAME Ci AS PCi) JOIN J RENAME Ci AS JCi) WHERE (SCi = PCi AND PCi=JCi)[SPJ.Snum, SPJ.Pnum, SPJ.Jnum]; РИ: RANGE OF SX AS S; RANGE OF PX AS P; RANGE OF JX AS J; RANGE OF SPJX AS SPJ; (SPJX.Snum, SPJX.Pnum, SPJX.Jnum) WHERE EXISTS SX(SX.Snum = SPJX.Snum) AND EXISTS PX(PX.Pnum = SPJX.Pnum AND PX.Ci = SX.Ci) AND EXISTS JX(JX.Jnum = SPJX.Jnum AND PX.Ci = JX.Ci); SQL: SELECT Snum, Pnum, Jnum FROM S, P, J, SPJ WHERE ( ( S.Ci=P.Ci AND P.Ci=J.Ci) AND ( S.Snum=SPJ.Snum AND P.Pnum=SPJ.Pnum AND J.Jnum=SPJ.Jnum ) ); Определить номера изделий, в состав которых входят, по меньшей мере, все типы деталей, поставляемых поставщиком с номером S1. SQL: SELECT DISTINCT Jnum FROM SPJ WHERE NOT EXIST ( SELECT SPJX.Jnum FROM SPJ AS SPJX WHERE (SPJX.Jnum=SPJ.Jnum) AND SPJX.Pnum NOT IN (SELECT SPJY.Pnum FROM SPJ AS SPJY WHERE SPJY.Snum = ‘S1’); Получить значение номера детали, поставляемой, по крайней мере, для одного изделия, размещённого не в том же самом городе PA: ( ((SPJ JOIN P RENAME Ci AS PCi) JOIN J RENAME Ci AS JCi) WHERE NOT JCi = PCi )[SPJ.Pnum]; PИ: RANGE OF PX AS P; RANGE OF JX AS J; RANGE OF SPJX AS SPJ; SPJX.Pnum WHERE EXISTS JX (JX.Jnum = SPJX.Jnum) AND EXISTS PX (PX.Pnum = SPJX.Pnum AND PX.Ci <> JX.Ci); SQL: SELECT DISTINCT SPJ.Pnum FROM ( SPJ INNER JOIN J ON (SPJ.Jnum = J.Jnum) ) INNER JOIN P ON (SPJ.Pnum = P.Pnum) WHERE NOT P.Ci=J.Ci; Получить значение номера поставщика, снабжающего, по крайней мере, одно изделие, размещённое в том же городе РА: ((S RENAME Ci AS SCi) JOIN SPJ JOIN (J RENAME Ci AS JCi) WHERE (SCi = JCi))[Snum]; РИ: SX.Snum WHERE EXISTS SPJX EXISTS JX (SPJX.Snum = SX.Snum AND SPJX.Jnum = JX.Jnum AND SX.Ci = JX.Ci); SQL: SELECT DISTINCT Snum FROM S, J, SPJ WHERE S.Snum = SPJ.Snum AND J.Jnum = SPJ.Jnum AND S.Ci = J.Ci; Найти все такие тройки значений "номер поставщика, номер детали, номер изделия", для которых никакие из пар (поставщик, деталь), (поставщик, изделие), (деталь, изделие) не находятся в одном городе. РА: ( (S RENAME Ci AS SCi) TIMES (P RENAME Ci AS PCi) TIMES (J RENAME Ci AS JCi)) WHERE (NOT (SCi = PCi) AND NOT (SCi = JCi) AND NOT (PCi = JCi) )[Pnum, Jnum, Snum]; РИ: (Sx.Snum, Px.Pnum, Jx.Jnum) WHERE (NOT (Sx.Ci = Px.Ci) AND NOT (Sx.Ci = Jx.Ci) AND NOT (Px.Ci = Jx.Ci)); SQL: SELECT Snum, Pnum, Jnum FROM S, P, J WHERE S.Ci <> P.Ci AND S.Ci <> J.Ci AND P.Ci <> J.Ci; Получить значение номера поставщика, поставляющего только детали, размещённые в его городе. SQL: SELECT SPJ.Jnum FROM SPJ, P, J WHERE SPJ.Pnum = P.Pnum AND SPJ.Jnum = J.Jnum AND P.Ci = J.Ci EXCEPT (SELECT SPJ.Jnum FROM SPJ, P, J WHERE SPJ.Pnum = P.Pnum AND SPJ.Jnum = J.Jnum AND P.Ci <> J.Ci); Определить номера деталей, поставляемых поставщиком из Томска для изделий в Томске. SQL: SELECT DISTINCT Pnum FROM S,J,SPJ WHERE S.Snum = SPJ.Snum AND J.Jnum = SPJ.Jnum AND S.Ci = ‘Томск’ AND J.Ci = ‘Томск’ ; Получить значение номера детали, поставляемой только для изделия J1. SQL: SELECT X.Pnum FROM SPJ AS X WHERE X.Jnum='J1' AND NOT EXISTS (SELECT * FROM SPJ AS Y WHERE Y.Pnum=X.Pnum AND NOT Y.Jnum='J1'); |