Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
15.01.2021
Размер:
10.35 Mб
Скачать

Пример 52: получение комбинации неповторяющихся идентификаторов

«Данные 1» и «данные 2» представляют собой разные данные. Допустим, что «данные 1» – случайным образом выбранный идентификатор со значением 3. Но при выполнении второго общего табличного выражения «данные 2» дают другое число (например, 1) и второй случайный идентификатор сравнивается уже с этим числом (1), а не с тем, что было выбрано ранее (3).

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

К сожалению, эта проблема не имеет никакого решения в MS SQL Server – в данной СУБД невозможно «материализовать» результаты вычисления общих табличных выражений. В Oracle же обходной способ существует.

Oracle Решение 7.4.2.b

1WITH "first_source"

2AS (SELECT /*+ MATERIALIZE */ "s_id",

3

 

 

ROW_NUMBER() OVER (ORDER BY DBMS_RANDOM.RANDOM) AS "rn"

4

 

FROM

"subscribers"),

5"second_source"

6AS (SELECT /*+ MATERIALIZE */ "s_id",

7

 

 

ROW_NUMBER() OVER

(ORDER BY DBMS_RANDOM.RANDOM) AS "rn"

8

 

FROM

"subscribers"

 

9

 

WHERE

"s_id" != (SELECT

"s_id"

10

 

 

FROM

"first_source"

11

 

 

WHERE

"rn" = 1))

 

 

 

 

 

12SELECT "first_source"."s_id" AS "id_first",

13"second_source"."s_id" AS "id_second"

14

 

FROM

"first_source"

 

 

 

 

15CROSS JOIN "second_source"

16WHERE "first_source"."rn" = 1

17AND "second_source"."rn" = 1

Обратите внимание на конструкцию /*+ MATERIALIZE */ в строках 2 и 6 – это т.н. подсказка (query hint), предписывающая СУБД «материализовать» (по аналогии с материализованными представлениями, см. пример 27{215}) результаты выполнения общего табличного выражения. Теперь результаты вычисления общих табличных выражений фиксируются, и описанная выше проблема исчезает, т.е. «данные 1» и «данные 2» совпадают.

Внимание! Конструкция /*+ MATERIALIZE */ является недокументированной особенностью Oracle и может в любой момент перестать поддерживаться. Т.е. такое решение хоть и работает, но не может считаться надёжным.

Задание 7.4.2.TSK.A: оптимизировтаь решение{536} задачи 7.4.2.a{536} таким образом, чтобы получение двух случайных записей для первого набора и одной случайной записи для второго набора происходило без упорядочивания по случайному числу.

Задание 7.4.2.TSK.B: реализовать решение{536} задачи 7.4.2.a{536} в виде хранимой процедуры без получения декартового произведения множеств.

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016–2018 Стр: 540/545

Краткое сравнение MySQL, MS SQL Server, Oracle

Раздел 8: Краткое сравнение MySQL, MS SQL Server, Oracle

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

Особенности запросов на выборку и модификацию данных.

 

 

 

Суть

 

 

MySQL

 

MS SQL Server

 

 

 

 

 

 

Oracle

Ссылка

Условия объ-

 

Можно использо-

 

Можно использо-

 

Можно использовать

2.2.1.a{67}

единения в

 

вать

ON

или

US-

 

 

 

 

вать только

ON

 

 

 

 

 

 

 

ON

или

US-

 

 

 

 

 

 

 

 

 

 

 

 

 

JOIN

 

 

 

 

 

 

 

 

ING(одноимённые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ING(одноимённые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

поля в объединяе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

поля в объединяе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мых таблицах)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мых таблицах)

 

 

 

 

 

Типы данных

 

Результирующий

 

Нужна конвертация,

 

Результирующий

2.1.5.a{31}

для

AVG

и

 

тип выбирается ав-

 

иначе будут невер-

 

тип выбирается ав-

 

 

иных число-

 

томатически, кон-

 

ные результаты

 

томатически, кон-

 

 

вых операций

 

вертация не нужна

 

(например,

AVG

от

 

вертация не нужна

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

целочисленного

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

поля тоже будет це-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лым числом, т.е.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дробная часть будет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

утеряна)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Расположе-

 

