Технология Microsoft ADO.NET

Элементы языка SQL


Термин SQL6) символизирует собой Структурированный Язык Запросов. Это язык, который дает нам возможность работать с данными в реляционных базах данных.

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

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

Стандарт SQL определяется ANSI (Американским Национальным Институтом Стандартов), а также ISO (Международной организацией по стандартизации). Однако большинство коммерческих программ баз данных расширяют SQL без уведомления ANSI, добавляя разные особенности в этот язык, которые, как они считают, будут полезны. Иногда они несколько нарушают стандарт языка, хотя хорошие идеи имеют тенденцию развиваться и вскоре становиться стандартами сами по себе в силу полезности своих качеств.

Для обращения к базе данных используются запросы, написанные на языке SQL. Запрос - команда, которую вы даете вашей программе базы данных, и которая сообщает ей, что нужно вывести определенную информацию из таблиц в память. Эта информация обычно посылается непосредственно на экран компьютера или терминала, которым вы пользуетесь, хотя в большинстве случаев ее можно также послать принтеру, сохранить в файле (как объект в памяти компьютера) или представить как вводную информацию для другой команды или процесса.

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

Microsoft Query Analyzer, входящий в комплект Microsoft SQL Server 2000, - отличный инструмент для изучения языка SQL. Если у вас установлен этот пакет, то можно приступать к работе. Запускаем Query Analyzer и в появившемся окне указываем следующие параметры (рис. 1.32).


Рис. 1.32.  Задание параметров подключения

Мы задействуем подключение к серверу, находящемуся на нашем компьютере, - поэтому указываем имя сервера (local) (можно также использовать знак точки - ( . )). В других случаях - для подключения по локальной сети, например, - используйте кнопку обзора для поиска нужного сервера. Установка галочки "Запускать SQL сервер в случае его остановки (Start SQL Server if it is stopped)" позволяет поддерживать бесперебойную связь с сервером. Параметр "Connect using" задает аутентификацию при подключении к серверу - при выбранном значении "Windows authentification", нет надобности вводить имя пользователя и пароль.

Если вы все сделали правильно, то появляется главное окно программы, содержащее чистый бланк для записи SQL-запросов. Добавим окно, в котором мы будем просматривать содержимое базы данных: пункт меню Tools / Object Browser / (Show/hide) или клавиша F8. Нам также потребуется окно для отображения результатов запросов - Window / /Show Results Pane (Ctrl+R). В результате получим следующее (рис. 1.33).


увеличить изображение
Рис. 1.33.  Главное окно программы

Первое, что мы видим в окне Object Browser, - имя компьютера и связанного с ним сервера. На рисунке это 7EA2B2F6068D473. Это имя формируется, когда мы устанавливаем операционную систему Windows. Далее располагается древовидная структура - содержимое пакета SQL Server 2000, состоящего из баз данных master, model, msdb, NorthwindCS и tempdb. В отличие от других баз данных, обеспечивающих работу самой программы, NorthwindCS является специальной учебной базой.


С ней мы и будем работать. На панели инструментов из выпадающего списка выбираем базу, для подключения -
. Можно этого не делать, но тогда в окне бланка необходимо будет каждый раз указывать строку - use NorthwindCS; Будем полагать в дальнейшем, что на панели инструментов определена база данных NorthwindCS;.

Итак, напишем первый запрос7) и нажмем клавишу F5 (пункт меню Query - Execute):

select * from Customers;

В результате возвращаются все записи из таблицы Customers базы данных NorthwindCS. Для просмотра содержимого базы данных используем Object Browser, щелкая на знак (+) возле соответствующего объекта. Переключившись на вкладку
, видим сообщение, означающее, что была извлечена 91 запись:

(91 row(s) affected)

Главное окно программы принимает вид (рис. 1.34)


Рис. 1.34.  Запрос извлек таблицу Customers

Вы можете менять вид данных, отображаемых на панели результатов: пункт меню Query / Results in Text (Ctrl+T) - результат в виде текста, Results in Grid (Ctrl+D) - в виде таблицы (по умолчанию), Results to File (Ctrl+Shift+F) - сохранение результата в виде файла в собственном формате программы - *.rpt.

Таблица Customers состоит из следующих полей (рис. 1.35):


Рис. 1.35.  Содержание таблицы Customers

Для извлечения не всей таблицы, а столбцов СustomerID и Address, напишем запрос:

select CustomerID, Address from Customers;

Результатом будет (рис. 1.36)


Рис. 1.36.  Извлечение столбцов CustomerID и Address

Если мы сделаем ошибку и укажем поле, которого нет в таблице Customers, например AddressID, в окне результатов на вкладке Messages появится соответствующее предупреждение:

Server: Msg 207, Level 16, State 1, Line 3 Invalid column name 'AddressID'.

Для вывода определенного количества записей используем запрос (рис. 1.37)

select top 5 CustomerID from Customers;


Рис. 1.37.  Извлечение нескольких записей

Извлекаются первые пять записей поля CustomerID, расположенные в самой таблице Customers в алфавитном порядке, - этот запрос не производит сортировки!



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

select top 5 percent CustomerID from Customers;

В данном случае результат будет в точности таким же, как и при использовании запроса без оператора percent. В чем же дело? Общее число записей поля CustomerID таблицы Customers - 91 (в этом нетрудно убедиться, введя запрос select * from Customers; и переключившись на вкладку
, увидим сообщение: (91 row(s) affected)). Простой подсчет показывает, что пять процентов от 91 равняется 4,55; Query Analyzer округляет это число до пяти и возвращает результат.

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

select * from Products where UnitPrice > 100;

Этот запрос возвращает все записи из таблицы Products в которых Столбец (поле) UnitPrice имеет значение, большее 100 (рис. 1.38):


Рис. 1.38.  Отбор записей со всеми полями по заданному значению

Можно группировать операторы так:

select ProductName,UnitPrice from Products where UnitPrice > 100;

Здесь извлекаются поля ProductName и UnitPrice из таблицы Products где поле UnitPrice > 100 (рис. 1.39):


Рис. 1.39.  Отбор записей с несколькими полями по заданному значению

Оператор where поддерживает работу со знаками <, >, >=, <=.

Точную выборку осуществляет оператор in, в следующем примере извлекаются лишь те записи, в которых значение поля UnitPrice в точности равно либо 10, либо 15, либо 23 (рис. 1.40):

select ProductName,UnitPrice from Products where UnitPrice in (10,15,23);


Рис. 1.40.  Отбор записей по точному совпадению значений поля UnitPrice

Выборка для значений, лежащих в указанном интервале, осуществляется оператором between первое _значение and второе_значение (рис. 1.41):

select ProductName,UnitPrice from Products where UnitPrice between 10 and 13;


Рис. 1.41.  Отбор записей по значениям в указанном интервале


Содержание раздела