Лекция 17. Язык баз данных SQL: средства манипулирования данными

Тесты

Заключение

 

Если вернуться к синтаксическим определениям разд. 13.3 Лекции 13, то можно убедиться, что в последних четырех лекциях мы рассмотрели все варианты организации оператора SELECT языка SQL (за исключением конструкций collection_derived_table и ONLY (table_or_query_name), относящихся к объектным расширениям языка SQL).

 

Для общего понимания языка на модельном уровне более важными являются предыдущие три лекции. Данная лекция включена в курс, скорее, с целью общего ознакомления читателей с новыми возможностями оператора выборки, чем с целью их подробного описания. С большой вероятностью средства формулировки аналитических и рекурсивных запросов языка SQL будут пересматриваться при подготовке следующих вариантов стандарта языка.

 

 

Пусть тело таблицы EMP имеет следующий вид (в таблице содержится дополнительный столбец EMP_BONUS, как он был определен в разд. 12.2 Лекции 12):

 

EMP

EMP_NO DEPT_NO EMP_BDATE EMP_SAL EMP_BONUS
15000.00 13000.00
16000.00 14000.00
14000.00 NULL
16000.00 13000.00
NULL 15000.00 14000.00
NULL 17000.00 NULL
17000.00 16000.00
16000.00 15000.00
17000.00 16000.00
20000.00 NULL
18000.00 17000.00
18000.00 17000.00
22000.00 20000.00
22000.00 20000.00
NULL 13000.00 12000.00
NULL 14000.00 NULL
NULL NULL 19000.00 18000.00

 

1 (1) Какая из показанных ниже таблиц является результатом запроса

SELECT EMP_SAL, EMP_BONUS, DEPT_NO, MAX(EMP_BDATE) AS MAX_BDATE,
GROUPING (EMP_BONUS) AS GBON, GROUPING (DEPT_NO) AS GDN
FROM EMP
GROUP BY ROLLUP (EMP_SAL, EMP_BONUS, DEPT_NO);?

 

(а) -

 

EMP_SAL EMP_BONUS DEPT_NO MAX_BDATE GBON GDN
NULL NULL NULL
13000.00 NULL NULL
14000.00 NULL NULL
15000.00 NULL NULL NULL
16000.00 NULL NULL
17000.00 NULL NULL NULL
18000.00 NULL NULL
19000.00 NULL NULL NULL
20000.00 NULL NULL
22000.00 NULL NULL
13000.00 12000.00 NULL
15000.00 13000.00 NULL
15000.00 14000.00 NULL NULL
16000.00 14000.00 NULL
16000.00 13000.00 NULL
16000.00 15000.00 NULL
17000.00 16000.00 NULL
18000.00 17000.00 NULL
19000.00 18000.00 NULL NULL
22000.00 20000.00 NULL
13000.00 12000.00
14000.00 NULL
15000.00 13000.00
15000.00 14000.00 NULL
16000.00 14000.00
16000.00 13000.00
16000.00 15000.00
17000.00 NULL NULL
17000.00 16000.00
18000.00 17000.00
20000.00 NULL
22000.00 20000.00

 

(б) +

 

EMP_SAL EMP_BONUS DEPT_NO MAX_BDATE GBON GDN
NULL NULL NULL
13000.00 NULL NULL
14000.00 NULL NULL
15000.00 NULL NULL NULL
16000.00 NULL NULL
17000.00 NULL NULL NULL
18000.00 NULL NULL
19000.00 NULL NULL NULL
20000.00 NULL NULL
22000.00 NULL NULL
13000.00 12000.00 NULL
14000.00 NULL NULL
15000.00 13000.00 NULL
15000.00 14000.00 NULL NULL
16000.00 14000.00 NULL
16000.00 13000.00 NULL
16000.00 15000.00 NULL
17000.00 NULL NULL NULL
17000.00 16000.00 NULL
18000.00 17000.00 NULL
19000.00 18000.00 NULL NULL
20000.00 NULL NULL
22000.00 20000.00 NULL
13000.00 12000.00
14000.00 NULL
14000.00 NULL NULL
15000.00 13000.00
15000.00 14000.00 NULL
16000.00 14000.00
16000.00 13000.00
16000.00 15000.00
17000.00 NULL NULL
17000.00 16000.00
18000.00 17000.00
19000.00 18000.00 NULL NULL
20000.00 NULL
22000.00 20000.00

 

