Skip to content

Instantly share code, notes, and snippets.

@Rukomoynikov
Created April 23, 2018 19:40
Show Gist options
  • Save Rukomoynikov/2fd511b95ea952331f2a062f2cfbea00 to your computer and use it in GitHub Desktop.
Save Rukomoynikov/2fd511b95ea952331f2a062f2cfbea00 to your computer and use it in GitHub Desktop.
Lesson 2 Part 1

Создайте базу данных test_guru

CREATE DATABASE test_guru;

DROP TABLE IF EXISTS questions; DROP TABLE IF EXISTS tests; DROP TABLE IF EXISTS categories;

Таблицу categories с атрибутом title

CREATE TABLE categories (
	id serial,
	title varchar(255),
	PRIMARY KEY(id)
);

Таблицу tests в которой должны быть атрибуты title, level, внешний ключ к таблице categories

CREATE TABLE tests (
	id serial,
	title varchar(255),
	level int,
	category_id int,
	FOREIGN KEY(category_id) REFERENCES categories(id),
	PRIMARY KEY(id)
);

Таблицу questions в которой должен быть атрибут body и внешний ключ к таблице tests

CREATE TABLE questions (
	id serial,
	body varchar(255),
	test_id int,
	FOREIGN KEY(test_id) REFERENCES tests(id),
	PRIMARY KEY(id)
);

Создайте 3 строки в таблице categories

INSERT INTO categories (title)
VALUES
	('html'),
	('css'),
	('js');

Создайте 5 строк в таблице tests (хотя бы 3 из них должны иметь отличное от NULL значение в атрибуте внешнего ключа к таблице categories)

INSERT INTO tests (title, level, category_id)
VALUES
	('HTML LEVEL 1', 1, 1),
	('HTML LEVEL 2', 2, 1),
	('HTML LEVEL 2', 3, 1),
	('CSS LEVEL 1', 1, 2),
	('CSS LEVEL 2', 2, 2),
	('CSS LEVEL 2', 3, 2),
	('JS LEVEL 1', 1, 3),
	('JS LEVEL 2', 2, 3),
	('JS LEVEL 2', 3, 3);

Создайте 5 строк в таблице questions

INSERT INTO questions (body, test_id)
VALUES
	('Tag of Header ?', 1),
	('Tag of Header ? Level 2', 2),
	('Tag of Header ? Level 3', 3),
	('Media query for adaptive ?', 2),
	('Media query for adaptive ? Level 2', 2),
	('Media query for adaptive ? Level 3', 3);

Выберите все тесты с уровнем 2 и 3

SELECT title
FROM tests
WHERE level = 1 OR level = 2;

Выберите все вопросы для определённого теста

SELECT body
FROM questions
WHERE test_id = 1;

Обновите атрибуты title и level для строки из таблицы tests с помощью одного запроса

UPDATE tests
SET
	title = 'HTML LEVEL 4',
	level = 4
WHERE id = 1;

Удалите все вопросы для конкретного теста с помощью одного запроса

DELETE FROM questions
WHERE test_id = 1;

С помощью JOIN выберите названия всех тестов и названия их категорий

SELECT tests.title as Title, categories.title as Category
FROM tests
INNER JOIN categories ON tests.category_id = categories.id;

С помощью JOIN выберите содержание всех вопросов (атрибут body) и названия связанных с ними тестов

SELECT questions.body as question, tests.title
FROM questions
INNER JOIN tests ON tests.id = questions.test_id;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment