ДОСТИГНУТО:

01.11.2016-300 страниц в индексе Google;
19.01.2017-300 страниц в индексе Яндекса;
03.02.2017-40 ТИЦ;
05.02.2017- сайт принят в DMOZ каталог;

MySQL запросы для начинающих — часть третья

.

mayskuMySQL запросы для начинающих — часть третья

Всем привет!
Представляю вам третью часть серии статей для начинающих по SQL запросам к базам данных MySQL. В этой части будут рассмотрены примеры команд, использование функций и выражений, таких как ORDER BY, LIMIT, DISTINCT, LEFT JOIN и другие.

ORDER BY — сортировка записей

Выражение ORDER BY позволяет сортировать результаты SQL-запроса. Например следующий запрос выведет значения для всех клиентов, отсортированных по имени (по столбцу name):

SELECT * FROM clients ORDER BY name;
или
SELECT * FROM clients ORDER BY name ASC;
По умолчанию сортировка производится в порядке возрастания, поэтому параметр ASC можно не указывать. Например в нашем случае первыми будут выведены клиенты, чьи имена начинаются с буквы «A», а последними будут начинающиеся с буквы «Z».

Если требуется сортировка по убыванию, то к запросу нужно добавить параметр DESC:

SELECT * FROM clients ORDER BY name DESC;
Также можно упорядочивать (сортировать) записи по нескольким столбцам таблицы, например так:

SELECT * FROM clients ORDER BY name, age DESC;
LIMIT — ограничение количества выводимых записей

Для того, чтобы в результаты SQL-запроса попали не все записи, а только ограниченное их количество, нужно использовать выражение LIMIT. Формат выражения LIMIT следующий:

LIMIT порядковый_номер_стартовой_записи, количество_выводимых_записей
Имейте ввиду, что нумерация записей (строк) в таблицах MySQL начинается с «0». В этом примере результатом запроса будут 5 самых первых строк таблицы:

SELECT * FROM clients LIMIT 0,5;

и то же самое будет, если первый параметр выражения LIMIT пропущен:

SELECT * FROM clients LIMIT 5;
А вот уже в этом примере в результат попадут 5 строк таблицы, начиная с третьей (т.к. нумерация начинается с «0»):

SELECT * FROM clients LIMIT 2,5;
Есть еще один способ ограничения количества выводимых записей с использованием OFFSET (смещение). Формат для этого используется такой:

LIMIT количество_записей OFFSET начальная_запись
Следующий SQL-запрос выведет пять записей из таблицы clients начиная со второй по счету (не забываем, что нумерация записей начинается с «0»):

SELECT * FROM clients LIMIT 5 OFFSET 1
DISTINCT — уникальные значения в столбце таблицы

Для того, чтобы получить только уникальные (не повторяющиеся) значения из столбца таблицы, нужно использовать запрос с параметром DISTINCT:

SELECT DISTINCT name FROM clients;
Этот запрос выведет только уникальные имена клиентов из столбца name таблицы clients (имена в полученном списке повторяться не будут).

Функция SUM ()

Для того, чтобы вычислить сумму всех численных значений из столбца таблицы, нужно использовать функцию SUM ():

SELECT SUM (cost) FROM clients WHERE country = 'Россия';
Данный SQL запрос выдаст нам общую сумму стоимости всех товаров, купленных клиентами из России.

Функция AVG ()

Для того, чтобы получить среднее значение численных значений столбца, используйте функцию AVG ():

SELECT country, AVG (age) FROM clients GROUP BY country;
Этот запрос выведет список стран и средний возраст клиентов для каждой из них, и результат будет примерно такой:

±-----------±---------+
| country | avg (age) |
±-----------±---------+
| Россия | 37 |
| Беларусь | 32 |
| Казахстан | 34 |
±-----------±---------+
SELECT внутри SELECT

Нередко встречаются запросы, выполняемые командой SELECT, внутри которых выполняется еще один запрос (или несколько запросов) с использованием той же команды SELECT:

SELECT DISTINCT cl FROM tl WHERE tl.cl IN (SELECT cl FROM t2);
В этом примере запрос должен выбрать уникальные значения столбца cl из таблицы t1, но только те значения, которые будут присутствовать в списке результатов вложенного запроса (SELECT cl FROM t2). Заметьте, что вложенный SELECT-запрос делает выборку уже из другой таблицы t2.

Не забывайте, что все вложенные запросы (подзапросы) всегда должны быть заключены в круглые скобки.

LEFT JOIN в команде SELECT

LEFT JOIN используется с целью соединения двух таблиц для последующей обработки связанных данных, например:

SELECT tl.* FROM tl LEFT JOIN t2 ON tl.cost=t2.cost WHERE t2.cost > 999;
Этот SQL-запрос находит все строки таблицы tl, но только те, для которых связанные значения столбца cost из таблицы t2 больше 999. Обе таблицы связаны в данном примере по столбцу cost.

Нередко можно встретить запись вида LEFT OUTER JOIN для соединения таблиц. В обоих вариантах важен порядок таблиц для оператора, поскольку оператор является НЕ-симметричным, из-за указания слова LEFT. В результат выполнения запроса попадут объединенные заголовки соединяемых таблиц. Рассмотрим еще один пример:

SELECT * FROM Clients LEFT OUTER JOIN Region ON Clients.RegionId = Region.Id
При выполнении этого SQL запроса в результат попадут записи из обоих таблиц, которые удовлетворяют условию ON, а затем из левой таблицы еще добавятся те записи, которые не попали под условие ранее, но уже для этих (добавляемых) записей поля, которые соответствуют полям из правой таблицы, будут иметь значения NULL. Вот таким примерно будет результат:

±-------------±-----------------±----------±------------+
| Clients.Name | Clients.RegionId | Region.Id | Region.Name |
±-------------±-----------------±----------±------------+
| Иванов | 1 | 1 | Москва |
| Петров | 2 | 2 | Хабаровск |
| Сидоров | 1 | 1 | Москва |
| Титов | 5 | NULL | NULL |
±-------------±-----------------±----------±------------+
Выбор случайных записей из таблицы

При помощи функции RAND () и выражения сортировки ORDER BY можно выбирать из таблицы строки случайным образом. Например, каждый раз этот запрос будет возвращать одну строку, выбранную из таблицы clients случайным образом (при большом количестве записей в таблице clients в большинстве случаев будут возвращаться абсолютно разные строки):

SELECT * FROM clients ORDER BY RAND () LIMIT 1
Можно немного усилить уникальность генерации случайных чисел (порядковых номеров строк таблицы) и добавить в функцию RAND () параметр, «случайное» начальное значение, например функцию получения даты и времени NOW ():

SELECT * FROM clients ORDER BY RAND (NOW ()) LIMIT 1
Запись результатов SQL запроса в файл

Результаты выполнения SQL-запросов можно сохранять в файле. Для этого используется команда INTO OUTFILE:

SELECT * INTO OUTFILE '/tmp/clients-res.log' FROM clients;
В результате выполнения приведенного в пример запроса будет создан файл ‘/tmp/clients-res.log’, в котором будет примерно следующее содержимое:

1 Иванов Москва 25
2 Петров Самара 55
3 Сидоров Омск 33 \N
На UNIX-сервере этот файл можно открыть для просмотра например такой командой:

# cat /tmp/clients-res.log
Есть еще вариант для вывода в файл, когда значения столбцов в строках будут разделаться заранее определяемым символом. Это достигается применением выражения FIELDS TERMINATED BY:

SELECT * INTO OUTFILE '/tmp/clients-res.log' FIELDS TERMINATED BY ',' FROM clients;
Результат выполнения этого запроса будет записан в файл так, что значения в строках будукт разделяться запятыми:

1,Иванов,Москва,25
2,Петров,Самара,55
3,Сидоров,Омск,33 \N

Третья часть обзора MySQL запросов для новичков на этом завершается. Продолжение следует. не стесняемся комментировать и лайкать!
БЕРЕГИТЕ СЕБЯ!




лайк

Эти красотки хотят чтобы ты их жестко лайкнул и даже несколько раз твитнул!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *