Простые запросы MySQL

Эта заметка может оказаться полезной для тех, кто только начинает пользоваться СУБД MySQL.
Всё бывает в первый раз. Например, вы устроились на работу, или захотели работать в проекте, где используется эта система.

Читать подробные мануалы, конечно, полезно. Но отдача от чтения будет выше, если человек хотя бы в общих чертах будет представлять с чем имеет дело. Если он уже умеет написать пару запросов или команд, и знает, что из этого получится.

Ну а с чего начать? Вот перед нами окошко консоли (линуксовой или cmd в Windows). И мы знаем, что кто-то уже установил и настроил MySQL сервер, и даже положил туда разные базы и таблицы. И даже создал вам пользователя и сообщил пароль. Посмотрим, что там есть.

Сначала подключимся к mysql-серверу, запущенному на этом компьютере, откроем сеанс, так сказать:

mysql -u username --password=passwd

Здесь usename — имя вашего пользователя, passwd — пароль. Обычно пишут в таком сочетании: -u для имени пользователя и —password= для пароля. По идее, можно делать —user=username или —ppasswd, но тогда надо помнить, что пароль пишется без пробела после ключа -p. Можно и после ключа -u не делать пробел. В общем, вариантов много.

При вводе команд помним про ; в конце, иначе MySQL выведет значок ->, требуя продолжения банкета, т.е. команды. Если вы все же поторопились и нажали Enter, можете поставить знак препинания ; и после значка -> и снова нажать Enter.

Далее посмотрим, какие базы данных у нас имеются.

show databases;

Этот запрос выведет список всех баз, доступных вашему пользователю вот в таком виде:

+-----------------+
| Database        |
+-----------------+
| db_test         |
| db_test_1       |
| db_not_test     |
+-----------------+

Выберем базу командой use db_test;. В ответ получим Database changed. Такой же командой можно сменить базу с текущей, на какую-то другую.

Выбрать базу можно сразу при открытии сеанса, добавив в конце имя базы. Это будет выглядеть так:

mysql -u username --password=passwd db_test

Узнаем, какие таблицы есть в базе. Для чего запускаем show tables;

+--------------------+
| Tables_in_db_test  |
+--------------------+
| person             |
| address            |
| interests          |
+--------------------+

Посмотрим описание таблицы — какие в ней есть поля, какого они типа, какие из полей проиндексированы (для новичков: индексация означает, что операции вроде поиска по этим полям будут быстрее). Команда desc person; выведет нам информацию. Поле Key как раз и означает индексацию.

+------------+--------------+------+-----+---------------------+----------------+
| Field      | Type         | Null | Key | Default             | Extra          |
+------------+--------------+------+-----+---------------------+----------------+
| person_no  | int(7)       |      | PRI | NULL                | auto_increment |
| name       | varchar(25)  |      |     |                     |                |
| last name  | varchar(50)  |      |     |                     |                |
| age        | int(3)       |      |     | 0                   |                |
| address_no | int(7)       |      |     | 0                   |                |
+------------+--------------+------+-----+---------------------+----------------+

Теперь мы знаем, какие поля есть в наших таблицах и можем выполнять разные запросы. Дальше наведено несколько примеров запросов с кратким пояснением: 1. Узнать количество записей в таблице

SELECT count(*) FROM table_name;

2. Выбрать все записи из таблицы

SELECT * FROM table_name;

3. Выбрать несколько записей из таблицы, например 5. Это полезно, когда надо узнать, как примерно выглядят данные в таблице.

SELECT * FROM table_name LIMIT 5;

4. Выбрать все записи из person, отсортированные в порядке возрастания номера person_no.

SELECT * FROM person ORDER BY person_no;

5. Выбрать все записи из person, отсортированные в порядке убывания номера person_no.

SELECT * FROM person ORDER BY person_no DESC;

6. Выбрать несколько (12) записей из person, отсортированные в порядке возрастания номера person_no.

SELECT * FROM person ORDER BY person_no LIMIT 12;

7. Выбрать все записи из person, где поле name равно Anna

SELECT * FROM person WHERE name='Anna';

8. Выбрать все записи из person, где поле name начинается с An

SELECT * FROM person WHERE name LIKE 'An%';

9. Выбрать все записи из person, упорядоченные по person_no, где поле name заканчивается на na

SELECT * FROM person WHERE name LIKE '%na' ORDER BY person_no;

10. Выбрать все встречающиеся пары name-last_name из таблицы.

SELECT name, last_name FROM person;

11. Выбрать все различные (уникальные) встречающиеся пары name-last_name из таблицы. Повторы будут выброшены из результатов.

SELECT DISTINCT name, last_name FROM person;

Эх, сколько всего можно спросить у MySQL 😀 Думаю, этих запросов на первый раз будет достаточно для одной таблицы. А можно делать запросы по нескольким таблицам одновременно.

Вывести все уникальные фамилии людей, живущих в городе с названием на букву L. (предполагаем, что в таблице address есть поля address_no, city).

SELECT DISTINCT last_name FROM person p, address adr WHERE p.adress_no = adr.address_no AND city LIKE 'L%';

Если у двух таблиц есть столбцы с одинаковым именем, то MySQL не может угадать, из какой именно таблицы поле нам потребовалось. Можно явно указать имя таблицы, поставив его перед именем поля и соединив их точкой (address.address_no). А можно дать таблицам имена прямо в запросе, чтобы было покороче или попонятнее, (в примере это p для person и adr для address). Выбрать нужное поле можно, указав его так же через точку после короткого имени таблицы (adr.address_no).

Оставьте ответ