+--------------------------+
|.------------------------.|
|| kee_reel@blog:~$ cd    ||
|| си python терминал     ||
|| opengl sql             ||
||                        ||
||                обо_мне ||
|.------------------------.|
+-::--------------------::-+
.--------------------------.
 // /ooooooooooooooooooooo\\ \\ 
 // /ooooooooooooooooooooooo\\ \\ 
//------------------------------\\
\\------------------------------//

SQL. Основы и установка окружения

Привет, в этой статье я расскажу что такое SQL, и зачем он нужен и как его применять.


Наверно не стоит объяснять, что вся наша цивилизация держится на информации – чем больше больше у тебя ценной информации, тем больше у тебя возможноcтей.

Данные, данные повсюду...

Скорее всего, ты хранишь и используешь для личных нужд небольшие объёмы структурированной информации – пара списков “TO DO” здесь, пара документов с идеями там – её объёмы не выходят за несколько гигабайт.

Но что, если тебе понадобится хранить номера и описание всех автомобилей, которые проезжали мимо тебя, или персональные данные всех клиентов крупного банка?

При этом, ты должен будешь периодически искать во всей этой информации определённые записи – например номера всех красных автомобилей Honda или всех клиентов банка с доходом от 100 тысяч рублей.

Тут уже объём информации становится таким, что ты физически не сможешь просмотреть все записи за адекватные сроки.

Что же делать, если у тебя возникла такая ситуация?

SQL, база данных и запросы в неё

SQL, Structured Query Language – это язык, на котором можно описать запрос в базу данных.

База данных – это коллекция определённых данных, хранящаяся в электронном виде. Представь что это просто файл с хитрой внутренней структурой.

Запрос – это описание действия, которое надо совершить над данными. В основном эти действия связаны с получением, добавлением, изменением или удалением данных.

Я уже приводил выше пример запроса: “найти номера всех красных автомобилей Honda”.

Такой запрос определяет:

  • Какие данные мы хотим получить: “номера”
  • И определяет дополнительные свойства, которые должны быть связаны с этими данными: “красные” и “Honda”

В результате такого запроса мы получим номера всех автомобилей обладающих двумя свойствами: “красные” и “Honda”.

Сейчас я напишу точно такой же запрос, но на SQL. К нашему счастью, SQL это декларативный язык – это значит, что мы описываем результат, и получаем его, не заморачиваясь техническими деталями реализации. Вот так он выглядит:

SELECT plate_number FROM cars WHERE color="red" AND brand="Honda";

Результат такого запроса:

plate_numer
Е 100 ЕЕ
А 781 ХА

Сейчас я переведу этот запрос на русский, чтобы стало супер-понятно:

SQL Русский
SELECT сделать выборку по
plate_number номеру
FROM из
cars таблицы “машины”
WHERE где
color=”red” цвет=”красный”
AND и
brand=”Honda” бренд=”Honda”
; точка с запятой всегда в конце запроса

Вроде всё понятно, но не понятно что такое таблица cars и откуда вообще взялись color и brand – они сами что-ли выставляются?

Таблицы и их создание

Таблица – это основной элемент хранения структурированных данных в базе данных. В одной базе данных может храниться множество таблиц. Вот пример создания таблицы:

CREATE TABLE "cars" (
	"plate_number"	TEXT,
	"color"		TEXT,
	"brand"		TEXT,
	"times_seen"	INTEGER DEFAULT 0,
	PRIMARY KEY("plate_number")
);

Здесь мы создаём таблицу с названием “cars” и перечисляем поля этой таблицы:

  • plate_number – номер автомобиля
  • color – его цвет
  • brand – его марка
  • times_seen – количество раз, которое мы его видели

Также в конце мы указываем “PRIMARY KEY” – поле, значения которого должны быть уникальны во всей таблице. Это необходимо для того, чтобы база данных ругалась, если мы попытаемся добавить машину с номером, который уже существует в базе – это помогает избежать дублирования записей.

Поле – это колонка в таблице. Она описывает одно из свойств данных, содержащихся в таблице – например цвет машины.

Окей, так мы создали таблицу, а до этого мы запрашивали данные из неё через SELECT. А как эти данные там оказались?

Добавление записей в таблицу

Запись – это строчка в таблице. Запись состоит из набора полей – например это одна запись из таблицы cars:

plate_number color brand times_seen
Е 100 ЕЕ red Honda 4

Чтобы добавить новую запись в таблицу, нужно написать такой запрос:

INSERT INTO cars(plate_number, color, brand, times_seen) VALUES("Х 777 ХХ", "green", "Nisan", 1);

Если все поля в VALUES указываются в том же порядке, в котором они описаны в таблице, то можно не прописывать сами поля:

INSERT INTO cars VALUES("Х 777 ХХ", "green", "Nissan", 1);

Но это добавление новых записей – после добавления ты наверняка будешь их как-то изменять.

Изменение записей в таблице

Чтобы изменить существующую запись надо написать такой запрос:

UPDATE cars SET brand = "Nissan" WHERE plate_number = "Х 777 ХХ";

Ещё ты можешь прямо при обновлении опираться на существующие значения полей – например так я могу увеличить на 1 текущее значения поля times_seen:

UPDATE cars SET times_seen = times_seen + 1 WHERE plate_number = "Х 777 ХХ";

Так… осталось только изучить удаление, и ты изучишь все основные виды SQL запросов.

Удаление записей из таблицы

Чтобы удалить какую-то запись из таблицы надо написать такой запрос:

DELETE FROM cars WHERE plate_number = "Х 777 ХХ";

Ты можешь удалять не только конкретные записи по уникальному полю, но и сразу множество записей по какому-то значению в определённом поле (так же относится к SELECT и UPDATE):

DELETE FROM cars WHERE color = "green";

СУБД

Сама база данных является просто файлом с хитрой структурой, и чтобы с нем работать нужна специальная программа – СУБД.

СУБД – система управления базой данных. Её ты как раз и скармливаешь свои запросы на SQL, а она тебя понимает и что-то изменяет в самом файле базы данных.

Есть два основных типа СУБД:

  • Клиент-серверные – серверное приложение, работающее с файлом базы данных, к которому через интернет подключаются пользователи
    • MySQL
    • PostgreSQL
    • Firebird
  • Встраиваемые – библиотека, встроенная в клиентское приложение, которая предоставляет возможности работы с файлом базы данных прямо на устройстве пользователя
    • SQLite
    • Firebird Embedded
    • eXtremeDB

Кроме отличий в функциональности и реализации, в различных СУБД могут отличаться некоторые конструкции языка SQL. Но в целом, изучив SQL один раз, можно без затруднений переходить между различными СУБД.

Тема выбора конкретной СУБД довольно сложная и её мы касаться пока не будем. В будущих статьях я подробнее расскажу об этом.

В рамках этой статьи мы попробуем поработать со встраиваемой СУБД SQLite. Сделаем это мы через программу SQLiteBrowser, в которую встроена СУБД SQLite, и которая предоставляет достаточно удобный пользовательский интерфейс для управления базой данных.

Скачай и установи её для своей операционной системы: sqlitebrowser.org/dl.

SQLite

Запусти SQLiteBrowser, и выбери пункт “New Database” в левом верхнем углу интерфейса. После выбора места, где ты создашь файл базы данных, у тебя появится окно для создания первой таблицы в твоей базе данных… Закрой его! :)

Нам не нужны какие-то окошки – мы сами уже почти умеем в SQL, надо только попрактиковаться. Открой вкладку “Execute SQL”.

В этой вкладке ты можешь исполнять любые SQL запросы, и они будут применяться к твоему файлу базы данных.

Перепиши SQL запрос на создание таблицы, который я приводил выше. После этого нажми комбинацию Ctrl+R (или вон тот синий треугольничек), и твой запрос исполнится.

Зайди во вкладку “Browse Data” – там ты увидишь свою новосозданную таблицу.

Попробуй:

  • Добавить новые записи в эту таблицу
  • Изменить существующую запись
  • Удалить какую-то запись

После каждой операции ты можешь заглядывать в “Browse Data”, чтобы проверить что происходит.

SQLiteBrowser не записывает изменения сразу в файл, а сохраняет их в оперативной памяти. Чтобы применить изменения, тебе надо нажать Ctrl+S (или “Write Changes” в верхней части окна).

Заключение

Из этой статьи ты узнал:

  • SQL
  • База данных
  • Запросы
    • SELECT
    • CREATE TABLE
    • UPDATE
    • DELETE
  • Таблица
  • Поле
  • Запись
  • СУБД
  • Как работать с SQLite

Мне кажется, что это очень супер много полезной информации на сегодня, ты супер!

В следующих статьях я покажу примеры более сложных запросов, которые учитывают данные сразу из нескольких таблиц (JOIN).