Last active
December 15, 2019 09:56
-
-
Save shilovk/ecef8f144e9b255612d2d7061f08727b to your computer and use it in GitHub Desktop.
Задание по основам баз данных и SQL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
homework 3.7 | |
gist.github.com | |
1. | |
CREATE DATABASE test_guru; | |
\c test_guru | |
CREATE TABLE categories ( | |
id serial PRIMARY KEY, | |
title varchar(25) NOT NULL | |
); | |
CREATE TABLE tests ( | |
id serial PRIMARY KEY, | |
title varchar(50), | |
level int NOT NULL, | |
category_id int NOT NULL, | |
FOREIGN KEY (category_id) REFERENCES categories(id) | |
); | |
CREATE TABLE questions ( | |
id serial PRIMARY KEY, | |
body varchar(250) NOT NULL, | |
test_id int NOT NULL, | |
FOREIGN KEY (test_id) REFERENCES tests(id) | |
); | |
2. | |
INSERT INTO categories(title) VALUES | |
('Frontend'), | |
('Backend'), | |
('Machine Learning'); | |
INSERT INTO tests(title, level, category_id) VALUES | |
('HTML', 1, 1), | |
('Go', 2, 2), | |
('Ruby', 3, 2), | |
('React', 4, 3), | |
('Rails', 5, 2); | |
INSERT INTO questions(body, test_id) VALUES | |
('header', 1), | |
('class', 3), | |
('array', 3), | |
('migrate', 5), | |
('rake', 5); | |
SELECT * | |
FROM tests | |
WHERE level IN (2, 3); | |
SELECT * | |
FROM questions | |
WHERE test_id = 5; | |
UPDATE tests | |
SET title = 'Ruby Language', | |
level = 4 | |
WHERE title = 'Ruby'; | |
DELETE FROM questions | |
WHERE test_id = 5; | |
SELECT | |
tests.title AS test_title, | |
categories.title AS category_title | |
FROM tests | |
JOIN categories | |
ON tests.category_id = categories.id; | |
SELECT questions.body, tests.title | |
FROM questions | |
JOIN tests | |
ON questions.test_id = tests.id; |
Спасибо, обновил
предпоследний запрос вернет две колонки title
, пользоваться результатом такого запроса может оказаться затруднительно (может возникнуть путаница)
нужно как-то различать эти колонки, они же принадлежат к разным таблицам
открой для себя SQL алиасы
Спасибо!, сделал
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
создание таблиц
ТЗ: "tests в которой должны быть ... внешний ключ к таблице categories"
у тебя создается просто числовое поле, а не внешний ключ
рекомендуется всегда обозначать для полей-связей, что это ссылка на внешний ключ
база данных в этом случае применяет к этому полю
FOREIGN KEY constraint
для контроля целостности данных (Data integrity)(обрати внимание - для первичного ключа ты не просто поле используешь, а именно создаешь первичный ключ с помощью специальной команды, с внешним ключом тоже нужно использовать специальную команду)
селекты с джойнами
ТЗ: "С помощью JOIN выберите названия всех тестов и названия их категорий"
нужны только названия, а у тебя все колонки запрашиваются
ТЗ: "С помощью JOIN выберите содержание всех вопросов (атрибут body) и названия связанных с ними тестов"
твой запрос не возвращает ничего из содержимого таблицы "тестс"