Тест по SQL
Не поделится ли многоуважаемый 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
Джойны, у которых в качестве условий (on) не равенство полей, а больше-меньше
Re: Тест по SQL
arni wrote: - Явный JOIN vs неявный JOIN Поясни, плиз: в чем тут подковырка? Или просто 2 разных синтаксиса одного запроса, типа: одинаков ли будет результат? Кстати, еще вопрос придумал: условие с +0, которым гасятся индексы
Re: Тест по SQL
Plotnikov Y. wrote: Джойны, у которых в качестве условий (on) не равенство полей, а больше-меньше Ооо! Это да, забавно :-)
Re: Тест по SQL
Круто :-) Только имхо это лучше в офлайне предлагать, чтоб у чела была возможность подумать. Или если времени на собеседовании не жалко.
Re: Тест по SQL
Konstantin R. Beliaev wrote: Кстати, еще вопрос придумал: условие с +0, которым гасятся индексы Так тест по SQL или по его implementation в IB/FB? -- Regards. Ded.
Re: Тест по SQL
Eugeney Putilin wrote: Посмотри что есть на http://www.sql-ex.ru/, вопросы в основном бредовые но есть и интересные. Спасибо. Жаль brainbench стал платным, там были неплохие задачи (у меня один знакомый с трудом набрал на сертификат "Written Russian" :-))) ).
Re: Тест по SQL
Ded wrote: Так тест по SQL или по его implementation в IB/FB? Тест по SQL в IB/FB :-) Интересно, а другие сервера смогут распознать такую конструкцию и задействовать индекс? Мне почему-то кажется, что это универсальный трюк.
Re: Тест по SQL
Konstantin R. Beliaev пишет: Интересно, а другие сервера смогут распознать такую конструкцию и задействовать индекс? Мне почему-то кажется, что это универсальный трюк. Само понятие "плохой индекс" в контексте выборки данных достаточно неуниверсально, скорее специфично для IB/FB и rule based оптимизаторов. Не скажу за все другие, но в Sybase ASA +0 не мешает оптимайзеру выбрать индекс. Этот +0 до него просто не доходит - исчезает еще на этапе предварительного переписывания запроса.
Re: Тест по SQL
ArtGal wrote: На www.intuit.ru много тестов. Почти все с подковыркой Что-то с ходу не нашел, где там? Или имеются в виду экзамены по курсам?
Re: Тест по SQL
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
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
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 члена - ...