(в) -

EMP_SAL EMP_BONUS DEPT_NO MAX_BDATE GBON GDN
NULL NULL NULL
13000.00 NULL NULL
14000.00 NULL NULL
15000.00 NULL NULL NULL
16000.00 NULL NULL
17000.00 NULL NULL NULL
18000.00 NULL NULL
19000.00 NULL NULL NULL
20000.00 NULL NULL
22000.00 NULL NULL
13000.00 12000.00 NULL
14000.00 NULL NULL
15000.00 13000.00 NULL
16000.00 14000.00 NULL
17000.00 NULL NULL NULL
18000.00 17000.00 NULL
19000.00 18000.00 NULL NULL
20000.00 NULL NULL
22000.00 20000.00 NULL
13000.00 12000.00
14000.00 NULL
15000.00 13000.00
16000.00 14000.00
17000.00 NULL NULL
18000.00 17000.00
19000.00 18000.00 NULL NULL
20000.00 NULL
22000.00 20000.00

 

1 (2) Какая из показанных ниже таблиц является результатом запроса

SELECT EMP_BDATE, EMP_BONUS, MIN (EMP_SAL) AS MIN_SAL,
GROUPING (EMP_BDATE) AS GBD, GROUPING (EMP_BONUS) AS GBON
FROM EMP
GROUP BY ROLLUP (EMP_BDATE, EMP_BONUS);?

 

(а) –

 

EMP_BDATE EMP_BONUS MIN_SAL GBD GBON
NULL NULL 13000.00
NULL 13000.00
NULL 16000.00
NULL 14000.00
NULL 17000.00
NULL NULL 15000.00
13000.00 15000.00
15000.00 16000.00
17000.00 18000.00
12000.00 13000.00
14000.00 16000.00
17000.00 18000.00
13000.00 16000.00
20000.00 22000.00
16000.00 17000.00
NULL 14000.00 15000.00
NULL 18000.00 19000.00

 

(б) –

 

EMP_BDATE EMP_BONUS MIN_SAL GBD GBON
NULL NULL 13000.00
NULL 13000.00
NULL 16000.00
NULL 14000.00
NULL 17000.00
13000.00 15000.00
15000.00 16000.00
17000.00 18000.00
12000.00 13000.00
14000.00 16000.00
17000.00 18000.00
13000.00 16000.00
20000.00 22000.00
16000.00 17000.00

 

(в) +

 

EMP_BDATE EMP_BONUS MIN_SAL GBD GBON
NULL NULL 13000.00
NULL 13000.00
NULL 16000.00
NULL 14000.00
NULL 17000.00
NULL NULL 15000.00
13000.00 15000.00
15000.00 16000.00
17000.00 18000.00
12000.00 13000.00
NULL 14000.00
14000.00 16000.00
17000.00 18000.00
NULL 14000.00
13000.00 16000.00
20000.00 22000.00
NULL 14000.00
16000.00 17000.00
NULL 14000.00 15000.00
NULL 18000.00 19000.00
NULL NULL 17000.00

 

1 (3) Какая из показанных ниже таблиц является результатом запроса

SELECT EMP_BONUS, EMP_DEPT, MIN (EMP_BDATE) AS MIN_BDATE,
GROUPING (EMP_BONUS) AS GBON, GROUPING (EMP_DEPT) AS GDN
FROM EMP
GROUP BY ROLLUP (EMP_BONUS, EMP_DEPT);?

 

(а) +

 

