Язык SQL – это язык манипулирования данными в реляционных базах данных. Язык не является языком программирования, а ориентирован на построение запросов к базам данных со стороны прикладных программ. Язык состоит из директив или команд. Каждая команда имеет наименование и список параметров. Результатом выполнения любой команды SQL является таблица.
Select – мнемоника (код команды) выборки таблицы из БД.
Параметры команд:
* означает, что выбираются все столбцы таблиц или таблицы, которые перечислены после ключевого слова from.
Select * from MyTable – запрос на выборку всех столбцов из таблицы MyTable.
Select * from Table1, Table2 – результатом является таблица, в которой помещены все столбцы двух исходных таблиц, а число записей соответствует числу комбинаций записей первой и второй таблицы.
SELECT UserName FROM Users, Games WHERE Users.ID=Games.Winner; – в данном примере запрашивается результирующая таблица, в которой должен присутствовать только столбец UserName. Записи отбираются из пары таблиц Users и Games по условию, которое задается с помощью ключевого слова WHERE. Условием отбора в данном случае, является совпадение значений поля ID таблицы Users и поля Winner таблицы Games. Запрос на естественном языке можно сформулировать так, отобрать имена всех победителей в играх.
|
|
В результирующей таблице имена игроков могут повторяться. Это естественно, поскольку любой из них мог участвовать и побеждать в нескольких играх, однако, по сути задачи повторения являются избыточными. Чтобы их устранить используется дополнительное ключевое слово.
SELECT distinct UserName FROM Users, Games WHERE Users.ID=Games.Winner; Чтобы устранить повторяющие записи в результате используют ключевое слово distinct (различные).
SELECT distinct UserName FROM Users, Games WHERE Users.ID=Games.Winner order by UserName desc;
Order by – упорядочить по.
Порядок записей в таблице результата трудно предсказуем до тех пор, пока в запросе явно не будут указаны правила сортировки. Ключевое слово order by указывает выражение, которое будет использоваться для сортировки. В качестве выражения записывают список столбцов, в порядке которых будут сортироваться записи. В начале записи сортируются по первому столбцу если есть одинаковые значения, то сортируются по второму и т.д. Сортировка осуществляется соответственно типу записей. Ключевое слов desc означает обратный порядок, а если указать asc – то прямой порядок.
SELECT UserName, Balance FROM Users, Games WHERE Users.ID=Games.Winner And Balance>50;
В качестве логических условий в SQL запросах используются выражения, включающие в себя логические связки And, Or, Not. Логическое выражение в предложении WHERE проверяется для каждой записи. В результирующую таблицу включаются только те записи, для которых это выражение истинно.
|
|
SELECT count(UserName) FROM Users, Games WHERE Users.ID=Games.Winner And Balance>50;
В SQL запросах допускается использование агрегатных функций. Агрегатными являются функции, вычисляющие некоторый общий результат по одному или нескольким полям. Примером таких функций является счётчик числа записей, сумма значений в указанном поле, максимальное значение, среднее значение и т.д.
SELECT Games.game FROM Games WHERE game like ‘*es*’
Ключевое слово like в предложении WHERE позволяет уточнить условие отбора для строковых полей. Like содержит шаблон отбора, в котором употребляются символы в том числе имеющие специальное обозначение. Например, символ * означает любая подстрока,? – любой символ. Эти знаки относятся к Microsoft Access.
Для добавления записей используется директива INSERT INTO. Параметрами является имя таблицы со списком имен полей в новой записи, в которые будут установлены определённое значение, затем ключевое слово значения VALUES указывает список конкретных значений, которые будут добавлены в поля.
INSERT INTO Games (Game, IDGamer1, IDGamer2, MAtchDate, Winner) VALUES (‘football’, 2, 1, ’2012-01-12’, 1)
Место размещения добавленной записи для внешнего пользователя остается неопределённым. Не следует предполагать, что новая запись будет размещена в конце таблицы.
Тема №8 «Базы данных»
Update Games SET Winner=2 Where (Game=’football’)
Команда Update обновляет значения полей одной из таблиц базы данных. Первым параметром является наименование таблицы, вторым после ключевого слова Set является список пар модифицируемых полей. Каждая пара – это наименование поля, знак равно и значение.
Важным для корректного обновления является употребление ключевого cлова Where. Если условие не задано, в таблице обновляются все записи, указанным значением поля. Если условие задано, обновляются только записи, для которых условие истинно.
DELETE FROM Games WHERE (Game=’golf’)
Если отсутствует логическое условие в Where, то удаляются все записи таблицы.
DROP TABLE – удаляет таблицу из БД.
Чтобы сделать прикладную программу независящей от структуры файла и организации базы данных, базу данных виртуализируют. Виртуализация осуществляется с помощью драйвера базы данных. Драйвер от прикладной программы принимает запросы, которые преобразует в последовательность специфических команд базы данных. База данных возвращает ответы на запросы или осведомительные сообщения о своем состоянии. Драйвер передает эту информацию прикладной программе предварительно преобразовав ее в поток символов.
Драйвер и база данных образуют источник данных для программы. Источнику присваивается имя, что позволяет на программном уровне оперировать источниками как программными объектами.
В Windows есть система драйверов ODBC. Драйверы баз данных могут входить в ОС либо в систему программирования. Для того, чтобы работала прикладная программа необходимо решить системные вопросы установки драйверов. Источники данных могут создаваться либо “в ручную”, либо программным образом.
Создание источника данных заключается в выполнении следующих действий:
1) Выбирается драйвер
2) Указывается размещение файла базы данных или адрес сервера базы данных
3) Источнику присваивается имя
4) При необходимости устанавливаются дополнительные параметры соединения. Например, логин и пароль пользователя.
Работа с источником данных осуществляется в три стадии:
1) Установление соединения. Прикладная программа здесь отправляет запрос ОС или другой системе управляющей драйверами. Вызываемая система должна найти описание источника и активизировать соответствующий драйвер. Загруженный драйвер находит файлы или сервер используя установленные параметры соединения (Логин и пароль), если соединение установлено, то программе сообщается об установлении соединения
|
|
2) Прикладная программа отправляет SQL запросы и принимает ответ. Драйвер, получив запрос, выполняет его грамматический разбор и в случае ошибки формирует отказ от исполнения запроса.
3) Прикладная программа вызывает функцию закрытия соединения, в результате которой освобождаются ресурсы, задействованные при обмене данными.
Все средства работы с базами данных расположены в пространстве имен SYSTEM::DATA::ODBC
В пространстве имен ODBC имеются классы для работы с источниками данных ODBC:
OdbcCommand – класс для хранения SQL выражений и их выполнения.
OdbcCommandBuilder – класс, который строит команды.
OdbcConnection – класс для установления соединения. В частности этот класс позволяет на программном уровне создать источник данных.
OdbcDataReader – класс предназначенный для считывания записей, полученных в качестве ответа. Он позволяет считывать отдельные поля и выполнять их конвертацию в типы данных библиотеки.Net. Считывание выполняет последовательным образом от записи к записи безвозвратно.
Тема №9 «Строка соединения»
В библиотеке.Net для конструирования строки соединения имеется специальный класс OdbcConnectionStringBuilder. Его свойства и методы позволяют сконструировать строку соединения. Использование этого класса не является обязательным. Если программисту точно известна строка соединения, ее можно использовать напрямую.
Строка соединения состоит из выражений Имя=Значение (Name=Value), разделенных запятыми. Таких выражений в строке может быть произвольное количество. Выражения задают параметры соединения и каждый из параметров имеет значение по умолчанию. Явно не заданное в строке соединения параметров имеет умалчиваемые значения.
Для установления соединения используются объекты класса OdbcConnection. Программа в начале конструирует пустой объект, при этом никаких значений по умолчанию он не содержит. Его свойство ConnectionString должно содержать строку соединения.
Метод Open объекта соединения OdbcConnection инициирует процедуру установления соединения с источником данных. Соответственно документации при возникновении ошибки метод Open выбрасывает исключения, поэтому в программе необходимо участок кода с вызовом Open помещать в блок Try. Обработка исключения строится исходя из логики конкретной программы. Однако, если соединение не установлено никаких операций с базой данных программа выполнить не может.
|
|
Метод Close закрывает соединение. Метод State показывает состояние.