Всем привет! В этой статье пойдет речь об одной из базовых сертификаций от ORACLE — Oracle Database SQL Certified Expert.
Чтобы получить сертификат, нужно сдать экзамен
1Z0-047.
Стоит экзамен для разных стран по-разному. Для Азербайджана – это
150 USD. Также есть опция купить тесты для практики от
Transcender вместе с ваучером на экзамен (bundle). Это обойдется Вам в
200 USD. И это выгодней, нежели покупать тесты отдельно.
Готовился сам по следующим книгам и документам + практика на базе:
—
Oracle Database 11g SQL (Oracle Press) by Jason Price (старенькая, но неплохая книга)
—
OCA Oracle Database 12c SQL Fundamentals I Exam Guide (Exam 1Z0-061) (Oracle Press) (был очень приятно удивлен, когда узнал сколько полезных советов она в себе таит)
—
Beginning Oracle SQL (Expert's Voice in Oracle) (очень много полезного. Хорошая книга)
—
OCE Oracle Database SQL Certified Expert Exam Guide (Exam 1Z0-047) (Oracle Press) (классика жанра)
—
Oracle Database Sample Schemas 12c Release 2 (12.2) (понадобится при развертывании тестовых схем)
Не могу сказать, что экзамен простой.
Поэтому решил поделиться примочками и скрытыми уловками, которые Вас там поджидают.
Итак, поехали!
1. SQL является
декларативным языком программирования, который описывает
какие вычисления следует произвести, но не
как.
Как — это удел императивных языков.
2. Когда Вас просят оценить код либо схему или таблицу, не тратьте время на подробное изучение таковых. Сначала изучите вопрос полностью. Возможно, Вам даже и не понадобятся ни таблица, ни схема, ни SQL-выражение.
3. Максимальная размерность типа
NUMBER – 38 знаков.
4. Маска для даты по умолчанию –
DD-MON-YY. Хоть и видны только две последние цифры года, по умолчанию все равно хранятся все четыре.
5. Самая распространённая форма для транзакционных БД – это 3-я нормальная форма.
6.
FOREIGN KEY может быть привязан не обязательно к
PRIMARY KEY. Единственное условие – данное поле должно быть
UNIQUE.
7. Максимальная размерность
VARCHAR2, NVARCHAR2, RAW:
- 32767 байт – если MAX_STRING_SIZE = EXTENDED
- 4000 байт – если MAX_STRING_SIZE = STANDARD
8. Валидный рейндж для
DATE – от 1 Января, 4712 до н.э. до 31 Декабря, 9999.
9. Размерность фракционных секунд для
TIMESTAMP (всех подвидов) – может быть от 0 до 9. Но по умолчанию – 6.
10. Всего на экзамене рассматриваются:
- 5 DML команд: SELECT, INSERT, UPDATE, DELETE, MERGE
- 8 DDL команд: CREATE, ALTER, DROP, RENAME, TRUNCATE, COMMENT, FLASHBACK, PURGE
- 2 DCL команды: GRANT, REVOKE
- 3 TCL команды: COMMIT, ROLLBACK, SAVEPOINT
11.
WHERE обязательно вернет
FALSE, если в списке значений для оператора
NOT IN есть
NULL. Будьте внимательны!
12. Количество джойнов = количество таблиц в джойнах – 1.
13. Использовать имя таблицы или алиасы в
USING запрещено!
14.
SELECT реализует основные три концепции:
PROJECTION, SELECTION, JOINING.
15. Будьте внимательны к пунктуации. Составители тестов могут преднамеренно допустить ошибку в коде!
16. Любая арифметическая операция с
NULL обязательно вернет
NULL.
17. Ошибочно предполагать, что результат арифметической операции с датами также будет типа даты. Нет. Как правило, тип ответа либо типа
INTERVAL, либо типа
NUMBER.
18.
DISTINCT можно использовать с любой из агрегирующих функций.
19. Порядок выполнения команд в обычном запросе:
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
20. Не существует привилегии
DROP TABLE. Существует
DROP ANY TABLE.
21. Чтобы дать привилегию всем юзерам, надо дать ее
PUBLIC.
22. У
INDEX-ов и
CONSTRAINT-ов – свой неймспейс.
23. Агрегирующие функции запрещены в блоке
WHERE.
24.
GROUP BY может быть использован без
HAVING, но
HAVING – может быть использован только с
GROUP BY.
25.
CONSTRAINT типа
NOT NULL не может быть создана вне описания поля при создании таблицы, а только вместе с описанием поля.
26. В функции
MONTHS_BETWEEN() при подстановке параметров разрешается в качестве первого параметра ставить меньшую дату, а потом большую. Просто ответ будет отрицательным.
27. Тип
DATE не может хранить фракционные секунды и часовые пояса.
28. Вместе с
ROLLUP можно использовать любую агрегирующую функцию.
29. Группирующие функции могут быть вложены максимум на 2 уровня.
30. В
ORDER BY к колонке можно обратиться 3-мя способами:
- По имени колонки.
- По ее алиасу.
- По порядковому номеру.
31.
NATURAL + USING либо
NATURAL + ON – не место в одном запросе. Вы получите ошибку.
32. В разделе
FROM может быть бесконечное количество вложенных подзапросов, но в разделе
WHERE – максимум 255.
33. Всего существует 3 вида подзапросов:
SINGLE-ROW, MULTIPLE-ROW и
CORRELATED.
34. Отсчет символов в строке начинается с 1, а не с 0.
35. Единственный
SET OPERATOR, при котором строки не сортируются –
UNION ALL.
36. Случаи, когда транзакция насильно завершается:
- Пользователь сам издал команду COMMIT или ROLLBACK.
- Пользователь издал любую DDL или DCL команду.
- Сессия пользователя истекла.
- Сломался ORACLE (Не дай Бог, конечно!)
37. Наиболее подходящие поля для индексации:
- Поля внешних ключей.
- Поля, наиболее часто используемые в WHERE, GROUP BY и ORDER BY.
38. В
ORACLE SQL не существует типа
BOOLEAN.
39. То, что
COUNT(1) быстрее
COUNT(*) – всего лишь
миф.
40. Невозможно поменять часовой пояс БД, если есть хотя бы одна таблица с полем типа
TIMESTAMP WITH LOCAL TIME ZONE.
41. Функция может принять от 0 или более параметров. Но возвращает всегда 1 значение. Не больше и не меньше.
42.
COUNT никогда не сможет вернуть
NULL. При отсутствии строк вернет 0.
43.
SELECT COUNT (ALL DUMMY) FROM DUAL
– синтаксически верный запрос.
44.
SEMIJOIN – это запрос с использованием оператора
EXISTS.
45. Если был вызван
NEXTVAL, то счетчик сработает независимо от того успешно ли был выполнен запрос или нет.
46. Если был создан синоним для объекта, а объект ликвидирован, то синоним продолжает существовать.
47.
FLASHBACK TABLE невозможно откатить.
48. Для
n выражений,
CUBE возвращает
2 в степени
n группировок.
49.
SQL, PL/SQL и
JAVA являются нативными языками для
ORACLE DB.
50. Для формирования иерархического запроса, наличие
START WITH или
CONNECT BY – обязательно!
Данная статья в виде слайдиков на
YouTube.
Удачи Вам всем! До скорых встреч.