Использование sql для выборки данных из таблицы icon

Использование sql для выборки данных из таблицы



НазваниеИспользование sql для выборки данных из таблицы
Дата конвертации23.04.2013
Размер344.17 Kb.
ТипДокументы
скачать >>>

Выборка данных

Одной из задач, наиболее часто возникающих при работе с базами данных, является выборка данных, то есть извлечение из базы данных информации, отвечающей ряду требований, заданных пользователем.

Использование SQL для выборки данных из таблицы

Одним из наиболее эффективных и универсальных способов выборки данных из таблиц базы данных является использование запросов языка SQL. Команды SQL подразделяются на несколько категорий. Для выборки данных используются команды, относящиеся к так называемому языку запросов DQL (Data Query Language).

SQL-запросы можно использовать как при работе с локальными базами данных, так и с SQL-серверами баз данных (Oracle, Informix, Sybase, InterBase, Microsoft SQL Server). Причем при формировании SQL-запросов не имеет особого значения, какая система управления базами данных используется, так как команды языка SQL стандартизованы (стандарт ANSI SQL 92). Однако следует учитывать, что производители СУБД обычно предлагают свои реализации SQL, которые могут включать расширения команд стандарта и даже отклонения от него. Тем не менее большинство команд SQL имеют одинаковый или очень похожий синтаксис в различных реализациях. Поэтому, изучив одну из реализаций SQL, впоследствии можно легко перейти на другую.

В Delphi для работы с таблицами локальных баз данных с использованием BDE применяется собственная реализация языка SQL, называемая локальным SQL (Local SQL). Данная реализация является подмножеством языка SQL 92. Несмотря на то что она не содержит отклонений от стандарта, ее возможности несколько урезаны.

При работе с SQL-серверами обработка запроса выполняется на стороне сервера. Поэтому особенности реализации языка SQL в этом случае определяются используемым SQL-сервером.

В Delphi 5 также поддерживается возможность работы с базами данных посредством SQL-запросов с использованием технологии ADO. В этом случае взаимодействие с базой данных производится средствами драйверов ODBC и OLE DB.

^ Язык запросов DQL

Язык запросов, являющийся одной из категорий языка SQL, состоит всего из одной команды SELECT Эта команда вместе с множеством опций и предложений используется для формирования запросов к базе данных

Запросы формируются для извлечения из таблиц базы данных информации, соответствующей некоторым требованиям, задаваемым пользователем.

Оператор SELECT не используется автономно, вместе с ним обязательно должны задаваться уточняющие предложения. Предложения, используемые совместно с командой SELECT, могут быть обязательными и дополнительными. Обязательным является только одно предложение — FROM, без которого оператор SELECT не может использоваться.


^ Простейшая форма оператора SELECT

Оператор SELECT вместе с предложением FROM используется для получения информации из базы данных. Синтаксис простейшей формы оператора SELECT приведен ниже:

SELECT {* | ALL | DISTINCT fieldl, field2. . . fieldN} FROM tablel {. tab1e2. ... . tableN}

Здесь за ключевым словом SELECT следует список полей, которые возвращаются в результате выполнения запроса:

Q имена полей в списке разделяются через запятую;

О для выборки всех полей таблицы (таблиц) используется символ подстановки «*»;

G опция ALL (задана по умолчанию) означает, что результат выборки будет содержать все записи, включая дублирующие друг друга;

Q при использовании опции DISTINCT результат запроса не будет содержать дублирующихся строк.

Совместно с командой SELECT всегда используется предложение FROM, с помощью которого указывается имя таблицы (таблиц), из которой производится выборка. Если в предложении FROM указывается несколько таблиц, то их имена разделяются запятыми.

Выше мы уже рассмотрели пример использования оператора SELECT для выборки всей информации, содержащейся в таблице «Товары». Чтобы выбрать не все поля, а лишь некоторые, необходимо после слова SELECT указать имена полей, которые будут включены в результат выборки. В качестве примера ниже приведен запрос, возвращающий значения только трех полей: «Код товара», «Наименование» и «Цена»:

SELECT [Код товара]. Наименование. Цена FROM Товары

СОВЕТ Обратите внимание, что при указании в списке оператора SELECT имен полей, содержащих пробел, их необходимо заключать в квадратные скобки. Это правило необходимо выполнять и для имен таблиц с пробелами, указываемых, например, в предложении FROM.

В результате выполнения данного запроса возвращаются все записи, содержащиеся в трех полях таблицы «Товары» (рис. 11.5).

ПРИМЕЧАНИЕ Для выполнения запроса нет необходимости перекомпилировать программу. Достаточно во время ее выполнения ввести текст запроса в поле ввода и нажать на кнопку Выполнить запрос.

Рассмотрим теперь пример использования опции DISTINCT. Для этого выберем только одно поле — «Наименование», в котором содержатся дублирующие строки:

SELECT DISTINCT Наименование FROM Товары

В результате выполнения этого запроса выбрано только 15 записей из 16, так как в выборку включено только одно значение «Microsoft Office 2000»

^ Задание условий при выборке данных

Для ограничения отбираемой из базы данных информации оператор SELECT позволяет использовать условие, которое задается с помощью предложения WHERE. В случае реализации условной выборки оператор SELECT имеет следующий вид:

SELECT {* | ALL | DISTINCT fieldl. field2. . . fieldN} FROM tablel {. table2. ... . tableN} WHERE условие

Специальные операторы языка SQL, применяемые для задания условия, можно разделить на следующие группы:

Q операторы сравнения; О логические операторы; Q операторы объединения; Q операторы отрицания.

Результатом выполнения каждого из этих операторов является логическое значение (true или false). Если для некоторой записи оператор возвращает значение true, то запись включается в результат выборки, если fal se — не включается.

^ Операторы сравнения

Операторы сравнения используются в запросах SQL для наложения ограничений на информацию, возвращаемую в результате выполнения запроса. Это типичные операторы, существующие во всех алгоритмических языках:

О оператор равенства «=» используется для отбора записей, в которых значение определенного поля точно соответствует заданному;

О оператор неравенства «<>» возвращает значение true, если значение поля не совпадает с заданным значением;

О операторы «меньше» и «больше» (соответственно, «<» и «>») позволяют отбирать записи, в которых значение определенного поля меньше или больше некоторой заданной величины;

