Тест по SQL

2006-04-24 Thread Konstantin R. Beliaev


Не поделится ли многоуважаемый ALL своими задачками на тему: "что должен 
знать кандидат, считающий себя специалистом по SQL".
Вопросы с одной стороны должны быть простыми, с другой стороны - с 
подковыркой. Оптимально - чтоб можно было предложить выбор из нескольких 
вариантов. Если есть ссылки на подобные (бесплатные) тесты - посмотрю с 
радостью.

Что мне приходит в голову:
1) NULL в арифметике :-)
2) смесь условий AND и OR в одном WHERE
3) связка таблиц, где в условии присутствует NULL
4) оператор COUNT(DISTINCT ...)
5) WHERE vs HAVING
6) UNION vs UNION ALL
Вероятно, можно еще поизвращаться на предмет GROUP BY и подзапросов, но 
пока ничего красивого не придумывается.




Re: Тест по SQL

2006-04-24 Thread Plotnikov Y.

Джойны, у которых в качестве условий (on) не равенство полей, а
больше-меньше




Re: Тест по SQL

2006-04-24 Thread Konstantin R. Beliaev


arni wrote:
- Явный JOIN vs неявный JOIN 

Поясни, плиз: в чем тут подковырка?
Или просто 2 разных синтаксиса одного запроса, типа: одинаков ли будет 
результат?


Кстати, еще вопрос придумал: условие с +0, которым гасятся индексы



Re: Тест по SQL

2006-04-24 Thread Konstantin R. Beliaev


Plotnikov Y. wrote:

Джойны, у которых в качестве условий (on) не равенство полей, а
больше-меньше


Ооо! Это да, забавно :-)



Re: Тест по SQL

2006-04-24 Thread Konstantin R. Beliaev


Круто :-)
Только имхо это лучше в офлайне предлагать, чтоб у чела была возможность 
подумать. Или если времени на собеседовании не жалко.




Re: Тест по SQL

2006-04-24 Thread Ded


Konstantin R. Beliaev wrote:


Кстати, еще вопрос придумал: условие с +0, которым гасятся индексы


  Так тест по SQL или по его implementation в IB/FB?

--
Regards. Ded.



Re: Тест по SQL

2006-04-24 Thread Konstantin R. Beliaev


Eugeney Putilin wrote:

Посмотри что есть на http://www.sql-ex.ru/, вопросы в основном бредовые но есть 
и интересные.

Спасибо.
Жаль brainbench стал платным, там были неплохие задачи (у меня один 
знакомый с трудом набрал на сертификат "Written Russian" :-))) ).




Re: Тест по SQL

2006-04-24 Thread Konstantin R. Beliaev


Ded wrote:

  Так тест по SQL или по его implementation в IB/FB?

Тест по SQL в IB/FB :-)
Интересно, а другие сервера смогут распознать такую конструкцию и 
задействовать индекс? Мне почему-то кажется, что это универсальный трюк.




Re: Тест по SQL

2006-04-24 Thread Alexander Goldun


Konstantin R. Beliaev пишет:

Интересно, а другие сервера смогут распознать такую конструкцию и 
задействовать индекс? Мне почему-то кажется, что это универсальный трюк.


Само понятие "плохой индекс" в контексте выборки данных достаточно 
неуниверсально, скорее специфично для IB/FB и rule based оптимизаторов.


Не скажу за все другие, но в Sybase ASA +0 не мешает оптимайзеру выбрать 
индекс. Этот +0 до него просто не доходит - исчезает еще на этапе 
предварительного переписывания запроса.





Re: Тест по SQL

2006-04-24 Thread Konstantin R. Beliaev


ArtGal wrote:

На www.intuit.ru много тестов.
Почти все с подковыркой


Что-то с ходу не нашел, где там?
Или имеются в виду экзамены по курсам?



Re: Тест по SQL

2006-04-24 Thread Konstantin R. Beliaev


Sergey Nikolaenko wrote:

Есть таблицы
CREATE TABLE GROUP(
GROUP_CODE INTEGER NOT NULL,
... много чего
)

CREATE TABLE GROUP_MEMBER (
GROUP_CODE INTEGER NOT NULL,
MEMBERS_NO SMALLINT NOT NULL,
... еще много..
)
то есть - таблица групп - одно запись на группу и таблица участников групп -
одна запись на участника. Как одним запросом на IB (знаю, как через View и
т.д.)
получить количество групп с 1, 2 и т.д. участниками?


Сначала подумал, что это про HAVING, потом понял, что все не так просто. 
Как это сделать реально одним запросом (без процедуры или вложенного 
селекта, которого в 1.5 нету), пока не придумал :-)




Re: Тест по SQL

2006-04-24 Thread Ded


Konstantin R. Beliaev wrote:

Как это сделать реально одним запросом (без процедуры или вложенного 
селекта, которого в 1.5 нету), пока не придумал :-)



   В 1.5 вложенный селект есть. И я даже сомневаюсь, что есть версия, 
где его нет. Если наложить ограничение на использование только одной 
таблицы, то


Select Count(Distinct GM1.Group_Code) from Group_Members GM1
Where
(Select Count(*)
 From Group_Members GM
 Where GM.Group_Code=GM1.Group_Code)=:Скока_нада

Если же разрешить обе, что будет, разумеется, быстрее и проще, но не 
модно, ибо не проктологично :) то


Select Count(*) from Group G
Where
(Select Count(*)
 From Group_Members GM
 Where GM.Group_Code=G.Group_Code)=:Скока_нада

А нету в 1.5 Select From Select. Который, боюсь, не каженному танцору 
будет не мешать ;)


--
Regards. Ded.



Re: Тест по SQL

2006-04-25 Thread Konstantin R. Beliaev


Ded wrote:


Select Count(*) from Group G
Where
(Select Count(*)
 From Group_Members GM
 Where GM.Group_Code=G.Group_Code)=:Скока_нада


Не, Ded, похоже он хочет не кол-во групп, где членов "скока надо", а 
таблицу типа:

1 член - 3 группы
2 члена - 1 группа
3 члена - ...