summaryrefslogtreecommitdiffhomepage
path: root/ru-ru/sql-ru.html.markdown
blob: 717f3a108adc9d39e0287832880b54500fbb506d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
---
language: SQL
filename: learnsql-ru.sql
contributors:
  - ["Bob DuCharme", "http://bobdc.com/"]
translators:
  - ["Shaltaev", "https://github.com/shaltaev"]
  - ["Andre Polykanine", "https://github.com/Menelion"]
lang: ru-ru
---

Язык структурированных запросов (SQL) — это стандартный язык ISO для создания
и работы с базами данных, хранящимися в наборе таблиц. Реализации обычно
добавляют свои собственные расширения к языку;
[Сравнение различных реализаций SQL](http://troels.arvin.dk/db/rdbms/) — хороший справочник по различиям в продуктах.

Реализации обычно предоставляют приглашение командной строки, где вы можете
вводить команды, описанные ниже, в интерактивном режиме, также есть способ
выполнить серию таких команд, сохранённых в файле скрипта.
(Результат того, что вы сделали с помощью интерактивного режима, является
хорошим примером того, что не стандартизировано, — большинство реализаций SQL
поддерживают ключевые слова QUIT, EXIT или оба).

Некоторые команды ниже предполагают использование
[демонстрационного образца базы данных сотрудников от MySQL](https://dev.mysql.com/doc/employee/en/), доступного на [GitHub](https://github.com/datacharmer/test_db).
Следовательно, для повторения команд в локальном окружении он должен быть загружен.
Файлы на GitHub — это скрипты с командами, схожие с командами ниже,
которые создают и манипулируют таблицами и данными о сотрудниках вымышленной
компании. Синтаксис для запуска этих скриптов будет зависеть от используемой
вами реализации SQL. Обычно используется утилита, запускаемая из командной
строки в вашей операционной системе.

```sql
-- Комментарии начинаются с двух дефисов. Завершайте каждую команду
-- точкой с запятой.

-- SQL не учитывает регистр букв для ключевых слов. Примеры команд здесь
-- следуют соглашению о написании в верхнем регистре, потому что
-- это позволяет легче отличить их от имён баз, таблиц и колонок.

-- Создание и удаление базы данных. Имена базы и таблицы чувствительны
-- к регистру букв.
CREATE DATABASE someDatabase;
DROP DATABASE someDatabase;

-- Список доступных баз.
SHOW DATABASES;

-- Выбор базы для работы.
USE employees;

-- Выбрать все строки и колонки из таблицы «departments» (отделы) текущей базы.
-- В интерактивном режиме обычно результат будет выведен на экран.
SELECT * FROM departments;

-- Тот же запрос, что и выше, но выбор только колонок «dept_no» и «dept_name».
-- Разбиение команд на несколько строк допустимо.
SELECT dept_no,
       dept_name FROM departments;

-- В данном случае будут выбраны все колонки, но только первые 5 строк.
SELECT * FROM departments LIMIT 5;

-- Выбор названий отделов, содержащих подстроку «en».
SELECT dept_name FROM departments WHERE dept_name LIKE '%en%';

-- Выбор всех колонок, где названия отделов начинаются на «S»,
-- после которой идёт ровно четыре символа.
SELECT * FROM departments WHERE dept_name LIKE 'S____';

-- Выбор всех должностей из таблицы «titles», но без повторений.
SELECT DISTINCT title FROM titles;

-- В дополнение к предыдущему запросу результат будет отсортирован
-- в алфавитном порядке (с учётом регистра).
SELECT DISTINCT title FROM titles ORDER BY title;

-- Показать число строк в таблице отделов.
SELECT COUNT(*) FROM departments;

-- Показать число строк, где название отдела содержит подстроку «en»
SELECT COUNT(*) FROM departments WHERE dept_name LIKE '%en%';

-- Объединение информации из нескольких таблиц:
-- В таблице «titles» перечислены должности, кто их занимал по номеру сотрудника,
-- а также с какой даты по какую. Получим эту информацию, но используем номера
-- сотрудников как ссылку на таблицу «employees», чтобы получить имя и фамилию
-- каждого сотрудника. Выводим только 10 строк.
SELECT employees.first_name, employees.last_name,
       titles.title, titles.from_date, titles.to_date
FROM titles INNER JOIN employees ON
       employees.emp_no = titles.emp_no LIMIT 10;

-- Список всех таблиц во всех базах. Реализации обычно предоставляют
-- собственные сокращения, чтобы показать все таблицы текущей базы.
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE';

-- Создать таблицу с именем tablename1 и двумя колонками в текущей базе.
-- Для колонок имеется множество параметров, таких как тип данных.
CREATE TABLE tablename1 (fname VARCHAR(20), lname VARCHAR(20));

-- Вставляем строку данных в таблицу «tablename1». Предполагаем, что таблица
-- настроена таким образом, чтобы принимать эти значения.
INSERT INTO tablename1 VALUES('Richard','Mutt');

-- В таблице «tablename1» изменить значение fname на «John»
-- для каждой строки, где колонка lname равна «Mutt».
UPDATE tablename1 SET fname='John' WHERE lname='Mutt';

-- Удалить из таблицы «tablename1» строки,
-- где значение колонки lname начинается с «M».
DELETE FROM tablename1 WHERE lname like 'M%';

-- Удалить все строки из таблицы «tablename1». В итоге получим пустую таблицу.
DELETE FROM tablename1;

-- Удалить таблицу «tablename1» полностью.
DROP TABLE tablename1;
```