Q операторы «меньше или равно» и «больше или равно» (соответственно, «<=» и «>=») представляют собой объединение операторов «меньше» и «равно», «больше» и «равно». В отличие от операторов «<» и «>» операторы «<=» и «>=» возвращают значение true, если значение поля совпадает с заданным значением.

В качестве примера рассмотрим запрос, выбирающий из таблицы «Товары» только те записи, категория товаров в которых равна 2:

SELECT * FROM Товары WHERE Категория-2

^ Логические операторы

К логическим относятся операторы, в которых для задания ограничений на отбор данных используются специальные ключевые слова. В SQL определены следующие логические операторы: Is null, BETWEEN...AND, IN, LIKE, EXISTS, UNIQUE, ALL, ANY.

^ Оператор IS NULL

Оператор IS NULL предназначен для сравнения текущего значения поля со значением NULL. Он используется для отбора записей, в некоторое поле которых не занесено никакое значение.

Для иллюстрации использования этого оператора воспользуемся таблицей «Клиенты». С помощью приведенного ниже запроса произведем выборку из нее записей клиентов, у которых не указано название предприятия, которое они представляют:

SELECT Фамилия. Имя. Отчество. Телефон. Город, Адрес

FROM Клиенты

WHERE Предприятие IS NULL

^ Оператор BETWEEN...AND

Оператор BETWEEN..AND применяется для отбора записей, в которых значения поля находятся внутри заданного диапазона. Границы диапазона включаются в условие отбора.

Чтобы продемонстрировать работу этого оператора, вернемся к таблице «Товары» и выберем в ней товары, цена которых находится в диапазоне от 200 до 2000. Для этого сформируем следующий запрос:

SELECT *

FROM Товары

WHERE Цена BETWEEN 200 AND 2000

данных

Оператор IN

Оператор IN используется для выборки записей, в которых значение некоторого поля соответствует хотя бы одному из значений заданного списка.

Выберем из таблицы «Клиенты» список клиентов, которые живут в Беларуси, Украине или Казахстане:

SELECT Фамилия. Иня. Отчество. Страна

FROM Клиенты

WHERE Страна IN ('Беларусь','Украина'.'Казахстан')

^ Оператор LIKE

Оператор LIKE применяется для сравнения значения поля со значением, заданным при помощи шаблонов. Для задания шаблонов используются два символа:

Q знак процента «£» — заменяет последовательность символов любой (в том числе и нулевой) длины;

Q символ подчеркивания «_» — заменяет любой единичный символ.

Найдем в таблице «Клиенты» записи, в которых фамилия клиента начинается с буквы «М»:

SELECT Фамилия, Имя, Отчество. Телефон

FROM Клиенты

WHERE Фамилия LIKE 'МГ

В результате выполнения этого запроса выбрано 4 записи (рис. 11.11).

А теперь найдем в этой же таблице записи, для которых номер телефона начинается на цифры (816)025-61, а две последние цифры неизвестны:

SELECT Фамилия. Имя. Отчество. Телефон

FROM Клиенты

WHERE Телефон LIKE Ч816)025-61_'

При выполнении данного запроса отобраны две записи (рис. 11.12).

^ Оператор EXISTS

Оператор EXISTS используется для отбора записей, соответствующих заданному критерию.

Для иллюстрации его работы рассмотрим следующий пример. Из таблицы «Товары» требуется отобрать список товаров, количество продаж которых превышает 10. Сведения о продажах содержатся в таблице «Продажи» в поле «Продано». Для получения необходимой выборки воспользуемся оператором

EXISTS:

SELECT Наименование Цена

FROM Товары

WHERE EXISTS (SELECT [Код товара]

FROM Продажи

WHERE (Продажи Продано>10) AND

Товары [Код товара]=Продажи [Код товара])

В этом запросе после ключевого слова EXISTS следует оператор SELECT, отбирающий из таблицы «Продажи» записи, для которых количество продаж превышает 10.

Оператор EXISTS отбирает из таблицы «Товары» записи, в которых значение поля «Код товара» соответствует отобранным из таблицы «Продажи».

Результат выполнения данного запроса приведен на рис. 11.13.

ПРИМЕЧАНИЕ ——————————————————————————————————————— При использовании оператора EXISTS (атакже еще трех логических операторов: UNIQUE, ALL и ANY) применяется подзапрос — оператор SELECT, следующий за ключевым словом EXISTS и заключенный в круглые скобки. Более подробно подзапросы будут рассмотрены ниже.

^ Оператор UNIQUE

Оператор UNIQUE используется для проверки записи таблицы на уникальность. По своему действию он аналогичен оператору EX ISTS. Единственное отличие заключается в том, что подзапрос, задаваемый после ключевого слова UNIQUE, не должен возвращать более одной записи.

^ Оператор ALL

Оператор ALL используется для сравнения исходного значения со всеми другими значениями, входящими в некоторый набор данных.

Например, для того чтобы выбрать из таблицы «Товары» те товары, которые имеют цену большую, чем цена всех товаров, проданных в количестве более 10, используется следующий запрос:

SELECT *

FROM Товары

WHERE LleHa>ALL (SELECT Продажи.Цена

FROM Продажи

WHERE Продажи.Продано>10)

^ Оператор ANY

Оператор ANY применяется для сравнения заданного значения с каждым из значений некоторого набора данных. Если в предыдущем примере заменить оператор ALL на ANY, то будет возвращен список товаров, цена которых больше, чем хотя бы у одного из товаров, проданных в количестве больше 10. Результат выполнения такого запроса показан на рис. 11.15.

Операторы объединения

Часто при написании запроса на выборку данных требуется задать сложное условие, для которого недостаточно использовать только один оператор. В этом случае используется объединение нескольких условий с помощью специальных операторов. В SQL определены два таких оператора:

Q Оператор AND используется в тех случаях, когда необходимо отобрать записи, соответствующие нескольким условиям. Причем для каждой записи, включаемой в результат выборки, должны выполняться все заданные ограничения. Оператор AND объединяет несколько условий путем выполнения операции логического умножения результатов всех заданных ограничений. Результат true, соответственно, будет получен только в том случае, если все объединяемые условия принимают значение true.


328

О Оператор OR выполняет операцию логического сложения результатов всех заданных условий. При использовании данного оператора запись включается в результирующую выборку в случае выполнения хотя бы одного из заданных ограничений.

При использовании операторов объединения каждое логическое выражение следует заключать в круглые скобки. Для примера произведем выборку данных о товарах, цена которых больше 50, но меньше 1000:

SELECT *

