Databases. Part XI

Databases. Part XI

«Семь шагов построения запросов»

В этом разделе приводится алгоритм построения простого запроса с использованием инструкции SELECT. Конечно, действия, написанные здесь, не отражают всех возможностей, которые предусмотрены для построения запросов, но я уверен, что они будут полезны тем, кто только начинает изучать SQL, позволят быстрее запомнить синтаксис инструкции SELECT и немного упорядочить процесс мышления при выполнении поставленных задач.

Итак, семь шагов создания запроса:

1. Напиши SELECT

Любой запрос на выборку начинается с этого слова. Если задание начинается со слов «выбрать», «вывести», «найти», «посчитать», «получить список» - этот запрос реализуется инструкцией SELECT.

Итог: SELECT

2. Представь себе результат и сформируй список выбора

Нужно представить себе, какие столбцы будут в таблице, которая получится при выполнении запроса. Возможно, некоторые поля будут вычисляемыми. Например, в базе данных есть таблица «Учащиеся»:

Нужно получить список учеников, возраст которых не более 14 лет, обучающихся в 10 классе. Результат представляется следующего вида:

Фамилия, имя и отчество уже есть, а вот возраст и класс нужно вычислить. Возраст вычисляется, как разность текущего года и года рождения, а класс должен быть представлен как параллель, поэтому только первые два символа от обозначения класса.

Итог: SELECT Фамилия, Имя, Отчество, YEAR(NOW())-Год_рождения as Возраст, INT(LEFT(Класс, 2)) as Класс

3. Подумай, откуда взять данные

Если таблица одна – замечательно, это значит, что её просто нужно написать после слова FROM. Если таблиц несколько – их нужно связать либо симметрично INNER JOIN, либо левосторонним или правосторонним соединением LEFT JOIN, RIGHT JOIN. Нельзя увлекаться соединениями – если из какой-либо таблицы не выбирается ни одно поле, то её соединять не нужно. Например, нужно получить список сотрудников. Соединив в запросе таблицу «Сотрудники» с таблицей «Зарплата», из которой ничего не выбирается, мы получим список сотрудников, получивших зарплату, а это уже совсем другое задание.

В предыдущем примере все просто – таблица одна, поэтому её и подставляем в предложение FROM.

Итог: SELECT Фамилия, Имя, Отчество, YEAR(NOW())-Год_рождения as Возраст, INT(LEFT(Класс, 2)) as Класс FROM Учащиеся

4. Задай элементарные условия отбора

После слова WHERE нужно написать условия, которые явно видны по заданию и легко реализуются. Здесь, как правило, сразу видны условия типа больше, меньше, в диапазоне, равно конкретному значению, либо должно соответствовать шаблону. В приведенном примере элементарные условия такие: возраст меньше или равен 14 и класс – десятый.

Итог: SELECT Фамилия, Имя, Отчество, YEAR(NOW())-Год_рождения as Возраст, INT(LEFT(Класс, 2)) as Класс FROM Учащиеся WHERE YEAR(NOW())-Год_рождения<=14 AND INT(LEFT(Класс, 2))=10

5. Реализуй связанный подзапрос

Во всех случаях, когда говорится, что то, что ты выбираешь, может находиться, не находиться, участвовать, не участвовать, равно, больше меньше того, что требует отдельного вычисления, нужно реализовать подзапрос. Для этого указывается операция отношения или операторы типа IN или EXISTS и формируется еще один SELECT, который должен быть связан с внешним запросом по какому-нибудь полю. Примеры приведу в следующих записях, потому что это отдельная тема.

6. Если нужно, отсортируй

Упорядочивать по какому-нибудь полю нужно в самом конце инструкции SELECT, добавив предложение ORDER BY. Например, в полученном списке учеников выведем фамилии в алфавитном порядке. Для этого к запросу нужно добавить ORDER BY фамилия.

Итог: SELECT Фамилия, Имя, Отчество, YEAR(NOW())-Год_рождения as Возраст, INT(LEFT(Класс, 2)) as Класс FROM Учащиеся WHERE YEAR(NOW())-Год_рождения<=14 AND INT(LEFT(Класс, 2))=10 ORDER BY Фамилия

7. Все перечисленное выше не работает для групповых запросов


Карта сайта


Информационный сайт Webavtocat.ru