Документація Database Tour Зміст Індекс

Робота з запитами SQL

Початок Попередній Наступний

Зауваження:
[Database Tour не виконує запити напряму. Движок SQL програми просто допомагає вам в написанні і тестуванні запиту і передає SQL-текст на виконання движку баз даних (BDE, ADO, Interbase і т.д.), котрий, в свою чергу, або виконує його (для деяких типів баз даних), або передає на виконання серверу баз даних. Тому слід писати запити по тим правилам, які визначені для відкритої бази даних: наприклад, якщо відкрито базу даних Oracle, пишіть запит по правилам Oracle, і т.д.
Даний розділ описує загальну техніку та специфічні можливості Database Tour, що допомагають вам будувати ваші запити і отримувати їх результати. Ви не знайдете тут підручника по SQL, хоча б тому, що фізично неможливо знати всі нюанси мови SQL для всіх існуючих в світі типів баз даних. Для отримання більше інформації щодо написання SQL-запитів, будь-ласка, читайте документацію по вашій базі даних.
]

Для створення нового вікна SQL клацніть кнопку Нове вікно SQL , виберіть меню Запит | Створити... або натисніть Ctrl+Q. Ви можете створювати будь-яку кількість вікон SQL для кожної бази даних (ви обмежені лише оперативною пам'яттю).

У вікні SQL є кілька закладок:

Редагування. Тут ви вводите ваш SQL текст.

Результат. Тут показується результат запиту типу SELECT.

Історія. Ця сторінка містить історію виколнання запитів для даного вікна SQL.

SQL-редактор та підсвітка синтаксису

Виконання запитів

Запуск скриптів з багатьма SQL-виразами

Запити до кількох баз даних

Запити з параметрами та макросами

Первинне джерело даних

SQL-редактор і підсвітка синтаксису

Текст запиту (SQL текст) вводиться на закладці Редагування. Його можна ввести з клавіатури або завантажити з файлу (в т.ч. і з командної строчки). Є кілька шаблонів найчастіше використовуваних SQL-виразів, які доступні по натисненню кнопки Шаблони; виберіть шаблон і потім просто відредагуйте SQL-текст, що з'явився, для отримання потрібного SQL-виразу.

При формуванні SQL-виразу за допомогою відповідної кнопки або контекстного меню (активізується правою кнопкою миші) можна викликати функцію автоматичної підстановки назв полів, що будуть використовуватися в запиті. Це особливо корисно при вводі великої кількості полів.

SQL текст також можна зберегти в файлі або надрукувати.

SQL-редактор підтримує підсвітку SQL-синтаксису. Використовуйте меню Опції | Середовище | SQL редактор | Шрифт і колір для зміни параметрів підсвітки синтаксису. В доповнення до цього, є можливість вказати SQL-діалект для підсвітки синтаксису (закладка Редагування). Різні SQL-діалекти зазвичай призначені для використання з різними типами баз даних та мають різні набори ключових слів і деяких інших опцій, котрі можуть змінити підсвітку синтаксису для деяких елементів вашого SQL-коду. В більшості випадків SQL-діалект підбирається автоматично в залежності від типу відкритої бази даних (напр., dBase, Oracle, SQL Server). Але в деяких випадках вам, можливо, знадобиться змінити його на більш підходящий (напр., змінит SQL-діалект для вашої бази даних типу SQL Server з MS SQL 7 на MS SQL 2K і навпаки). Враховуйте, що SQL-діалект, як і сама підсвітка синтаксису, ніяк не впливає на виконання запитів, і використовується тільки для зручності перегляду SQL-коду.

При друкуванні SQL-тексту або його збереженні в форматах RTF або HTML, зберігаються кольори та синтаксична підсвітка.

Редагування SQL-тексту:

Виконання запитів

Для виконання SQL-виразу з SQL-редактору клацніть кнопку Виконати.

Зауваження: якщо в SQL-редакторі є виділений фрагмент тексту, то лише виділені вирази будуть виконані.

В разі, якщо виконано запит на вибірку даних (запит типу SELECT), результуючі дані з'являться на закладці Результат. Деякі бази даних дозволяють ці дані редагувати, якщо тип виборки даних дозволяє це робити (наприклад, якщо в запиті ви отримуєте дані тільки з однієї таблиці, не використовуєте агрегатних функцій). Для можливості редагування запитів використовуйте опцію “Живі” запити (тільки для підключень BDE). Якщо після виконання запиту кнопки редагування даних (Вилучити, Редагувати і т.д.) над таблицею даних запиту активні, значить, програмі вдалися відкрити запит в режимі редагування. Дані можна експортувати в нову таблицю або файл. Можна побудувати звіт по цим даним (відповідна кнопка або пункт меню Інструменти). Щоб роздрукувати ці дані “як є”, використовуйте друк таблиці.

Програма зберігає SQL тексти виконаних запитів (їх кількість залежить від відповідної опції), а також деяку статистичну інформацію про вже виконані запити, для кожної БД. Ця інформація знаходиться на закладці Історія відповідного вікна SQL. Її можна скопіювати в буфер (і автоматично створити багатозапитний скрипт). Для обміну текстами запитів різних БД використовуйте кнопки Експортувати SQL-історію / Завантажити SQL-історію. Для швидкого перенесення текстів запитів однієї БД до іншої відкрийте першу БД, станьте на закладку Історія та переключіться на другу БД, утримуючи SHIFT. Для навігації між збереженими текстами запитів служать кнопки Попередній SQL, Наступний SQL на закладці Редагування або подвійний клік відповідного запису в історії.

Історія з усіх вікон SQL всіх зареєстрованих у програмі баз даних баз даних записується в файл dbtour.dat (повний шлях до файлу можна побачити з меню База | Історія баз даних...). Запис в файл відбувається в таких випадках: перед виконанням запиту, при закритті бази даних, при закритті програми. Врахуйте це, якщо працюєте з багатьма копіями програми одночасно. При перевідкритті програми всі історії всіх вікон SQL всіх баз даних даних завантажуються з файлу dbtour.dat в оперативну пам'ять; потім при відкритті бази даних всі вікна SQL цієї бази даних відновлюються.

Якщо потрібно швидко побудувати запит для вибірки даних з однієї таблиці, можна просто вибрати елемент Вибірка даних... з контекстного меню потрібної таблиці в списку таблиць.

Запуск скриптів з багатьма SQL-виразами

В програмі можливо виконання багатозапитних SQL-скриптів (сценаріїв). Для цього використовуйте випадаюче меню біля кнопки Виконати. Між запитами скрипта повинен стояти розділювач (термінатор): один або кілька символів (без пробілів); термінатор задається користувачем (за допомогою того ж випадаючого меню біля кнопки Виконати). Якщо при виконанні якогось із запитів скрипта була помилка, виконання його продовжується на інших запитах. Якщо вказано файл результатів, то в нього буде записуватися інформація про результат виконання всіх запитів (в тому числі помилки).

Зауваження: якщо ви хочете, щоб виконання перервалось на першій помилці, замість вказаного вище пункту меню використовуйте просто кнопку Виконати.

Запити до кількох баз даних одночасно

З локальних баз даних є можливість будувати запити типу SELECT, які б посилалися на таблиці з зовнішньої бази даних (тільки для підключень BDE). Більше того, можна зв'язувати таблиці кількох баз даних одночасно. Локальна база даних - це база з таблицями Paradox, dBase, або FoxPro, відкрита через аліас BDE або через назву папки. Зовнішньою базою може бути посилання на папку (для локальних таблиць), джерело даних ODBC або аліас BDE. Щоб послатися на таблицю із зовнішньої бази, перед назвою таблиці напишіть двокрапку, назву бази, та ще одну двокрапку, і всю конструкцію візьміть в лапки, наприклад:

SELECT c.custno, o.orderdate

FROM ":CustDSN:customer" c, ":OrderAlias:order" o

WHERE ...

Запити з параметрами та макросами

Параметрі та макроси є свого роду змінними в SQL-тексті. Вони збільшують гнучкість при виконанні запитів, дозволяючи (без зміни тексту) змінювати запит безпосередньо перед його виконанням. Вони отримують значення безпосередньо перед виконанням запиту або від користувача, або через параметри командної строчки, або зі звіту (якщо запит відкривається зі звіту), або ж можуть бути вираховані автоматично, якщо вони є наперед визначении (див. нижче). Макроси - це завжди текстові змінні; вони замінюються в SQL-тексті своїми значеннями перед виконанням запиту. На відміну від макросів, параметри мають тип; їх значення і типи передаються серверу, а не вставляються в SQL-текст. Макроси і параметри всередині коментарів і строчкових літералів ігноруються програмою, але все-таки не рекомендується включення параметрів всередині коментарів, особливо для підключень ADO. Іноді не суттєво, використовується макрос чи параметр, але часто це має значення.

Якщо параметр чи макрос не є наперед визначеним і не заданий в командній строчці або звіті, то програма пропонує користувачу ввести значення в окремому вікні.

Макроси починаються з << і закінчуються >>. Їх головне призначення: динамічна заміна при виконнані запиту з командної строчки. Текст макросу може містити тільки букви, цифри і знак підкреслювання. Наступний SQL приклад містить макрос CUST_TYPE_LIST:

SELECT * FROM payments

WHERE customertype in (<<CUST_TYPE_LIST>>)

Значенням для такого макросу може бути, наприклад, такий текст:

3, 8, 12, 5

Зауважте, що подібний результат немоливо отримати з використанням параметрів.

Параметри починаються з двокрапки. Параметри, що містять пробіли, повинні братися в одинарні лапки. Параметричні запити зручні тим, що один і той же SQL-вираз можна використовувати для різних даних, які будуть підставлятися тільки на етапі виконання. Наступний SQL приклад містить параметр DATE:

SELECT * FROM payments

WHERE paydate = :DATE

При виконанні такого запиту програма пропонує ввести значення параметру і його тип даних, після чого продовжує виконання. Для зручності вводу параметрів, щоб тип даних параметру вибирався автоматично, достатньо в SQL-виразі відразу за параметром в окремому коментарі вказати тип параметра, як в наступному прикладі:

SELECT * FROM orders

WHERE orderno < :ORDERNO /* ParamType=Integer */

Є кілька наперед визначених параметрів, які заповнюються програмою автоматично:

<<SYSTEM_DATE>>заміняються поточною датою (з типом Date)
<<SYSTEM_DATETIME>>заміняються поточними датою і часом (з типом DateTime)
<<SYSTEM_TIME>>заміняються поточним часом (з типом DateTime)
<<SYSTEM_YEAR>>заміняються поточним роком (з типом Integer)
<<SYSTEM_MONTH>>заміняються поточним місяцем (з типом Integer)
<<SYSTEM_DAY>>заміняються поточним днем (з типом Integer)

Якщо наперед визначений параметр починається не з двокрапки, то він інтерпретується як наперед визначений макрос. У випадку цілочисельних даних результат буде одинаковий, але для інших типів даних можуть бути проблеми, тому краще не плутати макроси та параметри.

Первинне джерело даних

В запитах можна використовувати первинне джерело даних. Принцип такий: якщо поставити в SQL-тексті двокрапку і відразу за нею назву поля з первинного джерела (таблиця, що відкрита в окремому вікні), то це буде сприйнято як параметр, що дорівнює значенню відповідного поля в первинному джерелі даних.

Приклад (таблиця 1 використовується для виборки даних, таблиця 2 - як первинне джерело, поле 1 - поле з таблиці 1):

SELECT * FROM <назва таблиці 1>

WHERE <назва поля 1> = :CUSTOMER

Зі списку таблиць виберіть таблицю-джерело (таблиця 2) і відкрийте її в окремому вікні (для цього клацніть на таблиці правою кнопкою миші і виберіть відповідний пункт меню). Поле CUSTOMER повинно бути в цій таблиці, інакше ви отримаєте повідомлення про помилку. Потім клацніть кнопку З первинним джерелом (на закладці Результат) і відкрийте запит. В результаті ви отримаєте набір записів з таблиці 1, в якому значення поля 1 дорівнює значенню поля CUSTOMER з таблиці 2. При переході на інший запис таблиці 2 запит автоматично перевідкриється, підстроюючись під нове значення поля CUSTOMER.

Головне вікно програми після виконання запиту на вибірку даних:

Див. також:

 Приклади запитів

 Параметри запуску Database Tour

 Робота з даними таблиць і запитів

 Гарячі клавіші редактора SQL тексту