Опубликован: 11.09.2006 | Уровень: специалист | Доступ: свободно
Лекция 4:

Работа с данными

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

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

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

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

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

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

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

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

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

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

Мы используем подключение к серверу, находящемуся на нашем компьютере, — поэтому указываем имя сервера (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). В результате получим следующее (рис. 4.5):

Главное окно программы

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

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

Итак, напишем первый запрос1Вы можете также писать запросы, используя заглавные буквы, — SQL нечувствителен к регистру. и нажмем клавишу F5 (пункт меню Query —>Execute):

select * from Customers;

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

(91 row(s) affected)

Главное окно программы принимает следующий вид (рис. 4.6):

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

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

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

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

Содержание таблицы Customers

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

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

select CustomerID, Address from Customers;

Результатом будет следующее (рис. 4.8):

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

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

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

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

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

select top 5 CustomerID from Customers;
Извлечение нескольких записей

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

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

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

select top  5 percent  CustomerID  from Customers;

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

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

select *  from Products where UnitPrice > 100;

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

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

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

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

select ProductName,UnitPrice  from Products where UnitPrice > 100;

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

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

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

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

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

select ProductName,UnitPrice   from Products where UnitPrice in (10,15,23);
Отбор записей по точному совпадению значений поля UnitPrice

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

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

select ProductName,UnitPrice   from Products where UnitPrice between 10 and 13;
Отбор записей по значениям в указанном интервале

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

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/