- SELECT, SELECT DISTINCT. Вывод данных из таблиц в MySQL
- Команда SELECT
- Синтаксис запроса вывода данных из таблицы
- Вывод данных таблицы в терминале
- Вывод данных из нескольких таблиц
- Команда SELECT DISTINCT
- Примеры SQL запросов к базе данных MySQL
- 1. Самые простые SQL запросы
- 2. Простые SELECT (выбрать) запросы к базе данных MySQL
- 3. Простые INSERT (новая запись) запросы
- 4. Простые UPDATE запросы к базе данных MySQL
- 5. Простые DELETE (удалить запись) запросы к базе данных MySQL
- 6. Простые DROP (удалить таблицу) запросы к базе данных MySQL
- 7. Сложные запросы к базе данных MySQL
- 8. Запросы к базе данных MySQL и PHP
- MySQL SELECT, выборка из таблиц MySQL
- Операторы AND и OR в SELECT запросах
- Объекты выборки в MySQL
- SELECT DISTINCT и выборка из таблиц MySQL
- Сортировка при выборке из таблиц
- Шаблоны в запросах на выборку данных
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)
Запрос для вывода данных всех колонок из таблицы 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.
Имея идентификаторы записей таблицы 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)
Вывести колонки с одинаковыми именами, например id, в данном случае не получится, т.к. они имеются в обоих таблицах.
Команда SELECT DISTINCT
В отличие от обычного SELECT , SELECT DISCTINCT позволяет выводить только уникальные (не повторяющиеся) данные из таблицы БД.
Источник
Примеры SQL запросов к базе данных MySQL
Содержание статьи
1. Самые простые MySQL запросы
2. Простые SELECT (выбрать) запросы
3. Простые INSERT (новая запись) запросы
4. Простые UPDATE (перезаписать, дописать) запросы
5. Простые DELETE (удалить запись) запросы
6. Простые DROP (удалить таблицу) запросы
7. Сложные MySQL запросы
8. MySQL запросы и переменные PHP
1. Самые простые SQL запросы
1. Выведет список ВСЕХ баз.
2. Выведет список ВСЕХ таблиц в Базе Данных base_name.
2. Простые SELECT (выбрать) запросы к базе данных MySQL
SELECT – запрос, который выбирает уже существующие данные из БД. Для выбора можно указывать определённые параметры выбора. Например, суть запроса русским языком звучит так — ВЫБРАТЬ такие-то колонки ИЗ такой-то таблицы ГДЕ параметр такой-то колонки равен значению.
1. Выбирает ВСЕ данные в таблице tbl_name.
2. Выведет количество записей в таблице tbl_name.
3. Выбирает (SELECT) из(FROM) таблицы tbl_name лимит (LIMIT) 3 записи, начиная с 2.
4. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id по порядку.
5. Выбирает (SELECT) ВСЕ записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id в ОБРАТНОМ порядке.
6. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы users и сортирует их (ORDER BY) по полю id в порядке возрастания, лимит (LIMIT) первые 5 записей.
7. Выбирает все записи из таблицы users, где поле fname соответствует значению Gena.
8. Выбирает все записи из таблицы users, где значение поля fname начинается с Ge.
9. Выбирает все записи из таблицы users, где fname заканчивается на na, и упорядочивает записи в порядке возрастания значения id.
10. Выбирает все данные из колонок fname, lname из таблице users.
Внимание! Старайтесь указывать конкретные колонки (как в примере 10). Это важно для того, чтобы запросы обрабатывались намного быстрее! |
11. Допустим у Вас в таблице пользовательских данных есть страна. Так вот если Вы хотите вывести ТОЛЬКО список встречающихся значений (чтобы, например, Россия не выводилось 20 раз, а только один), то используем DISTINCT. Выведет, из массы повторяющихся значений Россия, Украина, Беларусь. Таким образом, из таблицы users колонки country будут выведены ВСЕ УНИКАЛЬНЫЕ значения
12. Выбирает ВСЕ данные строк из таблицы users где age имеет значения 18,19 и 21.
13. Выбирает МАКСИМАЛЬНОЕ значение age в таблице users. То есть если у Вас в таблице самое большее значение age(с англ. возраст) равно 55, то результатом запроса будет 55.
14. Выберет данные из таблицы users по полям name и age ГДЕ age принимает самое маленькое значение.
15. Выберет данные из таблицы users по полю name ГДЕ id НЕ РАВЕН 2.
3. Простые INSERT (новая запись) запросы
INSERT – запрос, который позволяет ПЕРВОНАЧАЛЬНО вставить запись в БД. То есть создаёт НОВУЮ запись (строчку) в БД.
1. Делает новую запись в таблице users, в поле name вставляет Сергей, а в поле age вставляет 25. Таким образом, в таблицу дописывается новая строки с данными значениями. Если колонок больше, то они оставшиеся останутся либо пустыми, либо с установленными по умолчанию значениями.
4. Простые UPDATE запросы к базе данных MySQL
UPDATE – запрос, который позволяет ПЕРЕЗАПИСАТЬ значения полей или ДОПИСАТЬ что-то в уже существующей строке в БД. Например, есть готовая строка, но в ней нужно перезаписать параметр возраста, так как он изменился со временем.
1. В таблице users ГДЕ id равно 3 значение поля age становится 18.
2. Всё то же самое, что и в первом запросе, просто показан синтаксис запроса, где перезаписываются два поля и более.
В таблице users ГДЕ id равно 3 значение поля age становится 18, а country Россия.
5. Простые DELETE (удалить запись) запросы к базе данных MySQL
DELETE – запрос, который удаляет строку из таблицы.
1. Удаляет строку из таблицы users ГДЕ id равен 10.
6. Простые DROP (удалить таблицу) запросы к базе данных MySQL
DROP – запрос, который удаляет таблицу.
1. Удаляет целиком таблицу tbl_name.
7. Сложные запросы к базе данных MySQL
Любопытные запросы, которые могут пригодиться даже опытным пользователям
Данный сложный запрос ВЫБИРАЕТ колонки id,name,country В ТАБЛИЦАХ users,admins ГДЕ registration_date (дата) не старше 14 дней И activation НЕ РАВНО 0, СОРТИРОВАТЬ по registration_date в обратном порядке (новое в начале).
Выше указан пример так называемого запроса в запросе в SQL. Обновить возраст среди пользователей на 18+, где пол — мужской. Подобные варианты запроса не рекомендую. По личному опыту скажу, лучше создать несколько отдельных — они будут прорабатываться быстрее.
8. Запросы к базе данных MySQL и PHP
В MySQL запросы в PHP странице можно вставлять переменные в качестве сравниваемых и тп значений. Пара примеров
1. Выбирает все записи из таблицы users, где поле fname соответствует значению переменной $name.
2. В таблице users ГДЕ id равно 3 значение поля age изменяется на значение переменной $age.
Внимание! Если Вам интересен какой-либо ещё пример, то пишите вопрос в комментарии!
Источник
MySQL SELECT, выборка из таблиц MySQL
Все SELECT запросы строятся по одному шаблону:
То есть сначала указывается что должно быть получено в результате (все содержимое таблицы или, например, определенная колонка), потом — указывается имя таблицы или таблиц, в завершение условие которому должен удовлетворять результат.
Продолжаем работать с базой данных REAL_ESTATE_AGENCY и первой таблицей REAL_ESTATE.
Уже приводившаяся команда со * выведет все содержимое таблицы:
Теперь немного усложним запрос добавив условие, по которому производится выборка. В частности выведем все записи для которых в качестве значения колонки city задано Moskow
SELECT * FROM REAL_ESTATE WHERE city=’Moskow’;
+————+———+————+————+————-+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+———+————+————+————-+————+——-+
| Appartment | Moskow | 56 | Center | Tverskaya | Rent | 50000 |
| Appartment | Moskow | 42 | Himki | Bolshaya | Rent | 18000 |
| Appartment | Moskow | 36 | Hamovniki | Sportivnaya | Rent | 15000 |
+————+———+————+————+————-+————+——-+
3 rows in set (0.00 sec)
На этом этапе замечаем, что в названии российской столицы опечатка — обновляем значение трех записей, затем продолжаем разбираться с SELECT запросами
UPDATE REAL_ESTATE SET city=’Moscow’ WHERE city=’Moskow’;
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3 Changed: 3 Warnings: 0
SELECT * FROM REAL_ESTATE WHERE city=’Moscow’;
+————+———+————+————+————-+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+———+————+————+————-+————+——-+
| Appartment | Moscow | 56 | Center | Tverskaya | Rent | 50000 |
| Appartment | Moscow | 42 | Himki | Bolshaya | Rent | 18000 |
| Appartment | Moscow | 36 | Hamovniki | Sportivnaya | Rent | 15000 |
+————+———+————+————+————-+————+——-+
3 rows in set (0.00 sec)
Операторы AND и OR в SELECT запросах
выборка из таблиц MySQL выполняется по условиям, которые могут быть простыми как в примере выше или могут состоять из нескольких частей. Может проверяться как полное соответствие значению в ячейке таблицы, так и численное значение в представлении «больше»/»меньше»/»равно» и их комбинации
SELECT * FROM REAL_ESTATE WHERE rentorsale=’Rent’ and PRICE >=’25000′;
+————+———+————+———-+————+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+———+————+———-+————+————+——-+
| Appartment | Moscow | 56 | Center | Tverskaya | Rent | 50000 |
+————+———+————+———-+————+————+——-+
1 row in set (0.00 sec)
Запрос вывел данные по единственному объекту недвижимости в таблице, который сдается за сумму большую, чем 25 тысяч рублей.
Усложним запрос добавив в подходящие нам результаты объекты, в поле «PRICE» для которых указано 15000, также ограничимся городом Краснодаром.
SELECT * FROM REAL_ESTATE WHERE rentorsale=’Rent’ AND (PRICE >=’25000′ OR PRICE =’15000′) AND city=’Krasnodar’;
+————+————+————+————+————+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+————+————+————+————+————+——-+
| Appartment | Krasnodar | 44 | Leninskiy | Atamannaya | Rent | 15000 |
+————+————+————+————+————+————+——-+
1 row in set (0.00 sec)
Объекты выборки в MySQL
До настоящего момента указывалась *, что означает необходимость вывода всей информации из таблицы. Обычно это не требуется и достаточно значений одной или двух колонок
Для примера получим площадь квартиры в Краснодаре, которая сдается в аренду и стоимость в базе для которой равна 15000 или больше 25000.
SELECT floorspace FROM REAL_ESTATE WHERE rentorsale=’Rent’ AND (PRICE >=’25000′ OR PRICE =’15000′) AND city=’Krasnodar’;
+————+
| floorspace |
+————+
| 44 |
+————+
1 row in set (0.00 sec)
Здесь также допустимо любое количество значений — выберем по тем же условиям площадь объекта недвижимости и улицу, на которой он расположен
SELECT floorspace, street FROM REAL_ESTATE WHERE rentorsale=’Rent’ AND (PRICE >=’25000′ OR PRICE =’15000′) AND city=’Krasnodar’;
+————+————+
| floorspace | street |
+————+————+
| 44 | Atamannaya |
+————+————+
1 row in set (0.00 sec)
SELECT DISTINCT и выборка из таблиц MySQL
Часто возникает необходимость избавится от дублирующихся значений в результатах, дубли могут появиться например в результате такого запроса
SELECT floorspace FROM REAL_ESTATE WHERE city=’Yekaterinburg’ AND PRICE =’15000′;
+————+
| floorspace |
+————+
| 44 |
| 44 |
+————+
2 rows in set (0.00 sec)
Фактически это 2 разных квартиры, результат идентичен. В других условиях возможно полное совпадение. Чтобы избавиться от дублей нужно использовать DISTINCT, с которым SELECT будет работать до первого найденного совпадения
SELECT DISTINCT floorspace FROM REAL_ESTATE WHERE city=’Yekaterinburg’ AND PRICE =’15000′;
+————+
| floorspace |
+————+
| 44 |
+————+
1 row in set (0.00 sec)
Сортировка при выборке из таблиц
Сортировка в MySQL производится при помощи директивы ORDER BY
SELECT * FROM REAL_ESTATE WHERE city=’Moscow’ ORDER BY PRICE;
+————+———+————+————+————-+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+———+————+————+————-+————+——-+
| Appartment | Moscow | 36 | Hamovniki | Sportivnaya | Rent | 15000 |
| Appartment | Moscow | 42 | Himki | Bolshaya | Rent | 18000 |
| Appartment | Moscow | 56 | Center | Tverskaya | Rent | 50000 |
+————+———+————+————+————-+————+——-+
3 rows in set (0.00 sec)
По умолчанию производится сортировка по возрастанию
Добавив в запрос DESC можно получить сортировку по возрастанию
SELECT * FROM REAL_ESTATE WHERE city=’Moscow’ ORDER BY PRICE DESC;
+————+———+————+————+————-+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+———+————+————+————-+————+——-+
| Appartment | Moscow | 56 | Center | Tverskaya | Rent | 50000 |
| Appartment | Moscow | 42 | Himki | Bolshaya | Rent | 18000 |
| Appartment | Moscow | 36 | Hamovniki | Sportivnaya | Rent | 15000 |
+————+———+————+————+————-+————+——-+
3 rows in set (0.00 sec)
Шаблоны в запросах на выборку данных
Выборка из таблиц MySQL часто требует не точного совпадения, а совпадения по определенной маске
Поиск частичного совпадения производится SELECT запросом с оператором LIKE
SELECT * FROM REAL_ESTATE WHERE street LIKE ‘B%’;
+————+————-+————+————-+————+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+————-+————+————-+————+————+——-+
| Appartment | Novosibirsk | 33 | Oktabriskiy | Belinskogo | Rent | 17000 |
| Appartment | Moscow | 42 | Himki | Bolshaya | Rent | 18000 |
+————+————-+————+————-+————+————+——-+
2 rows in set (0.00 sec)
LIKE может работать с регулярными выражениями, в качестве любого количества символов используется ‘%’, для одного произвольного символа ‘_’
SELECT * FROM REAL_ESTATE WHERE street LIKE ‘B_l_n%’;
+————+————-+————+————-+————+————+——-+
| type | city | floorspace | district | street | rentorsale | PRICE |
+————+————-+————+————-+————+————+——-+
| Appartment | Novosibirsk | 33 | Oktabriskiy | Belinskogo | Rent | 17000 |
+————+————-+————+————-+————+————+——-+
1 row in set (0.00 sec)
Регулярные выражения MySQL будут рассмотрены в следующем материале из цикла. Они используются не менее редко, чем шаблоны
Источник