Элементы языка 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 является специальной учебной базой.
С ней мы и будем работать. На панели инструментов из выпадающего списка выбираем базу, для подключения -

Итак, напишем первый запрос7) и нажмем клавишу F5 (пункт меню Query - Execute):
select * from Customers;
В результате возвращаются все записи из таблицы Customers базы данных NorthwindCS. Для просмотра содержимого базы данных используем Object Browser, щелкая на знак (+) возле соответствующего объекта. Переключившись на вкладку

(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; и переключившись на вкладку

Для вывода записей, отвечающих заданному условию, используем оператор 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. Отбор записей по значениям в указанном интервале