Чтобы получить сертификат, нужно сдать экзамен 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.
Удачи Вам всем! До скорых встреч.
Комментарии (24)
turbanoff
21.04.2017 09:59Пункт 25 не совсем понятен. Это значит, что сделать колонку NULL или NOT NULL после создания таблицы уже нельзя?
hasanfalizada
21.04.2017 10:01+1Нет. Конечно можно. Просто есть два метода создания и модификации constraint-ов: inline и outline. Ну так вот, NOT NULL — может быть создани модифицирован только inline методом.
hard_sign
21.04.2017 19:35а если сделать так:
create table sample (a number not null, b number);
alter table sample add constraint(check b is not null);
(в синтаксической верности второй команды не уверен, а oracle под рукой нет, чтобы проверить).
Так вот, если посмотреть словарь данных, то будет ли разница между полями A и B? Насколько я помню, никакой.hasanfalizada
22.04.2017 09:27Добрый день. Нет. Синтаксис второй команды некорректен. Нужно вот так:
alter table sample modify b not null;
И только так.
YokaiiSpirit
21.04.2017 10:02+1>> 18. DISTINCT можно использовать с любой из агрегирующих функций.
Почему-то справедливо только для чистого sql. В PLSQL, например,
declare t char; begin select stringagg(distinct dummy) into t from dual; end;
Вернёт ora-30482. Справедливо и для некоторых других вроде collect\listagg.hasanfalizada
21.04.2017 10:15+11. PL/SQL не рассматривается на экзамене.
2. Я не встречал никогда данную функцию. Она built-in? Может устаревшая? В референсе тоже о ней ничего не сказано. Если есть информация, то скиньте линк, пожалуйста.
3. Иcпользуйте listagg.
4. Должен с Вами согласиться (из документации):
Many (but not all) aggregate functions that take a single argument accept these clauses:
DISTINCT and UNIQUE, which are synonymous, cause an aggregate function to consider only distinct values of the argument expression. The syntax diagrams for aggregate functions in this chapter use the keyword DISTINCT for simplicity.
ALL causes an aggregate function to consider all values, including all duplicates.
hard_sign
21.04.2017 11:06п. 11 неверен.
Если в списке есть NULL, то not in (..) вернёт NULL.
Разница в том, что
NOT FALSE = TRUE
NOT NULL = NULL
другими словами where X not in (1,2,3,NULL) и where not(x not in (1,2,3,NULL)) вернут одинаково пустые множества.hasanfalizada
21.04.2017 19:01Доброго времени суток. Правильно. Я подразумевал, что FALSE вернет все WHERE-условие. Поправил.
hard_sign
21.04.2017 19:31Ну опять же ерунду написали. Откройте хотя бы документацию и посмотрите, чем NULL отличается от FALSE:
NULL AND FALSE = FALSE
NULL AND TRUE = NULL
NULL OR TRUE = TRUE
NULL OR FALSE = NULL
NULL — это не FALSE и не TRUE, это что-то типа «ХЗ». То есть NULL это не TRUE, но и NOT NULL — это тоже не TRUE, а отсюда возможны всякие забавные спецэффекты.hasanfalizada
22.04.2017 09:23Спасибо еще раз) Я знаю что есть NULL. Скажем так: WHERE не сработает (я просто не знаю, что конкретно вернет сам WHERE — NULL или FALSE — после того как NOT IN вернет NULL или FALSE), и весь запрос ничего не вернет. Хм?
sebres
21.04.2017 15:44Максимальная размерность… RAW = 4000 байт
Небольшая поправка:
Лимит для RAW = 2000 байт (если MAX_STRING_SIZE = STANDARD)
MINYSMOAL
21.04.2017 19:03Сдавать данный экзамен можно сразу или требуются последовательно сдать Associate -> Professional?
На сайте вроде как не указано, что нужно иметь эти сертификаты. Но тогда вопрос — почему для Professional нужен Associate?hasanfalizada
21.04.2017 19:05Данный экзамен можно сдавать отдельно. Он особняком. Он линейки Expert. Что касается другой профессиональной линейки, то тут уж все зависит, на что направление взяли. Скажите, конкретно, куда метите, я скажу.
Breslavets
21.04.2017 19:07Надеюсь тут просто опечатка насчет DML?
#36. Случаи, когда транзакция насильно завершается:
#…
#Пользователь издал любую DML или DCL команду.
#…
AHDPEu
с пунктом 50 сильно ошибаетесь
with req_table (fields...) as (
select fields… from table t1
union all
select fields… from req_table t2…
)
hasanfalizada
Доброго времени суток. Ну… как сказать) Тут дело в терминологии. Экзамен так требует. В рамках экзамена — если речь идет о «Hierarchical query», то наличие start with и connect обязательно. Ну а в жизни, разумеется, все по разному можно представить и интерпретировать)
hinterlistig
hasanfalizada
Так) Ну вот) Вы же используете connect. Наверное, надо было бы написать start with или connect. Так было бы корректнее.