👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886801940176

👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔

ГАЙД ПО БАЗЕ SQL, – ОСНОВЫ!
🎀 👔 🎀 👔 🎀 👔 🎀 👔🎀 👔🎀 👔🎀 👔
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🌵ОСНОВНЫЕ КОМАНДЫ ДЛЯ РАБОТЫ С SQL!
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
➡ Просмотр доступных баз данных:
SHOW DATABASES;
➡ Создание новой базы данных:
CREATE DATABASE;
➡ Выбор базы данных для использования:
USE database_name;
➡ Импорт SQL-команд из файла *.sql:
SOURCE path_of_.sql_file;
➡ Удаление базы данных:
DROP DATABASE database_name;
➡ Просмотр таблиц, доступных в базе данных:
SHOW TABLES;

👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886801541072
➖➖➖➖➖➖➖➖➖➖➖➖➖
🌵ОГРАНИЧЕНИЕ ЦЕЛОСТНОСТИ!
➖➖➖➖➖➖➖➖➖➖➖➖➖

➡ При использовании CREATE TABLE может понадобиться создать ограничения для определённых столбцов в таблице. При создании таблицы можно задать следующие ограничения:

🔻Ячейка таблицы не может иметь значение NULL
🔻Первичный ключ — PRIMARY KEY (col_name1, col_name2, …)
🔻Внешний ключ — FOREIGN KEY (col_namex1, …, col_namexn) REFERENCES table_name(col_namex1, …, col_namexn)

➡ Можно задать больше одного первичного ключа. В этом случае получится составной первичный ключ. Пример, создаем таблицу «instructor»:

CREATE TABLE instructor (
  ID CHAR(5),
  name VARCHAR(20) NOT NULL,
  dept_name VARCHAR(20),
  salary NUMERIC(8,2),
  PRIMARY KEY(ID),
  FOREIGN KEY(dept_name) REFERENCES department(dept_name)
);

➡ Важно понимать то, что первичные ключи(PRIMARY KEY) указывают на свойство для столбца, данные в ячейках которого всегда будут являться уникальным. Это разработано специально во избежание дубликации данных.

➖➖➖➖➖➖➖➖➖➖➖➖➖
🌵ВНЕШНИЕ КЛЮЧИ FOREIGN KEY!
➖➖➖➖➖➖➖➖➖➖➖➖➖

➡ Внешние ключи(FOREIGN KEY) позволяют установить связи между таблицами. Такой ключ устанавливается для столбцов из зависимой, подчиненной таблицы, и указывает на один из столбцов в главной таблице.

➡ Общий синтаксис установки внешнего ключа на уровне таблицы:

[CONSTRAINT имя_ограничения]
FOREIGN KEY (столбец1, столбец2, ..., столбецN)
REFERENCES главная_таблица (столбец_главной_таблицы1, столбец_главной_таблицы2, ..., столбец_главной_таблицыN)
[ON DELETE действие]
[ON UPDATE действие]

🔻Для создания ограничения внешнего ключа: после FOREIGN KEY указывается столбец таблицы, который будет представляет внешний ключ. А после ключевого слова REFERENCES указывается имя связанной таблицы, а затем в скобках имя связанного столбца, на который будет указывать внешний ключ.

🔻После выражения REFERENCES идут выражения ON DELETE и ON UPDATE, которые задают действие при удалении и обновлении строки из главной таблицы соответственно.

➡ Например, определим две таблицы и свяжем их посредством внешнего ключа:

CREATE TABLE Customers
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Age INT,
FirstName VARCHAR(20) NOT NULL,
LastName VARCHAR(20) NOT NULL,
Phone VARCHAR(20) NOT NULL UNIQUE
);

CREATE TABLE Orders
(
Id INT PRIMARY KEY AUTO_INCREMENT,
CustomerId INT,
CreatedAt Date,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id)
);

🔻В данном случае определены таблицы Customers и Orders. Customers является главной и представляет клиента. Orders является зависимой и представляет заказ, сделанный клиентом. Таблица Orders через столбец CustomerId связана с таблицей Customers и ее столбцом Id. И получается что столбец CustomerId является внешним ключом, который указывает на столбец Id из таблицы Customers.

➡ С помощью оператора CONSTRAINT можно задать имя для ограничения внешнего ключа:

