SELECT, SELECT DISTINCT. Вывод данных из таблиц в MySQL

Команда SELECT

SELECT используется для создания выборок из базы данных MySQL.

С помощью SELECT можно:

  • выводить данные из одной или нескольких таблиц и колонок.
  • вывести все данные из таблицы используя оператор   * .
  • выводить данные с условием, используя команду WHERE.
  • ограничить количество выводимых записей, используя команду LIMIT.
  • задать смещение колонок, используя команду OFFSET.

Синтаксис запроса вывода данных из таблицы

В запросе мы выбираем из каких колонок (column1, column2, ... ) какой таблицы (table_name) мы хотим получить данные.

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

Вывод данных таблицы в терминале

Пример вывода данных колонок id, title, author, price, amount из таблицы books.

mysql> USE Bookstore;
Database changed

mysql> SELECT id, title, author, price, amount FROM books;
+----+---------------------------+---------------------+--------+--------+
| id | title                     | author              | price  | amount |
+----+---------------------------+---------------------+--------+--------+
|  1 | Дубровский (Акция)        | Александр Пушкин    | 230.00 |     20 |
|  2 | Нос (Акция)               | Николай Гоголь      | 255.20 |      7 |
|  3 | Мастер и Маргарита        | Михаил Булгаков     | 263.00 |      8 |
|  4 | Мёртвые души (Акция)      | Николай Гоголь      | 173.00 |      3 |
|  5 | Преступление и наказание  | Фёдор Достоевский   | 245.00 |      3 |
|  6 | Война и мир               | Лев Толстой         | 341.00 |      1 |
|  7 | Анна Каренина             | Лев Толстой         | 346.00 |      0 |
|  8 | Отцы и дети               | Иван Тургенев       | 371.00 |      3 |
|  9 | Собачье сердце            | Михаил Булгаков     | 232.00 |     10 |
| 10 | Бесы                      | Фёдор Достоевский   | 212.00 |      8 |
+----+---------------------------+---------------------+--------+--------+
10 rows in set (0.00 sec)

mysql>

Запрос для вывода данных всех колонок из таблицы books, будет выглядеть так.

Вывод данных можно также организовать не только в виде таблицы, но и в виде списка, просто добавьте флаг \G после имени таблицы.

mysql> SELECT * FROM books \G;
*************************** 1. row ***************************
            id: 1
         title: Дубровский (Акция)
        author: Александр Пушкин
         genre: Драма,Повесть
         price: 230.00
      discount: 15
       edition: 1
          isbn: 841-6-817-134484-1
      page_num: 120
  publish_year: 1855
 creation_date: 2019-01-28 15:17:12
        amount: 20
shelf_position: f4a322ccca

Вывод данных из нескольких таблиц

Если у вас есть несколько связанных таблиц, то с помощью SELECT вы можете выводить их данные составляя из них одну таблицу.

Например мы имеем таблицу с книгами - books и их заказами - orders.

Выведем колонки id, book_id и status для таблицы orders.

mysql> SELECT id, book_id, status FROM orders;
+----+---------+------------------+
| id | book_id | status           |
+----+---------+------------------+
|  1 |       3 | Новый            |
|  2 |       1 | Обрабатывается   |
+----+---------+------------------+
2 rows in set (0.00 sec)

mysql>

Имея идентификаторы записей таблицы books в колонке book_id, мы можем соотнести их с колонкой id в таблице books с помощью команды WHERE. В результате мы можем узнать статус заказа для каждой книги.

Выведем колонки title, author, price из таблицы books и колонку status из таблицы orders.

mysql> SELECT title, author, price, status FROM books, orders WHERE books.id=book_id;
+---------------------+-------------------+--------+-----------------+
| title               | author            | price  | status          |
+---------------------+-------------------+--------+-----------------+
| Мастер и Маргарита  | Михаил Булгаков   | 263.00 | Новый           |
| Дубровский (Акция)  | Александр Пушкин  | 230.00 | Обрабатывается  |
+---------------------+-------------------+--------+-----------------+
2 rows in set (0.00 sec)

mysql>

Вывести колонки с одинаковыми именами, например id, в данном случае не получится, т.к. они имеются в обоих таблицах.

Команда SELECT DISTINCT

В отличие от обычного SELECT, SELECT DISCTINCT позволяет выводить только уникальные (не повторяющиеся) данные из таблицы БД.

Синтаксис запроса для вывода уникальных данных из таблицы

В предыдущем примере у нас много раз повторяются данные из колонки author, если мы хотим узнать какие авторы у нас есть без повторов, то воспользуемся следующим запросом.

В результате получим вывод 6 строк с уникальными именами авторов книг вместо 10.

mysql> SELECT DISTINCT author FROM books;
+-----------------------------------+
| author                            |
+-----------------------------------+
| Александр Пушкин                  |
| Николай Гоголь                    |
| Михаил Булгаков                   |
| Фёдор Достоевский                 |
| Лев Толстой                       |
| Иван Тургенев                     |
+-----------------------------------+
6 rows in set (0.00 sec)

mysql>

Для подсчета уникальных записей можно воспользоваться функцией COUNT().

mysql> SELECT COUNT(DISTINCT author) FROM books;
+------------------------+
| count(DISTINCT author) |
+------------------------+
|                      6 |
+------------------------+
1 row in set (0.05 sec)

mysql>

Вывод данных из таблицы MySQL с помощью PHP (PDO)

Иногда вывод большого количества данных в терминале может быть неудобен или даже не читаем, в таком случае будет лучше вывести данные таблицы на веб-странице с помощью PHP, используя модуль PDO.

Создадим файл index.php c HTML-таблицей, ячейки которой будут заполнятся данными из таблицы books.

Результат заполнения HTML-таблицы данными из таблицы books.

Результат вывода данных из таблицы MySQL при помощи PHP
Результат вывода данных из таблицы MySQL при помощи PHP