Skip to content

Instantly share code, notes, and snippets.

@jezman
Created October 3, 2018 11:48
Show Gist options
  • Save jezman/dee103f1f66671c7e5f3cef4c34fce94 to your computer and use it in GitHub Desktop.
Save jezman/dee103f1f66671c7e5f3cef4c34fce94 to your computer and use it in GitHub Desktop.
-- Создайте базу данных test_guru
CREATE DATABASE test_guru;
-- Таблицу categories с атрибутом title
CREATE TABLE categories(
id SERIAL PRIMARY KEY,
title VARCHAR(50) NOT NULL
);
-- Таблицу tests в которой должны быть атрибуты title, level, внешний ключ к таблице categories
CREATE TABLE tests(
id SERIAL PRIMARY KEY,
title VARCHAR(50) NOT NULL,
level INTEGER,
category_id INTEGER REFERENCES categories(id)
);
-- Таблицу questions в которой должен быть атрибут body и внешний ключ к таблице tests
CREATE TABLE questions(
id SERIAL PRIMARY KEY,
body VARCHAR(200) NOT NULL,
test_id INTEGER REFERENCES tests(id)
);
-- Создайте 3 строки в таблице categories
INSERT INTO categories(title) VALUES
('embedded'),
('backend'),
('mobile');
-- Создайте 5 строк в таблице tests (хотя бы 3 из них должны иметь отличное от NULL значение в атрибуте внешнего ключа к таблице categories)
INSERT INTO tests(title, level, category_id) VALUES
('C/C++', 3, 1),
('Golang', 2, 2),
('Android', 1, 3),
('PHP', 2, NULL),
('STM32', 3, 1);
-- Создайте 5 строк в таблице questions
INSERT INTO questions(body, test_id) VALUES
('Pointer to Array in C', 1),
('Goroutines', 2),
('Java vs Kotlin', 3),
('Laravel', 4),
('CMIS gpio set', 5);
-- Выберите все тесты с уровнем 2 и 3
SELECT * FROM tests WHERE level IN (2,3);
-- Выберите все вопросы для определённого теста
SELECT * FROM questions WHERE test_id = 1;
-- Обновите атрибуты title и level для строки из таблицы tests с помощью одного запроса
UPDATE tests SET title = 'Foo', level = 1 WHERE title LIKE 'G%';
-- Удалите все вопросы для конкретного теста с помощью одного запроса
DELETE FROM questions WHERE body LIKE 'J%';
-- С помощью JOIN выберите названия всех тестов и названия их категорий
SELECT t.title, c.title FROM tests as t
JOIN categories c ON (t.category_id = c.id);
-- С помощью JOIN выберите содержание всех вопросов (атрибут body) и названия связанных с ними тестов
SELECT q.body, t.title FROM questions as q
JOIN tests t ON (q.test_id = t.id);
@BubuntuClu
Copy link

Тут лучше alias сделать, иначе не понятно к чему относится тот или иной title

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