Бази даних-20210115T104840Z-001 / Реферат на тему _Современные СУБД_ / Using_MySql,_MS_SQL_Server_and_Oracle(1)
.pdfПример 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