FROM Товары

WHERE (Цена>50) AND (Цена<1000)

Синтаксические правила использования оператора OR такие же, как и для оператора AND. Следующий запрос:

SELECT *

FROM Товары

WHERE (Цена<50) OR (Цена>1000)

Рис. 11.17. Пример использования оператора объединения OR


возвратит список товаров, цена которых меньше 50 или больше 1000 (рис. 11.17).

Оператор отрицания

Для каждого из рассматриваемых операторов может быть выполнена операция отрицания, меняющая результат выполнения оператора на противоположный. Для реализации этой используется оператор NOT. Ниже приведены примеры использования этого оператора с логическими операторами:

^ IS NOT NULL NOT BETWEEN NOT IN NOT LIKE NOT EXISTS NOT UNIQUE

Упорядочение данных

Для упорядочения данных в выборке, полученной в результате выполнения запроса, используется предложение ORDER BY. Синтаксис оператора SELECT в этом случае будет следующим:

SELECT {* | ALL | DISTINCT fieldl. field2. ... , fieldN}

FROM tablel {. table2. ... . tableN}

WHERE условие

ORDER BY field {ASC | DESC}

После ключевых слов ORDER BY указывается имя поля (полей), по которому производится сортировка, а затем указывается режим сортировки:

G ASC — режим, используемый по умолчанию. При этом информация располагается в порядке возрастания значения указанного поля (для текстовых полей — в алфавитном порядке).

D DESC — используется для вывода информации в порядке убывания значений указанного поля (для текстовых полей — в порядке, обратном алфавитному).

Например, чтобы отсортировать список товаров по алфавиту, следует использовать следующий запрос:

SELECT Категория, Наименование. Цена

FROM Товары

ORDER BY Наименование

Результат выполнения данного запроса приведен на рис. 11.18.

Вместо имени поля в предложении ORDER BY можно использовать целое число, определяющее порядковый номер поля в списке после ключевого слова SELECT (если производится выборка всех полей таблицы с помощью символа «*», то число указывает порядковый номер поля в таблице базы данных). Например, для вывода списка товаров в порядке убывания цены можно использовать следующий запрос:

SELECT Категория, Наименование. Цена FROM Товары ORDER BY 3 DESC

Результат выполнения запроса изображен на рис. 11.19.

^ Использование вычисляемых полей

Язык SQL позволяет создавать вычисляемые поля в тексте запроса. Для реализации этой функции в запросе просто приводится выражение, в котором используются арифметические и математические операторы, а также имена полей в качестве переменных. В результате выполнения запроса с вычисляемыми полями выборка будет содержать не только ту информацию, которая содержится в таблицах базы данных, но и дополнительную информацию, полученную в результате вычисления заданного выражения.

ПРИМЕЧАНИЕ ——————————————————————————————————————— Кроме математических операций в SQL поддерживается ряд строковых функций, выполняющий такие операции, как конкатенация строк, выделение подстроки, поиск подстроки внутри строки и ряд других. В запросах SQL также могут применяться функции преобразования символьного типа в числовой, и наоборот, символьного типа в дату и т. п.

При создании вычисляемого поля можно использовать следующие арифметические операторы:

Q оператор сложения «+»; Q оператор вычитания «-»; Q оператор умножения «*»; Q оператор деления «/».

Приоритет перечисленных операторов соответствует общепринятому: умножение и деление, затем сложение и вычитание. Порядком выполнения операторов можно управлять с помощью круглых скобок.

Рассмотрим пример использования вычисляемых полей. Для этого на основании данных таблицы «Продажи» вычислим для каждого товара сумму денег, полученных за проданный товар (произведение цены на количество проданного товара), и сумму, на которую заказано товаров (произведение цены на количество заказанного товара), а также разность между ними:

SELECT [Код товара]. Цена. Заказано. Продано. Цена*Продано. Цена*3аказано. Цена*Заказано-Цена*Продано FROM Продажи

Данный запрос содержит три вычисляемых поля. Результат его выполнения приведен на рис. 11.20.

Кроме арифметических операторов допускается использование ряда математических функций, например:

D ABS — вычисление абсолютного значения;

G ROUND — округление;

О SQR — извлечение квадратного корня;

QЕХР — экспонента;

Q LOG — натуральный логарифм;

О SIN, COS, TAN — тригонометрические функции.

Арифметические операторы и математические функции можно использовать как в списке полей после ключевого слова SELECT, так и в предложении, задающем условие выборки (WHERE).

^ ПРИМЕЧАНИЕ ——————————————————————————————

Набор математических функций зависит от конкретной реализации языка SQL Синтаксис одинаковых функций в разных реализациях также может различаться (например, функция вычисления квадратного корня может обозначаться либо SQR, либо SQRT).

^ Псевдонимы полей

В запросах SQL можно изменять имена полей. Задаваемые при этом новые имена называются псевдонимами (aliases). Их удобно применять при задании в запросе вычисляемых полей. С помощью псевдонимов этим полям можно присваивать осмысленные имена. Псевдоним помещается после имени поля или после вычисляемого выражения через ключевое слово AS.

^ ВНИМАНИЕ ————————————————————————————————

Переименование поля с помощью псевдонима действительно только в пределах конкретного запроса.

В качестве примера воспользуемся предыдущим запросом, задав в нем псевдонимы для вычисляемых полей:

SELECT [Код товара]. Цена. Заказано, Продано. Цена*Продано AS [Сумма продажи]. Цена*3аказано AS [Сумма заказа]. Цена*Заказано-Цена*Продано AS [Разность] FROM Продажи

Результаты выполнения данного запроса приведены на рис. 11.21.

^ ПРИМЕЧАНИЕ ——————————————————————————————————

Способы задания псевдонимов различаются в разных реализациях SQL. Часто псевдоним задается просто указанием нового имени через пробел после имени поля или вычисляемого выражения, без дополнительных ключевых слов.

^ Функции агрегирования

Функциями агрегирования называются функции, которые позволяют определить количество записей в таблице или количество значений в столбце таблицы, находят минимальное, максимальное и среднее значение для столбца таблицы, а также вычисляют сумму данных для столбца. Таким образом, агрегирующие функции обеспечивают получение некоторой обобщенной информации.

В SQL определены следующие стандартные функции агрегирования:

О COUNT — выполняет подсчет записей в таблице или подсчет ненулевых значений

в столбце таблицы;

