Added missing files and removed unnessesary ones
This commit is contained in:
377
SQL/Databases.md
Normal file
377
SQL/Databases.md
Normal file
@ -0,0 +1,377 @@
|
||||
# Базы данных
|
||||
|
||||
## Основы
|
||||
|
||||
### Основные определения
|
||||
|
||||
*База данных* - набор структурированной информации или данных, которые хранятся в компьютерной системе
|
||||
|
||||
*СУБД* - система управления БД
|
||||
|
||||
*SQL* - основной интерфейс работы с реляционными базами данных
|
||||
|
||||
*Транзакция* - Последовательность операция над БД, рассматриваемых СУБД, как одно целое
|
||||
|
||||
### Классификация
|
||||
|
||||
* Простейшие базы двнных
|
||||
* SQL базы данных (реляционные)
|
||||
* NoSQL базы данных (нереляционные)
|
||||
* Комбинированные типы
|
||||
|
||||
### Реляционные базы данных
|
||||
|
||||
> Набор данных с предопределенными связями между ними. Эти данные организованны в виде набора таблиц, состоящих из столбцов и строк. В таблицах хранится информация об объектах, представленных в виде данных
|
||||
|
||||
### NoSQL базы данных
|
||||
|
||||
> База данных, в которой не используется табличная система строк и столбцов
|
||||
|
||||
### Основные функции
|
||||
|
||||
* Управление данными во внешней памяти
|
||||
* Управление данными в оперативной памяти
|
||||
* Управление транзакциями
|
||||
* Ведение журнала выполнения операций в базе данных
|
||||
* поддержка языков баз данных
|
||||
|
||||
### Основные БД
|
||||
|
||||
* SQL
|
||||
* Oracle (Вы любите деньги больше, чем надо)
|
||||
* Microsoft SQL Server (Вы любите деньги больше, чем надо)
|
||||
* PostgreSQL (Халява)
|
||||
* NoSQL
|
||||
* MongoDB
|
||||
* DB2
|
||||
* Cassandra
|
||||
|
||||
### Первичный и внеший ключ
|
||||
|
||||
* *Ключ* - это колонка или колонки,не имеющие дублирующих значений.
|
||||
|
||||
* *Первичный ключ* - это поле или набор полей со значением, которые являются уникальными для всей таблицы.
|
||||
|
||||
* *Естественные* являются свойствами моделируемого объекта интересными сами по себе, даже если никто не стремится сделать из них ключ
|
||||
|
||||
* *Искусственные (суррогатные)* - придуманные коды для ссылки на данные или объекты
|
||||
|
||||
* *Внешний ключ* - столбец или группа столбцов, используемых в SQL БД для связи данных между таблицами
|
||||
|
||||
### Типы связи в SQL БД
|
||||
|
||||
1. "Один к одному"
|
||||
|
||||
Образуется когда ключевой столбец присутствует в другой таблице, в которой тоже является ключом либо свойствами столбца задана его уникальность. Используется, когда нужно разделить данные одной таблицы на несколько отдельных таблиц.
|
||||
|
||||
2. "Один к многим"
|
||||
|
||||
Одной записи первой таблицы соответсвует неколько записей в другой таблие. Символ ключа связи указывает, что таблица,к которой этот конец прилегает, находится на стороне "один", а символ бесконечности находится на стороне "многие".
|
||||
3. "Многие к многим"
|
||||
|
||||
Если нескольким записям одно таблицы соответсвует несколько запясей из другой таблицы. Связь организовывается посредством связывающей таблицы.
|
||||
|
||||
### Реляционная алгебра. Операции
|
||||
|
||||
* *Проекция* - это столбец фильтра. Получаем содержимое только части столбцов.
|
||||
* *Выборка* - это фильтрование строки. Включает в себя выбор строк.
|
||||
* *Декартово произведение* - Каждому элементу из множества R сопоставлен в соответсвие определенный элемент из множества S, то возникает множество, сопоставленное из пар элементов множества R и S.
|
||||
* *Объединение* - это отношение, которое включает в себя все кортежи обоих отношений без повторов.
|
||||
* *Вычитание* - это разность односхемных отношений R и S назывется множество кортежей R, не входящих в S.
|
||||
* *Пересечение* - это пересечение двух односхемных отношений R и S есть подмножество кортежей, принадлежащих обоим отношениям. Это можно выразить через разность: R-(R-S).
|
||||
* *Соединение* - эта операция определяет подмножество декартова произведения двух разносхемных отношений. Предназначена для обеспечения выборки данных из двух таблиц и включение этих данных в один результативный набор.
|
||||
|
||||
### Нормализация и Денормализация
|
||||
|
||||
*Нормальная форма* - Свойство отношения, характеризующее его с точки зрения избыточности
|
||||
|
||||
*Нормализация* - процесс минимизации избыточности отношения(приведение к НФ)
|
||||
|
||||
*Денормализация* - намеренное приведение структуры базы данных в состояние, не соотвествующее критериям нормализации
|
||||
|
||||
## Основы синтаксиса
|
||||
|
||||
### Идентификаторы и ключевые слова
|
||||
|
||||
* *SELECT*, *UPDATE* и *VALUES* являются примерами ключевых слов, то есть слов, имеющих фиксированное значение в языке SQL
|
||||
|
||||
* Ключевые слова и идентификаторы без кавычек воспринимаются системой без учета регистра.
|
||||
|
||||
* Есть и другой тип идентификаторов: отделённые идентификаторы, или идентификаторы в ковычках
|
||||
|
||||
```sql
|
||||
UPDATE my_table SET a = 5;
|
||||
UPDATE "my_table" SET "a" = 5;
|
||||
```
|
||||
|
||||
### Константы
|
||||
|
||||
* *Строковая константа в SQL* - обычная последовательность символов, заключённая в одинарные ковычки
|
||||
|
||||
```sql
|
||||
SELECT 'foobar'
|
||||
```
|
||||
|
||||
* Ещё один способ записи строковых констант - "заключение строк в доллары".
|
||||
|
||||
```sql
|
||||
$$Жанна д Арк$$
|
||||
```
|
||||
|
||||
* Числовые константы
|
||||
|
||||
* 42
|
||||
* 3.5
|
||||
* 5e2
|
||||
* 1.925e-3
|
||||
|
||||
* Битовые константы похожи на обычные с дополнительной буквой перед опострофом, показывающих систему счисления
|
||||
|
||||
* B'1001'
|
||||
* X'1FF'
|
||||
|
||||
* Константы: Со спецпоследовательностями (начинается с буквы E перед апострофом)
|
||||
|
||||
* \b - "забой" (BackSpace)
|
||||
* \f - подача формы
|
||||
* \n - новая строка
|
||||
* \r - возврат каретки
|
||||
* \t - табуляция
|
||||
|
||||
### Операторы
|
||||
|
||||
* ^ - возведение в степень
|
||||
* IS TRUE, IS FALSE
|
||||
* ISNULL
|
||||
|
||||
### Специальные знаки (Вот вооще не операторы)
|
||||
|
||||
**Вот с#ка не забудь про ;**
|
||||
|
||||
### Коментарии
|
||||
|
||||
```sql
|
||||
-- Коментарий
|
||||
```
|
||||
|
||||
```sql
|
||||
/* многострочный
|
||||
коментарий */
|
||||
```
|
||||
|
||||
## Типы данных
|
||||
|
||||
### Числовые типы
|
||||
|
||||
* *smallint* (2 байта) - целое в небольшом диапозоне
|
||||
* *integer* (4 байта) - типичный выбор для целых чисел
|
||||
* *bigint* (8 байт) - целое в большом диапозоне
|
||||
* *numeric* / *decimal* (переменный) - десятичное с указанной точностью
|
||||
* *real* (4 байта) - десятичное с переменной точностью
|
||||
* *double precision* (8 байт) - вещественное число с переменной точностью
|
||||
* *smallserial* (2 байта) - небольшое целое с автоувелечением
|
||||
* *serial* (4 байта) - целое с автоувеличением
|
||||
* *bigserial* (8 байт) - большое целое с автоувеличением
|
||||
* *money* - два знака после запятой, денежный тип
|
||||
|
||||
### Символьные типы данных
|
||||
|
||||
* *character varing(n)* / *varchar(n)* - строка ограниченной переменной длины
|
||||
* *character(n)* / *char(n)* - строка фиксированной длины с пробелами
|
||||
* *text* - строка неограничсенной переменной длины
|
||||
|
||||
### Логический тип данных
|
||||
|
||||
* *boolean* (1 байт) - TRUE / FALSE / NULL
|
||||
|
||||
### Типы данных даты и времени
|
||||
|
||||
* *date* - дата без времени YYYY-MM-DD
|
||||
* *timestamp* - дата и время с точностью до микросекунды
|
||||
* *interval* - интервал между датами
|
||||
* *time* - время без даты. Удобный тип данных чем-то похожий на interval, который работает по модулю 24 (часа), то есть интервал, в котором отстутствуют дни
|
||||
|
||||
## DDL - Data Defintion Language
|
||||
|
||||
* CREATE - создание таблиц
|
||||
* ALTER - используется для изменения объектов БД
|
||||
* DROP - оспользуется для удаления БД
|
||||
|
||||
### Примеры
|
||||
|
||||
* Создать базу данных:
|
||||
|
||||
```sql
|
||||
CREATE DATABASE test;
|
||||
```
|
||||
|
||||
* Создать таблицу
|
||||
|
||||
```sql
|
||||
CREATE TABLE films(
|
||||
code char(5) CONSTRAINT firstkey PRIMARY KEY,
|
||||
title varchar(40) NOT NULL,
|
||||
did integer NOT NULL,
|
||||
date_prod date,
|
||||
kind varchar(10),
|
||||
len interval hour to minute
|
||||
);
|
||||
```
|
||||
|
||||
* Добавить столбец
|
||||
|
||||
```sql
|
||||
ALTER TABLE distributors ADD COLUMN adress varchar(30);
|
||||
```
|
||||
|
||||
* Удалить столбец
|
||||
|
||||
```sql
|
||||
ALTER TABLE distributors DROP COLUMN adress RESTRICT;
|
||||
```
|
||||
|
||||
* Изменить тип данных
|
||||
|
||||
```sql
|
||||
ALTER TABLE distributors
|
||||
ALTER COLUMN address TYPE varchar(80),
|
||||
ALTER COLUMN name TYPE varchar(100);
|
||||
```
|
||||
|
||||
* Создать таблицу, если нет с таким же названием:
|
||||
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS ... ;
|
||||
```
|
||||
|
||||
* Получить всё из таблицы:
|
||||
|
||||
```sql
|
||||
SELECT * FROM authors;
|
||||
```
|
||||
|
||||
* Вставить что-то в таблицу:
|
||||
|
||||
```sql
|
||||
INSERT INTO authors VALUES (1, 'Лёва Толстый');
|
||||
```
|
||||
|
||||
## Фильтрация и компоновка данных
|
||||
|
||||
### Where
|
||||
|
||||
> Для осуществления фильтрации в SQL есть специальный оператор *WHERE*
|
||||
|
||||
```sql
|
||||
SELECT * FROM stores WHERE amount > 10
|
||||
```
|
||||
|
||||
### Агрегатные функции
|
||||
|
||||
> Агрегатные функции выполняют вычисления над набром значений и возвращает 1 значение. Агрегатные функции игранируют NULL значения (кроме COUNT)
|
||||
|
||||
* *СOUNT(\*)* - находит количество строк в запросе
|
||||
* *COUNT(**expression**)* - находит количество строк в запросе, для которых **expression** не содержит значение NULL;
|
||||
* *SUM* - сумма значений выьранных столбцов
|
||||
* *MAX* - максимальное значение определённого столбца
|
||||
* *MIN* - минимальное значение определённого столбца
|
||||
* *AVG* - вычисление среднее значение столбца
|
||||
|
||||
### Группировка данных (*GROUP BY*)
|
||||
|
||||
> *GROUP BY* определяет, как строки будут группироваться, чтобы разделить их на логические наборы, благодаря чему становится возможном выполнение статических вычеслений отдельно в каждой группе
|
||||
|
||||
```sql
|
||||
SELECT age, SUM(salary) as sum FROM workers GROUP BY age;
|
||||
-- Сумма зарплат для каждого возраста
|
||||
-- *as sum* меняет название столбца на нужное нам (было бы так, как написанно (SUM(salary)))
|
||||
```
|
||||
|
||||
### Оператор *HAVING*
|
||||
|
||||
> Оператор *HAVING* позволяет определять условия выборки уже сгрупированных данных. *HAVING* применяется строго после GROUP_BY и может использовать результаты агрегатных функций
|
||||
|
||||
```sql
|
||||
SELECT model, COUNT(model) as Qty_model, AVG(price) as Avg_price
|
||||
FROM PC
|
||||
GROUP BY model
|
||||
HAVING AVG(price) < 800;
|
||||
-- Фильтрует столбцы, которые были бы выданы после GROUP BY
|
||||
```
|
||||
|
||||
### Оператор *SORT BY*
|
||||
|
||||
> *ORDER BY* используется для сортировки записей в наборе результатов запроса *SELECT*. Сортирует по возрастанию, но, если нужно сделать по убыванию, то используем *DESC* (от английского descending)
|
||||
|
||||
```sql
|
||||
SELECT * FROM Sumproduct ORDER BY Amount DESC, City
|
||||
-- Значала сортирует по Amount по убыванию, потом по городу по возростанию
|
||||
```
|
||||
|
||||
### *LIMIT* и *OFFSET*
|
||||
|
||||
* *LIMIT* - макс количество выданных строк
|
||||
* *OFFSET* - пропустить первые N строк
|
||||
|
||||
### Общий вид
|
||||
|
||||
```sql
|
||||
SELECT столбцы
|
||||
FROM ТАБЛИЦА
|
||||
WHERE условие-фильтра
|
||||
GROUP BY столбцы-для-группировки
|
||||
HAVING фильтр-груп
|
||||
ORDER BY столбцы для сортировки
|
||||
LIMIT N
|
||||
OFFSET K
|
||||
```
|
||||
|
||||
```sql
|
||||
SELECT name, AVG(salary) as avg_salary
|
||||
FROM workers
|
||||
GROUP BY name
|
||||
HAVING name != 'JOHN'
|
||||
ORDER BY avg_salary DESC
|
||||
LIMIT 5
|
||||
OFFSET 3
|
||||
```
|
||||
|
||||
## Соединение и объединение таблиц
|
||||
|
||||
### *JOIN*
|
||||
|
||||
> *JOIN* позволяет соединения двух или более таблиц
|
||||
|
||||
#### Виды
|
||||
|
||||
* *JOIN* (только пересечение)
|
||||
* *LEFT JOIN* (всё из первой и пересечение)
|
||||
* *RIGHT JOIN* (всё из второй таблицы и пересечение)
|
||||
* *FULL JOIN* (всё из обоих таблиц)
|
||||
|
||||
#### Пример
|
||||
|
||||
```sql
|
||||
SELECT * FROM AUTHORS [LEFT/RIGHT/FULL/""] JOIN BOOKS
|
||||
ON Author.id = Books.author_id
|
||||
```
|
||||
|
||||
### *UNION*
|
||||
|
||||
> Выводит результаты двух *SELECT*. Удаляет дубликаты, если не *UNION ALL*. Кол-во и названия строк должны быть одинаковыми
|
||||
|
||||
#### Пример *UNION*
|
||||
|
||||
```sql
|
||||
SELECT val1 FROM table1
|
||||
UNION
|
||||
SELECT val1 FROM table2
|
||||
```
|
||||
|
||||
### *INTERSECT*
|
||||
|
||||
> Возвращает значения, которые выводят оба *SELECT*. Кол-во и названия строк должны быть одинаковыми. Синтаксис как у UNION
|
||||
|
||||
### *EXCEPT*
|
||||
|
||||
> Возвращает значения, которые выдал первый *SELECT*, но не второй. Кол-во и названия строк должны быть одинаковыми. Синтаксис как у UNION
|
12
SQL/compose.yaml
Normal file
12
SQL/compose.yaml
Normal file
@ -0,0 +1,12 @@
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
environment:
|
||||
- POSTGRES_USER=tester
|
||||
- POSTGRES_PASSWORD=example123!
|
||||
- POSTGRES_DB=testing
|
||||
ports:
|
||||
- 5432:5432/tcp
|
||||
volumes:
|
||||
- ./data:/var/lib/postgresql/data
|
||||
restart: always
|
44
SQL/task1.sql
Normal file
44
SQL/task1.sql
Normal file
@ -0,0 +1,44 @@
|
||||
/* CREATE TABLE IF NOT EXISTS stations(
|
||||
id INT CONSTRAINT firstkey PRIMARY KEY,
|
||||
city VARCHAR(21),
|
||||
state VARCHAR(21),
|
||||
lat_n INT,
|
||||
long_w int
|
||||
);
|
||||
|
||||
INSERT INTO stations VALUES (794, 'Kissee Mills', 'MO', 140, 73),
|
||||
(824, 'Loma Mar', 'CA', 49, 131),
|
||||
(603, 'Sandy Hook', 'CT', 72, 148),
|
||||
(478, 'Tipton', 'IN', 34, 98),
|
||||
(619, 'Arlington', 'CO', 75, 93),
|
||||
(711, 'Turner', 'AR', 50, 101),
|
||||
(839, 'Slidell', 'LA', 85, 152),
|
||||
(411, 'Negreet', 'LA', 99, 105),
|
||||
(588, 'Glencoe', 'KY', 46, 136),
|
||||
(665, 'Chelsea', 'IA', 99, 60),
|
||||
(342, 'Chignik Lagoon', 'AK', 103, 153),
|
||||
(733, 'Pelahatchie', 'MS', 39, 28),
|
||||
(441, 'Hanna City', 'IL', 51, 137),
|
||||
(811, 'Dorrance', 'KS', 102, 122),
|
||||
(698, 'Albany', 'CA', 50, 80),
|
||||
(325, 'Monument', 'KS', 71, 142),
|
||||
(414, 'Manchester', 'MD', 74, 37),
|
||||
(113, 'Prescott', 'IA', 40, 66),
|
||||
(971, 'Graettinger', 'IA', 95, 150),
|
||||
(266, 'Cahone', 'CO', 116, 127),
|
||||
(617, 'Sturgis', 'MS', 36, 126),
|
||||
(495, 'Upperco', 'MD', 114, 30),
|
||||
(473, 'Highwood', 'IL', 27, 151),
|
||||
(756, 'Garden City', 'AL', 96, 105),
|
||||
(225, 'Garden City', 'IA', 54, 119);
|
||||
*/;
|
||||
SELECT city, state FROM stations;
|
||||
SELECT SUM(lat_n), SUM(long_W) FROM stations;
|
||||
SELECT city FROM stations WHERE id % 2 = 0;
|
||||
SELECT COUNT(city) - COUNT(DISTINCT(city)) FROM stations;
|
||||
SELECT lat_n FROM stations WHERE lat_n BETWEEN 39 AND 137;
|
||||
SELECT max(lat_n) FROM stations WHERE lat_n <= 137;
|
||||
SELECT min(lat_n) FROM stations WHERE lat_n >= 39;
|
||||
SELECT DISTINCT(city) FROM stations WHERE LOWER(RIGHT(city, 1)) in ('a', 'e', 'i', 'o', 'u', 'y');
|
||||
SELECT DISTINCT(city) FROM stations WHERE LOWER(RIGHT(city, 1)) IN ('a', 'e', 'i', 'o', 'u', 'y') AND LOWER(LEFT(city, 1)) IN ('a', 'e', 'i', 'o', 'u', 'y');
|
||||
SELECT DISTINCT(city) FROM stations WHERE LOWER(LEFT(city, 1)) NOT IN ('a', 'e', 'i', 'o', 'u', 'y');
|
47
SQL/task2.sql
Normal file
47
SQL/task2.sql
Normal file
@ -0,0 +1,47 @@
|
||||
DROP TABLE IF EXISTS Salary CASCADE;
|
||||
CREATE TABLE Salary(
|
||||
id INT PRIMARY KEY,
|
||||
salary INT
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS Positions CASCADE;
|
||||
CREATE TABLE Positions(
|
||||
id INT PRIMARY KEY,
|
||||
title VARCHAR(255)
|
||||
);
|
||||
|
||||
DROP TABLE IF EXISTS People;
|
||||
CREATE TABLE People(
|
||||
id INT PRIMARY KEY,
|
||||
name VARCHAR(255),
|
||||
position_id INT REFERENCES Positions(id),
|
||||
salary_id INT REFERENCES Salary(id)
|
||||
);
|
||||
|
||||
INSERT INTO Salary VALUES (1, 10000), (2, 20000), (3, 3000);
|
||||
INSERT INTO Positions VALUES (1, 'Дизайнер'), (2, 'Редактор'), (3, 'Программист');
|
||||
INSERT INTO PEOPLE VALUES (1, 'Владмир', 1, 1), (2, 'Татьяна', 2, 2), (3, 'Александр', NULL, 2), (4, 'Борис', 2, NULL);
|
||||
|
||||
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People JOIN Positions on People.position_id = Positions.id;
|
||||
|
||||
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People RIGHT JOIN Positions on People.position_id = Positions.id;
|
||||
|
||||
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People LEFT JOIN Positions on People.position_id = Positions.id
|
||||
EXCEPT
|
||||
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People JOIN Positions on People.position_id = Positions.id;
|
||||
|
||||
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People LEFT JOIN Positions on People.position_id = Positions.id
|
||||
WHERE People.position_id ISNULL;
|
||||
|
||||
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People FULL JOIN Positions on People.position_id = Positions.id
|
||||
WHERE Positions.id ISNULL OR People.id ISNULL;
|
||||
|
||||
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People LEFT JOIN Positions on People.position_id = Positions.id
|
||||
UNION
|
||||
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People RIGHT JOIN Positions on People.position_id = Positions.id
|
||||
EXCEPT
|
||||
SELECT People.id, People.name, Positions.id as pos_id, Positions.title FROM People JOIN Positions on People.position_id = Positions.id;
|
||||
|
||||
SELECT People.id, name, position_id, title, salary_id, salary FROM People
|
||||
JOIN Positions on People.position_id = Positions.id
|
||||
JOIN Salary ON People.salary_id = Salary.id;
|
154
SQL/task3.sql
Normal file
154
SQL/task3.sql
Normal file
@ -0,0 +1,154 @@
|
||||
DROP TABLE IF EXISTS product;
|
||||
CREATE TABLE product(
|
||||
maker varchar(10),
|
||||
model varchar(50) PRIMARY KEY,
|
||||
type varchar(50)
|
||||
);
|
||||
|
||||
INSERT INTO product VALUES
|
||||
('A', '1001', 'pc'),
|
||||
('A', '1002', 'pc'),
|
||||
('A', '1003', 'pc'),
|
||||
('A', '2004', 'laptop'),
|
||||
('A', '2005', 'laptop'),
|
||||
('A', '2006', 'laptop'),
|
||||
('B', '1004', 'pc'),
|
||||
('B', '1005', 'pc'),
|
||||
('B', '1006', 'pc'),
|
||||
('B', '2007', 'laptop'),
|
||||
('C', '1007', 'pc'),
|
||||
('D', '1008', 'pc'),
|
||||
('D', '1009', 'pc'),
|
||||
('D', '1010', 'pc'),
|
||||
('D', '3004', 'printer'),
|
||||
('D', '3005', 'printer'),
|
||||
('E', '1011', 'pc'),
|
||||
('E', '1012', 'pc'),
|
||||
('E', '1013', 'pc'),
|
||||
('E', '2001', 'laptop'),
|
||||
('E', '2002', 'laptop'),
|
||||
('E', '2003', 'laptop'),
|
||||
('E', '3001', 'printer'),
|
||||
('E', '3002', 'printer'),
|
||||
('E', '3003', 'printer'),
|
||||
('F', '2008', 'laptop'),
|
||||
('F', '2009', 'laptop'),
|
||||
('G', '2010', 'laptop'),
|
||||
('H', '3006', 'printer'),
|
||||
('H', '3007', 'printer');
|
||||
|
||||
DROP TABLE IF EXISTS pc;
|
||||
CREATE TABLE pc(
|
||||
code INT PRIMARY KEY,
|
||||
model varchar(50),
|
||||
speed real,
|
||||
ram smallint,
|
||||
hd real,
|
||||
price real
|
||||
);
|
||||
|
||||
INSERT INTO pc VALUES
|
||||
(1, '1001',2.66,1024,250,2114),
|
||||
(2, '1002',2.10,512,250,995),
|
||||
(3, '1003',1.42,512,80,478),
|
||||
(4, '1004',2.80,1024,250,649),
|
||||
(5, '1005',3.20,512,250,630),
|
||||
(6, '1006',3.20,1024,320,1049),
|
||||
(7, '1007',2.20,1024,200,510),
|
||||
(8, '1008',2.20,2048,250,770),
|
||||
(9, '1009',2.00,1024,250,650),
|
||||
(10, '1010',2.80,2048,300,770),
|
||||
(11, '1011',1.86,2048,160,959),
|
||||
(12, '1012',2.80,1024,160,649),
|
||||
(13, '1013',3.06,512,80,529);
|
||||
|
||||
DROP TABLE IF EXISTS laptop;
|
||||
CREATE TABLE laptop(
|
||||
code int PRIMARY KEY,
|
||||
model varchar(50),
|
||||
speed real,
|
||||
ram smallint,
|
||||
hd real,
|
||||
screen real,
|
||||
price real
|
||||
);
|
||||
|
||||
INSERT INTO laptop VALUES
|
||||
(1, '2001', 2.00, 2048, 240, 20.1, 3673),
|
||||
(2, '2002', 1.73, 1024, 80, 17.0, 949),
|
||||
(3, '2003', 1.80, 512, 60, 15.4, 549),
|
||||
(4, '2004', 2.00, 512, 60, 13.3, 1150),
|
||||
(5, '2005', 2.16, 1024, 120, 17.0, 2500),
|
||||
(6, '2006', 2.0, 2048, 80, 15.4, 1700),
|
||||
(7, '2007', 1.83, 1024, 120, 13.3, 1429),
|
||||
(8, '2008', 1.60, 1024, 100, 15.4, 900),
|
||||
(9, '2009', 1.60, 512, 80, 14.1, 680),
|
||||
(10, '2010', 2.00, 2048, 160, 15.4, 2300);
|
||||
|
||||
DROP TABLE IF EXISTS printer;
|
||||
CREATE TABLE printer(
|
||||
code int PRIMARY KEY,
|
||||
model varchar(50),
|
||||
color boolean,
|
||||
type varchar(10),
|
||||
price real
|
||||
);
|
||||
|
||||
INSERT INTO printer VALUES
|
||||
(1, '3001', true, 'ink-jet', 99),
|
||||
(2, '3002', false, 'laser', 239),
|
||||
(3, '3003', true, 'laser', 899),
|
||||
(4, '3004', true, 'ink-jet', 120),
|
||||
(5, '3005', false, 'laser', 120),
|
||||
(6, '3006', true, 'ink-jet', 100),
|
||||
(7, '3007', true, 'laser', 200);
|
||||
|
||||
|
||||
SELECT model, speed, hd FROM pc WHERE price < 700;
|
||||
SELECT DISTINCT maker FROM product WHERE type = 'printer';
|
||||
SELECT model, hd, screen FROM laptop WHERE price > 1000;
|
||||
SELECT * FROM printer WHERE color;
|
||||
|
||||
SELECT maker, speed FROM product JOIN laptop ON product.model = laptop.model
|
||||
WHERE hd >= 10;
|
||||
(SELECT product.model, price FROM product JOIN pc ON product.model = pc.model WHERE maker = 'B'
|
||||
UNION
|
||||
SELECT product.model, price FROM product JOIN laptop ON product.model = laptop.model WHERE maker = 'B'
|
||||
UNION
|
||||
SELECT product.model, price FROM product JOIN printer ON product.model = printer.model WHERE maker = 'B') ORDER BY model;
|
||||
SELECT DISTINCT maker FROM product WHERE type = 'pc'
|
||||
EXCEPT
|
||||
SELECT DISTINCT maker FROM product WHERE type = 'laptop';
|
||||
|
||||
SELECT model FROM printer WHERE price = (SELECT MAX(price) FROM printer);
|
||||
SELECT AVG(speed) FROM pc;
|
||||
SELECT AVG(speed) FROM laptop WHERE price > 100;
|
||||
SELECT AVG(speed) FROM product JOIN pc ON product.model = pc.model WHERE maker = 'A';
|
||||
SELECT DISTINCT maker, type FROM product WHERE maker in
|
||||
(SELECT maker FROM product GROUP BY maker HAVING COUNT(DISTINCT type) = 1);
|
||||
|
||||
SELECT hd FROM pc GROUP BY hd HAVING COUNT(hd) >= 2 ORDER BY hd;
|
||||
SELECT model, speed FROM laptop WHERE speed < (SELECT MIN(speed) FROM pc);
|
||||
SELECT maker, price FROM printer JOIN product ON printer.model = product.model WHERE price = (SELECT MIN(price) FROM printer WHERE color) AND color;
|
||||
SELECT maker, AVG(screen) FROM laptop JOIN product ON laptop.model = product.model GROUP BY maker ORDER BY maker;
|
||||
SELECT maker FROM product WHERE type = 'pc' GROUP BY maker HAVING COUNT(type) >= 3;
|
||||
|
||||
SELECT maker, MAX(price) FROM product JOIN pc ON pc.model = product.model GROUP BY maker ORDER BY maker;
|
||||
WITH MAX_PRICES as (
|
||||
SELECT MAX(price) as price FROM laptop UNION SELECT MAX(price) as price FROM pc UNION SELECT MAX(price) as price FROM printer
|
||||
)
|
||||
SELECT model FROM laptop WHERE price = (SELECT MAX(price) FROM MAX_PRICES)
|
||||
UNION
|
||||
SELECT model FROM PC WHERE price = (SELECT MAX(price) FROM MAX_PRICES)
|
||||
UNION
|
||||
SELECT model FROM printer WHERE price = (SELECT MAX(price) FROM MAX_PRICES);
|
||||
WITH LEAST_RAM as (
|
||||
SELECT MIN(ram) as ram FROM pc
|
||||
)
|
||||
SELECT DISTINCT maker FROM product JOIN pc on product.model = pc.model WHERE
|
||||
ram = (SELECT ram FROM LEAST_RAM) AND speed = (SELECT MAX(speed) FROM pc WHERE ram = (SELECT ram FROM LEAST_RAM))
|
||||
INTERSECT
|
||||
SELECT DISTINCT maker FROM product WHERE type='printer';
|
||||
SELECT AVG(price) FROM (SELECT price FROM pc JOIN product ON pc.model = product.model WHERE maker = 'A'
|
||||
UNION
|
||||
SELECT price FROM laptop JOIN product ON laptop.model = product.model WHERE maker = 'A') as foo;
|
25
SQL/values.py
Normal file
25
SQL/values.py
Normal file
@ -0,0 +1,25 @@
|
||||
(794, 'Kissee Mills', 'MO', 140, 73),
|
||||
(824, 'Loma Mar', 'CA', 49, 131),
|
||||
(603, 'Sandy Hook', 'CT', 72, 148),
|
||||
(478, 'Tipton', 'IN', 34, 98),
|
||||
(619, 'Arlington', 'CO', 75, 93),
|
||||
(711, 'Turner', 'AR', 50, 101),
|
||||
(839, 'Slidell', 'LA', 85, 152),
|
||||
(411, 'Negreet', 'LA', 99, 105),
|
||||
(588, 'Glencoe', 'KY', 46, 136),
|
||||
(665, 'Chelsea', 'IA', 99, 60),
|
||||
(342, 'Chignik Lagoon', 'AK', 103, 153),
|
||||
(733, 'Pelahatchie', 'MS', 39, 28),
|
||||
(441, 'Hanna City', 'IL', 51, 137),
|
||||
(811, 'Dorrance', 'KS', 102, 122),
|
||||
(698, 'Albany', 'CA', 50, 80),
|
||||
(325, 'Monument', 'KS', 71, 142),
|
||||
(414, 'Manchester', 'MD', 74, 37),
|
||||
(113, 'Prescott', 'IA', 40, 66),
|
||||
(971, 'Graettinger', 'IA', 95, 150),
|
||||
(266, 'Cahone', 'CO', 116, 127),
|
||||
(617, 'Sturgis', 'MS', 36, 126),
|
||||
(495, 'Upperco', 'MD', 114, 30),
|
||||
(473, 'Highwood', 'IL', 27, 151),
|
||||
(756, 'Garden City', 'AL', 96, 105),
|
||||
(225, 'Garden City', 'IA', 54, 119)
|
Reference in New Issue
Block a user