В конце

 

В конце

 

В начале; можно из-

2.1.6.EXP.A{37}

ние по умол-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

менить через

NULLS

 

 

 

чанию

NULL

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FIRST

и

NULLS

 

 

 

 

 

 

значений при

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LAST

 

 

 

 

 

 

 

 

 

 

сортировке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приведение

 

Автоматическое

 

Автоматическое

 

Требуется явная

2.1.7.b{40}

строкового

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

конвертация

 

 

представле-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ния даты к

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

датавремен-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ному типу

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Показ первых

 

LIMIT x

 

 

TOP x

 

 

 

 

 

 

 

 

 

 

До 12c нужен вло-

2.1.8.b{44}

нескольких

 

 

 

 

 

 

 

 

 

 

 

или

 

женный запрос с

 

 

рядов вы-

 

 

 

 

 

 

 

 

 

 

 

OFFSET y ROWS

 

 

 

 

ROW_NUMBER()

,

 

 

 

 

борки

 

 

 

 

 

 

 

 

 

 

 

FETCH NEXT x

 

 

 

 

 

c 12c поддержива-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ROWS ONLY

 

 

 

 

 

 

 

 

ется

OFFSET y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ROWS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FETCH NEXT x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ROWS ONLY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Есть также под-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2.7.b{116}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

держка

TOP ...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WITH TIES

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ранжирую-

 

Не поддерживаются,

 

ROW_NUMBER

,

RANK

,

 

 

ROW_NUMBER

,

RANK

,

 

2.1.8.EXP.D{50},

щие (оконные

 

но можно проэмули-

 

DENSE_RANK

,

NTILE

 

 

DENSE_RANK

,

NTILE

 

2.2.7.d{120},

функции)

 

ровать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2.9.d{140}

Именование

 

Обязательно

 

Обязательно

 

Обязательно, при

2.1.8.EXP.D{50},

подзапросов,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

этом нельзя писать

2.1.8.c{46},

являющихся

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AS

перед именем

2.1.8.d{48}

источником

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

подзапроса

 

 

табличных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