Q SUM — возвращает сумму содержащихся в столбце значений; Q MIN — возвращает минимальное значение в столбце; Q МАХ — возвращает максимальное значение в столбце; О AVG — вычисляет среднее значение для содержащихся в столбце значений.

В качестве примера рассмотрим таблицу «Продажи». Подсчитаем количество записей в поле «Продано», минимальное и максимальное количество проданных товаров, общую сумму проданных товаров и среднее значение проданных товаров. Для этого зададим следующий запрос:

SELECT СОиШПродано) AS [Всего записей]. МШ(Продано) AS mm. МАХ(Продано) AS max, ЗиМ(Продано) AS [Всего продано]. АУб(Продано) AS [Среднее количество продаж] FROM Продажи

Результат выполнения этого запроса показан на рис. 11.22.

Со всеми функциями агрегирования можно использовать опцию DISTINCT. В этом случае выполняется обобщение информации только для различающихся строк.

ПРИМЕЧАНИЕ ————————————————————————————————————— Как правило, использование опции DISTINCT с агрегирующими функциями не имеет смысла, поскольку при подсчете обобщенных данных обычно следует учитывать все записи, а не только уникальные.

^ Группировка данных

Группировка данных — это объединение записей в соответствии со значениями некоторого заданного поля. Для группировки результатов выборки совместно с оператором SELECT используется предложение GROUP BY. Данное предложение должно следовать после предложения WHERE, но перед предложением ORDER BY. После ключевых слов GROUP BY указывается список полей, включенных в выборку с помощью оператора SELECT. Причем нужно обязательно указывать все отбираемые поля (за исключением полей, относящихся к агрегирующим функциям), хотя порядок их перечисления после предложения GROUP BY может не соответствовать порядку списка после слова SELECT.

Синтаксис оператора SELECT с предложением GROUP BY следующий:

SELECT fieldl. field2. ... , fieldN FROM tab!el {, table2. ... . tableN) WHERE условие

GROUP BY fieldl. field2. ... . fieldN ORDER BY fieldl {ASC | DESC}

ПРИМЕЧАНИЕ ———————————————————————————————————— Применение предложения GROUP BY без дополнительных функций дает такой же результат, как и применение предложения упорядочения ORDER BY.

Например, если выбрать из таблицы «Товары» два поля — «Наименование» и «Категория», а затем сгруппировать их с помощью запроса:

SELECT Наименование. Категория

FROM Товары

GROUP BY Категория. Наименование.

то результат выборки будет упорядочен по значению первого поля, указанного в предложении GROUP BY (рис. 11.23).

Если в запросе выбрать только одно поле и выполнить для него группировку, то результирующая выборка не будет содержать дублирующих друг друга записей. Например, если выполнить запрос, аналогичный предыдущему (рис. 11.23), но выбрать только поле «Категория»:

SELECT Категория

FROM Товары

GROUP BY Категория.

то выборка будет содержать только три записи (рис. 11.24).

В этом случае группировка дает такой же результат, как применение оператора SELECT с опцией DISTINCT и предложением ORDER BY.

Поскольку применение одного предложения GROUP BY не дает никакого нового результата, то совместно с ним, как правило, используются функции агрегирования. В этом случае они применяются для вычисления итоговых значений по отдельным группам данных.

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

SELECT [Код клиента].

ЗиЖПродано) AS [Количество покупок]

FROM Продажи

GROUP BY [Код клиента]

Результат выполнения такого запроса приведен на рис. 11.25.

Результаты группировки можно упорядочить с помощью ключевого слова ORDER BY, а в операторе SELECT, содержащем предложение группировки, можно использовать предложение WHERE. Для иллюстрации этой возможности модифицируем предыдущий запрос следующим образом: выберем только тех клиентов, которые сделали за один раз более 10 покупок, и упорядочим результаты выборки в порядке возрастания:

SELECT [Код клиента].

5иМ(Продано) AS [Количество покупок]

FROM Продажи

WHERE Продано>10

GROUP BY [Код клиента]

^ ORDER BY 2 DESC

Результат выполнения данного запроса изображен на рис. 11.26.

Для задания ограничений на создаваемые группы совместно с ключевым словом GROUP BY может использоваться предложение HAVING. Оно должно следовать после GROUP BY, но до предложения ORDER BY (если оно присутствует в запросе).

В предыдущем примере в качестве условия было задано количество покупок за один раз. Если мы хотим установить ограничение на общее количество покупок, то необходимо применить предложение HAVING:

ПРИМЕЧАНИЕ ——————————————————————————————————————— В предложении HAVING не обязательно использовать только те поля, которые заданы в списке оператора SELECT.

Модифицируем рассмотренный выше пример (рис. 11.27) таким образом, чтобы ограничение было наложено не на количество купленных товаров, а на их стоимость:

SELECT [Код клиента].

51)М(Продано) AS [Количество покупок]

FROM Продажи

GROUP BY [Код клиента]

HAVING 5иМ(Продано*Цена)>25000

^ ORDER BY 2 DESC

Данный запрос отбирает клиентов, купивших товаров более чем на 25 000, и отображает количество сделанных ими покупок (рис. 11.28).

ПРИМЕЧАНИЕ ——————————————————————————————————————— В предложении GROUP BY, в отличие от предложения ORDER BY, нельзя вместо имен выбранных полей использовать их порядковые номера в списке оператора SELECT.

^ Выборка данных из нескольких таблиц

Как правило, информация, хранящаяся в базе данных, содержится в нескольких связанных между собой таблицах. Язык SQL позволяет создавать запросы, извлекающие данные из нескольких таблиц. При этом выполняется операция соединения, состоящая в объединении нескольких таблиц с целью поиска в них запрошенных данных.

Существует несколько способов соединения таблиц. Наиболее часто встречаются следующие:

Q соединение равенства; О соединение неравенства; Q внешние соединения.

Для задания вида соединения используется предложение WHERE, в котором вид соединения указывается с помощью операторов сравнения или логических операторов.

^ Соединение равенства

Данное соединение является наиболее часто используемым. Соединение равенства обычно производится по общему для нескольких таблиц полю (которое, как правило, является первичным ключом).

Синтаксис оператора выборки для этого способа соединения таблиц будет следующим:

SELECT tablel.fieldl. table2.field2 {. ... . tableN.fieldN} FROM tablel. table2 {,.... tableN} WHERE tablel.common_fieldl - table2.common_fieldl {AND tablel.common_field2 - table2.common_field2}

