![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Выборка данных.
Для извлечения записей из таблиц в SQL определен оператор SELECT. С помощью этой команды осуществляется не только операция реляционной алгебры " выборка" (горизонтальное подмножество), но и предварительное соединение (join) двух и более таблиц. Это наиболее сложное и мощное средство SQL, полный синтаксис оператора SELECT имеет вид: SELECT [ALL | DISTINCT] < список_выбора> FROM < имя_таблицы>,... [ WHERE < условие> ] [ GROUP BY < имя_столбца>,... ] [ HAVING < условие> ] [ORDER BY < имя_столбца> [ASC | DESC],... ] Порядок предложений в операторе SELECT должен строго соблюдаться (например, GROUP BY должно всегда предшествовать ORDER BY), иначе это приведет к появлению ошибок. Мы начнем рассмотрение SELECT с наиболее простых его форм. Все примеры, приведенные ниже, касающиеся базы данных publications, можно выполнить самостоятельно, зайдя на эту страничку, поэтому результаты запросов здесь не приводятся. Этот оператор всегда начинается с ключевого слова SELECT. В кострукции < список_выбора> определяется столбец или столбцы, включаемые в результат. Он может состоять из имен одного или нескольких столбцов, или из одного символа * (звездочка), определяющего все столбцы. Элементы списка разделяются запятыми. Пример: получить список всех авторов SELECT author FROM authors; получить список всех полей таблицы authors: SELECT * FROM authors; В том случае, когда нас интересуют не все записи, а только те, котрые удовлетворяют некому условию, это условие можно указать после ключевого слова WHERE. Например, найдем все книги, опубликованные после 1996 года: SELECT title FROM titles WHERE yearpub > 1996; Допустим теперь, что нам надо найти все публикации за интервал 1995 - 1997 гг. Это условие можно записать в виде: SELECT title FROM titles WHERE yearpub> =1995 AND yearpub< =1997; Другой вариант этой команды можно получить с использованием логической операции проверки на вхождение в интервал: SELECT title FROM titles WHERE yearpub BETWEEN 1995 AND 1997; При использовании конструкции NOT BETWEEN находятся все строки, не входящие в указанный диапазон. Еще один вариант этой команды можно построить с помощью логической операции проверки на вхождение в список: SELECT title FROM titles WHERE yearpub IN (1995, 1996, 1997); Здесь мы задали в явном виде список интересующих нас значений. Конструкция NOT IN позволяет найти строки, не удовлетворяющие условиям, перечисленным в списке. Наиболее полно преимущества ключевого слова IN проявляются во вложенных запросах, также называемых подзапросами. Предположим, нам нужно найти все издания, выпущенные компанией " Oracle Press". Наименования издательских компаний содержатся в таблице publishers, названия книг в таблице titles. Ключевое слово NOT IN позволяет объединить обе таблицы (без получения общего отношения) и извлечь при этом нужную информацию:
SELECT title FROM titles WHERE pub_id IN (SELECT pub_id FROM publishers WHERE publisher='Oracle Press'); При выполнении этой команды СУБД вначале обрабатывает вложенный запрос по таблице publishers, а затем его результат передает на вход основного запроса по таблице titles. Некоторые задачи нельзя решить с использованием только операторов сравнения. Например, мы хоти найти web-site издательтва " Wiley", но не знаем его точного наименования. Для решения этой задачи предназначено ключевое слово LIKE, его синтаксис имеет вид: WHERE < имя_столбца> LIKE < образец> [ ESCAPE < ключевой_символ> ] Образец заключается в кавычки и должен содержать шаблон подстроки для поиска. Обычно в шаблонах используются два символа: · % (знак процента) - заменяет любое количество символов · _ (подчеркивание) - заменяет одиночный символ. Попробуем найти искомый web-site: SELECT publiser, url FROM publishers WHERE publisher LIKE '%Wiley%'; В соотвествии с шаблоном СУБД найдет все строки включающие в себя подстроку " Wiley". Другой пример: найти все книги, название которых начинается со слова " SQL": SELECT title FROM titles WHERE title LIKE 'SQL%'; В том случае, когда надо найти значение, которое само содержит один из символов шаблона, используют ключевое слово ESCAPE и < ключевой_символ>. Литерал, следующий в шаблоне после ключевого символа, рассматривается как обычный символ, все последующие символы имеют обычное значение. Например, нам надо найти ссылку на web-страницу, о которой известно, что в ее url содержится подстрока " my_works": SELECT site, url FROM wwwsites WHERE url LIKE '%my@_works%' ESCAPE '@'; В заключение заметим, что при выполнении оператора SELECT результирующее отношение может иметь несколько записей с одинаковыми значениями всех полей. Чтобы исключить повторяющиеся записи из выборки используется ключевое слово DISTINCT. Ключевое слово ALL указывает, что в результат необходимо включать все строки.
|