данных (в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

секции

FROM

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и

JOIN

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016–2018

Стр: 541/545

Краткое сравнение MySQL, MS SQL Server, Oracle

Особенности запросов на выборку и модификацию данных (продолжение).

 

 

Суть

 

 

 

 

MySQL

 

 

MS SQL Server

 

 

 

 

Oracle

Ссылка

Общие таб-

 

Не поддерживаются,

 

Поддерживаются

 

Поддерживаются

2.1.8.d{48},

личные выра-

 

но иногда можно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2.6.b{103}

жения

 

эмулировать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Определение

 

DATEDIFF(большая

 

 

DATEDIFF(day,

 

 

 

 

 

 

 

 

 

 

(большая -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.1.9.d{57}

разницы в

 

, меньшая)

 

 

 

 

 

 

 

 

 

 

 

 

 

меньшая, боль-

 

 

 

 

 

 

 

меньшая)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

днях между

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шая)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

двумя датами

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Получение

 

CURDATE()

 

 

 

 

 

 

 

 

 

 

 

 

 

CONVERT(date,

 

 

 

 

 

 

 

 

 

TRUNC(SYSDATE)

 

 

 

 

 

 

 

2.1.9.d{57}

текущей даты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GETDATE()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Особенности

 

Можно в

SELECT

 

 

 

 

 

 

 

 

 

Нельзя в

SELECT

 

 

 

 

 

 

 

 

Нельзя в

SELECT

 

 

 

 

 

 

 

 

2.1.10.a{61},

 

GROUP BY

 

 

 

указывать поля, не

 

указывать поля, не

 

указывать поля, не

2.2.2.a{72}

 

 

 

 

 

 

 

 

 

являющиеся агреги-

 

являющиеся агреги-

 

являющиеся агреги-

 

 

 

 

 

 

 

 

 

 

рующими функци-

 

рующими функци-

 

рующими функци-

 

 

 

 

 

 

 

 

 

 

ями и не перечис-

 

ями и не перечис-

 

ями и не перечис-

 

 

 

 

 

 

 

 

 

 

ленные в

GROUP BY

.

 

ленные в

GROUP BY

.

 

ленные в

GROUP BY

.

 

 

 

 

 

 

 

 

 

 

Можно в

GROUP BY

 

 

 

 

Нельзя в

GROUP BY

 

 

 

 

Нельзя в

GROUP BY

 

 

 

 

 

 

 

 

 

 

 

 

 

ссылаться на имя

 

ссылаться на имя

 

ссылаться на имя

 

 

 

 

 

 

 

 

 

 

(псевдоним) выра-

 

(псевдоним) выра-

 

(псевдоним) выра-

 

 

 

 

 

 

 

 

 

 

жения, используе-

 

жения, используе-

 

жения, используе-

 

 

 

 

 

 

 

 

 

 

мого в

SELECT

.

 

 

 

 

 

 

 

мого в

SELECT

.

 

 

 

 

 

 

мого в

SELECT

.

 

 

 

 

 

 

Групповая

 

GROUP_CONCAT()

 

 

 

 

 

STUFF (FOR XML…)

 

 

LISTAGG()

 

 

 

 

 

 

 

 

 

 

2.2.2.a{72},

конкатенация

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2.2.b{76}

Выборка дан-

 

Как правило, не тре-

 

Всегда требуется

 

Всегда требуется

2.2.5.c{100}

ных из не-

 

буется указания

 

явное указание

 

явное указание

 

скольких таб-

 

имени таблицы,

 

имени таблицы,

 

имени таблицы,

 

лиц и одно-

 

СУБД автоматиче-

 

если в выборку по-

 

если в выборку по-

 

имённые поля

 

ски определяет, от-

 

падает два и более

 

падает два и более

 

 

 

 

 

 

 

 

 

 

куда извлекать дан-

 

одноимённых поля

 

одноимённых поля

 

 

 

 

 

 

 

 

 

 

ные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

«Защита от

 

IFNULL(поле,

 

 

 

 

 

 

ISNULL(поле,

 

 

 

 

 

NVL(поле, под-

 

 

 

 

 

2.2.6.b{103}

 

NULL

»

 

 

 

 

подстановочное

 

 

 

 

 

подстановочное

 

 

 

 

становочное зна-

 

 

 

 

 

 

 

 

 

 

 

значение)

 

 

 

 

 

 

 

значение)

 

 

 

 

 

 

 

 

чение)

 

 

 

 

 

 

 

 

 

 

 

 

TRUE

/

FALSE

 

 

Есть, трактуются как

 

Явным образом от-

 

Явным образом от-

2.2.7.e{124}

 

 

 

 

 

 

 

 

 

1 и 0

 

сутствуют

 

сутствуют

 

Разновидно-

 

JOIN

,

LEFT JOIN

,

 

 

 

 

JOIN

,

LEFT JOIN

,

 

 

 

JOIN

,

LEFT JOIN

,

 

 

Пример 20{149}

сти

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JOIN

 

 

 

 

RIGHT JOIN

,

CROSS

 

 

RIGHT JOIN

,

CROSS

 

 

RIGHT JOIN

,

 

CROSS

 

 

 

 

 

 

 

 

 

 

 

JOIN

, не поддержи-

 

JOIN

,

FULL OUTER

 

 

JOIN

,

FULL OUTER

 

 

 

 

 

 

 

 

 

 

 

вается

FULL OUTER

 

 

JOIN

,

CROSS APPLY

 

 

JOIN

, с версии 12c

 

 

 

 

 

 

 

 

 

 

JOIN

и

 

 

и

OUTER APPLY

 

 

 

поддерживается

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

 

 

CROSS/OUTER AP-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CROSS APPLY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PLY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OUTER APPLY

 

 

 

 

 

 

Проверка того

 

(NOT) EXISTS

 

 

(NOT) EXISTS

 

 

 

EXISTS (запрос)

,

2.2.7.e{124}

факта, что за-

 

(запрос)

 

 

(запрос)

 

 

 

а вместо

NOT EX-

 

2.3.5.b{203}

прос вернул

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ISTS

нужно

 

6.1.2.a{419}

(не)пустой ре-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

объявить перемен-

 

зультат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ную, сделать

SE-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LECT COUNT

в неё,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сравнить её с нулём

 

Конкатенация

 

CONCAT(сколько

 

 

CONCAT(сколько

 

 

 

CONCAT(ровно два

 

2.3.5.c{205}

строк

 

угодно парамет-

 

 

угодно парамет-

 

 

параметра)

или ис-

 

 

 

 

 

 

 

 

 

 

ров)

 

 

ров)

 

 

пользовать

||

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016–2018 Стр: 542/545

Краткое сравнение MySQL, MS SQL Server, Oracle

Особенности запросов на выборку и модификацию данных (продолжение).

Суть

 

MySQL

 

MS SQL Server

 

 

Oracle

Ссылка

Вставка зна-

 

Просто передать

 

Включить для таб-

 

Отключить триггер,

2.3.1.a{182}

чения в авто-

 

значение — и всё

 

лицы

IDEN-

 

 

 

реализующий авто-

 

инкременти-

 

 

 

 

 

 

 

 

инкрементацию

 

 

 

 

 

 

TITY_INSERT

 

 

 

руемый пер-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вичный ключ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вставка или

 

REPLACE

и

 

MERGE

 

 

MERGE

 

2.3.4.a{195},

обновление в

 

ON DUPLICATE KEY

 

 

 

 

 

 

 

 

 

 

2.3.4.b{197}

зависимости

 

UPDATE

 

 

 

 

 

 

 

 

 

 

 

от совпаде-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ния значений

 

 

 

 

 

 

 

 

 

 

 

 

 

 

первичного

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ключа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Суть

 

 

MySQL

 

MS SQL Server

 

 

 

 

 

Oracle

Ссылка

Построение

 

Нельзя использо-

 

Можно использо-

 

Можно использовать

3.1.1.a{210}

представле-

 

вать подзапросы в

 

вать подзапросы в

 

подзапросы в сек-

 

ний

 

секции

FROM

 

 

 

 

 

 

 

секции

FROM

 

 

 

 

 

 

 

ции

FROM

 

 

 

 

 

 

 

 

 

 

 

Кэширующие

 

Не поддерживаются

 

Поддерживаются

 

Поддерживаются

Пример 27{215}

(материали-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зованные, ин-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дексирован-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ные) пред-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ставления

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Триггеры

 

Не более шести

 

BEFORE

-триггеров

 

BEFORE

-триггеров

3.1.2.b{232}

 

 

штук (даже если пы-

 

нет, но можно со-

 

нет, но можно со-

 

 

 

таться задать раз-

 

здавать любое коли-

 

здавать любое коли-

 

 

 

ные имена):

BE-

 

 

 

 

чество

AFTER

 

и

IN-

 

 

чество

AFTER

 

и

IN-

 

 

 

 

 

FORE/AFTER

 

IN-

 

 

 

STEAD OF

триггеров

 

STEAD OF

триггеров

 

 

 

SERT/UPDATE/DE-

 

 

на

INSERT/UP-

 

 

 

на

INSERT/UP-

 

 

 

 

 

 

 

LETE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DATE/DELETE

 

 

 

DATE/DELETE

 

 

 

 

 

 

 

 

Работают только на

 

Работают только на

 

Есть как триггеры

4.1.1.a{272},

 

 

уровне записи (акти-

 

уровне выражения

 

уровня записи, так и

4.1.1.b{281}

 

 

вируются каждый

 

(активируются один

 

триггеры уровня вы-

 

 

 

раз для каждой за-

 

раз для всего выра-

 

ражения (с некото-

 

 

 

писи обрабатывае-

 

жения)

 

рыми ограничени-

 

 

 

мых данных)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ями: нет псевдотаб-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лиц

inserted

и

up-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dated

)

 

 

 

 

Нельзя «навесить»

 

Можно «навесить»

 

Можно «навесить»

4.1.1.b{281}

 

 

одно тело триггера

 

одно тело триггера

 

одно тело триггера

 

 

 

на несколько опера-

 

на несколько опера-

 

на несколько опера-

 

 

 

ций

 

ций

 

ций

 

 

 

Не активируются

 

Активируются кас-

 

Активируются кас-

4.1.1.a{272},

 

 

каскадными опера-

 

кадными операци-

 

кадными операци-

4.1.2.a{292}

 

 

циями

 

ями

 

ями

 

Триггеры на

 

Не поддерживаются

 

Поддерживаются

 

Поддерживаются

Пример 30{257}

представле-

 

 

 

 

 

 

 

 

 

 

 

только

INSTEAD OF

 

 

только

INSTEAD OF

 

 

ниях

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Неявные

 

Есть

 

Есть

 

Нет

Пример 41{408}

транзакции и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

их автопод-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тверждение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016–2018 Стр: 543/545

Краткое сравнение MySQL, MS SQL Server, Oracle

Особенности представлений, триггеров, хранимых подпрограмм, транзакций (продолжение).

Суть

 

 

 

 

 

MySQL

 

 

MS SQL Server

 

 

 

 

Oracle

Ссылка

Уровни изо-

 

READ UNCOMMIT-

 

 

 

 

READ UNCOMMIT-

 

 

 

Уровни

READ COM-

 

 

 

Пример 44{434}

лированности

 

TED

,

READ COMMIT-

 

 

TED

,

READ COMMIT-

 

 

MITTED

,

 

 

 

 

 

 

 

 

 

транзакций

 

TED

,

REPEATABLE

 

 

 

 

TED

,

REPEATABLE

 

 

 

SERIALIZABLE

;

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

,

 

 

 

,

 

 

 

 

 

 

 

 

 

 

 

 

 

READ

SERIALIZA-

 

 

 

READ

SNAPSHOT

 

 

режимы

READ ONLY

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BLE

 

 

 

 

 

 

 

 

 

SERIALIZABLE

 

 

 

 

 

 

READ WRITE

 

 

 

 

 

Уровень изо-

 

REPEATABLE READ

 

 

 

READ COMMITTED

 

 

 

READ COMMITTED

 

 

 

6.2.1.a{428}

лированности

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

по умолчанию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод отла-

 

SELECT x

 

 

 

PRINT x

 

 

 

 

 

DBMS_OUT-

 

 

 

6.2.2.a{434}

дочной ин-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PUT.PUT_LINE(x)

 

 

 

формации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пауза в вы-

 

SELECT SLEEP(s)

 

 

 

WAITFOR DELAY

 

 

 

EXEC

 

 

6.2.1.a{428}

полнении

 

 

 

 

 

 

 

 

 

 

 

'hh:mm:ss'

 

 

 

DBMS_LOCK.SLEEP(

 

 

скрипта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s)

 

 

Модификация

 

Да

 

 

Нет

 

 

Да

5.1.1.c{367}

данных в хра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нимых функ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

циях

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 8.TSK.A: дополните приведённую выше таблицу списками индексов, поддерживаемых каждой из трёх СУБД.

Задание 8.TSK.B: заведите себе подобную таблицу и отмечайте особенности каждой СУБД — в первую очередь те, столкнувшись с которыми, вы вынуждены искать дополнительную информацию.

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016–2018 Стр: 544/545

Лицензия и распространение

Раздел 9: Лицензия и распространение

Данная книга распространяется под лицензией «Creative Commons Attribu- tion-NonCommercial-ShareAlike 4.0 International»51.

Текст книги периодически обновляется и дорабатывается. Если вы хотите поделиться этой книгой, пожалуйста, делитесь ссылкой на самую актуальную вер-

сию, доступную здесь: http://svyatoslav.biz/database_book/.

Исходные материалы (схемы, скрипты и т.д.) можно получить по этой ссылке: http://svyatoslav.biz/database_book_download/src.zip

В случае возникновения вопросов или обнаружения ошибок, опечаток и иных недочётов в книге, пишите: dbb@svyatoslav.biz.

* * *

Если вам понравилась эта книга, обратите внимание на ещё одну,

написанную в том же стиле: «Тестирование программного обеспечения. Базовый курс.»

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

Скачать: http://svyatoslav.biz/software_testing_book/

51«Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International». [https://creativecommons.org/licenses/by-nc- sa/4.0/legalcode]

Работа с MySQL, MS SQL Server и Oracle в примерах © EPAM Systems, RD Dep, 2016–2018 Стр: 545/545