При формировании запроса на выборку из нескольких таблиц в списке полей после слова SELECT перед именем поля обычно указывается имя таблицы, к которой это поле относится. Такое действие называется квалификацией полей запроса. Квалификация обязательна только для полей, имеющих одинаковые имена в разных таблицах, из которых производится выборка.

Рассмотрим пример выборки из двух таблиц с использованием соединения равенства. Выберем из таблицы «Клиенты» поля, содержащие сведения об именах клиентов, а из таблицы «Продажи» — поля, в которых содержатся сведения о покупках, сделанных клиентами. Для связывания таблиц воспользуемся общим для обеих таблиц полем «Код клиента»:

SELECT Клиенты.Фамилия. Клиенты.Имя.

Клиенты.Отчество. Продажи.Продано

FROM Клиенты. Продажи

WHERE Клиенты.[Код клиента]=Продажи.[Код клиента]

Результат выполнения данного запроса приведен на рис. 11.29.

При связывании таблиц можно использовать предложение группировки. Изменим рассмотренный выше запрос (см. рис. 11.29) таким образом, чтобы результаты были сгруппированы по полям «Фамилия», «Имя», «Отчество» и для каждого клиента выводилось суммарное количество покупок:

SELECT Клиенты.Фамилия. Клиенты.Имя, Клиенты Отчество,

Зимспродажи.Продано) AS [Количество покупок]

FROM Клиенты. Продажи

WHERE Клиенты.[Код клиента]=Продажи.[Код клиента]

GROUP BY Клиенты.Фамилия. Клиенты.Имя. Клиенты Отчество

Результаты, возвращаемые этим запросом, приведены на рис. 11.30.

Выборка из трех таблиц проводится аналогичным образом, только в предложении WHERE необходимо указать условие связи с третьей таблицей. Для примера дополним предыдущий запрос (см. рис. 11.30) таким образом, чтобы в выборку была включена информация о наименовании товара из таблицы «Товары»:

SELECT Клиенты.Фамилия, Клиенты.Имя, Клиенты.Отчество,

511М(Продажи.Продано) AS [Количество покупок].

Товары.Наименование

FROM Клиенты. Продажи. Товары

WHERE (Клиенты.[Код клиента]=Продажи.[Код клиента]) AND

(Продажи.[Код товара]=Товары.[Код товара])

GROUP BY Клиенты.Фамилия, Клиенты.Имя. Клиенты.Отчество.

Товары.Наименование

Результаты выполнения данного запроса показаны на рис. 11.31.

SELECT Клиенты Фамилия, Клиенты Имя, Клиенты Отчество, >11М(Продажи Продано) AS [Количество покупок], 'овары Наименование :ROM Клиенты, Продажи, Товары

WHERE (Клиенты [Код клиента]-Продажи [Код клиента]) AND Продажи [Код товара)-Товары [Код товара]] 3ROUP BY Клиенты Фамилия. Клиенты Имя, Клиенты Отчество, 'овары Наименование

^ Соединение неравенства

В случае применения соединения неравенства информация из двух таблиц объединяется таким образом, чтобы значения в заданном поле одной таблицы не совпадали со значениями соответствующего ему поля в другой таблице.

Синтаксис запроса при соединении неравенства аналогичен предыдущему случаю, только вместо оператора «=» в предложении WHERE используются операторы «<>», «<», «>» и т. п.

SELECT tablel.fneldl, table2.field2 {...., tab!eN.fieldN} FROM tabl el. table2 {..... tableN} WHERE tablel.common_fieldl <> table2.common_fieldl {AND tablel.common_field2 > table2.common_field2}

Соединения неравенства используются довольно редко. В частности, для базы данных, используемой нами в качестве практической модели, довольно трудно привести осмысленный пример такого соединения.

^ Внешние соединения

При использовании внешнего соединения результат запроса будет содержать все записи одной из таблиц, даже в том случае, если в связанной с ней таблице отсутствуют совпадающие значения. Этот тип соединения реализуется с помощью оператора OUTER JOIN.

Внешние соединения подразделяются на три группы:

Q левое внешнее соединение, LEFT OUTER JOIN — выборка будет содержать все записи таблицы, имя которой указано слева от оператора OUTER JOIN;

О правое внешнее соединение, RIGHT OUTER JOIN — выборка будет содержать все записи таблицы, имя которой указано справа от оператора OUTER JOIN;

О полное внешнее соединение, FULL OUTER JOIN — в выборку включаются все записи из правой и левой таблицы.

Для внешнего соединения условие соединения указывается не с помощью предложения WHERE, а входит в оператор OUTER JOIN после ключевого слова ON:

SELECT tablel.fieldl, table2.field2 {. ... . tableN.fieldN} FROM tablel

LEFT | RIGHT | FULL {OUTER} JOIN table2

ON условие

{LEFT | RIGHT | FULL {OUTER} JOIN table3

ON условие}

Рассмотрим следующий пример. Выберем из таблицы «Товары» список товаров, а из таблицы «Продажи» — суммарное количество проданных товаров:

SELECT Товары.[Наименование]. 5иМ(Продажи.[Продано]) AS [Всего продано] FROM Товары LEFT OUTER JOIN Продажи ON Товары.[Код товара]=Лродажи.[Код товара] GROUP BY Товары.[Наименование]

Так как таблица «Товары» указана слева от оператора LEFT JOIN, то результирующая выборка будет содержать полный список товаров, включая даже те, которые ни разу не проданы (рис. 11.32).

Подзапросы

Подзапрос представляет собой запрос, помещенный внутри другого запроса. Подзапросы применяются для получения данных, которые затем используются другим запросом.

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

О подзапросы должны заключаться в круглые скобки;

О предложение ORDER BY может быть использовано только в основном запросе;

О подзапросы, возвращающие более одной записи, могут использоваться только

с многозначными операторами; О в основном запросе нельзя использовать оператор BETWEEN.

'ELECT Товары [Наименование], ЗиМ(Продажи [Продано!) AS (Всего продано) FROM Товары LEFT OUTER JOIN Продажи

)N Товары [Код товара]»Продажи [Код товара] GROUP BY Товары [Наименование]

Ниже приведен синтаксис оператора SELECT с подзапросом:

SELECT {* | ALL | DISTINCT fieldl. field2. . . fieldN}

FROM tablel {. tableZ. ... , tableN}

WHERE условие (SELECT fieldl{. fields. . . fieldN}

FROM tablel {. table2. .. . tableN}

WHERE условие)

Для иллюстрации технологии использования подзапроса воспользуемся следующим примером. Выберем из таблицы «Продажи» информацию о продажах товара с наименованием «Delphi 5»:

SELECT [Код клиента]. Заказано. Продано, Цена

FROM Продажи

WHERE [Код товара]-(5Е1ЕСТ [Код товара]

FROM Товары

WHERE Наименование-'Del phi 5')

Поскольку в таблице «Продажи» не содержится наименования товара, то с помощью подзапроса мы обращаемся к таблице «Товары» и определяем код товара заданного наименования. Затем, в основном запросе, выбираем интересующие нас поля из таблицы «Продажи», в которых код товара совпадает с тем, который получен в результате выполнения подзапроса. Результат, полученный при выполнении приведенного запроса, показан на рис. 11.33.

^ ПРИМЕЧАНИЕ -^—————————————————————————————

В подзапросе, так же как и в основном запросе, можно использовать подзапросы. Максимальный уровень вложенности подзапросов определяется конкретной реализацией SQL.

^ Объединение запросов

Язык SQL позволяет объединять несколько запросов с помощью специальных операторов. Запросы, включающие в себя несколько операторов SELECT, принято называть составными.

SELECT [Код клиента]. Заказано, Продано, Цена

FROM Продажи

WHERE (Кодтовара]-(5Е1_ЕСТ (Код товара]

FROM Товары

WHERE Наименование-'Delphi 5')

Составные запросы формируют один набор данных на основе результатов, полученных при выполнении каждого отдельного запроса, входящего в объединение. Во многих случаях составные запросы целесообразно использовать вместо простых запросов со сложным условием выборки. Это связано с тем, что разбиение сложного условия на несколько более простых запросов делает текст запроса более понятным. Как правило, проще написать составной запрос, чем аналогичный простой запрос со сложным условием отбора данных.

Для объединения запросов наиболее часто используются операторы UNION и UNION ALL (предусмотренные стандартом ANSI).

ПРИМЕЧАНИЕ ——————————————————————————————————————— В стандарте ANSI определены также и другие операторы объединения: EXCEPT и INTERSECT, которые расширяют возможности составных запросов. Однако эти операторы отсутствуют как в реализации Local SQL, так и в реализации SQL для драйверов ODBC и OLE DB, используемых для связи с базами данных MS Access. Поэтому здесь они рассматриваться не будут.

При объединении запросов, независимо от типа используемых операторов объединения, необходимо следовать следующим правилам:

Q каждый из запросов, входящих в объединение, должен возвращать одинаковое

количество полей (в том числе и вычисляемых); Q типы полей, возвращаемых в результате выполнения каждого запроса, должны

совпадать.

^ Оператор UNION

При использовании оператора UNION результаты выполнения отдельных запросов объединяются. При этом дублирующие друг друга записи исключаются из результирующего набора данных.

Для примера выберем из таблицы «Товары» список товаров, цена которых меньше 200 или больше 2000. Такую выборку можно сделать, используя объединение логических операторов в предложении WHERE с помощью оператора OR либо путем объединения запросов:

SELECT * FROM Товары WHERE Цена<200 UNION SELECT * FROM Товары WHERE Цена>=2000

Здесь первый запрос отбирает товары, цена которых меньше 200, а второй — товары, цена которых превышает 2000. С помощью оператора UNION результаты, возвращаемые отдельными запросами, объединяются в один набор данных (рис. 11.34).

SELECT'

FROM Товары

WHERE Цена<200

UNION

SELECT"

FROM Товары

wuprf м»ыд<>.?тп

^ Оператор UNION ALL

Данный оператор аналогичен оператору UNION, за исключением того, что в результирующую выборку включаются дублирующие записи. Если в предыдущем примере (см. рис. 11.34) заменить UNION на UNION ALL, то результат не изменится, так как в нем не содержится дублирующих записей. Однако если задать запрос таким образом, что одни и те же записи попадут в результаты обоих запросов, входящих в объединение, то в результирующей выборке они также будут присутствовать два раза. Например, при выполнении запроса:

SELECT * FROM Товары WHERE Цена>100 UNION ALL SELECT * FROM Товары WHERE Цена<1000

результат будет содержать 23 записи (рис. 11.35), хотя в таблице «Товары» содержится всего лишь 16 записей. Это объясняется тем, что часть записей выбрана и в первом, и во втором запросе (это те товары, цена которых больше 100, но меньше 1000), поэтому в результирующей выборке содержится несколько одинаковых записей.

SELECT• FROM Товары WHERE ЦенаЯОО UNION ALL SELECT• FROM Товары WHERE Цена<1СЮО

^ Упорядочение и группировка данных в составных запросах

В составном запросе для упорядочения данных допускается использован предложения ORDER BY. Независимо от того, сколько запросов входит в объед нение, можно использовать только одно предложение ORDER BY. Для указан; полей, по которым производится сортировка, в этом предложении допускает использование как имен полей, так и их порядковых номеров в списке операт pa SELECT.

В отличие от ORDER BY, предложение GROUP BY можно применять в каждом из запр сов, входящих в объединение. Вместе с GROUP BY допускается применение операт pa HAVING. Предложение GROUP BY можно применять и для группировки результат выполнения составного запроса.

^ Работа с представлениями данных

Представление (view) — это предопределенный запрос, который хранится в ба данных. Представление можно рассматривать как виртуальную таблицу, котор формируется из одной или нескольких реальных таблиц базы данных (и/или р нее созданных представлений). Работа с представлением после его создания пс ностью аналогична работе с таблицей. Представления обычно используются в дв случаях:

для объединения данных, хранящихся в нескольких таблицах (разбиение таблицы обычно производится при нормализации базы данных) с целью представления в удобном для просмотра и редактирования виде;

для разграничения доступа к информации — с помощью представлений мож разрешить пользователю доступ только к части информации, хранящейся в тг лице базы данных.

^ Создание представлений

Для создания представления используется оператор CREATE VIEW. Поскольку представление всегда создается на основе таблиц и/или ранее созданных представлений, то оператор CREATE VIEW отличается от оператора создания таблицы — вместо указания имен и типов полей данный оператор должен содержать запрос:

CREATE VIEW имя_представления AS SELECT ...

Чтобы рассмотреть пример создания представления, следует несколько модифицировать программу, которую мы используем для изучения SQL. Дело в том, что оператор CREATE VIEW не возвращает никаких данных. Поэтому для его выполнения следует воспользоваться не методом Open, который мы использовали для выполнения оператора SELECT, а методом ExecSQL. Чтобы не усложнять задачу, просто добавим на форму еще одну кнопку (назовем ее Exec SQL), при щелчке на которой будет вызываться этот метод. Таким образом, для выполнения оператора SELECT следует щелкнуть на кнопке Выполнить запрос, адля выполнении операторов, не возвращающих данных, — на кнопке Exec SQL. Обработчик нажатия на кнопку Exec SQL приведен в листинге 11.2.

Листинг 11.2. Обработчик события OnClick кнопки Exec SQL

procedure TfrmMain.btnExecSQLClick(Sender: TObject); begin

if ADOQueryl.Active then ADOQueryl.Close:

AOOQueryl.SQL.Clear;

ADOQueryl.SQL.AssigndnemSQL.Lines):

ADOQueryl.ExecSQL: end:

Теперь в качестве примера создадим представление на основе таблиц «Товары» и «Продажи». Из первой таблицы выберем поля «Код товара» и «Наименование», из второй — «Цена» и «Продано». Для связи таблиц будем использовать соединение равенства. Запрос, создающий представление с именем «Test», имеет следующий вид:

CREATE VIEW Test AS

SELECT Товары.[Код товара]. Товары.Наименование.

Продажи.Цена, Продажи.Продано

FROM Товары. Продажи

WHERE Товары.[Код товара]=Продажи.[Код товара]

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

SELECT * FROM Test

результат выполнения которого (рис. 11.36) аналогичен результату, который возвратил бы запрос, следующий после ключевого слова AS в операторе CREATE VIEW.

При создании представлений допускается использование вычисляемых полей. Например, можно создать представление, подобное рассмотренному выше, но с вычисляемым полем, в котором будет содержаться сумма закупленного товара:

CREATE VIEW Test2 AS

SELECT Товары.[Код товара]. Товары.Наименование,

Продажи Цена. Продажи.Продано,

Продажи.Цена*Продажи.Продано AS [Сумма продаж]

FROM Товары. Продажи

WHERE Товары [Код товара]=Продажи.[Код товара]

select

FROM Test

Здесь для вычисляемого поля задан псевдоним «Сумма продаж». Результат выборки всех записей из такого представления приведен на рис. 11.37.

^ Удаление представлений

Для удаления представлений используется оператор DROP VIEW, синтаксис которого представлен ниже:

DROP VIEW viewjiame

Команды, удаляющие созданные нами представления, имеют следующий вид:

DROP VIEW Test DROP VIEW Test2

ПРИМЕЧАНИЕ ——————————————————————————————————————— В некоторых реализациях SQL (например, в драйвере ODBC для MS Access) для удаления представлений вместо оператора DROP VIEW используется команда DROP TABLE.

^ Использование параметров в SQL-запросах

При задании SQL-запроса можно использовать параметры — переменные, включаемые в оператор SQL, значения которых определяются во время выполнения программы. Использование параметров в значительной степени повышает гибкость SQL-запросов, обеспечивая возможность запрашивать у пользователя численные значения критериев отбора данных.

Запросы с параметрами поддерживаются как в классе TQuery, так и в классе TADOQuery, причем свойства и методы, используемые при работе с параметрами, имеют много общего.

ПРИМЕЧАНИЕ ——————————————————————————————————————— В дальнейшем мы будем рассматривать работу с параметрами на примере класса TADOQuery, указывая в круглых скобках соответствующие свойства и методы для класса TQuery, если они имеют другие имена.

Параметры задаются в тексте SQL-запроса. Для определения параметра перед его именем указывается символ «:», например:

SELECT *

FROM tablejname

WHERE fieldl<:PARAMl

В данном запросе задан один параметр с именем PARAM1.

После ввода текста запроса в свойство SQL автоматически производится заполнение массива в свойстве Parameters (Params). Одновременно значение свойства Parameters .Count (Params .Count) устанавливается равным количеству заданных в запросе параметров. Последовательность заполнения массива Parameters (Params) соответствует порядку следования параметров в тексте запроса.

Свойства определенных в SQL-запросе параметров доступны для редактирования как во время разработки, так и во время выполнения программы:

Q для редактирования свойств параметров во время разработки программы используется специальный редактор, который вызывается щелчком на кнопке с многоточием в поле ввода свойства Parameters (Params) в инспекторе объектов;

Q для задания значения параметра во время разработки программы вначале необходимо определить его тип с помощью свойства DataType класса TParameter (TParam);

О для доступа к свойствам параметров SQL-запроса во время выполнения программы можно либо воспользоваться свойством Items класса TParameters (TParams), либо методом ParamByName этого же класса. Свойство Items предоставляет доступ к объектам параметров по их порядковым номерам, что не очень удобно. Обычно гораздо проще обращаться к параметрам по их именам с помощью метода ParamByName, возвращающего объект параметра, имя которого задается в качестве аргумента при вызове данного метода;

О в зависимости от значения свойства ParamCheck при изменении текста запроса во время выполнения программы список параметров в свойстве Parameters (Params) может либо автоматически обновляться (ParamCheck = true), либо оставаться прежним (ParamCheck = false).

Для иллюстрации использования концепции параметров на практике модифицируем программу, которую мы использовали ранее при изучении SQL. С этой целью добавим на форму два компонента TEch t, которым присвоим имена edtParaml и edtParam2. Эти компоненты обеспечивают возможность изменения значений параметров во время выполнения программы. Изменим код метода-обработчика события OnCl ick кнопки «Выполнить запрос», как показано в листинге 11.3.

Листинг 11.3. Обработчик события OnClick кнопки «Выполнить запрос»

procedure TfrmMain btnExecQueryClick(Sender TObject). begin

if ADOQueryl Active then ADOQueryl Close

ADOQueryl SQL Clear.

ADOQueryl SQL Assign(memSQL Lines)

if ADOQueryl Parameters Count>0

then begin

ADOQueryl Parameters ParamByName('P_Pl') Value = StrToInt(edtParaml Text)

ADOQueryl Parameters ParamByName('P_P2') Value = StrToInt(edtParam2 Text) end

ADOQueryl Open, end.

Теперь, если в запросе имеются параметры, то их значения будут считываться из полей ввода edtParaml и edtParamZ.

После запуска программы зададим следующий запрос:

SELECT *

FROM Товары