EMP_BONUS EMP_DEPT MIN_DDATE GBON GDN
NULL NULL NULL
13000.00 NULL
14000.00 NULL NULL
15000.00 NULL
16000.00 NULL
17000.00 NULL
18000.00 NULL NULL
20000.00 NULL
NULL NULL NULL
13000.00
14000.00 NULL
14000.00 NULL
15000.00
16000.00
17000.00
18000.00 NULL NULL
20000.00
NULL NULL
NULL
NULL NULL

 

(б) -

EMP_BONUS EMP_DEPT MIN_DDATE GBON GDN
NULL NULL NULL
13000.00 NULL
14000.00 NULL NULL
15000.00 NULL
16000.00 NULL
17000.00 NULL
18000.00 NULL NULL
20000.00 NULL
13000.00
14000.00 NULL
14000.00 NULL
15000.00
16000.00
17000.00
20000.00
NULL NULL
NULL
NULL NULL

 

(в) -

EMP_BONUS EMP_DEPT MIN_DDATE GBON GDN
NULL NULL NULL
13000.00 NULL
14000.00 NULL NULL
15000.00 NULL
16000.00 NULL
17000.00 NULL
18000.00 NULL NULL
20000.00 NULL
NULL NULL NULL
13000.00
14000.00 NULL
14000.00 NULL
14000.00 NULL
15000.00
15000.00 NULL
16000.00
17000.00
18000.00
18000.00 NULL NULL
20000.00
NULL NULL
NULL
NULL NULL

 

2 (1) Какая из показанных ниже таблиц является результатом запроса

SELECT EMP_BDATE, EMP_BONUS, MIN (EMP_SAL) AS MIN_SAL,
GROUPING (EMP_BDATE) AS GBD, GROUPING (EMP_BONUS) AS GBON
FROM EMP
GROUP BY CUBE (EMP_SAL, EMP_BONUS, DEPT_NO);?

 

(а) -

EMP_BDATE EMP_BONUS MIN_SAL GBD GBON
NULL NULL 13000.00
NULL 13000.00
NULL 16000.00
NULL 14000.00
NULL 17000.00
13000.00 15000.00
15000.00 16000.00
17000.00 18000.00
12000.00 13000.00
NULL 14000.00
14000.00 16000.00
17000.00 18000.00
NULL 14000.00
13000.00 16000.00
20000.00 22000.00
NULL 14000.00
16000.00 17000.00
NULL 14000.00 15000.00
NULL 18000.00 19000.00
NULL 13000.00 15000.00
NULL 14000.00 15000.00
NULL 15000.00 16000.00
NULL 16000.00 17000.00
NULL 17000.00 18000.00
NULL 18000.00 19000.00
NULL 20000.00 22000.00

 

(б) +

EMP_BDATE EMP_BONUS MIN_SAL GBD GBON
NULL NULL 13000.00
NULL 13000.00
NULL 16000.00
NULL 14000.00
NULL 17000.00
NULL NULL 15000.00
13000.00 15000.00
15000.00 16000.00
17000.00 18000.00
12000.00 13000.00
NULL 14000.00
14000.00 16000.00
17000.00 18000.00
NULL 14000.00
13000.00 16000.00
20000.00 22000.00
NULL 14000.00
16000.00 17000.00
NULL 14000.00 15000.00
NULL 18000.00 19000.00
NULL NULL 17000.00
NULL 13000.00 15000.00
NULL 14000.00 15000.00
NULL 15000.00 16000.00
NULL 16000.00 17000.00
NULL 17000.00 18000.00
NULL 18000.00 19000.00
NULL 20000.00 22000.00
NULL NULL 14000.00

 

в) -

EMP_BDATE EMP_BONUS MIN_SAL GBD GBON
NULL NULL 13000.00
NULL 13000.00
NULL 16000.00
NULL 14000.00
NULL 17000.00
13000.00 15000.00
15000.00 16000.00
17000.00 18000.00
12000.00 13000.00
14000.00 16000.00
17000.00 18000.00
13000.00 16000.00
20000.00 22000.00
16000.00 17000.00
NULL 14000.00 15000.00
NULL 18000.00 19000.00
NULL 13000.00 15000.00
NULL 14000.00 15000.00
NULL 15000.00 16000.00
NULL 16000.00 17000.00
NULL 17000.00 18000.00
NULL 18000.00 19000.00
NULL 20000.00 22000.00

 

2 (2) Какая из показанных ниже таблиц является результатом запроса

SELECT EMP_BONUS, EMP_DEPT, MIN (EMP_BDATE) AS MIN_BDATE,
GROUPING (EMP_BONUS) AS GBON, GROUPING (EMP_DEPT) AS GDN
FROM EMP
GROUP BY CUBE (EMP_BONUS, EMP_DEPT);?

 

(а) +

 

EMP_BONUS EMP_DEPT MIN_DDATE GBON GDN
NULL NULL NULL
13000.00 NULL
14000.00 NULL NULL
15000.00 NULL
16000.00 NULL
17000.00 NULL
18000.00 NULL NULL
20000.00 NULL
NULL NULL NULL
13000.00
14000.00 NULL
14000.00 NULL
15000.00
16000.00
17000.00
18000.00 NULL NULL
20000.00
NULL NULL
NULL
NULL NULL
NULL NULL
NULL
NULL
NULL NULL NULL

 

(б) -

 

EMP_BONUS EMP_DEPT MIN_DDATE GBON GDN
NULL NULL NULL
13000.00 NULL
14000.00 NULL NULL
15000.00 NULL
16000.00 NULL
17000.00 NULL
18000.00 NULL NULL
20000.00 NULL
13000.00
14000.00 NULL
14000.00 NULL
15000.00
16000.00
17000.00
20000.00
NULL NULL
NULL
NULL NULL
NULL
NULL

 

(в) -

EMP_BONUS EMP_DEPT MIN_DDATE GBON GDN
NULL NULL NULL
13000.00 NULL
14000.00 NULL NULL
15000.00 NULL
16000.00 NULL
17000.00 NULL
18000.00 NULL NULL
20000.00 NULL
13000.00
14000.00 NULL
15000.00
16000.00
17000.00
20000.00
NULL
NULL
NULL

 

2 (3) Какая из показанных ниже таблиц является результатом запроса

SELECT EMP_SAL, EMP_BONUS, MAX(EMP_BDATE) AS MAX_BDATE,
GROUPING (EMP_BONUS) AS GBON)
FROM EMP
GROUP BY ROLLUP (EMP_SAL, EMP_BONUS);?

 

(а) -

 

EMP_SAL EMP_BONUS MAX_BDATE GBON
NULL NULL NULL
13000.00 NULL
14000.00 NULL
15000.00 NULL NULL
16000.00 NULL
17000.00 NULL NULL
18000.00 NULL
19000.00 NULL NULL
20000.00 NULL
22000.00 NULL
NULL 13000.00
NULL 14000.00 NULL
NULL 15000.00
NULL 16000.00
NULL 17000.00
NULL 18000.00 NULL
NULL 20000.00
13000.00 12000.00
15000.00 13000.00
15000.00 14000.00 NULL
16000.00 14000.00
16000.00 13000.00
16000.00 15000.00
17000.00 16000.00
18000.00 17000.00
19000.00 18000.00 NULL
22000.00 20000.00

 

(б) -

 

EMP_SAL EMP_BONUS MAX_BDATE GBON
NULL NULL NULL
13000.00 NULL
14000.00 NULL
15000.00 NULL NULL
16000.00 NULL
17000.00 NULL NULL
18000.00 NULL
19000.00 NULL NULL
20000.00 NULL
22000.00 NULL
NULL 13000.00
NULL 15000.00
NULL 16000.00
NULL 17000.00
NULL 20000.00
13000.00 12000.00
15000.00 13000.00
16000.00 14000.00
16000.00 13000.00
16000.00 15000.00
17000.00 16000.00
18000.00 17000.00
22000.00 20000.00

 

(в) +

 

