ANSI SQL сертификация

# Михаил Баранов 2006-08-16 20:27
Успешно прошел сертификацию ANSI SQL. Некоторые задачи поставили в тупик- некоторые в глухой тупик :-))
В обратной связи мой вопрос проигнорировали- за почти месяц так и не получил ответа. Поэтому решил спросить на форуме.
Например:
----------------------------------------------
Каково функциональное назначение первичных ключей?
1 Сортировка данных
2 Группировка данных
3 Поддержка ссылочной целостности
4 Создание первичных ключей
5 Ускорение поиска
Не совсем понятен смысл ответа 4. Имеется в виду создание первичных ключей как самоцель? Долго сомневался, потому как первичный ключ это больше чем чем ограничение ссылочной целосности, но все- таки считать его целью его созданиния "потому что надо" ИМХО не правильно.
----------------------------------------------
Необходимо создать таблицу employees, содержащую следующие поля:

id - первичный ключ, значения NULL запрещены;
name - символьное, длиной не более 25 символов;
salary - десятичный тип данных.

Какие 3 из перечисленных фрагментов кода позволят решить поставленную задачу?
1 Create table employees (id tinyint unique primary key not null, name varchar(25), salary float)
2 Create table employees (id tinyint unique primary key not null, name varchar(25), salary real)
3 Create table employees (id tinyint unique primary key, name varchar(25), salary real)
4 Create table employees (id int unique primary key not null, name varchar(25), salary real)
5 Create table employees (id tinyint unique primary key not null, name varchar(35), salary real)
Ответы 1,2 оба типа и real и float являются типом данных поддерживающие floating point numeric data.4 ответ отличается просто размерностью типа данных. MS SQL Server вообще не разрешает указания одновременно unique и primary key- для программистов этой субд правильного решения нет. Вообщем совершенно непонятно по какому принципу собирались варианты и какой из них правильный.
----------------------------------------------
Какой из перечисленных операторов позволяет объединить результаты нескольких запросов?
Inner join
Left join
Right join
Union
Cross join
Еще одна неоднозначность. Согласен "обьединить результаты запросов" наиболее природно напрашивается Union. Ну а так:
select * from
(SELECT name, date
FROM Battles) B1 inner join
(SELECT name, date
FROM Battles) B2 on B1.name=B2.name
Несколько запросов обьединяются конструкцией inner join, которую впрочем можно заменить на любую другую Left join,Right join и т.д.?
------------------------------------------------
Гуппировать по кварталам...
Данные о датах продаж хранятся в поле date.

Какой из перечисленных фрагментов кода позволит решить поставленную задачу?
1 Select datepart (year, date), sum (price) from trade group by datepart (year, date)
2 Select datepart (month, date), sum (price) from trade group by datepart (month, date)
3 Select quarter (date), avg (price) from trade group by quarter (date)
4 Select quarter (date), sum (price) from trade group by quarter (date)
5 Select sum (price) from trade where date between ’2004-01-01’ and ’2004-03-31’ group by sum (price)
Совершенно не понял- какое решение правильное. С функцией quarter не встречался, в стандарте ANSI SQL ее так же не видел. Поэтому оба ответа (3,4) с ее использованием отбрасываю. Ответ 1 группирует по годам, 2 по месяца- следовательно оба не подходят. 5 учитывает только один первый квартал, но в году больше одного квартала, следовательно тоже мимо. Какой тут ответ система считает правильным?
----------------------------------------------
Необходимо переименовать название Калининской области в Тверскую с одновременным переименованием областных центров в таблице country, включающих в себя поля state (область) и city (город, входящий в область).

Какой из перечисленных фрагментов кода позволит решить поставленную задачу?
Update country set state=’Тверская’, city=’Тверь’ where state=’Калининская’
Update country set state=’Тверская’, city=’Тверь’ where state=’Калининская’ or city=’Калинин’
Update country set state=’Тверская’, city=’Тверь’ where state=’Калининская’ and city=’Калинин’
Update country set state=’Тверская’ where state=’Калининская’ and city=’Калинин’
Update country set state=’Тверская’, city=’Тверь’
Сложновато понять структуру хранения данных. И совершенно не понятно нужно ли переименовывать город если переименовывается область.
----------------------------------------------
Необходимо вывести названия всех авиакомпаний (airline), цены (price) за билет в которых меньше, чем в компании “Aeroflot” и больше, чем в компании “S7” из таблицы flights. Значения цены (price) за билет также следует вывести в отчет.

Какой из перечисленных фрагментов кода позволит решить поставленную задачу?
1 Select airline, price from flights where price < (select price from flights where airline like ‘S7’) and price>(select price from flights where airline like ‘Aeroflot’)
2 Select airline, price from flights where price > (select price from flights where airline like ‘S7’) and price<(select price from flights where airline like ‘Aeroflot’)
3 Select airline, price from flights where price > (select price from flights where airline like ‘S7’) or price<(select price from flights where airline like ‘Aeroflot’)
4 Select airline, price from flights where price between (select price from flights where airline like ‘S7’) and (select price from flights where airline like ‘Aeroflot’)
5 Select airline, price from flights where price between (select price from flights where airline like ‘Aeroflot’) and (select price from flights where airline like ‘S7’)
И снова более одного правильного варианта. В принципе цены на билеты можно ограничить как операндами <,> так и проверяя на попадание в диапазон between.
--------------------------------------------
Вообщем тест оставил много вопросов. Надеюсь сообщество поможет прояснить ситуацию.

# Максим Куликов 2006-08-17 13:30
Уважаемый Михаил! Ситуацию прояснит разработчик теста - мы связались с ним, он пока в отпуске и ответит при первой возможности в конце августа. Спасибо за интерес!
# Михаил Баранов 2006-08-17 14:53
Спасибо за ответ. Буду ждать.
О то как-то все чаще возникают вопросы по-поводу тестов.
# Марат Юлдашев 2006-08-23 14:32
Да вопросы в этом тесте действительно не ахти. Я бы ещё отметил вопрос с расписанием движения поездов через "Бологое". Два варианта отличаются только тем, что в одном Селекте в выводе есть станция, а в другом нет. Такие вещи ИМХО надо оговаривать
# Антон Гусев 2006-10-12 19:29
У меня тоже есть вопрос по этому тесту, не охото выделять его в отдельный топик:
недавно прошел тест для продления сертификата и заметил, что вопросы стали значительно легче, чем год назад. Пожалуйста, проясните ситуацию, а то создается впечатление, что Вы таким образом пытаетесь увеличить число удачно пройденных тестов и, соответственно, число заказов сертификатов.
# Алексей Кураков 2006-10-13 10:00
Антон, новая версия действительно проще предыдущей, однако, количество сдач соответствует нашим правилам и стандартам.
# Роман Гураль 2006-12-06 18:54
Этот вопрос убил:
----------------------------------------------
”На любом пересечении строки и столбца находится единственное значение, которое должно быть атомарным. Повторяющиеся группы отсутствуют”.

Какой из перечисленных нормальных форм баз данных соответствует данное утверждение?
Четвертой
Третьей
Второй
Пятой
Первой
----------------------------------------------
я так понимаю, автор тестов предполагал что теорию реляционных баз данных нужно знать наизусть...
Не совсем понятно почему такие вопросы идут рядом со смешными вопросами на тему символа "*" в select-е или использования арифметических операторов.

Не уверен что вопросы по геометрии (расчет площади круга и гипотенузы) помогают оценить мой уровень знаний SQL. Больше проверка на память и сообразительность.

Мне кажется что тест был бы проще если бы в качестве названий таблиц и полей вместо table1, table2, field1, field2 использовались какие-то слова.

Общее впечетление - тест больше на опыт, чем на знание предмета.



Отредактировано (06.12.2006 18:57)
# Максим Куликов 2006-12-11 10:22
Уважаемый Роман! При разработке данного теста ставилась задача сертификации начинающих специалистов в области БД. Для продвинутых профессионалов в Центре тестирования есть более серьезные тесты, 2 из которых станут официальными в скором будущем.
# Михаил Баранов 2006-12-18 10:06
2Максим Куликов: А какая разница- для начинайющих или для гуру, если вопрос по-определению не содержит правильных ответов? Здесь уже и тот и другой в одинаковом положении.
Или сложность теста устанавливается количеством таких "безответных" вопросов?
# Максим Куликов 2006-12-18 11:37
Нет, сложность - объективный показатель. Новая версия проще, чем предыдущая, разработчик ответил на все комментарии - в тест необходимые изменения были внесены