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

Соединение связанных таблиц в Dart

Когда данные разнесены по таблицам, для отчета нужны поля с обеих сторон. INNER JOIN оставляет только те пары, где ключ ссылки совпал.

Выборка отделов и сотрудников с равенством идентификаторов выглядит так:

import 'package:sqlite3/sqlite3.dart'; var db = sqlite3.open('join_staff.db'); db.execute('PRAGMA foreign_keys = ON'); db.execute(''' CREATE TABLE IF NOT EXISTS departments ( id INTEGER PRIMARY KEY, title TEXT NOT NULL ) '''); db.execute(''' CREATE TABLE IF NOT EXISTS staff ( id INTEGER PRIMARY KEY, dept_id INTEGER NOT NULL, full_name TEXT NOT NULL, FOREIGN KEY (dept_id) REFERENCES departments (id) ) '''); db.execute( 'INSERT INTO departments (title) VALUES (?)', ['Support'], ); db.execute( 'INSERT INTO staff (dept_id, full_name) VALUES (?, ?)', [1, 'Alice Gray'], ); db.execute( 'INSERT INTO staff (dept_id, full_name) VALUES (?, ?)', [1, 'Ben Holt'], ); var rows = db.select(''' SELECT s.full_name, d.title FROM staff s INNER JOIN departments d ON s.dept_id = d.id ORDER BY s.id '''); for (var row in rows) { print(row['full_name']); print(row['title']); } db.dispose();

Псевдонимы s и d сокращают имена столбцов. Фильтр по отделу задают в WHERE после соединения:

import 'package:sqlite3/sqlite3.dart'; var db = sqlite3.open('join_filter.db'); db.execute('PRAGMA foreign_keys = ON'); db.execute(''' CREATE TABLE IF NOT EXISTS departments ( id INTEGER PRIMARY KEY, title TEXT NOT NULL ) '''); db.execute(''' CREATE TABLE IF NOT EXISTS staff ( id INTEGER PRIMARY KEY, dept_id INTEGER NOT NULL, full_name TEXT NOT NULL, FOREIGN KEY (dept_id) REFERENCES departments (id) ) '''); db.execute( 'INSERT INTO departments (title) VALUES (?)', ['Support'], ); db.execute( 'INSERT INTO departments (title) VALUES (?)', ['Archive'], ); db.execute( 'INSERT INTO staff (dept_id, full_name) VALUES (?, ?)', [1, 'Alice Gray'], ); db.execute( 'INSERT INTO staff (dept_id, full_name) VALUES (?, ?)', [2, 'Cara Mint'], ); var rows = db.select(''' SELECT s.full_name FROM staff s INNER JOIN departments d ON s.dept_id = d.id WHERE d.title = 'Support' '''); for (var row in rows) { print(row['full_name']); } db.dispose();

В join_staff.db добавьте отдел "Sales" и сотрудника в нем. Выведите имя и название отдела одной строкой на человека.

Создайте join_fleet.db с таблицами garages и vehicles. Выведите номер машины и код гаража для каждой пары.

В join_fleet.db оставьте в выводе только машины гаража с кодом "G-7".

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