mdm 1с | Плоские колокола

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

Продолжаем изучать MySQL-запросы. Это вторая часть серии статей для начинающих по запросам MySQL. Здесь будут представлены примеры использования команд, функций и выражений, таких как IN, NOT IN, AS, COUNT, CONCAT, GROUP BY и HAVING.
MySQL запросы для начинающих — часть вторая

WHERE — применение IN и NOT IN

Использование IN — выбираем клиентов из таблицы clients, у которых возраст равен 30, 40 или 50 лет (например, если вы хотите проверить, у кого из них юбилей):

SELECT * FROM `clients` WHERE `age` IN (30,40,50)

Использование NOT IN — например выбираем всех клиентов из таблицы clients, НЕ проживающих в России, Беларуси, Украине:

SELECT * FROM `clients` WHERE `country` NOT IN ("Россия", "Беларусь", "Украина")

Можно использовать еще и вложенные запросы — здесь показан пример, когда нужно выбрать всех клиентов из таблицы clients, проживающих в странах, входящих в СНГ:

SELECT * FROM `clients` WHERE `country` IN (SELECT `country` FROM `regions` WHERE `name` = "СНГ")

Заметьте, что во вложенном запросе используется уже другая таблица базы данных — regions.

Для условий IN и NOT IN должны использоваться только значения столбцов таблиц (или просто какие-то конкретные значения), но никак не имена столбцов!

CONCAT — склеивание (конкатенация) значений в одну строку

Функция CONCAT нередко применяется в команде SELECT, и с ее помощью можно получить одну строку из нескольких значений, либо из обычных текстовых строк, либо полученных из значений столбцов, либо комбинируя оба варианта. Вот несколько MySQL-запросов для примера:

SELECT id, CONCAT(name, ' из ', city) AS NAME, `country` FROM `clients`;

этот запрос нам вернет примерно такие строки:

*----------------------------------*
| id  | name             | country |
*----------------------------------*
| 123 | Иванов из Москвы | Россия  |
| 124 | Петров из Самары | Россия  |
*----------------------------------*
SELECT CONCAT('Сотрудник', ' ', 'Петров', ' ', 'вернулся из', ' ', 'командировки');

этот MySQL-запрос вернет нам такую строку:

Сотрудник Петров вернулся из командировки

Однако при использовании функции CONCAT следует помнить, что если в ее параметрах попадет хотя бы одно значение NULL, то функция вернет только NULL (то есть ничего), причем независимо от того, каким по порядку был параметр, равный значению NULL. Следующий запрос вернет значение NULL, а не строку:

SELECT CONCAT('Сотрудник', NULL, 'вернулся из', ' ', 'командировки');

И еще, числовые параметры, передаваемые функции CONCAT без кавычек автоматически преобразуются в строки:

SELECT CONCAT(100, '500', 9);
SELECT CONCAT(5.99);

эти запросы вернут строковые значения «1005009» и «5.99» соответственно.

Использование функции COUNT()

Функция COUNT() используется для подсчета количества записей в таблице базы данных. Например, чтобы узнать количество всех строк из таблицы clients, достаточно выполнить такой запрос:

SELECT COUNT(*) FROM clients;

Применение функции COUNT() совместно с командой группирования GROUP BY

В этом примере мы применим группировку записей по странам при помощи команды GROUP BY, чтобы получить из таблицы clients количество клиентов в каждой стране:

SELECT country, COUNT(*) FROM clients GROUP BY country;

Результат будет примерно таким:

*----------------------*
| country   | COUNT(*) |
*----------------------*
| Россия    | 50       |
| Беларусь  | 23       |
| Казахстан | 31       |
*----------------------*

Совместно с командой GROUP BY можно применять не только функцию COUNT(*), но и другие схожие по назначению функции. Например следующий SQL-запрос подсчитает средний возраст клиентов, сгруппированный по полу:

SELECT sex, AVG(age) FROM clients GROUP BY sex;

Результат получим примерно такой:

*--------------------*
| sex     | AVG(age) |
*--------------------*
| мужчина | 28       |
| женщина | 25       |
*--------------------*

Использование выражения HAVING вместе с GROUP BY

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

SELECT country, COUNT(*) AS CNT FROM clients GROUP BY country HAVING CNT > 10

Имейте ввиду, что выражение HAVING должно быть расположено только после всех выражений GROUP BY, но ни в коем случае не должно использоваться вместо WHERE.

Определение псевдонимов, используя «AS»

Имена столбцов таблиц базы данных можно заменять собственными псевдонимами, используя для этого ключевое слово AS и придуманное вами собственное имя. Вот пример применения псевдонимов и ключевого слова AS:

SELECT clientname AS name, country AS strana, age AS vozrast FROM clients

В результате запроса мы получим такие заголовки столбцов:

*----------------------------*
| name   | strana  | vozrast |
*----------------------------*
| Иван   | Россия  | 35      |
| Серж   | Франция | 44      |
*----------------------------*

Использование псевдонимов применяется очень часто, например, чтобы сократить длину строки запроса, заменить в результатах запроса имена столбцов на более удобные для чтения и т.д.


На этом вторая часть обзора SQL запросов для новичков завершается. Продолжение следует.
Другие статьи из этой серии:
Первая часть
Третья часть
Четвертая часть

Метки: COUNT, GROUP BY, HAVING, mysql, SELECT, WHERE, база данных, запросы

Поделитесь материалом с другими, воспользуйтесь этими кнопками:
Получать обновления и новые материалы блога по E-mail

7 комментариев к “MySQL запросы для начинающих — часть вторая”

  1. Dofollow Ruslan:

    Хорошее продолжение статей для начинающих изучать MySql. Сам я в мускуле не силен, в основном специализируюсь на T-SQL. Было бы интересно почитать, как в MySql реализованы такие возможности sql, как join (если они конечно есть). С удовольствием почитаю следующую статью.

    Ответить
  2. Андрис:

    Из вашей второй статьи я понял, что надо более подробно изучить MySql, я раньше и не думал, что это может быть интересной темой. У меня с MySql были просто сбои, я базу данных рассматривал поверхностно, на уровне пользователя.

    Ответить
  3. ЯНИС:

    Интересная тема! Скажите, если насчет чистки базы от мусора, так выражусь, я поставил плагин WP-OPTIMIZE, он также отлично оптимизирует базу данных!? Вы знакомы с этим плагином?

    Ответить
    • Знаком с этим плагином, он вполне нормально и адекватно работает, но сам я не пользуюсь плагинами для оптимизации баз данных, а использую свои скрипты и запросы для разных манипуляций с БД.

      Ответить
  4. https://hotpry.com:

    Добрый день! Я вообщем попробовал вроде все получилось. Хотя раньше были сбои и я впервые попробовал. Спасибо Я буду следить за Вашими статьями!

    Ответить
  5. Мурат:

    Только прочитал этот пост, и могу сразу сказать о полезности этой информации, теперь для меня решены многие вопросы.

    Ответить
  6. steblo:

    И ведь мало того, что ничего не теряете, так еще и приобретаете.

    Ответить

Оставить комментарий

Уважаемые посетители, пожалуйста, пишите осмысленные и исчерпывающие комментарии. Короткие фразы типа «спасибо автору», «возьму на заметку», «мне помогло» и т.п. будут удаляться. Исключение, когда Вы отвечаете на чей-то вопрос или благодарите за помощь.

Ссылки на Ваш сайт получат статус DoFollow после третьего комментария.

Для вставки кода в комментарии можно использовать BB-коды:
[text] [/text], [php] [/php], [html] [/html]

Подписаться на обновления блога 4remind.ru по RSS
Новости блога в социальных сетях

4remind.ru - персональный блог вебмастера



Наверх
Наверх