CREATE TABLE Orders
(
Id INT PRIMARY KEY AUTO_INCREMENT,
CustomerId INT,
CreatedAt Date,
CONSTRAINT orders_custonmers_fk
FOREIGN KEY (CustomerId) REFERENCES Customers (Id)
);

➡ С помощью выражений ON DELETE и ON UPDATE можно установить действия, которые выполняются соответственно при удалении и изменении связанной строки из главной таблицы. В качестве действия могут использоваться следующие опции:

🔻CASCADE: автоматически удаляет или изменяет строки из зависимой таблицы при удалении или изменении связанных строк в главной таблице.
🔻SET NULL: при удалении или обновлении связанной строки из главной таблицы устанавливает для столбца внешнего ключа значение NULL. (В этом случае столбец внешнего ключа должен поддерживать установку NULL)
🔻RESTRICT: отклоняет удаление или изменение строк в главной таблице при наличии связанных строк в зависимой таблице.
🔻NO ACTION: то же самое, что и RESTRICT.
🔻SET DEFAULT: при удалении связанной строки из главной таблицы устанавливает для столбца внешнего ключа значение по умолчанию, которое задается с помощью атрибуты DEFAULT. Несмотря на то, что данная опция в принципе доступна, однако движок InnoDB не поддерживает данное выражение.

➡ Каскадное удаление позволяет при удалении строки из главной таблицы автоматически удалить все связанные строки из зависимой таблицы. Для этого применяется опция CASCADE:

CREATE TABLE Orders
(
Id INT PRIMARY KEY AUTO_INCREMENT,
CustomerId INT,
CreatedAt Date,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE CASCADE
);

🔻Подобным образом работает и выражение ON UPDATE CASCADE. При изменении значения первичного ключа автоматически изменится значение связанного с ним внешнего ключа. Однако поскольку первичные ключи изменяются очень редко, да и с принципе не рекомендуется использовать в качестве первичных ключей столбцы с изменяемыми значениями, то на практике выражение ON UPDATE используется редко.

➡ При установки для внешнего ключа опции SET NULL необходимо, чтобы столбец внешнего ключа допускал значение NULL.

CREATE TABLE Orders
(
Id INT PRIMARY KEY AUTO_INCREMENT,
CustomerId INT,
CreatedAt Date,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE SET NULL
);

➖➖➖➖➖➖➖➖➖➖
🌵СВЕДЕНЬЯ О ТАБЛИЦЕ!
➖➖➖➖➖➖➖➖➖➖

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

DESCRIBE table_name;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886805101520
➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🌵ДОБАВЛЕНИЕ ДАННЫХ В ТАБЛИЦУ!
➖➖➖➖➖➖➖➖➖➖➖➖➖➖

➡ Теперь давайте добавим пару месяцев в нашу табличку. Сделать это можно с помощью команды INSERT. Есть два разных способа использовать INSERT:
Первый способ не подразумевает указания названий колонок, а лишь принимает значения в том порядке, в котором они указаны в таблице.

INSERT INTO months VALUES (1,'January',31);

🔻 I-й способ короче второго, однако если в будущем мы захотим добавить дополнительные колонки, все предыдущие запросы работать не будут. Для решения данной проблемы следует использовать второй способ. Его суть в том, что перед вводом данных мы указываем названия колонок.

INSERT INTO months (id,name,days) VALUES (2,'February',29);

🔻 В случае, если мы не укажем одну из колонок, на её место будет записано NULL или заданное значение по умолчанию, но это уже совсем другая история.

➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🌵ОБНОВЛЕНИЕ ДАННЫХ В ТАБЛИЦЕ!
➖➖➖➖➖➖➖➖➖➖➖➖➖➖

➡ Зачастую нам нужно изменить данные в таблице. В SQL это делается с помощью UPDATE. Использование UPDATE включает в себя:


🔻 выбор таблицы, в которой находится поле, которое мы хотим изменить запись нового значения использование WHERE, чтобы обозначить конкретное место в таблице

➡ Предположим, у нас есть таблица с самыми высоко-оценёнными сериалами всех времён. Однако у нас есть проблема: «Игра Престолов» обозначена как комедия и нам определённо нужно это изменить:

