Skip to content

Instantly share code, notes, and snippets.

@beglov
Last active February 20, 2020 20:28
Show Gist options
  • Save beglov/22346b60f90e80d1674678a46333ca36 to your computer and use it in GitHub Desktop.
Save beglov/22346b60f90e80d1674678a46333ca36 to your computer and use it in GitHub Desktop.
1. С помощью SQL (DDL):
Создайте базу данных test_guru
CREATE DATABASE test_guru;
Таблицу categories с атрибутом title
CREATE TABLE categories (
id serial PRIMARY KEY,
title varchar(30) NOT null
);
Таблицу tests в которой должны быть атрибуты title, level, внешний ключ к таблице categories
CREATE TABLE tests (
id serial PRIMARY KEY,
title varchar(100),
level int,
category_id int REFERENCES categories
);
Таблицу questions в которой должен быть атрибут body и внешний ключ к таблице tests
CREATE TABLE questions (
id serial PRIMARY KEY,
body varchar(100),
test_id int REFERENCES tests
);
2. Выполните операции CRUD, JOIN:
Создайте 3 строки в таблице categories
INSERT INTO categories(title) VALUES ('Frontend'), ('Backend'), ('Devops');
Создайте 5 строк в таблице tests (хотя бы 3 из них должны иметь отличное от NULL значение в атрибуте внешнего ключа к таблице categories)
INSERT INTO tests(title, level, category_id) VALUES ('HTML', 1, 1), ('Go', 2, 2), ('Ruby', 2, 2), ('Docker', 3, 3), ('Beer', 0, NULL);
Создайте 5 строк в таблице questions
INSERT INTO questions(body, test_id) VALUES ('<p>', 1), ('<a>', 2), ('nil?', 2), ('rails', 2), ('image', 4);
Выберите все тесты с уровнем 2 и 3
SELECT * FROM tests WHERE level IN (2,3);
Выберите все вопросы для определённого теста
SELECT * FROM questions WHERE test_id = ?;
Обновите атрибуты title и level для строки из таблицы tests с помощью одного запроса
UPDATE tests SET title = 'GoGo', level = 3 WHERE title = 'Go';
Удалите все вопросы для конкретного теста с помощью одного запроса
DELETE FROM questions WHERE test_id = ?;
С помощью JOIN выберите названия всех тестов и названия их категорий
SELECT tests.title AS test_title, categories.title AS category_title FROM tests JOIN categories ON tests.category_id = categories.id;
С помощью JOIN выберите содержание всех вопросов (атрибут body) и названия связанных с ними тестов
SELECT questions.body, tests.title FROM questions JOIN tests ON questions.test_id = tests.id;
@BubuntuClu
Copy link

https://gist.github.com/beglov/22346b60f90e80d1674678a46333ca36#file-sql-L17 и https://gist.github.com/beglov/22346b60f90e80d1674678a46333ca36#file-sql-L24 не достаточно создать столбец, надо указывать что это внешний ключ.

https://gist.github.com/beglov/22346b60f90e80d1674678a46333ca36#file-sql-L51 для одинаковых имен столбцов, следует задавать alias

@beglov
Copy link
Author

beglov commented Feb 20, 2020

поправил

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment