Смешанные задачи по базе в Rust
В этих задачах смешаем чтение, связь таблиц и запись в одном сценарии. Данные заданы в блоке без готового текста запросов.
Дана таблица:
let setup = r#"
CREATE TABLE bins (
id INTEGER PRIMARY KEY,
sku TEXT NOT NULL,
qty INTEGER NOT NULL
);
INSERT INTO bins (sku, qty) VALUES ('wire', 4);
INSERT INTO bins (sku, qty) VALUES ('tape', 1);
"#;
Вставьте "bolt" с qty
10, затем выведите sku
с наибольшим qty.
Даны таблицы:
let setup = r#"
CREATE TABLE teams (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE members (
id INTEGER PRIMARY KEY,
team_id INTEGER NOT NULL,
nick TEXT NOT NULL,
FOREIGN KEY (team_id) REFERENCES teams (id)
);
INSERT INTO teams (name) VALUES ('alpha');
INSERT INTO members (team_id, nick) VALUES (1, 'ann');
INSERT INTO members (team_id, nick) VALUES (1, 'bob');
"#;
Выведите название команды и псевдоним
каждого участника. Затем вставьте
участника "kim" в "alpha"
и снова выведите COUNT(*)
в members.
Даны таблицы:
let setup = r#"
CREATE TABLE projects (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL
);
CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
project_id INTEGER NOT NULL,
label TEXT NOT NULL,
done INTEGER NOT NULL,
FOREIGN KEY (project_id) REFERENCES projects (id)
);
INSERT INTO projects (title) VALUES ('site');
INSERT INTO tasks (project_id, label, done) VALUES (1, 'layout', 1);
INSERT INTO tasks (project_id, label, done) VALUES (1, 'forms', 0);
"#;
Выведите заголовок проекта и подпись
каждой задачи, где done равно
0. Затем отметьте "forms"
выполненной и выведите COUNT(*)
невыполненных задач проекта.
Даны таблицы:
let setup = r#"
CREATE TABLE carriers (
id INTEGER PRIMARY KEY,
code TEXT NOT NULL
);
CREATE TABLE parcels (
id INTEGER PRIMARY KEY,
carrier_id INTEGER NOT NULL,
weight REAL NOT NULL,
FOREIGN KEY (carrier_id) REFERENCES carriers (id)
);
INSERT INTO carriers (code) VALUES ('fast');
INSERT INTO carriers (code) VALUES ('slow');
INSERT INTO parcels (carrier_id, weight) VALUES (1, 2.5);
INSERT INTO parcels (carrier_id, weight) VALUES (1, 1);
INSERT INTO parcels (carrier_id, weight) VALUES (2, 4);
"#;
Для каждого кода перевозчика выведите
сумму weight после связи
таблиц и группировки.
Дана таблица:
let setup = r#"
CREATE TABLE sessions (
id INTEGER PRIMARY KEY,
user_name TEXT NOT NULL,
minutes INTEGER NOT NULL
);
INSERT INTO sessions (user_name, minutes) VALUES ('ann', 20);
INSERT INTO sessions (user_name, minutes) VALUES ('ann', 15);
INSERT INTO sessions (user_name, minutes) VALUES ('bob', 10);
"#;
Удалите строки "bob", вставьте
для "ann" еще 5 минут
и выведите сумму minutes
для "ann".
Даны таблицы:
let setup = r#"
CREATE TABLE labs (
id INTEGER PRIMARY KEY,
room TEXT NOT NULL
);
CREATE TABLE samples (
id INTEGER PRIMARY KEY,
lab_id INTEGER NOT NULL,
tag TEXT NOT NULL,
FOREIGN KEY (lab_id) REFERENCES labs (id)
);
INSERT INTO labs (room) VALUES ('101');
INSERT INTO labs (room) VALUES ('102');
INSERT INTO samples (lab_id, tag) VALUES (1, 'a1');
"#;
Выведите комнату и метку каждого образца.
Для комнаты "102" покажите
"none", если образца нет.
Оставь строку слева, даже если справа
пусто.
Дана таблица:
let setup = r#"
CREATE TABLE prices (
id INTEGER PRIMARY KEY,
item TEXT NOT NULL,
cost REAL NOT NULL
);
INSERT INTO prices (item, cost) VALUES ('milk', 1.2);
INSERT INTO prices (item, cost) VALUES ('bread', 0.9);
"#;
Поднимите cost для "milk"
на 0.1, вставьте "eggs"
с 2.5 и выведите среднее
cost по таблице.
Даны таблицы:
let setup = r#"
CREATE TABLE dept (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL
);
CREATE TABLE emp (
id INTEGER PRIMARY KEY,
dept_id INTEGER NOT NULL,
name TEXT NOT NULL,
FOREIGN KEY (dept_id) REFERENCES dept (id)
);
INSERT INTO dept (title) VALUES ('sales');
INSERT INTO emp (dept_id, name) VALUES (1, 'ann');
"#;
Вставьте отдел "it" и сотрудника
"bob" в него. Выведите название
отдела и имя каждого сотрудника после
сборки двух таблиц.