UPDATE tv_series
SET genre = 'drama'
WHERE name = 'Game of Thrones';

➖➖➖➖➖➖➖➖➖➖➖➖➖
🌵УДАЛЕНИЕ ЗАПИСИ ИЗ ТАБЛИЦЫ!
➖➖➖➖➖➖➖➖➖➖➖➖➖

➡ Удаление записи из таблицы через SQL — очень простая операция. Всё, что нужно — это обозначить, что именно мы хотим удалить.

DELETE FROM tv_series
WHERE id = 4;

🔻 убедитесь, что используете WHERE, когда удаляете запись из таблицы. Иначе вы удалите все записи из таблицы, сами того не желая.

➖➖➖➖➖➖➖➖
🌵УДАЛЕНИЕ ТАБЛИЦ!
➖➖➖➖➖➖➖➖

➡ Если мы хотим удалить все данные из таблицы, но при этом оставить саму таблицу, нам следует использовать команду TRUNCATE:

TRUNCATE TABLE table_name;

➡ В случае, если мы хотим удалить саму таблицу, то нам следует использовать команду DROP:

DROP TABLE table_name;

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
🌵ВВОД ДАННЫХ. КОМАНДЫ ДЛЯ СОЗДАНИЯ ЗАПРОСОВ!
➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

💟💟💟 КОМАНДА SELECT

➡ Данный запрос используется в случае, если нам нужно показать данные в таблице. Наверное, самым простым примером использования SELECT будет следующий запрос:

SELECT * FROM characters;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886805640144
➡ Результатом данного запроса будет таблица со всеми данными в таблице characters. Знак звёздочки (*) означает то, что мы хотим показать все столбцы из таблицы без исключений. Так как в базе данных обычно больше одной таблицы, нам необходимо указывать название таблицы, данные из которой мы хотим посмотреть. Сделать это мы можем, используя ключевое слово FROM.

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

SELECT name, weapon
FROM characters;

💟💟💟 КОМАНДА SELECT DISTINCT

➡ В столбцах таблицы могут содержаться повторяющиеся данные. Используйте SELECT DISTINCT для получения только неповторяющихся данных.

SELECT DISTINCT name, weapon
FROM table_name;

💟💟💟 КОМАНДА WHERE

➡ Можно использовать ключевое слово WHERE в SELECT для указания условий в запросе. В запросе можно задавать следующие условия:

🔻 сравнение текста
🔻 сравнение численных значений
🔻 логические операции AND (и), OR (или) и NOT (отрицание)

SELECT * FROM course
WHERE dept_name = 'Comp. Sci.';

SELECT * FROM course
WHERE credits > 3;

SELECT * FROM course
WHERE dept_name = 'Comp. Sci.' AND credits > 3;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886805870288
💟💟💟 КОМАНДА GROUP BY

➡ Оператор GROUP BY часто используется с агрегатными функциями, такими как COUNT, MAX, MIN, SUM и AVG, для группировки выходных значений. Выведем количество курсов для каждого факультета:

SELECT COUNT(course_id), dept_name
FROM course
GROUP BY dept_name;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806223056
💟💟💟 КОМАНДА HAVING

➡ Ключевое слово HAVING было добавлено в SQL потому, что WHERE не может быть использовано для работы с агрегатными функциями. Выведем список факультетов, у которых более одного курса:

SELECT COUNT(course_id), dept_name
FROM course
GROUP BY dept_name
HAVING COUNT(course_id)>1;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806266320
💟💟💟 КОМАНДА ORDER BY

➡ ORDER BY используется для сортировки результатов запроса по убыванию или возрастанию. ORDER BY отсортирует по возрастанию, если не будет указан способ сортировки ASC или DESC. Выведем список курсов по возрастанию и убыванию количества кредитов:

SELECT * FROM course
ORDER BY credits;

SELECT * FROM course
ORDER BY credits DESC;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806277584
💟💟💟 КОМАНДА BETWEEN

➡ BETWEEN используется для выбора значений данных из определённого промежутка. Могут быть использованы числовые и текстовые значения, а также даты. Выведем список инструкторов, чья зарплата больше 50 000, но меньше 100 000:

SELECT * FROM instructor
WHERE salary BETWEEN 50000 AND 100000;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806292432
💟💟💟 КОМАНДА LIKE

➡ Оператор LIKE используется в WHERE, чтобы задать шаблон поиска похожего значения. Есть два свободных оператора, которые используются в LIKE:

🔻 % (ни одного, один или несколько символов)
🔻 _ (один символ)

➡ Выведем список курсов, в имени которых содержится «to», и список курсов, название которых начинается с «CS-»:

SELECT * FROM course
WHERE title LIKE ‘%to%’;

SELECT * FROM course
WHERE course_id
LIKE 'CS-___';
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806329552
💟💟💟 КОМАНДА IN

➡ С помощью IN можно указать несколько значений для оператора WHERE. Выведем список студентов с направлений Comp. Sci., Physics и Elec. Eng.:

SELECT * FROM student
WHERE dept_name IN (‘Comp. Sci.’, ‘Physics’, ‘Elec. Eng.’);
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806355920
💟💟💟 КОМАНДА JOIN

➡ JOIN используется для связи двух или более таблиц с помощью общих атрибутов внутри них. На изображении ниже показаны различные способы объединения в SQL. Обратите внимание на разницу между левым внешним объединением и правым внешним объединением:
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806390736
1⃣ Выведем список всех курсов и соответствующую информацию о факультетах:


SELECT * FROM course
JOIN department
ON course.dept_name=department.dept_name;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806750416
2⃣ Выведем список всех обязательных курсов и детали о них:

SELECT prereq.course_id, title, dept_name, credits, prereq_id
FROM prereq
LEFT OUTER JOIN course
ON prereq.course_id=course.course_id;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806768336
3⃣ Выведем список всех курсов вне зависимости от того, обязательны они или нет:

SELECT course.course_id, title, dept_name, credits, prereq_id
FROM prereq
RIGHT OUTER JOIN course
ON prereq.course_id=course.course_id;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806780368
💟💟💟 КОМАНДА VIEW

➡ View — это виртуальная таблица SQL, созданная в результате выполнения выражения. Она содержит строки и столбцы и очень похожа на обычную SQL-таблицу. View всегда показывает самую свежую информацию из базы данных.

🔻 Создание:

CREATE VIEW view_name AS
SELECT col_name1, col_name2, …,
FROM table_name
WHERE condition;

🔻 Удаление:

DROP VIEW view_name;

➡ Создадим view, состоящую из курсов с 3 кредитами:

CREATE VIEW my_view
AS SELECT *
FROM course
WHERE credits = 3;
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806813136
💟💟💟 AGGREGATE FUNCT

➡ Эти функции используются для получения совокупного результата, относящегося к рассматриваемым данным. Ниже приведены общеупотребительные агрегированные функции:

🔻 COUNT (col_name) — возвращает количество строк
🔻 SUM (col_name) — возвращает сумму значений в данном столбце
🔻 AVG (col_name) — возвращает среднее значение данного столбца
🔻 MIN (col_name) — возвращает наименьшее значение данного столбца
🔻 MAX (col_name) — возвращает наибольшее значение данного столбца

💟💟💟 КОМАНДА AS

➡ Если вы взгляните на предыдущий пример, то вы заметите, что есть два столбца, названных одинаково: «name». Часто это может запутать. Решением данной проблемы являются псевдонимы. Они, к слову, помогают сделать название столбца красивее или понятнее в случае необходимости. Чтобы присвоить столбцу псевдоним, можно использовать ключевое слово AS:

SELECT
games.name, games.genre, devs.name AS developer, devs.country
FROM video_games AS games
INNER JOIN game_developers AS devs
ON games.developer_id =
devs.id;

💟💟💟 ВЛОЖЕННЫЕ ПОДЗАПРОСЫ

➡ Вложенные подзапросы — это SQL-запросы, которые включают выражения SELECT, FROM и WHERE, вложенные в другой запрос. Найдём курсы, которые преподавались осенью 2009 и весной 2010 годов:

SELECT DISTINCT course_id
FROM section
WHERE semester = ‘Fall’ AND year= 2009 AND course_id IN
(
 SELECT course_id
 FROM section
 WHERE semester = ‘Spring’ AND year= 2010
);
👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔🎀👔 - 886806869712

Комментарии

Комментариев нет.