Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpDpTw 238 of 288 menu
◀ ▶

Две таблицы в Rust

В этих задачах потренируем номер чужой строки и сборку результата из двух таблиц. Текст соединения в блоке данных не приведен.

Даны таблицы:

let setup = r#" CREATE TABLE authors ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ); CREATE TABLE articles ( id INTEGER PRIMARY KEY, author_id INTEGER NOT NULL, title TEXT NOT NULL, FOREIGN KEY (author_id) REFERENCES authors (id) ); INSERT INTO authors (name) VALUES ('ann'); INSERT INTO authors (name) VALUES ('bob'); INSERT INTO articles (author_id, title) VALUES (1, 'sql tips'); INSERT INTO articles (author_id, title) VALUES (1, 'go fmt'); "#;

Выведите имя автора и заголовок каждой статьи в одной строке результата, связав таблицы по номеру автора.

Даны таблицы:

let setup = r#" CREATE TABLE authors ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ); CREATE TABLE articles ( id INTEGER PRIMARY KEY, author_id INTEGER NOT NULL, title TEXT NOT NULL, FOREIGN KEY (author_id) REFERENCES authors (id) ); INSERT INTO authors (name) VALUES ('ann'); INSERT INTO authors (name) VALUES ('bob'); INSERT INTO articles (author_id, title) VALUES (1, 'sql tips'); "#;

Выведите всех авторов. Для "bob" покажите "no article", если статьи нет. Оставь строку слева, даже если справа пусто. Заголовок читайте в Option<String>.

Даны таблицы:

let setup = r#" CREATE TABLE rooms ( id INTEGER PRIMARY KEY, code TEXT NOT NULL ); CREATE TABLE devices ( id INTEGER PRIMARY KEY, room_id INTEGER NOT NULL, label TEXT NOT NULL, FOREIGN KEY (room_id) REFERENCES rooms (id) ); INSERT INTO rooms (code) VALUES ('a1'); INSERT INTO rooms (code) VALUES ('b2'); INSERT INTO devices (room_id, label) VALUES (1, 'lamp'); INSERT INTO devices (room_id, label) VALUES (1, 'sensor'); INSERT INTO devices (room_id, label) VALUES (2, 'fan'); "#;

Выведите код комнаты и подпись каждого устройства, отсортировав по коду комнаты, затем по подписи.

Даны таблицы:

let setup = r#" CREATE TABLE pilots ( id INTEGER PRIMARY KEY, callsign TEXT NOT NULL ); CREATE TABLE flights ( id INTEGER PRIMARY KEY, pilot_id INTEGER NOT NULL, route TEXT NOT NULL, miles INTEGER NOT NULL, FOREIGN KEY (pilot_id) REFERENCES pilots (id) ); INSERT INTO pilots (callsign) VALUES ('red'); INSERT INTO pilots (callsign) VALUES ('blue'); INSERT INTO flights (pilot_id, route, miles) VALUES (1, 'north', 120); INSERT INTO flights (pilot_id, route, miles) VALUES (1, 'west', 80); INSERT INTO flights (pilot_id, route, miles) VALUES (2, 'east', 200); "#;

Для каждого позывного выведите сумму miles по его рейсам после сборки строк из двух таблиц.

Даны таблицы:

let setup = r#" CREATE TABLE clients ( id INTEGER PRIMARY KEY, email TEXT NOT NULL ); CREATE TABLE tickets ( id INTEGER PRIMARY KEY, client_id INTEGER NOT NULL, subject TEXT NOT NULL, FOREIGN KEY (client_id) REFERENCES clients (id) ); INSERT INTO clients (email) VALUES ('a@test'); INSERT INTO clients (email) VALUES ('b@test'); INSERT INTO tickets (client_id, subject) VALUES (1, 'login'); INSERT INTO tickets (client_id, subject) VALUES (2, 'pay'); INSERT INTO tickets (client_id, subject) VALUES (2, 'ship'); "#;

Выведите email и число заявок для каждого клиента через группировку после связи таблиц.

Даны таблицы:

let setup = r#" CREATE TABLE stores ( id INTEGER PRIMARY KEY, city TEXT NOT NULL ); CREATE TABLE staff ( id INTEGER PRIMARY KEY, store_id INTEGER NOT NULL, name TEXT NOT NULL, FOREIGN KEY (store_id) REFERENCES stores (id) ); INSERT INTO stores (city) VALUES ('oslo'); INSERT INTO stores (city) VALUES ('bergen'); INSERT INTO staff (store_id, name) VALUES (1, 'ann'); INSERT INTO staff (store_id, name) VALUES (1, 'kim'); "#;

Выведите город и имя сотрудника для каждой пары. Строки без сотрудника справа не нужны.

Даны таблицы:

let setup = r#" CREATE TABLE user ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ); CREATE TABLE post ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL, title TEXT NOT NULL, FOREIGN KEY (user_id) REFERENCES user (id) ); INSERT INTO user (name) VALUES ('ann'); INSERT INTO user (name) VALUES ('bob'); INSERT INTO post (user_id, title) VALUES (1, 'pen'); INSERT INTO post (user_id, title) VALUES (2, 'lamp'); "#;

Выведите только посты пользователя "ann" вместе с ее именем. Заголовки других пользователей не должны попасть в результат.

Даны таблицы:

let setup = r#" CREATE TABLE warehouse ( id INTEGER PRIMARY KEY, code TEXT NOT NULL ); CREATE TABLE bin ( id INTEGER PRIMARY KEY, warehouse_id INTEGER NOT NULL, label TEXT NOT NULL, FOREIGN KEY (warehouse_id) REFERENCES warehouse (id) ); "#;

Включите проверку внешних ключей, добавьте склад "W1" и ячейку "A-01" с корректным warehouse_id. Затем попробуйте ячейку с warehouse_id 99 и выведите "rejected" при ошибке.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить