select 'Hello, World!'
The single biggest challenge to learning SQL programming is unlearning procedural programming (Joe Celko)
[SQL Server] Головоломки (Часть 2)
03.11.2015
|
Olaf |
Продолжая начатую тему [SQL Server] Головоломки (Часть 1), решил опубликовать еще пять вопросов...
1. order by (select null)
Дано: Запрос вида
select * from dbo.Table1 order by (select null)
Вопрос: Можно ли с какой-то долей уверенности сказать будут ли отсортированы данные и в каком порядке?
a) Да
б) Нет
Ответ | |
| |
2. Декартово произведение
Дано: Три запроса
/* 1 */
select *
from dbo.Table1 t1
cross join dbo.Table2 t2
/* 2 */
select *
from dbo.Table1 t1, dbo.Table2 t2
/* 3 */
select *
from dbo.Table1 t1
join dbo.Table2 t2 on 1 = 1
Вопрос: Какие из представленных выше запросов реализуют декартово произведение?
a) Все
б) 1, 2
в) 2, 3
г) 1, 3
д) Ни один
Выберите один вариант ответа
Ответ | |
| |
3. Приоритет типов данных в предикатах соединения
Дано: Две пустые таблицы
create table dbo.Test1
(
StringColumn varchar(20)
)
create table dbo.Test2
(
NumericColumn numeric(19, 0),
DateTimeColumn datetime
)
и два запроса соединяющие таблицы по полям разных типов. Запросы выполняются по отдельности.
/* 1 */
select *
from dbo.Test1 t1
join dbo.Test2 t2 on t1.StringColumn = t2.NumericColumn
/* 2 */
select *
from dbo.Test1 t1
join dbo.Test2 t2 on t1.StringColumn = t2.DateTimeColumn
Вопрос: К какому типу данных будут преобразованы столбцы, используемые в условии соединения таблиц?
a) В запросе 1 столбец t1.StringColumn участвующий в связывании таблиц будет преобразован к типу numeric(19, 0)
б) В запросе 1 столбец t2.NumericColumn участвующий в связывании таблиц будет преобразован к типу varchar(20)
в) При выполнении запроса 1 возникнет ошибка
г) В запросе 2 столбец t1.StringColumn участвующий в связывании таблиц будет преобразован к типу datetime
д) В запросе 2 столбец t2.DateTimeColumn участвующий в связывании таблиц будет преобразован к типу varchar(20)
е) При выполнении запроса 2 возникнет ошибка
Выберите два варианта ответа
Ответ | |
| |
4. Объявление переменных
Дано: Запрос, который заполняет в цикле табличную переменную
declare @i int = 0
while (@i < 10)
begin
declare @table table(i int)
insert into @table select @i
set @i += 1
end
select * from @table
Вопрос: Какие данные будут содержаться в переменной @table после выполнения цикла?
a) При выполнении возникнет ошибка «The variable name '@table' has already been declared»
б) Таблица будет содержать 0 записей
в) Таблица будет содержать 1 запись со значением 9
г) Таблица будет содержать 10 записей со значениями от 0 до 9
Ответ | |
| |
5. select @local_variable и несколько значений
Дано: Таблица, содержащая 4 записи и запрос, который инициализирует переменную через оператор select.
select *
into #temp
from (values (1),(3),(4),(2)) t(k)
declare @i int
select @i = k from #temp order by k
select @i
Вопрос: Чему равно значение переменной @i после выполнения запроса?
a) 1
б) 2
в) 3
г) 4
д) NULL
Ответ | |
| |
03.11.2015 1 комментарий |
O>Добрый день, коллеги!
O>Продолжая начатую тему [SQL Server] Головоломки (Часть 1), решил опубликовать еще пять вопросов...
Наткнулся вот на еще один аспект потенциально интересный.
union
Дано: Два непересекающихся набора данных и запрос вида:
Вопрос: что вернет запрос?