Главная страница

С учебника Сибилева Получить полные сведения обо всех производимых изделиях


Скачать 26.63 Kb.
НазваниеС учебника Сибилева Получить полные сведения обо всех производимых изделиях
Дата27.12.2022
Размер26.63 Kb.
Формат файлаdocx
Имя файлаOtvety1.docx
ТипУчебник
#866314

С учебника Сибилева

  1. Получить полные сведения обо всех производимых изделиях:

РА: J;

РИ:RANGE OF JX IS J;

  1. Получить номера и названия изделий, производимых в Томске.

РА: (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);

  1. Получить номера и имена поставщиков, выполняющих поставки для изделий, производимых в Томске и Яе.

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;

  1. Получить значения цветов деталей поставляемых поставщиком 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;

  1. Получить значения номеров поставщиков, поставляющих для изделия 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 = ‘красный’;

  1. Получить имена поставщиков, поставляющих деталь Р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;

  1. Получить имена поставщиков, поставляющих все поставляемые детали.

РА: ( ( 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 ) ) );

  1. Получить значения номеров поставщиков, поставляющих детали для изделий J1 и J2

РИ: SPJX.Snum WHERE SPJX.Jnum = ‘J1’ AND EXISTS SPJY (SPJY.Snum = SPJX.Snum AND SPJY.Jnum = ‘J2’);

  1. Получить номера деталей, поставляемых для какого-либо изделия, производимого в Яе поставщиком из Яи.

РА: ((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);

  1. Получить номера деталей, поставляемых поставщиком из Яи для изделия, производимого в Яе.

РА: ( ( 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 ;

  1. Получить номера поставщиков, поставляющих хотя бы одну деталь которая поставляется хотя бы одним поставщиком, поставляющим красную деталь.

РА: (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);

  1. Получить значение номера поставщика, поставляющего для изделия J1 красную деталь.

РИ: SPJX.Snum WHERE SPJX.Jnum = ‘J1’ AND EXISTS PX ( PX.Pnum = SPJX.Pnum AND PX.Co = ‘красный’ );

  1. Получить значение номера детали, поставляемой для каждого изделия, производимого в Томске

РИ: SPJX.Pnum WHERE FORALL JX ( IF JX.Ci = ‘Томск’ THEN EXISTS SPJY ( SPJY.Jnum = JX.Jnum AND SPJY.Pnum = SPJX.Pnum ) );

  1. Получить значения номеров изделий, снабжаемых хотя бы одним поставщиком, расположенным не в том же самом городе.

РИ: JX.Jnum WHERE EXISTS SPJX EXISTS SX ( JX.Jnum = SPJX.Jnum AND SX.Snum = SPJX.Snum AND NOT (JX.Ci = SX.Ci) );

  1. Получить номер детали, для которой нет детали, имеющей меньшее значение веса.

РА: 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 );

  1. Получить наименования изделий, снабжаемых ТОЛЬКО поставщиком 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’ ) ;

  1. Получить все такие тройки (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;

  1. Получить все тройки (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;

  1. Получить все пары названий городов такие, что поставщик из первого города выполнил поставку для изделия, производимого во втором.

РА: ( ( 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;

  1. Получить номера деталей, поставляемых для изделий поставщиками, размещёнными в тех же городах, что и изделия.

РА: (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;

  1. Получить номера поставщиков, поставляющих одну и ту же деталь для всех изделий

( 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 );

  1. Получить значение наименования изделия, не получающего ни одной красной детали от какого-либо поставщика из Томска.

РИ: 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 = ‘Томск’ );

  1. Получить значение номера детали, которая поставляется только для изделий, производящихся в том же городе, в котором размещена эта деталь

РА: ( 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 ) ) );

  1. Получить значение номера детали, которая поставляется для каждого изделия, производимого в Томске.

РА: 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 ) );

  1. Получить значение номера поставщика, поставляющего все детали, размещённые в его городе.

РА: ( (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 );

  1. Получить значение номера поставщика, поставляющего хотя бы одну деталь, которая поставляется хотя бы одним поставщиком, поставляющим хотя бы одну красную деталь..

РА: ( ( ( 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% правильные:

  1. Определить номера деталей, поставляемых либо томским поставщиком, либо для томского изделия.

SQL: SELECT DISTINCT Pnum FROM S, J, SPJ WHERE (S.Snum = SPJ.Snum AND S.Ci= ‘Томск’) OR (J.Jnum = SPJ.Jnum AND J.Ci= ‘Томск’) ;

  1. Получить все пары названий городов такие, что деталь в первом городе поставляется поставщиком во втором городе.

SQL: SELECT DISTINCT P.Ci, S.Ci FROM S, P, SPJ WHERE S.Snum = SPJ.Snum AND P.Pnum = SPJ.Pnum;

  1. Найти все такие тройки значений "номер поставщика, номер детали, номер изделия", для которых указанные поставщик, деталь и изделие находятся в одном городе.

РА: (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;

  1. Получить значение номера изделия, снабжаемого, по крайней мере, одним поставщиком, находящимся не в том же самом городе.

РА: ( (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);

  1. Получить значение номера детали, поставляемой каждым поставщиком, размещенным в Томске

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 ) );

  1. Получить все пары названий городов такие, что деталь в первом городе поставляется поставщиком во втором городе.

SQL: SELECT P.Ci, S.Ci FROM SPJ, P, S WHERE SPJ.Snum=S.Snum and SPJ.Pnum=P.Pnum;

  1. Получить пары значений (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];

  1. Получить все пары названий городов такие, что деталь в первом городе поставляется поставщиком во втором городе.

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];

  1. Получить значение наименования поставщика, поставляющего для изделия 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’;

  1. Получить пары значений (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;

  1. Получить значения троек (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 ) );

  1. Определить номера изделий, в состав которых входят, по меньшей мере, все типы деталей, поставляемых поставщиком с номером 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’);

  1. Получить значение номера детали, поставляемой, по крайней мере, для одного изделия, размещённого не в том же самом городе

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;

  1. Получить значение номера поставщика, снабжающего, по крайней мере, одно изделие, размещённое в том же городе

РА: ((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;

  1. Найти все такие тройки значений "номер поставщика, номер детали, номер изделия", для которых никакие из пар (поставщик, деталь), (поставщик, изделие), (деталь, изделие) не находятся в одном городе.

РА: ( (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;

  1. Получить значение номера поставщика, поставляющего только детали, размещённые в его городе.

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);

  1. Определить номера деталей, поставляемых поставщиком из Томска для изделий в Томске.

SQL: SELECT DISTINCT Pnum FROM S,J,SPJ WHERE S.Snum = SPJ.Snum AND J.Jnum = SPJ.Jnum AND S.Ci = ‘Томск’ AND J.Ci = ‘Томск’ ;

  1. Получить значение номера детали, поставляемой только для изделия 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');


написать администратору сайта