Успешно прошел сертификацию 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.
--------------------------------------------
Вообщем тест оставил много вопросов. Надеюсь сообщество поможет прояснить ситуацию.
В обратной связи мой вопрос проигнорировали- за почти месяц так и не получил ответа. Поэтому решил спросить на форуме.
Например:
----------------------------------------------
Каково функциональное назначение первичных ключей?
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.
--------------------------------------------
Вообщем тест оставил много вопросов. Надеюсь сообщество поможет прояснить ситуацию.

