Все примеры в этом руководстве будут иллюстрироваться как сеансы работы простейшей клиентской программы — psql. Это клиент для СУБД PostgreSQL. Вот как выглядит типичный сеанс:
[tz@coneforest ~/work/54/doc/inf/databases]%
psql
имя_БД
Welcome to psql 8.2.6, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit
имя_БД
=#
ЗАПРОС₁
;
ОТВЕТ₁
имя_БД
=#
ЗАПРОС₂
;
ОТВЕТ₂
имя_БД
=#\q
[tz@coneforest ~/work/54/doc/inf/databases]%
Поясним, что здесь происходило.
Во-первых, вызываем из командной строки командной оболочки программу
psql. В командной строке указываем название существующей
БД (имя_БД
), к которой следует подключиться. После
нескольких строчек приветствия «Welcome to psql …» появляется собственная
командная строка программы psql, которой предшествует
собственное приглашение (которое содержит имя БД, и завершается знаком
решётки). В этой командной строке мы вводим запрос и получаем ответ на него.
После появившегося приглашения вводим второй запрос и слова видим ответ. Теперь
мы завершаем работу с командной SQL-оболочкой psql, введя
псевдокоманду \q
(так было сказано в приветственных строках —
«\q to quit
»). После выхода из psql мы
возвращаемся в командную оболочку операционной системы.
Замечание | |
---|---|
Можно было для выхода нажать Ctrl+D. |
Видно, что SQL-оболочка psql играет по отношению к языку SQL ту же роль, что и командная оболочка операционной системы (я использую zsh) по отношению к командному языку.
Разберём более конкретный пример.
ФГУП Главный научно-исследовательский вычислительный центр Федеральной Налоговой Службы распространяет таблицы базы данных КЛАДР, содержащие информацию об адресных объектах различных уровней (населённые пункты, улицы, дома) и об их привязке к почтовым отделениям и управлениям налоговой службы. Эти таблицы (в формате СУБД DBase) доступны здесь.
Эти таблицы импортированы нами в PostgreSQL в базу данных kladr4. Таблица, к которой происходит обращения в приведённом ниже примере, называется kladr, и содержит информацию об объектах верхнего уровня (населённых пунктах).
Первый запрос к БД kladr4 выбирает из таблицы
kladr все населённые пункты, принадлежащие субъекту
Федерации № 77 (в Конституции РФ под этим номером записана
Москва). Признаком принадлежности к 77-му региону является то, что значение в
колонке code начинается с 77
. Между
прочим, в версии КЛАДР от 2009-09-29 в
таблице kladr 189870 записей.
Второй запрос требует ту же самую выборку, но теперь уже упорядоченную по названиям адресных объектов.
[tz@coneforest ~/work/54/doc/inf/databases]%
psql kladr4
Welcome to psql 8.2.6, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit
kladr4=#
SELECT * FROM kladr WHERE code LIKE '77%';
name | socr | code | index ---------------------+------+---------------+-------- Крюково | пос | 7700000200500 | Москва | г | 7700000000000 | Внуково | пос | 7700000000200 | Восточный | пос | 7700000000300 | 105173 Главмосстроя | пос | 7700000000400 | 123308 Загорье | пос | 7700000000600 | 115598 Заречье | пос | 7700000000700 | 121115 Измайловская Пасека | пос | 7700000001000 | 111123 Лесной | пос | 7700000001200 | 121500 Лесные Сторожки | пос | 7700000001300 | 127253 Матвеевское | пос | 7700000001500 | 119501 Милицейский | пос | 7700000001600 | 142002 Мневники Нижние | пос | 7700000001700 | 123423 Новобратцевский | пос | 7700000002100 | Новобутаково | пос | 7700000002200 | 125481 Новомалино | пос | 7700000002300 | 124681 Подушкино | пос | 7700000002400 | 127543 Рублево | пос | 7700000002500 | Сосновка | пос | 7700000002600 | 121500 Терехово | пос | 7700000002800 | 123423 Шлюзы | пос | 7700000003200 | 109383 Толстопальцево | пос | 7700000003300 | Бутово | пос | 7700000003400 | 117623 Ухтомский | пос | 7700000003500 | 111402 Мещерский | пос | 7700000003700 | 119618 Свиблово | пос | 7700000004300 | 129323 Толстопальцево | дер | 7700000004400 | 143350 Акулово | пгт | 7700000004500 | 105173 Зеленоград | г | 7700000200000 | Кутузово | дер | 7700000200200 | 124681 Рожки | пос | 7700000200300 | 124681 Малино | пос | 7700000200400 | 124681 Назарьево | пос | 7700000200600 | 124489 Алабушево | пос | 7700000200700 | 124460 Некрасовка | пос | 7700000004000 | 140008 (35 rows)
kladr4=#
SELECT * FROM kladr WHERE code LIKE '77%' ORDER BY name;
name | socr | code | index ---------------------+------+---------------+-------- Акулово | пгт | 7700000004500 | 105173 Алабушево | пос | 7700000200700 | 124460 Бутово | пос | 7700000003400 | 117623 Внуково | пос | 7700000000200 | Восточный | пос | 7700000000300 | 105173 Главмосстроя | пос | 7700000000400 | 123308 Загорье | пос | 7700000000600 | 115598 Заречье | пос | 7700000000700 | 121115 Зеленоград | г | 7700000200000 | Измайловская Пасека | пос | 7700000001000 | 111123 Крюково | пос | 7700000200500 | Кутузово | дер | 7700000200200 | 124681 Лесной | пос | 7700000001200 | 121500 Лесные Сторожки | пос | 7700000001300 | 127253 Малино | пос | 7700000200400 | 124681 Матвеевское | пос | 7700000001500 | 119501 Мещерский | пос | 7700000003700 | 119618 Милицейский | пос | 7700000001600 | 142002 Мневники Нижние | пос | 7700000001700 | 123423 Москва | г | 7700000000000 | Назарьево | пос | 7700000200600 | 124489 Некрасовка | пос | 7700000004000 | 140008 Новобратцевский | пос | 7700000002100 | Новобутаково | пос | 7700000002200 | 125481 Новомалино | пос | 7700000002300 | 124681 Подушкино | пос | 7700000002400 | 127543 Рожки | пос | 7700000200300 | 124681 Рублево | пос | 7700000002500 | Свиблово | пос | 7700000004300 | 129323 Сосновка | пос | 7700000002600 | 121500 Терехово | пос | 7700000002800 | 123423 Толстопальцево | пос | 7700000003300 | Толстопальцево | дер | 7700000004400 | 143350 Ухтомский | пос | 7700000003500 | 111402 Шлюзы | пос | 7700000003200 | 109383 (35 rows)
kladr4=#
\q
[tz@coneforest ~/work/54/doc/inf/databases]%