WHERE (Цена> Р_Р1) AND (Цена< Р_Р2)

в котором определены два параметра: Р_Р1 и Р_Р2. Зададим их значения с помощью элементов edtParaml и edtParam2 — в первом поле ввода укажем 200 (значение первого параметра), во втором — 2000 (значение второго параметра). Если теперь щелкнуть на кнопке Выполнить запрос, то результатом будет вывод списка товаров, цена которых больше 200 и меньше 2000 (рис. 11.38).

Значения параметров могут передаваться из другого набора данных. Для этого в свойстве DataSource задается имя источника данных, связанного с набором данных, значения полей которого передаются в параметры. Имена параметров в этом случае должны совпадать с именами полей набора данных, заданного в свойстве DataSource. При перемещении по исходному набору данных текущие значения полей автоматически передаются в запрос. Данный механизм можно использовать для организации связи между таблицами базы данных, обращение к которым производится через SQL-запросы.

SELECT•

FROM Товары

WHERE (Цена> P_P1)AND (Цена< Р.Р2)

Рассмотрим простой пример организации связи между таблицами. Напишем программу, в которой осуществляется связь между таблицами «Товары» и «Продажи» по общему для обеих таблиц полю «Код товара». Таблица «Товары» буд главной, «Продажи» — подчиненной:

1. Создайте новое приложение с помощью команды File > New Application.

2. Поместите на форму по два экземпляра следующих компонентов: TADOQuei TDataSource и TDBGnd. Затем переименуйте шесть размещенных на форме ко понентов следующим образом: ADOMaster, ADODetai1, dsMaster, dsDetai 1, DBGMasts DBGDetail.

3. Для каждого компонента доступа к данным (ADOMaster и ADODetai 1) установи связь с базой данных sales.mdb, настроив соответствующим образом свойст Connect! onStnng.

4. Свяжите источник данных dsMaster с компонентом доступа к данным ADOMastf а источник данных dsDetai 1 — с компонентом ADODetai 1.

5. Свяжите элементы отображения данных DBGMaster и DBGDetail с источника» данных dsMaster и dsDetai 1 соответственно.

6. Задайте в свойстве SQL компонента ADOMaster следующий запрос:

SELECT * FROM Товары

7. Задайте в свойстве SQL компонента ADODetal 1 запрос, приведенный ниже:

SELECT *

FROM Продажи

WHERE [Код товара]» "Код товара"

ВНИМАНИЕ ———————————————————————————————————————— Если в качестве параметра используется имя поля таблицы, содержащее пробелы, то его необходимо заключать в кавычки.

8. Выберите на форме компонент ADODetail и щелкните в инспекторе объектов на кнопке с многоточием в поле ввода свойства Parameters. В открывшемся окне редактора параметров выберите единственный параметр «Код товара» и задайте ему тип Integer. (Свойство Datatype в инспекторе объектов.)

9. Задайте обработчики событий формы OnShow и OnCl ose. В первом вызовите метод Open для обеих таблиц:

procedure TForml FormShow(Sender: TObject); begin

ADOMaster Open.

ADODetail Open, end;

Во втором обработчике вызовите для двух таблиц метод Cl ose:

procedure TForml.FormClose(Sender- TObject; var Action- TCloseAction); begin

ADOMaster.Close:

ADODetail.Close, end:

10. Откомпилируйте и запустите программу. В окне программы будут содержаться две таблицы, одна из которых показывает всю информацию из таблицы «Товары», а во второй отображаются записи из таблицы «Продажи», для которых значение поля «Код товара» равно значению поля «Код товара» выбранной записи в таблице «Товары» (рис. 11.39).

Созданная связь между таблицами соответствует отношению «один-ко-многим». Отношение «многие-ко-многим» создается точно так же. В этом случае подчиненная таблица аналогичным образом связывается с еще одной таблицей в качестве главной. Например, в нашем случае можно было бы связать таблицу «Продажи» с таблицей «Клиенты» по общему для них полю «Код клиента».







Похожие:

Использование sql для выборки данных из таблицы iconМосковский государственный институт электроники и математики Кафедра эва
Язык sql. Манипулирование данными. Язык манипулирования данными- dml. Добавление в таблицу новой информации. Ввод данных в отдельные...
Использование sql для выборки данных из таблицы iconМосковский государственный институт электроники и математики Кафедра эва
Язык sql. Манипулирование данными. Язык манипулирования данными- dml. Добавление в таблицу новой информации. Ввод данных в отдельные...
Использование sql для выборки данных из таблицы iconДокументи
1. /Рыжко СУБД.doc
2. /Список вопросов...

Использование sql для выборки данных из таблицы iconВопросы к экзамену по курсу "БД" Базы данных и информационные системы (ИС). Архитектура ис, субд, локальные ис способы разработки и выполнение приложений
Типы команд sql, Типы данных sql: строковые типы, числовые типы. Типы для представления даты и времени
Использование sql для выборки данных из таблицы icon1. Назначение и область применения
Язык определения схем (sql-dll) для объявления структур и ограничений целостности базы данных sql
Использование sql для выборки данных из таблицы iconВопросы к зачету по дисциплине «Информационные системы» специальность «Математика с доп специальностью информатика» заочное отделение, 5 курс, 10 семестр, 2009-2010 уч г
Операторы языка sql для работы с таблицами: создание таблицы, изменение структуры таблицы, добавление записей в таблицу, редактирование...
Использование sql для выборки данных из таблицы iconВопросы к зачету по дисциплине «Информационные системы» специальность «Математика с доп специальностью информатика» заочное отделение, 5 курс, 10 семестр, 2010-2011 уч г
Операторы языка sql для работы с таблицами: создание таблицы, изменение структуры таблицы, добавление записей в таблицу, редактирование...
Использование sql для выборки данных из таблицы iconИспользование субд mysql 0
Язык sql (Structured Query Language структурированный язык запросов) представляет собой стандартный высокоуровневый язык описания...
Использование sql для выборки данных из таблицы iconОтчет о выполнении лабораторной работы №3 «Использование субд mysql 8» (по дисциплине «Базы данных»)
Запрос Выборка данных из таблицы по условию, наложенному, на столбец population 14
Использование sql для выборки данных из таблицы iconОтчет по дисциплине «Базы данных», лабораторная работа №3 «Использование субд mysql»
Запрос Выборка данных из таблицы по условию, наложенному, на столбец reg date 14
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©rushkolnik.ru 2000-2015
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы