Сайтостроительство

       

Инструкция SELECT


Давайте выполним первый SQL-запрос. Для этого перейдите в раздел "Запросы". Выберите создание запроса в режиме конструктора. В появившемся диалоговом окне

нажмите кнопку "Закрыть". Далее в меню "Вид" выберите пункт "Режим SQL". У вас должно появится на экране окно для ввода SQL запросов. Введите: SELECT * FROM message WHERE gb_id=1. В меню "Запрос" выберите пункт "Запуск" или нажмите иконку с восклицательным знаком на экране. Появится результат обработки этого запроса.

Это таблица, содержащая все сообщения, относящиеся к гостевой книге с идентификатором 1. Как вы видите, некоторые столбцы не содержат полезной информации. Оператор SELECT позволяет указать нужные нам столбцы. С помощью меню "Вид->РежимSQL" вернитесь в предыдущее окно и введите SELECT message_id as id,name, http, email, subj, it_text, it_date FROM message WHERE gb_id=1. Нажмите "Выполнить запрос" и вы увидите теперь только перечисленные столбцы. Обратите внимание, что мы переименовали первый столбец. Он показывается под именем id, а не message_id. Теперь, давайте отсортируем по дате в порядке убывания: SELECT message_id as id,name, http, email, subj, it_text, it_date FROM message WHERE gb_id=1 ORDER BY it_date DESC.

Язык SQL довольно простой и интуитивно понятный. Рассмотрим синтаксис инструкции SELECT в общем случае.

SELECT [DICTINCT] имя_столбца [as новое_имя], имя_столбца2 [as новое_имя2], ... FROM таблица1 | имя_курсора1, таблица2 | имя_курсора2, ... [WHERE условие] [GROUP BY имя_столбца1, имя_столбца2, ...] [HAVING условие] [ORDER BY имя_столбца1 [DESC], имя_столбца2 [DESC2], ...]

О курсорах, GROUP BY и HAVING будет рассказано чуть позже, после того, как вы познакомитесь с инструкциями добавления, редактирования и удаления данных. А пока рассмотрим на частных примерах использование инструкции SELECT во всех остальных случаях. Начнем с ключевого слова DISTINCT. Использование этого атрибута позволяет нам избежать повторяющихся записей.
Допустим, мы хотим посмотреть всех авторов сообщений во всех гостевых книгах: SELECT name, http, email FROM message ORDER BY name. Обратите внимание, что теперь нет фильтра - инструкции WHERE, т.к. нас интересуют абсолютно все сообщения, вернее их авторы. Сортировка стоит по имени автора сообщения. Нас интересует сортировка по алфавиту(от меньшего к большему), поэтому атрибут DESC, который означает сортировать в обратном порядке мы не указываем. Результатом этого запроса будет таблица:



Вы видите, что в результате мы получили повторяющиеся записи, т.к. один человек мог написать несколько сообщений. Теперь добавьте слово DISTINCT: SELECT DISTINCT name, http, email FROM message ORDER BY name, и вы увидите, что дублей больше нет.


Наиболее интересным и сложным является инструкция WHERE. Мы будем рассматривать инструкцию: SELECT gb_id as id, name, quantity as q, description, it_date FROM gb, т.е. выборку идентификаторов гостевых книг, владельцев, количества сообщений, выводимых на одну страницу, описание и дату. Некоторые условия не имеют какого-либо осмысленного описания. Они приводятся в демонстративных целях. Для задания условия можно использовать:


  • Операторы + - * / = < >= <> !=. WHERE (gb_id+2)/2=10.
  • Комбинирование условий AND OR NOT. WHERE gb_id=1 OR NOT quantity=10.
  • Диапазоны: BETWEEN, NOT BETWEEN. WHERE gb_id NOT BETWEEN 10 AND 15.
  • Списки: IN, NOT IN. WHERE name IN ('Игорь Тарасов', 'Евгений').
  • Нулевые значения: IS NULL, IS NOT NULL. WHERE name IS NULL
  • Поиск по подстрокам: LIKE, NOT LIKE. WHERE description LIKE '*книга*'. Звездочка обозначает любое количество символов. В большинстве баз данных используется %, а не звездочка, как в MS Access.


Выполните все приведенные примеры, поварьируйте параметры, чтобы лучше усвоить материал.


Содержание раздела