Министерство образования Российской Федерации Нижегородский государственный университет имени Н. И. Лобачевского Кафедра...
42 downloads
394 Views
299KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования Российской Федерации Нижегородский государственный университет имени Н. И. Лобачевского Кафедра информатики и автоматизации научных исследований
МЕТОДИЧЕСКИЕ УКАЗАНИЯ по курсу «Теория информационных систем» Раздел «Язык SQL и его реализация в СУБД FoxPro»
Нижний Новгород 2000
УДК 519.6 Методические указания по курсу «Теория информационных систем». Раздел «Язык SQL и его реализация в СУБД FoxPro» (материалы лекций, практические занятия и лабораторные работы) /Сост. Фомина И.А., Летнянчик А.А. - Нижний Новгород: Нижегородский государственный университет, 2000.
Материал предназначен для студентов специальности «Информационные системы» факультета ВМК, а также может быть интересен всем, кто в силу научных, учебных и практических целей заинтересован в изучении языка запросов
к базам данных SQL.
Данные методические указания могут быть использованы как помощь при изучении теоретического материала и при выполнении практических и лабораторных работ в терминал-классе. Составители -
канд. техн. наук, ст.преподаватель Фомина И.А. аспирант Летнянчик А.А.
Рецензент -
канд. эконом. наук доцент Реутова С.В.
Нижегородский государственный университет имени Н.И.Лобачевского 2000г.
Рабочая программа раздела Введение. Целью данного раздела рабочей программы курса «Теория информационных систем» является изучение теории и практики применения языка запросов SQL, широко применяемого в настоящее время в различных СУБД и являющегося в значительной мере стандартом языка запросов современных систем. Практические и лабораторные занятия предполагают самостоятельную работу студентов с СУБД FoxPro и выполнение ряда лабораторных работ.
Введение в язык SQL SQL (Structured Query Language) - структурированный язык запросов. При помощи этого языка можно создавать реляционные базы данных и оперировать ими. Стандарт SQL определен американским национальным институтом стандартов (American National Standards Institute - ANSI) и в настоящее время принят также ISO (International Standards Organization) в качестве международного стандарта. Большинство современных инструментальных систем и систем управления базами данных (например, СУБД FoxPro) расширяет возможности языка SQL за пределы стандарта ANSI. Литература. 1. 2. 3.
М.Грабер. Введение в SQL. /пер. с англ. - М.: Изд. «ЛОРИ», 1996. [Оригинал: Martin Gruber. Understanding SQL. SYBEX, 1990.] Джеймс Р. Грофт, Пол Н. Вайнберг. SQL: полное руководство /пер. с англ. - Киев.: Изд. «BHV», 1999 Каратыгин С.А., Тихонов А.Ф., Тихонова Л.Н. Работа в Visual FoxPro на примерах. М.: БИНОМ, 1995.
Обзор команд языка. Язык SQL является непроцедурным языком, то есть все действия выполняются операторами без объединения их в процедуры. Этим SQL отличается от других языков. Использование языка SQL в СУБД (в частности в FoxPro) позволяет одним оператором SQL заменить довольно сложную программу, написанную на языке программирования FoxPro. Кроме того операторы языка SQL оптимизированы (путем использования технологии Rushmore), что значительно ускоряет работу по сравнению с эквивалентной программой. Команда CREATE CURSOR. Команда CREATE CURSOR предназначена для создания временной таблицы данных. Каждое поле создаваемой таблицы характеризуется именем, типом, шириной и точностью. Информация о полях таблицы может быть задана как непосредственно в операторе, так и в специальном массиве в памяти. Команда CREATE TABLE. Команда CREATE TABLE предназначена для создания новой таблицы данных. Аналогична команде CREATE CURSOR, но создает постоянно хранящуюся на магнитном диске таблицу. Команда INSERT. Команда INSERT добавляет запись в конец существующей таблицы. Данные для новой записи указываются в самой команде или заносятся из указанного массива в памяти.
Команда SELECT. Команда SELECT используется для выборки данных из одной или нескольких таблиц базы данных. Команда используется как любая другая команда языка FoxPro и может присутствовать: в командном окне; в программе FoxPro; в окне диалогового построения запроса по образцу (RQBE). Синтаксис SELECT [предикат] { * | таблица.* | [таблица.] поле_1 [AS псевдоним_2] [, [таблица.] поле_2 [AS псевдоним_2] [, ...]]} FROM выражение [, ...] [IN внешняяБазаДанных] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNER ACCESS OPTION] Ниже перечислены аргументы инструкции SELECT: Элемент Описание предикат Один из следующих предикатов отбора: ALL, DISTINCT, DISTINCTROW или TOP. Предикаты используются для ограничения числа возвращаемых записей. Если они отсутствуют, по умолчанию используется предикат ALL. * Указывает, что выбраны все поля заданной таблицы или таблиц. таблица Имя таблицы, из которой должны быть отобраны записи. поле_1, поле_2 Имена полей, из которых должны быть отобраны данные. Если включить несколько полей, они будут извлекаться в указанном порядке. псевдоним_2, псевдоним_2 Имена, которые станут заголовками столбцов вместо исходных названий столбцов в таблице. выражение Имена одной или нескольких таблиц, которые содержат отбираемые данные. ВнешняяБазаДанных Имя базы данных, которая содержит таблицы, указанные с помощью аргумента выражение, если они не находятся в текущей базе данных. Дополнительные сведения. При выполнении этой операции ядро базы данных находит указанную таблицу или таблицы, извлекает заданные столбцы, выделяет строки, соответствующие условию отбора, и сортирует или группирует результирующие строки в указанном порядке. Инструкции SELECT не изменяют данные в базе данных. Обычно слово SELECT является первым словом инструкции SQL. Большая часть инструкций SQL является инструкциями SELECT или SELECT...INTO. В качестве примера будем рассматривать базу данных, состоящую из 3 таблиц.
Таблица 1. SNUM 001 002 003
Salespeople (продавцы) SNAME Иванов Петров Сидоров
CITY Н. Новгород Бор Н. Новгород
COMM 0.12 0.9 0.14
004
Денисов
Таблица 2. CNUM 001 002 003
ТАБЛИЦА 1. Snum Sname City Comm ТАБЛИЦА 2. Cnum Cname City rating snum ТАБЛИЦА 3. onum amt odate cnum snum
0.7
Customers (покупатели) CNAME Дубинин Васильев Ильин
Таблица 3. ONUM 001 002 003
Бор
CITY Н. Новгород Бор Ворсма
RATING 3 2 4
SNUM 003 001 002
CNUM 001 002 003
SNUM 003 001 002
Orders (заказы) AMT 145 325 221
ODATE 10.10.2000 10.10.2000 10.10.2000
Номер служащего (уникальный номер продавца) Имя продавца Место расположения продавца Вознаграждение (комиссионные) продавца в форме с десятичной Точкой Уникальный номер покупателя Имя покупателя Место расположения покупателя Код, определяющий уровень предпочтения покупателя. (Чем больше число, тем больше предпочтение) Номер продавца для данного покупателя (из таблицы 1) Уникальный номер покупки Сумма заказа Дата покупки Номер покупателя (из таблицы 2) Номер продавца, обслуживающего покупателя (из таблицы 1)
Формирование запроса. В простейшей форме команда SELECT дает инструкцию для поиска информации в базе данных.
Предложение FROM Указывает таблицы или запросы, которые содержат поля, перечисленные в инструкции SELECT. Синтаксис SELECT списокПолей FROM выражение [IN внешняяБазаДанных] Ниже перечислены аргументы инструкции SELECT, содержащей предложение FROM: Элемент Описание списокПолей Имена одного или нескольких полей, из которых отбираются данные, вместе с псевдонимами, статистическими функциями SQL, предикатами отбора (ALL, DISTINCT, DISTINCTROW
Выражение
внешняяБазаДанных
или TOP) и другими элементами инструкции SELECT. Выражение, определяющее одну или несколько таблиц, откуда извлекаются данные. Это выражение может быть именем отдельной таблицы, именем сохраненного запроса или результатом операции INNER JOIN, LEFT JOIN, или RIGHT JOIN. Полное имя внешней базы данных, содержащей таблицы, указанные в аргументе выражение.
Дополнительные сведения Предложение FROM должно присутствовать в каждой инструкции SELECT. Порядок следования имен таблиц в аргументе "выражение" не существенен. Для повышения быстродействия и облегчения применения рекомендуется использовать присоединение таблиц вместо предложения IN при загрузке данных из внешней базы данных. Для отбора всех полей таблицы можно использовать символ звездочки (*). Следующая инструкция отбирает все поля из таблицы "Продавцы": SELECT * ; FROM salespeople В результате данного запроса будет сформирована следующая таблица: SNUM SNAME CITY COMM 001 Иванов Н. Новгород 0.12 002 Петров Бор 0.9 003 Сидоров Н. Новгород 0.14 004 Денисов Бор 0.7 Явный список используется для формирования произвольного множества столбцов результата. Например, результатом следующего запроса SELECT snum, sname, city ; FROM salespeople является таблица: SNUM SNAME CITY 001 Иванов Н. Новгород 002 Петров Бор 003 Сидоров Н. Новгород 004 Денисов Бор Сразу после ключевого слова SELECT следует список столбцов результата (полей таблицы). Поля в списке могут следовать в произвольном порядке, столбцы, не представленные в списке, не включаются в результат. Запрос только извлекает данные, следовательно, никакого воздействия на исходные данные в таблице Salespeople не происходит. Для устранения избыточных (то есть повторяющихся) данных используется ключевое слово DISTINCT. В нижеследующем примере приведены команды SELECT с устранением и без устранения избыточности. SELECT city ; SELECT DISTINCT city ; FROM salespeople FROM salespeople City Н. Новгород Бор Н. Новгород
city Н. Новгород Бор
Если требуется другое имя поля, или выражение, создающее поле, не определяет имя, используйте зарезервированное слово AS. В следующем примере заголовок "ФИО" становится именем объекта sname: SELECT snum AS ФИО ; FROM salespeople При работе со статистическими функциями или запросами, которые возвращают повторяющиеся имена полей, используйте предложение AS для задания другого имени поля. В следующем примере заголовок " Количество покупателей " задается для возвращаемого поля: SELECT COUNT (DISTINCT cnum) ; AS "Количество покупателей" FROM orders
Предложение WHERE Определяет, какие записи из таблиц, перечисленных в предложении FROM, следует включить в результат выполнения инструкции SELECT, UPDATE или DELETE. Синтаксис SELECT списокПолей FROM выражение WHERE условиеОтбора Инструкция SELECT, содержащая предложение WHERE, состоит из трех частей: Элемент Описание СписокПолей Имена одного или нескольких полей, из которых отбираются данные, вместе с псевдонимами, предикатами отбора (ALL, DISTINCT, DISTINCTROW или TOP) и другими элементами инструкции SELECT. Выражение Имена одной или нескольких таблиц, из которых отбираются данные. УсловиеОтбора Выражение, которому должны удовлетворять записи, включаемые в результат выполнения запроса. Дополнительные сведения Ядро базы данных отбирает записи, соответствующие условиям, перечисленным в предложении WHERE. Если не задавать предложение WHERE, запрос возвращает все строки таблицы. Если в запросе определить несколько таблиц и не включить предложение WHERE или JOIN, запрос будет возвращать скалярное произведение таблиц. Предложение WHERE не является обязательным, однако, если оно присутствует, то должно следовать после предложения FROM. В предложении WHERE может быть 5 основных условий отбора: • сравнение: =, <> ,<, >, <=, >=; • проверка на принадлежность диапазону значений (ключевое слово BETWEEN); • проверка на членство в множестве (ключевое слово IN); • проверка на равенства значению NULL (ключевое слово IS NULL, IS NOT NULL). Простые условия поиска можно объединять в более сложные с помощью ключевых слов AND, OR, NOT (составные условия поиска). Предложение WHERE может содержать до 40 выражений, связанных логическими операторами. Например, можно отобрать всех покупателей из Н. Новгорода, имеющих рейтинг не ниже 2: SELECT * ; FROM customers ; where city = 'Н. Новгород' AND rating > 2 CNUM CNAME CITY RATING SNUM 001 Дубинин Н. Новгород 3 003
Найти всех покупателей, рейтинг которых находится в диапазоне от 2 до 4: SELECT * ; FROM customers ; where rating BETWEEN 2 AND 4 CNUM CNAME CITY RATING SNUM 001 Дубинин Н. Новгород 3 003 002 Васильев Бор 2 001 003 Ильин Ворсма 4 002 Имена полей, которые содержат пробелы или знаки препинания, а также символы дат необходимо заключать в апострофы. Выбрать всех покупателей из Н. Новгорода и Ворсмы: SELECT * ; FROM customers ; where city IN ('Н. Новгород', 'Ворсма') CNUM CNAME CITY RATING SNUM 001 Дубинин Н. Новгород 3 003 003 Ильин Ворсма 4 002 Выбрать всех покупателей, фамилии которых начинаются на букву И: SELECT * ; FROM customers ; where cname LIKE 'И%' CNUM CNAME CITY RATING SNUM 003 Ильин Ворсма 4 002 Найти все заказы, сделанные в октябре 2000 года. SELECT * ; FROM orders ; where odate BETWEEN > '01/10/00 AND 30/10/00'
Предложение GROUP BY Объединяет записи с одинаковыми значениями в указанном списке полей в одну запись. Если инструкция SELECT содержит статистическую функцию SQL, например, Sum или Count, то для каждой записи будет вычислено итоговое значение. Синтаксис SELECT списокПолей FROM таблица WHERE условиеОтбора [GROUP BY группируемыеПоля] Ниже перечислены аргументы инструкции SELECT, содержащей предложение GROUP BY: Элемент Описание списокПолей Имена одного или нескольких полей, из которых отбираются данные, вместе с псевдонимами, статистическими функциями SQL, предикатами отбора (ALL, DISTINCT, DISTINCTROW или TOP) и другими элементами инструкции SELECT. таблица Имя таблицы, из которой отбираются записи. Для получения более подробных сведений смотрите описание предложения FROM. условиеОтбора Условия отбора записей. Если инструкция содержит
предложение WHERE, то ядро базы данных Microsoft Jet выполняет группировку значений после применения к записям условий отбора WHERE. группируемыеПоля Имена полей (до 10), которые используются для группировки записей. Порядок имен полей в аргументе группируемыеПоля определяет уровень группировки для каждого из этих полей. Дополнительные сведения Предложение GROUP BY является необязательным. Итоговые значения не рассчитываются, если инструкция SELECT не содержит статистической функции SQL. Значения Null, которые находятся в полях, заданных в предложении GROUP BY, группируются и не опускаются. Однако статистические функции SQL не обрабатывают значения Null. Если поле, включенное в предложение GROUP BY, не является полем типа Memo, оно может содержать ссылку на любое поле, перечисленное в предложении FROM, даже если это поле не включено в инструкцию SELECT, при условии, что инструкция SELECT содержит по крайней мере одну статистическую функцию SQL. Ядро базы данных не поддерживает группировку полей МЕМО. При использовании предложения GROUP BY все поля в списке полей инструкции SELECT должны быть либо включены в предложение GROUP BY, либо использоваться в качестве аргументов статистической функции SQL. Найти наибольший заказ для каждого из покупателей: SELECT cnum, MAX(amt) ; FROM orders ; GROUP BY cnum Найти наибольший заказ, сделанный каждым из продавцов, на каждую дату: SELECT snum, odate, MAX(amt) ; FROM orders ; GROUP BY snum, odate
Предложение HAVING Определяет, какие сгруппированные записи отображаются при использовании инструкции SELECT с предложением GROUP BY. После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING отберет те из полученных записей, которые удовлетворяют условиям отбора, указанным в предложении HAVING. Синтаксис SELECT списокПолей FROM таблица WHERE условиеОтбора GROUP BY группируемыеПоля [HAVING условиеГруппировки] Ниже перечислены аргументы инструкции SELECT, содержащей предложение HAVING: Элемент Описание списокПолей Имена одного или нескольких полей, из которых отбираются данные, вместе с псевдонимами, статистическими функциями SQL, предикатами отбора (ALL, DISTINCT, DISTINCTROW или TOP) и другими элементами инструкции SELECT. таблица Имя таблицы, из которой отбираются записи. Для получения более подробных сведений смотрите описание предложения
FROM. условиеОтбора Условия отбора записей. Если инструкция содержит предложение WHERE, то ядро базы данных Microsoft Jet выполняет группировку значений после применения к записям условий отбора WHERE. группируемыеПоля Имена полей (до 10), которые используются для группировки записей. Порядок имен полей в аргументе группируемыеПоля определяет уровень группировки для каждого из этих полей. условиеГруппировки Выражение, определяющее, какие сгруппированные записи следует отображать. Дополнительные сведения Предложение HAVING является необязательным. Предложение HAVING похоже на предложение WHERE, которое определяет, какие записи должны быть отобраны. После того как записи будут сгруппированы с помощью предложения GROUP BY, предложение HAVING указывает, какие из полученных записей должны быть отобраны. Используйте предложение WHERE для исключения записей из группировки, а предложение HAVING для применения фильтра к записям после группировки. Предложение HAVING может содержать до 40 выражений, связанных логическими операторами, такими как And и Or. Найти наибольший заказ, превышающий 200: SELECT snum, odate, MAX(amt) ; FROM orders ; GROUP BY snum, odate ; HAVING MAX(amt) > 200 ONUM AMT ODATE 002 325 10.10.2000 003 221 10.10.2000 Аргументы HAVING подчиняются тем же правилам, что и аргументы SELECT в команде, использующей GROUP BY, и должны иметь единственное значение для каждой выходной группы. В связи с этим, в предложении HAVING нельзя указывать поле odate, так как оно может иметь более одного значения для каждой группы. Например, запрос на получение сведений о максимальной продаже для каждого продавца на 10.10.00 должен выглядеть следующим образом: SELECT snum, MAX(amt) ; FROM orders ; WHERE odate = '10/10/2000' GROUP BY snum
Инструкция ORDER BY Сортирует записи, полученные в результате запроса, в порядке возрастания или убывания на основе значений указанного поля или полей. Синтаксис SELECT списокПолей FROM таблица WHERE условиеОтбора [ORDER BY поле_1 [ASC | DESC ][, поле_2 [ASC | DESC ]][, ...]]] Ниже перечислены аргументы инструкции SELECT, содержащей предложение ORDER BY: Элемент Описание списокПолей Имена одного или нескольких полей, из которых отбираются
данные, вместе с псевдонимами, статистическими функциями SQL, предикатами отбора (ALL, DISTINCT, DISTINCTROW или TOP) и другими элементами инструкции SELECT. таблица Имя таблицы, из которой отбираются записи. Для получения более подробных сведений смотрите описание предложения FROM. условиеОтбора Условия отбора записей. Если инструкция содержит предложение WHERE, то ядро базы данных Microsoft Jet выполняет группировку значений после применения к записям условий отбора WHERE. поле_1, поле_2 Имена полей, по которым сортируются записи Дополнительные сведения Предложение ORDER BY является необязательным. Однако оно необходимо для отображения данных в порядке сортировки. По умолчанию используется порядок сортировки по возрастанию (от "A" до "Я" и от 0 до 9). Обе приведенные ниже инструкции SQL одинаково сортируют записи по фамилиям служащих: SELECT sname ; SELECT sname ; FROM salespeople ; FROM salespeople ; ORDER BY sname ORDER BY sname ASC Для сортировки по убыванию (от "Я" до "A" и от 9 до 0), следует добавить зарезервированное слово DESC после имени каждого поля, которое нужно отсортировать в убывающем порядке. В приведенной ниже инструкции SQL отбор происходит на основе количества заказов для каждого продавца, которые сортируются по убыванию: SELECT snum, COUNT (onum) ; FROM orders ; GROUP BY snum ; ORDER BY COUNT (onum) DESC Предложение ORDER BY может содержать несколько полей. Сначала записи сортируются по первому полю в списке ORDER BY, затем записи, имеющие совпадающие значения в первом поле, сортируются по второму полю и т.п.
Многотабличные запросы предложение WHERE. Если несколько таблиц, включенных в предложение FROM, содержат одноименные поля, перед именем такого поля следует ввести имя таблицы и оператор . (точка). Следующая инструкция SQL отберет поле sname из таблицы "Продавцы" и поле cname из таблицы "Покупатели" в соответствии с местом их проживания (в одном и том же городе): SELECT sname, cname ; FROM salespeople, customers ; where salespeople.city = customers.city SELECT sname, cname ; FROM salespeople JOIN customers using city
Вложение запросов
SQL позволяет вкладывать запросы друг в друга. Обычно внутренний запрос генерирует значения, которые тестируются на предмет истинности предиката. Чтобы оценить внешний (основной) запрос, SQL должен оценить внутренний запрос в предложении WHERE таким образом ,как если бы запрос был единственным. Пример. Извлечь все заказы для определённого продавца "Иванов". В данном запросе известно имя, но не известен номер продавца. SELECT *; FROM Orders; WHERE snum = ; (SELECT snum; From Salespeople; WHERE sname= "Иванов") Чтобы оценить внешний (основной запрос), SQL должен вначале определить внутренний запрос (подзапрос) в предложении WHERE: просматриваются все строки таблицы Salespeople и выбираются те, для которых значение поля sname равно Иванов, и для этих строк выбираются значения поля snum Подзапрос должен выбирать только один столбец, а тип данных этого столбца должен соответствовать типу значения, указанному в предикате. Затем основной запрос выполняется как обычный: SELECT *; FROM Orders; WHERE snum =001 Следует отметить, что подзапрос в данном случае возвращает только одно значение. Если вместо WHERE sname= "Иванов" подставить WHERE сity= "Н. Новгород", то в результате выполнения подзапроса получается несколько значений. Это делает невозможным оценку предиката основного запроса на предмет истинности или ложности, что приводит к оценке запроса как ошибочного. Таким образом, при использовании подзапросов, основанных на операторах отношения, нужно быть уверенным, что выходными данными подзапроса является только одна строка.
Описание WITH OWNER ACCESS При работе в сети в составе защищенной рабочей группы используйте с запросом это описание, чтобы предоставить пользователю, выполняющему запрос, те же разрешения, которые имеются у владельца запроса. Синтаксис инструкция SQL WITH OWNERACCESS OPTION Дополнительные сведения Описание WITH OWNERACCESS OPTION является необязательным. Следующий пример позволяет пользователю просмотреть сведения о зарплате (даже, если в остальных случаях пользователь не имеет разрешений на просмотр ведомости о зарплате). Предполагается, что у владельца запроса эти разрешения есть: SELECT snum
WITH OWNERACCESS OPTION; Если в обычных условиях пользователю запрещено создавать или дополнять таблицы, описание WITH OWNERACCESS OPTION, позволяет разрешить этому пользователю выполнить запрос на создание таблицы или запрос на добавление записей. Если требуется соблюдать правила защиты рабочих групп и разрешения пользователей, не пользуйтесь описанием WITH OWNERACCESS OPTION. Этот элемент требует наличия доступа к файлу System.mdw базы данных. Он полезен только при использовании в защищенных сетевых реализациях. Предложение IN Определяет таблицы в любой внешней базе данных, с которой ядро базы данных Microsoft Jet может установить связь, например в базе данных dBASE, Paradox или внешней базе данных с ядром Microsoft Jet. Синтаксис Чтобы определить результирующую таблицу: [SELECT | INSERT] INTO назначение IN {путь | ["путь" "тип"] | ["" [тип; DATABASE = путь]]} Чтобы определить исходную таблицу: FROM выражение IN {путь | ["путь" "тип"] | ["" [тип; DATABASE = путь]]} Ниже перечислены аргументы инструкции SELECT, содержащей предложение IN: Элемент Описание назначение Имя внешней таблицы, в которую добавляются данные. выражение Имена одной или нескольких таблиц, откуда отбираются данные. Это выражение может быть именем отдельной таблицы, сохраненным запросом или результатом операции INNER JOIN, Ошибка! Закладка не определена.. путь Полный путь к каталогу или файлу, в котором находится таблица. тип Имя типа базы данных, в которой создана таблица, если база данных несовместима со стандартом Microsoft Jet (например, dBASE III, dBASE IV, Paradox 3.x или Paradox 4.x). Дополнительные сведения С помощью предложения IN можно одновременно подключиться только к одной внешней базе данных. В некоторых случаях аргумент путь задает ссылку на каталог, содержащий файлы базы данных. Например, во время работы с таблицами баз данных dBASE, FoxPro или Paradox аргумент путь ссылку на каталог, содержащий файлы .dbf или .db. Имя файла таблицы извлекается из аргументов назначение или выражение. Чтобы определить базу данных, несовместимую со стандартом Microsoft Jet, следует добавить к ее имени знак точки с запятой (;) и заключить имя в одинарные (' ') или прямые (" ") кавычки. Например, 'dBASE IV;' или "dBASE IV;". Кроме того, для описания внешней базы данных можно использовать зарезервированное слово DATABASE. Например, следующие строки описывают одну и ту же таблицу:
... FROM Таблица IN "" [dBASE IV; DATABASE=C:\DBASE\DATA\SALES;]; ... FROM Таблица IN "C:\DBASE\DATA\SALES" "dBASE IV;" Предикаты ALL, DISTINCT, DISTINCTROW, TOP Позволяют отобрать записи среди выбранных с помощью запроса на языке SQL. Синтаксис SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] FROM таблица Ниже перечислены аргументы инструкции SELECT, содержащей эти предикаты: Элемент Описание ALL Если инструкция SQL не содержит ни одного предиката, то подразумевается предикат ALL. Ядро базы данных Microsoft Jet отбирает все записи, соответствующие условиям, заданным в инструкции SQL. DISTINCT Исключает записи, которые содержат повторяющиеся значения в выбранных полях. Чтобы запись была включена в результат выполнения запроса, значения в каждом поле, включенном в инструкцию SELECT, должны быть уникальными. DISTINCTROW Опускает данные, основанные на целиком повторяющихся записях.Предикат DISTINCTROW влияет на результат только в том случае, если в запрос включены не все поля из анализируемых таблиц. Предикат DISTINCTROW игнорируется, если запрос содержит только одну таблицу или все поля всех таблиц. TOP n [PERCENT] Возвращает определенное число записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY.Предикат TOP не осуществляет выбор между равными значениями. Предикат ASC обеспечивает возврат последних значений. Значение, следующее после предиката TOP должно быть числовым значением типа Integer без знака.Предикат TOP не влияет на возможность обновления запроса. таблица Имя таблицы, из которой отбираются записи. Задания на самостоятельную работу. Задания на самостоятельную работу ориентированы на следующую базу данных:
S# Номер поставщика
P#
SNAME Имя Поставщика
PNAME
STATUS Рейтинг Поставщика
COLOR
Таблица 1(Поставщики). SITY Город
Таблица 2(Деталь-товар). WEIGHT CITY
Номер Детали
Y# Номер Проекта
S# Номер Поставщика
Наименование Детали
Цвет
Место Хранения
Таблица 3???? SITY Место выполнения проекта
YNAME Имя Проекта
P# Номер Детали
Вес
Y# Номер проекта
Таблица 4??????. QTY Количество
Предлагаемые задачи для самостоятельной работы по языку запросов к базам данных SQL. 1. Получить все пары имен городов таких, что поставщик, находящийся в 1-ом городе, поставляет деталь, хранящуюся во 2-ом городе. 2. Получить все пары номеров поставщиков, таких что оба поставщика в каждой паре размещены в одном и том же городе. 3. Для каждой поставляемой детали получить номер детали и общее количество поставки. 4. Получить номера всех деталей, поставляемых более, чем одним поставщиком. 5. Получить имена поставщиков, поставляющих деталь Р2. 6. Получить имена поставщиков, поставляющих хотя бы одну красную деталь. 7. Получить номера поставщиков, поставляющих все детали. 8. Получить имена поставщиков, не поставляющих деталь Р2. 9. Получить номера поставщиков, статус которых меньше текущего максимального статуса и которые находятся в городах "А" или "В". 10. Получить номера деталей, которые или весят больше 800г, или поставляются поставщиком S2, или и то и другое. 11. Получить все тройки "№ поставщика-№ детали № проекта", для которых поставщик, деталь и проект размещены в одном городе. 12. Получить все тройки "№ поставщика-№ детали № проекта", для которых поставщик, деталь и проект не размещены в одном городе. 13. Получить все тройки "№ поставщика-№ детали № проекта", для которых никакие из двух выводимых поставщиков, деталей и проектов не размещены в одном городе. 14. Получить номера деталей, поставляемых поставщиком в "А". 15. Получить номера деталей, поставляемых поставщиком в "А" для проекта в "А". 16. Получить все пары названий городов, для которых поставщик из 1-го города обеспечивает проект во 2-м городе. 17. Получить номера деталей, поставляемых для всех проектов, обеспечиваемых поставщиком из того же города, где размещён проект. 18. Получить номера проектов, обеспечиваемых по крайней мере одним поставщиком не из того же города, где размещён проект. 19. Получить все пары номеров деталей, таких что обе поставляются одновременно одним поставщиком. 20. Получить общее число проектов, обеспечиваемых поставщиком S1. 21. Получить общее количество деталей Р1, поставляемых поставщиком S1.
22. Для каждой детали, поставляемой для проекта, получить номер детали, номер проекта и соответствующее общее количество. 23 Получить номера деталей, поставляемых для некоторого проекта со средним количеством больше 200. 24. Получить имена проектов, обеспечиваемых поставщиком S1. 25. Получить цвета деталей, поставляемых поставщиком S1. 26. Получить номера деталей, поставляемых для какого - либо проекта в "А". 27. Получить номера проектов, использующих хотя бы одну деталь, имеющуюся у поставщика S1. 28. Получить номера поставщиков, поставляющих по крайней мере одну деталь, которая поставляется хотя бы одним поставщиком, причем в его поставках есть по крайней мере одна красная деталь. 29. Получить номера поставщиков, статус которых меньше статуса поставщика S1. 30. Получить номера проектов, город которых стоит первым в алфавитном списке городов. 31. Получить номера проектов, для которых среднее количество поставляемых деталей больше, чем наибольшее количество любых деталей, поставляемых для проекта J1. 32. Получить номера поставщиком, поставляющих деталь Р1 для некоторого проекта в количестве, большем среднего количества деталей в поставках для этого проекта. 33. Получить номера проектов, для которых не поставляются красные детали поставщиками из "А". 34. Получить номера проектов, полностью обеспечиваемых поставщиком S1. 35. Получить номера деталей, поставляемых для проектов, которые выполняются в "А". 36. Получить номера поставщиков, поставляющих одну и ту же деталь для всех проектов. 37. Получить номера проектов, для которых все детали поставляет поставщик S1. 38. Получить все города, в которых расположен по крайней мере один поставщик, одна деталь, один проект. 39. Получить номера деталей, поставляемых либо поставщиком из "А", либо для проекта в "А". 40. Получить пары "номер поставщика - номер детали", такие, что данный поставщик не поставляет данную деталь. 41. Получить все пары номеров поставщиков, таких что оба поставщика поставляют в точности одно и то же множество деталей.