Язык SQL Оглавление Инструкции INSERT, UPDATE и DELETE

Инструкция 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.
Выполните все приведенные примеры, поварьируйте параметры, чтобы лучше усвоить материал.

Упражнения

Напишите следующие запросы:
  1. Выбрать из таблицы гостевых книг все записи.
  2. --"-- все записи, кроме столбца description.
  3. --"-- записи с идентификатором больше 10 и количеством страниц выводимых на страницу равным 10.
  4. --"-- записи с непустым адресом электронной почты.
  5. --"-- записи с непустым адресом электронной почты или полем http, но чтобы их идентификатор был больше 1 и не больше 5 или же не меньше 12 и меньше 19, сортировка должна производится по полям http, email
  6. Придумайте сами 20 запросов к таблице message и опубликуйте их в нашем форуме на сайте http://itsoft.ru.