Практические и лабораторные работы по дисциплине "Клиент-серверные системы управления банком данных"
Подробнее о типах данных в SQL можно посмотреть здесь.
Создание базы данных
CREATE DATABASE db1;Создание таблицы
CREATE TABLE users(
user_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(200),
num_friends INT,
PRIMARY KEY(user_id));Добавление столбцов в таблицу
ALTER TABLE table_name
ADD column_name datatype;INSERT INTO users (user_id, name, num_friends) VALUES (0, 'Hero', 0)Оператор INSERT INTO SELECT копирует данные из одной таблицы и вставляет ее в другую таблицу. INSERT INTO SELECT требует, чтобы типы данных в исходной и целевой таблицах соответствовали.
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;UPDATE users
SET phone = '+ 7 (777) 000 000 00', email = 'mail@yan.com'
WHERE user_id = 1;Изменить тип данных столбца в таблице можно так
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;или так
ALTER TABLE table_name
ALTER COLUMN column_name datatype;Удаление базы данных
DROP DATABASE databasename;Удаление таблицы
DROP TABLE table_name;Оператор TRUNCATE TABLE используется для удаления данных внутри таблицы, но не самой таблицы.
TRUNCATE TABLE table_name;Удаление столбцов из таблицы
ALTER TABLE table_name
DROP COLUMN column_name;Выбрать все столбцы таблицы
SELECT * FROM users;Выбрать определённые колонки из таблицы
/* Это многострочный
комментарий */
SELECT name, fullname FROM users;Выбрать определённые колонки из таблицы без дублирования
-- Это однострочный комментарий
SELECT DISTINCT column1, column2
FROM table_name;Выборка в соответствии с условием прописанного в операторе WHERE
SELECT * FROM users
WHERE name != 'Том';Несколько вариантов выбора первых 3 записей таблицы
SELECT TOP 3 * FROM users;SELECT * FROM users
LIMIT 3;SELECT * FROM users
WHERE ROWNUM <= 3;Выборка первой четверти записей в таблице
SELECT TOP 25 PERCENT * FROM users;Пример объединения запросов
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;Чтобы разрешить повторяющиеся значения, используйте UNION ALL.
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;Пример использования опратора HAVING для работы с агрегаторными функциями
SELECT COUNT(user_id), country
FROM users
GROUP BY country
HAVING COUNT(user_id) > 7;Оператор EXISTS используется для проверки существования любой записи в подзапросе. Если подзапрос возвращает одну или несколько записей, то возвращается true.
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);Оператор SELECT INTO копирует данные из одной таблицы в новую таблицу.
SELECT *
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;Сортировка выборки. ASC - по возрастанию, DESC - по убыванию.
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;Все счета с информацией о пользователях и отправителях
SELECT invoice.invoice, users.name, addresser.name
FROM ((invoice
INNER JOIN users ON invoice.user_id = users.user_id)
INNER JOIN addresser ON invoice.addresser_id = addresser.addresser_id);Все пользователи и любые заказы, которые они могут иметь.
SELECT users.name, invoice.invoice_id
FROM users
LEFT JOIN invoice ON users.user_id = invoice.user_id
ORDER BY users.name;Тоже самое, только другим способом
SELECT invoice.invoice_id, users.name, users.fullname
FROM invoice
RIGHT JOIN users ON invoice.user_id = users.user_id
ORDER BY invoice.invoice_id;Все пользователи и все заказы.
SELECT users.name, invoice.invoice_id
FROM users
FULL OUTER JOIN invoice ON users.user_id = invoice.user_id
ORDER BY users.name;Следующий оператор SQL соответствует пользователям из одного города (self JOIN).
SELECT A.name AS name1, B.name AS name2, A.city
FROM users A, users B
WHERE A.user_id <> B.user_id
AND A.city = B.city
ORDER BY A.city;SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);Количество пользователей в каждой стране
SELECT COUNT(use_id), country
FROM users
GROUP BY country;Количество заказов отправленных каждой службой доставки
SELECT delivery.name, COUNT(invoice.delivery_id) AS orders FROM invoice
LEFT JOIN delivery ON invoice.delivery_id = delivery.delivery_id
GROUP BY name;PRIMARY KEY однозначно идентифицирует каждую запись в таблице базы данных. Первичные ключи должны содержать UNIQUE значения и не могут содержать значения NULL.
В таблице может быть только один первичный ключ, который может состоять из одного или нескольких полей.
CREATE TABLE users (
user_id int NOT NULL,
name varchar(255) NOT NULL,
fullname varchar(255),
gender int,
PRIMARY KEY (user_id)
);FOREIGN KEY - это ключ, используемый для соединения двух таблиц вместе. Является полем (или набором полей) в одной таблице, которое ссылается на PRIMARY KEY в другой таблице.
Таблица, содержащая внешний ключ, называется дочерней таблицей, а таблица, содержащая ключ-кандидат, называется ссылочной или родительской таблицей.
CREATE TABLE invoice (
invoice_id int NOT NULL,
number int NOT NULL,
user_id int,
PRIMARY KEY (invoice_id),
CONSTRAINT FK_UserInvoice FOREIGN KEY (user_id)
REFERENCES Users(user_id)
);Чтобы создать ограничение FOREIGN KEY в столбце «user_id», когда таблица «invoice» уже создана, используйте следующее:
ALTER TABLE invoice
ADD FOREIGN KEY (user_id) REFERENCES Users(user_id);| Оператор | Описание |
|---|---|
| ALL | Если все значения подзапроса являются TRUE |
| AND | Если все условия, разделенные И, являются TRUE |
| ANY | Если какое-либо из значений подзапроса соответствует TRUE условию |
| BETWEEN | Если операнд находится в диапазоне сравнения |
| EXISTS | Если подзапрос возвращает одну или несколько записей |
| IN | Если операнд равен одному из списка выражений |
| LIKE | Если операнд соответствует шаблону |
| NOT | Отображает запись, если условие (И) НЕ TRUE |
| OR | Если любое из условий, разделенных OR, является TRUE. |
| SOME | Если какое-либо из значений подзапроса соответствует условию |
SQL имеет множество встроенных функций: строковые, числовые, даты и расширенные функции. Подробнее почитать о них можно здесь.
- https://tproger.ru/translations/sql-recap
- Грас Джоэл. "Data Science. Наука о данных с нуля".
- https://stepik.org/course/551
- https://unetway.com/tutorial/sql
- https://office-menu.ru/uroki-sql/51-normalizatsiya-bazy-dannykh

