CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

От Web’а SQL’у

Наталья ЛИТВИНЕНКО ivc_litnat@railway.donetsk.ua

Известно, что работу со многими базами данных, их версиями, типами и реализациями облегчает язык запросов SQL, о котором и пойдет речь далее. Точнее, о том, какие ссылки на эту тему можно найти в Глобальной Сети.

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

Большинство из читающих сейчас эту статью, наверняка, хотя бы раз имели дело с языком SQL, а то и пользуют его регулярно и каждодневно. Поэтому при описании сайтов буду по возможности напирать на всяческие тонкости, заковыристости и нюансы, встречающиеся в примерах на сайтах, которые должны облегчить жизнь простого программиста и пригодятся по жизни. Тем паче что такого рода ресурсы, как правило, выдержаны в «мошковском» стиле. Оно, вообще-то, все равно, лишь бы пример работал, или теория была применима для вашей реализации SQL.

Когда появляется возможность со своими бедами и вечными проблемами «Не работает!» или «Работает криво!», лезть не в хэлп или к коллегам, а задействовать Инет, это поначалу непривычно, но очень захватывает. Направляясь на поиски куска кода, подобного вашему, но работающего, во-первых, рекомендую Google, во-вторых, советую писать в запросе небольшие куски кода или операторы, а не тему, к которой относятся неработающие операторы создаваемой вами программы. В нашем случае определенность приносит весомый результат. Так что какие-то конкретные сайты на все случаи жизни я вам не назову, но то, что указанные адреса не лишние, — это точно.

Исследуя сайты рассматриваемой тематики, можно отметить, что среди них очень много таких, которые относят себя к справочникам или учебникам для начинающих. Понятно, в принципе, почему их так много: гораздо проще творчески передрать или изложить своими словами учебник, который лежит у тебя на столе, и назвать сие сайтом, чем подобрать далеко не очевидные примеры или приемы, плюс к этому разобрать достаточно не простые ситуации. Логика эта верна, впрочем, и для сайтов другой тематики… Однако, товарищи крутые хацкеры, не будем с гордым видом обходить такие ресурсы стороной: там могут вдруг обнаружиться простые решения сложных проблем. Кроме того, коллеги, давайте честно — все ли возможности языка мы используем и какой сложности запросы пишем? Можно проработать довольно долго, ни разу не воспользовавшись ни HAVING, ни GROUP… Потому начнем с азов и прильнем к истокам.

Один из вышеописанных туториалов расположен по адресу http://fluffycat.com/sql. Основы основ, примеры и, что мне понравилось, указано, что, например, такой-то код в Аксесе не пойдет, поэтому следует применить вот такой-то код. Сам http://fluffycat.com — это «корень» нескольких сайтов с доками по Жабе и Жабаскрипту, Коболу и т. д. Еще учебники: http://www.cs.unibo.it/~ciaccia/COURSES/RESOURCES/SQLTutorial/sqlcont.htm, http://www.free-ed.net/fr03/lfc/030101/121. Очень хилое учебное пособие лежит по адресу http://www.1keydata.com/sql/sql.html. Весь SQL одной страницей —http://www.geocities.com/paikiran/articles/sql1.html, и здесь тоже —http://www.cs.unibo.it/~ciaccia/COURSES/RESOURCES/SQLTutorial/sqlch4.htm, хотя последний, вообще говоря, часть более объемного сайта по сабжевому вопросу. Сборище доков лежит на сайте какой-то программирующей фирмы —http://www.idera.com/Documentation.htm.

Упомяну также страничку с кучей ссылок на разнообразные туториалы —http://searchdatabase.techtarget.com/bestWebLinks/0,289521,sid13_tax281606,00.html.

Этот учебник заточен под Оракл (http://www.arsdigita.com/books/sql). Длинное, подробное объяснение с множеством примеров. Ввиду распространенности данной платформы, он не один такой, есть еще http://www.orafaq.com/faq.htm. А вот по этому адресу: http://www.dba-oracle.com — выложен вообще огромный материал. Этот ресурс —http://www.mysql.com/doc/home.html — заточен под MySQL. Вот как, например, там обсуждается тот же оператор UNION (http://www.mysql.com/doc/U/N/UNION.html). Отличия между разными SQL-ями зачастую достаточно велики, и не только в типах данных, но в некоторых нюансах операторов. Если вы пишете программу под Оракл, не думайте, что вы ее безболезненно запустите под MS Server. Меня когда-то эта разница здорово потрясла, и хорошо, что я ее заметила до того, как вознамерилась идти к заказчику! Но там, где речь идет об элементарном или «классическом» SQL, скорее всего, можно читать без разбору доку и к Ораклу, и к МикроСерверу. Тут (http://www.weberdev.com/maincat.php3?categoryID=99) информация рассортирована по типу сервака. Список достаточно серьезен, есть даже Adabas, который работает Аксесом в StarOffise.

В стиле добротного хэлпа выдержан сайт http://www.ss64.demon.co.uk/ora. Описаны операторы, тут же примеры и возможность перейти на родственные ссылки. Помнится, долго я маялась с оператором UNION (http://www.ss64.demon.co.uk/ora/union.html), нужным для объединения результатов работы двух или нескольких запросов. Кстати, он отличается от UNION ALL тем, что просто UNION при объединении отбрасывает дубликаты, то есть строки, одинаковые в результатах объединяемых запросов, а тот, который ALL, валит в кучу все без разбору. Когда такая радость может понадобиться? Когда объединяются данные из совершенно или относительно разнотипных таблиц, при этом указывается в списке SELECT, что именно следует выбирать, то в WHERE указать разные условия для разных таблиц невозможно. Кроме того, практика ORACLE показывает, что даже когда вам нужно выбрать из одной таблицы, но со сложным WHERE, удобнее заменить этот простой запрос сложным — UNION нескольких, но с более простым WHERE. Тогда это работает быстрее.

Так вот, на этой странице я вычитала, что возможно не только объединить в одну кучу результаты «элементарных» запросов, входящих в сложный запрос, но и выполнять над ними такие манипуляции, как INTERSECT (пересечение результатов двух запросов, то есть включение в результат только тех строк, которые есть в результате как первого, так и второго или энного запросов), а также MINUS — выбрасывание из первого запроса результатов второго. Очевидно, что два последних способа манипулирования результатами «элементарных» запросов удобны, если вы последуете моему вышеприведенному совету о способах замены одного запроса с «раскидистым» WHERE на стайку более простых и быстрых. INTERSECT удобен, если вы разбиваете большой запрос на два маленьких, раздробляя условие по встречающимся AND, в то время как MINUS подойдет, если две части WHERE соединялись условием AND NOT. Ну мы рассмотрели, конечно, очень частный случай. Вообще же, это интересные операторы, которые почему-то не попались в доках, с которыми работаю я.

Этот сайт (http://www.troubleshooters.com/codecorn/lsql.htm) очаровал меня с первой страницы. На ней помещены простые, но очень верные и содержательные советы, полезные именно для отладки сложных, многоэтажных запросов, в которых результат одного SELECT служит источником данных для другого. Сейчас приведу цитату: «Стройте маленькие запросы, чтобы тестировать SQL по частям. Первыми тестируйте подзапросы. Щедро комментируйте». Действительно, если вам нужен SELECT * из одной-двух баз, а налагаемые условия объединяются одним AND, то ловить ошибки в этом случае будет проще, чем если на двух страницах располагается громадина, пестрящая UNION-ами и алиасами. Если вам не приходилось маяться с такими Титаниками, то вам не понять в полной мере ценности подобных советов. А «щедро комментировать» — это вообще совет для всех языков на все времена: добил проект, через месяц уже забыл, как все это работает и зачем тут еще два параметра. А если предложат доделывать что-то через год? Лучший вариант — по поводу всех хитростей и находок каждого удачного проекта пишите статью в наш журнал. Если чего забудете, читатели подскажут.

На этом сайте (http://www.quest-pipelines.com/Pipelines/DBA/tips.htm) информация подана в виде «советов месяца». Например, в мартовской рекомендации сообщается, что тип LONG весьма нехорошо ведет себя при попытке SELECT из него DISTINCT. А ведь кто-то, не зная об этом, станет мучиться, почему это оно ругается на ровном месте! Советы разношерстные, но, разбирая архивы, вы найдете много чего полезного.

Не секрет, что одно и то же множество данных можно выбрать разными способами, комбинируя различные операторы. Какой-то вариант проще, какой-то быстрее, какой-то короче. А ваш хорош тем, что он ваш и что он работает. Но все же нелишним будет взглянуть на чужие исходники, особенно если у вас что-то не работает. Попробуйте тут: http://www.sqlcourse2.com.

Таблица

Но что же делать горемыке, который не нашел нужного ответа ни в доках, ни в Инете, а админ ушел в отпуск? Для этого предназначен ресурс http://searchdatabase.techtarget.com/ateExperts/0,289622,sid13,00.html, где вы сможете задать вопрос эксперту. Доступен также архив вопросов. Если же вы сами с усами и знаниями, попробуйте записаться в эксперты и начать оказывать помощь отчаявшимся —Become an Expert for this site (http://searchdatabase.techtarget.com/ateRecruiting/0,289629,sid13,00.html). Тут же есть форум, где коллективный гений поможет вам не получить по шее от заказчика. Вот для примера ситуация от 28.11.2001 (http://searchdatabase.techtarget.com/ateQuestionNResponse/0,289625,sid13_cid424565_tax285649,00.html). Хлопец средствами SQL хочет получить такую таблицу:

Эксперт поясняет ему, что это очень просто. Если не учитывать нижнюю строку, это делается так:

А как нам присоединить нижнюю строку? Ответ такой:

Вот здесь как раз и применяется тот самый UNION. Объединяются два запроса: верхний первый осуществляет простую выборку из базы, второй составляет строку сумм. Никоим образом сделать это одним селектом не получится. В операторе ORDER BY сортировка осуществляется по столбцу номер 1, а потом по второму. Когда у меня найдется минутка времени, я намерена тут основательно окопаться, потому что здесь все примеры взяты из практики, а это никакими искусственными экспериментами не заменишь.

http://p2p.wrox.com/listindex.asp — здесь располагается куча форумов, причем в разделе Databases нужной нам направленности. http://www.orafaq.com/faqmessb.htm — вот тоже лежбище форумов, оформленное как портал. Здесь же также имеется учебник.

На поисковиках вы также кое-что обнаружите. На About это http://databases.about.com/compute/databases/library/weekly/aa020401a.htm. На моем любимом Гугле —http://directory.google.com/Top/Computers/Programming/Languages/SQL.

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov