WHERE оставляет только строки, где предикат истинен. Значение из программы безопаснее передавать через "?", а не вшивать в текст.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpDbWhr 604 of 696 menu
◀ ▶

Условие в SQL-выборке

Ключевое слово WHERE оставляет только строки, где предикат истинен.

Значение из программы безопаснее передавать через "?", а не вшивать в текст. Подготовленный SELECT с одним параметром ищет записи по совпадению поля:

#include <iostream> #include <sqlite3.h> int main() { sqlite3* db = nullptr; if (sqlite3_open("filter_demo.db", &db) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } char* err = nullptr; if (sqlite3_exec( db, "CREATE TABLE IF NOT EXISTS tags (" "id INTEGER PRIMARY KEY," "name TEXT NOT NULL," "group_code TEXT NOT NULL" ")", nullptr, nullptr, &err ) != SQLITE_OK) { std::cerr << err << "\n"; sqlite3_free(err); sqlite3_close(db); return 1; } if (sqlite3_exec( db, "INSERT INTO tags (name, group_code) " "VALUES ('alpha', 'g1')", nullptr, nullptr, &err ) != SQLITE_OK) { std::cerr << err << "\n"; sqlite3_free(err); sqlite3_close(db); return 1; } if (sqlite3_exec( db, "INSERT INTO tags (name, group_code) " "VALUES ('beta', 'g2')", nullptr, nullptr, &err ) != SQLITE_OK) { std::cerr << err << "\n"; sqlite3_free(err); sqlite3_close(db); return 1; } sqlite3_stmt* query = nullptr; if (sqlite3_prepare_v2( db, "SELECT name FROM tags WHERE group_code = ?", -1, &query, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_bind_text(query, 1, "g1", -1, SQLITE_STATIC); while (sqlite3_step(query) == SQLITE_ROW) { const char* name = reinterpret_cast<const char*>( sqlite3_column_text(query, 0) ); std::cout << name << "\n"; } sqlite3_finalize(query); sqlite3_close(db); return 0; }

Смена аргумента меняет набор строк без нового SQL. Числовые поля сравнивают через sqlite3_bind_int и операторы вроде >=:

#include <iostream> #include <sqlite3.h> int main() { sqlite3* db = nullptr; if (sqlite3_open("filter_demo.db", &db) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_stmt* query = nullptr; if (sqlite3_prepare_v2( db, "SELECT name FROM tags " "WHERE group_code = ? AND id >= ?", -1, &query, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_bind_text(query, 1, "g2", -1, SQLITE_STATIC); sqlite3_bind_int(query, 2, 1); while (sqlite3_step(query) == SQLITE_ROW) { const char* name = reinterpret_cast<const char*>( sqlite3_column_text(query, 0) ); std::cout << name << "\n"; } sqlite3_finalize(query); sqlite3_close(db); return 0; }

Создайте таблицу shifts в plant.db с полями worker, shift_code и hours, добавьте три строки и выведите имена, где hours не меньше 8.

Выведите имена смен с кодом смены "night", используя параметр в условии по полю shift_code.

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