Итак, в нашей БД forum есть три таблицы: users (пользователи), topics (темы) и posts (сообщения). И мы хотим посмотреть, какие
данные в них содержатся. Для этого в SQL существует оператор SELECT. Синтаксис его использования следующий:
SELECT что_выбрать FROM откуда_выбрать;
Вместо "что_выбрать" мы должны указать либо имя столбца, значения которого хотим увидеть, либо имена нескольких столбцов через
запятую, либо символ звездочки (*), означающий выбор всех столбцов таблицы. Вместо "откуда_выбрать" следует указать имя таблицы.
Давайте сначала посмотрим все столбцы из таблицы users:
SELECT * FROM users;
Вот и все наши данные, которые мы вносили в эту таблицу. Но предположим, что мы хотим посмотреть только столбец id_user (например,
в прошлом уроке, нам надо было для заполнения таблицы topics (темы) знать, какие id_user есть в таблице users). Для этого в запросе
мы укажем имя этого столбца:
SELECT id_user FROM users;
Ну, а если мы захотим посмотреть, например, имена и e-mail наших пользователей, то мы перечислим интересующие столбцы через запятую:
SELECT name, email FROM users;
Аналогично, вы можете посмотреть, какие данные содержат и другие наши таблицы. Давайте посмотрим, какие у нас существуют темы:
SELECT * FROM topics;
Сейчас у нас всего 4 темы, а если их будет 100? Хотелось бы, чтобы они выводились, например, по алфавиту. Для этого в SQL существует
ключевое слово ORDER BY после которого указывается имя столбца по которому будет происходить сортировка.
Синтаксис следующий:
SELECT имя_столбца FROM имя_таблицы ORDER BY имя_столбца_сортировки;
По умолчанию сортировка идет по возрастанию, но это можно изменить, добавив ключевое слово DESC
Теперь наши данные отсортированы в порядке по убыванию.
Сортировку можно производить сразу по нескольким столбцам. Например, следующий запрос отсортирует данные по столбцу topic_name,
и если в этом столбце будет несколько одинаковых строк, то в столбце id_author будет осуществлена сортировка по убыванию:
Сравните результат с результатом предыдущего запроса.
Очень часто нам не нужна вся информация из таблицы. Например, мы хотим узнать, какие темы были созданы пользователем sveta (id=4).
Для этого в SQL есть ключевое слово WHERE, синтаксис у такого запроса следующий:
SELECT имя_столбца FROM имя_таблицы WHERE условие;
Для нашего примера условием является идентификатор пользователя, т.е. нам нужны только те строки, в столбце id_author которых стоит 4
(идентификатор пользователя sveta):
SELECT * FROM topics WHERE id_author=4;
Или мы хотим узнать, кто создал тему "велосипеды":
Конечно, было бы удобнее, чтобы вместо id автора, выводилось его имя, но имена хранятся в другой таблице. В последующих уроках
мы узнаем, как выбирать данные из нескольких таблиц. А пока узнаем, какие условия можно задавать, используя ключевое слово WHERE.
Оператор
Описание
= (равно)
Отбираются значения равные указанному
Пример:
SELECT * FROM topics WHERE id_author=4;
Результат:
> (больше)
Отбираются значения больше указанного
Пример:
SELECT * FROM topics WHERE id_author>2;
Результат:
< (меньше)
Отбираются значения меньше указанного
Пример:
SELECT * FROM topics WHERE id_author<3;
Результат:
>= (больше или равно)
Отбираются значения большие и равные указанному
Пример:
SELECT * FROM topics WHERE id_author>=2;
Результат:
<= (меньше или равно)
Отбираются значения меньшие и равные указанному
Пример:
SELECT * FROM topics WHERE id_author<=3;
Результат:
!= (не равно)
Отбираются значения не равные указанному
Пример:
SELECT * FROM topics WHERE id_author!=1;
Результат:
IS NOT NULL
Отбираются строки, имеющие значения в указанном поле
Пример:
SELECT * FROM topics WHERE id_author IS NOT NULL;
Результат:
IS NULL
Отбираются строки, не имеющие значения в указанном поле
Пример:
SELECT * FROM topics WHERE id_author IS NULL;
Результат:
Empty set - нет таких строк.
BETWEEN (между)
Отбираются значения, находящиеся между указанными
Пример:
SELECT * FROM topics WHERE id_author BETWEEN 1 AND 3;
Результат:
IN (значение содержится)
Отбираются значения, соответствующие указанным
Пример:
SELECT * FROM topics WHERE id_author IN (1, 4);
Результат:
NOT IN (значение не содержится)
Отбираются значения, кроме указанных
Пример:
SELECT * FROM topics WHERE id_author NOT IN (1, 4);
Результат:
LIKE (соответствие)
Отбираются значения, соответствующие образцу
Пример:
SELECT * FROM topics WHERE topic_name LIKE 'вел%';
Результат:
Возможные метасимволы оператора LIKE будут рассмотрены ниже.
NOT LIKE (не соответствие)
Отбираются значения, не соответствующие образцу
Пример:
SELECT * FROM topics WHERE topic_name NOT LIKE 'вел%';
Результат:
Метасимволы оператора LIKE
Поиск с использованием метасимволов может осуществляться только в текстовых полях.
Самый распространенный метасимвол - %. Он означает любые символы. Например, если нам надо найти слова,
начинающиеся с букв "вел", то мы напишем LIKE 'вел%', а если мы хотим найти слова, которые содержат символы "клуб", то мы
напишем LIKE '%клуб%'. Например:
Еще один часто используемый метасимвол - _. В отличие от %, который обозначает несколько или ни одного символа,
нижнее подчеркивание обозначает ровно один символ. Например:
Обратите внимание на пробел между метасимволом и "рыб", если его пропустить, то запрос не сработает, т.к. метасимвол _
обозначает ровно один символ, а пробел - это тоже символ.
На сегодня достаточно. В следующем уроке мы научимся составлять запросы к двум и более таблицам. А пока попробуйте
самостоятельно составить запросы к таблице posts (сообщения).