EMP_SAL EMP_BONUS MAX_BDATE GBON
NULL NULL NULL
13000.00 NULL
14000.00 NULL
15000.00 NULL NULL
16000.00 NULL
17000.00 NULL NULL
18000.00 NULL
19000.00 NULL NULL
20000.00 NULL
22000.00 NULL
NULL 13000.00
NULL 14000.00 NULL
NULL 15000.00
NULL 16000.00
NULL 17000.00
NULL 18000.00 NULL
NULL 20000.00
13000.00 12000.00
14000.00 NULL
15000.00 13000.00
15000.00 14000.00 NULL
16000.00 14000.00
16000.00 13000.00
16000.00 15000.00
17000.00 NULL NULL
17000.00 16000.00
18000.00 17000.00
19000.00 18000.00 NULL
22000.00 20000.00

 

3 (1) Пусть имеется следующее дерево:

 

 
 

 


Какой из следующих обходов этого дерева является обходом в ширину?

 

(а) +

КОРЕНЬ-ПОТОМОК1-ПОТОМОК2-ПОТОМОК3-П1.1-П2.1-П3.1-П3.2-П3.3-П1.1.1-П1.1.2-П2.1.1-П2.1.1.1

 

(б) –

КОРЕНЬ-ПОТОМОК1-ПОТОМОК2-ПОТОМОК3-П1.1-П1.1.1-П1.1.2-П2.1-П2.1.1-П2.1.1.1-П3.1-П3.2-П3.3

 

(в) –

КОРЕНЬ-ПОТОМОК1- П1.1-П1.1.1-П1.1.2- ПОТОМОК2- П2.1-П2.1.1-П2.1.1.1- ПОТОМОК3- П3.1-П3.2-П3.3

 

3 (2) Пусть имеется следующее дерево:

 

 
 

 


Какой из следующих обходов этого дерева является обходом в ширину?

 

(а) +

КОРЕНЬ-ПОТОМОК1-П1.1-П1.1.1-П1.1.2-ПОТОМОК2-П2.1-П2.1.1-П2.1.1.1-П2.1.1.2-ПОТОМОК3-П3.1-П3.2-П3.3

 

(б) -

КОРЕНЬ- ПОТОМОК2-П2.1-П2.1.1-П2.1.1.1-П2.1.1.2- КОРЕНЬ-ПОТОМОК1-П1.1-П1.1.1-П1.1.2- ПОТОМОК3-П3.1-П3.2-П3.3

 

(в) -

КОРЕНЬ-ПОТОМОК1- ПОТОМОК2- ПОТОМОК3- П1.1- П2.1- П3.1-П3.2-П3.3- П1.1.1-П1.1.2- П2.1.1-П2.1.1.1-П2.1.1.2

 

3 (3) Какая из следующих последовательностей является монотонной (n = {1, 2, …, m, …})?

 

(a) Последовательность k, где k = 2-n

 

(б) Последовательность k, где k = (-1)n

 

(в) Последовательность k, где k = (n+2)/(n+1)

 

Пусть имеется таблица PARTS следующего вида:

 

Major Minor Qty
P1 P2
P1 P3
P1 P4
P2 P3
P2 P5
P3 P5
P3 P6
P4 P3
P4 P6
P7 P8
P7 P9

 

Каждая строка таблицы PARTS соответствует детали, идентификационный номер которой содержится в столбце Major. Если строка о детали с идентификационным номером k содержится в теле таблицы PARTS, то столбец Minor содержит идентификационный номер другой детали p, которая входит в состав детали k в числе экземпляров, задаваемом значением столбца Qty данной строки.

 

4 (1) Какая из приведенных ниже таблиц является результатом рекурсивного запроса

WITH RECURSIVE PX (Major, Minor, Qty) AS
((SELECT Major, Minor, Qty
FROM PARTS
WHERE PARTS.Major = ‘P1’)
UNION ALL
(SELECT PX.Major, PARTS.Minor, PX.Qty * PARTS.Qty
FROM PX, PARTS
where pp.Major = px.Minor))
SELECT Major, Minor, Qty FROM PX;?

 

(а) +

Major Minor Qty
P1 P2
P1 P3
P1 P4
P1 P3
P1 P5
P1 P5
P1 P6
P1 P5
P1 P6
P1 P3
P1 P6
P1 P5
P1 P6

 

(б) -

 

Major Minor Qty
P1 P2
P1 P3
P1 P4
P1 P5
P1 P5
P1 P6
P1 P5
P1 P6
P1 P6
P1 P5
P1 P6

 

(в) -

 

Major Minor Qty
P1 P2
P1 P3
P1 P4
P1 P5
P1 P6

 

4 (2) Какая из приведенных ниже таблиц является результатом рекурсивного запроса

WITH RECURSIVE PX (Major, Minor, Qty) AS
((SELECT Major, Minor, Qty
FROM PARTS
WHERE PARTS.Major = ‘P1’)
UNION ALL
(SELECT PX.Major, PARTS.Minor, PX.Qty * PARTS.Qty
FROM PX, PARTS
where pp.Major = px.Minor))
SEARCH BREADTH

FIRST BY Major, Minor SET ORDER_COLUMN
SELECT Major, Minor, Qty FROM PX
ORDER BY ORDER_COLUMN;?

 

(а) +

 

Major Minor Qty
P1 P2
P1 P3
P1 P3
P1 P3
P1 P4
P1 P5
P1 P5
P1 P5
P1 P5
P1 P6
P1 P6
P1 P6
P1 P6

 

(б) -

 

Major Minor Qty
P1 P2
P1 P3
P1 P3
P1 P3
P1 P4
P1 P5
P1 P5
P1 P5
P1 P5
P1 P6
P1 P6
P1 P6
P1 P6

 

(в) -

Major Minor Qty
P1 P2
P1 P3
P1 P4
P1 P3
P1 P5
P1 P5
P1 P6
P1 P5
P1 P6
P1 P3
P1 P6
P1 P5
P1 P6

 

4 (3) Какая из приведенных ниже таблиц является результатом рекурсивного запроса

WITH RECURSIVE PX (Major, Minor, Qty) AS
((SELECT Major, Minor, Qty
FROM PARTS
WHERE PARTS.Major = ‘P1’)
UNION ALL
(SELECT PX.Major, PARTS.Minor, PX.Qty * PARTS.Qty
FROM PX, PARTS
where pp.Major = px.Minor))
SEARCH DEPTH FIRST BY Major, Minor SET ORDER_COLUMN
SELECT Major, Minor, Qty FROM PX
ORDER BY ORDER_COLUMN;?

 

(а) +

 

Major Minor Qty
P1 P2
P1 P3
P1 P3
P1 P3
P1 P4
P1 P5
P1 P5
P1 P5
P1 P5
P1 P6
P1 P6
P1 P6
P1 P6

 

(б) -

 

Major Minor Qty
P1 P2
P1 P3
P1 P3
P1 P3
P1 P4
P1 P5
P1 P5
P1 P5
P1 P5
P1 P6
P1 P6
P1 P6
P1 P6

 

(в) -

 

Major Minor Qty
P1 P2
P1 P3
P1 P3
P1 P3
P1 P4
P1 P5
P1 P5
P1 P5
P1 P5
P1 P6
P1 P6
P1 P6
P1 P6

 

Название этой лекции не совсем правильно отражает ее реальное содержание. Собственно средствам языка SQL, предназначенным для обновления базы данных, посвящается только один из трех основных разделов. Однако и следующие два раздела непосредственно примыкают к этой теме. В разд. 17.3 обсуждаются возможности выполнения операций обновления базы данных через представляемые таблицы. Обсуждается проблема в целом, подход к ее решению, применявшийся в ранних вариантах стандарта SQL, и решение, принятое в стандарте SQL:1999. Последний основной раздел лекции посвящается механизму триггеров, специфицированному в стандарте SQL:1999. Здесь тоже имеется явная связь с основной темой лекции, потому что основным условием срабатывания триггера является выполнение некоторой операции обновления базы данных, и действия, выполняемые в триггерной процедуре, как правило, тоже связаны с обновлением базы данных.