mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
119 lines
7.4 KiB
Markdown
119 lines
7.4 KiB
Markdown
---
|
||
filename: learnsql-ru.sql
|
||
contributors:
|
||
- ["Bob DuCharme", "http://bobdc.com/"]
|
||
translators:
|
||
- ["Shaltaev", "https://github.com/shaltaev"]
|
||
- ["Andre Polykanine", "https://github.com/Menelion"]
|
||
---
|
||
|
||
Язык структурированных запросов (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;
|
||
```
|