Условие в запросе в Rust
Часть WHERE отбирает строки перед
чтением. Сравнение столбца с меткой или
литералом оставляет только подходящие
записи, остальные не попадают в результат.
Выведем имена, где ключ больше единицы:
use rusqlite::{Connection, params};
fn after_one() -> Result<(), rusqlite::Error> {
let conn = Connection::open("app.db")?;
let mut stmt = conn.prepare("SELECT name FROM user WHERE id > ?1")?;
let rows = stmt.query_map(params![1], |row| row.get::<_, String>(0))?;
for name in rows {
println!("{}", name?);
}
Ok(())
}
fn main() {
match after_one() {
Ok(()) => {}
Err(e) => println!("{}", e),
}
}
Строка с id равным 1
не печатается. Условие проверяется
для каждой строки таблицы.
Текстовый столбец сравнивают так же, через метку в условии:
use rusqlite::{Connection, params};
fn pick(label: &str) -> Result<(), rusqlite::Error> {
let conn = Connection::open("app.db")?;
let mut stmt = conn.prepare("SELECT id FROM user WHERE name = ?1")?;
let rows = stmt.query_map(params![label], |row| row.get::<_, i64>(0))?;
for id in rows {
println!("{}", id?);
}
Ok(())
}
fn main() {
if let Err(e) = pick("ann") {
println!("{}", e);
}
}
Дана таблица:
1 ann
2 bob
3 ann
Выведите id всех строк, где
name равно ann.
Дана таблица user. Выведите
имена, у которых id не больше
2.
Скажите, меняется ли число строк в таблице из-за условия в запросе выборки.