|
||
Business Software | ERP | CRM | BI | ECM | DMS | SCM > BI Системы бизнес-анализа > Microsoft SQL Server 2005/2008 > Техническая информация > Язык запросов SQL - учебник > 7-й час. Знакомство с запросами
7-й час. Знакомство с запросами
На этом уроке мы поговорим о запросах к базе данных. В основе запросов лежит использование оператора SELECT, из операторов SQL являющегося, пожалуй, для уже сложившихся баз данных наиболее часто используемым Основными на этом уроке будут следующие темы • Что такое запрос к базе данных
Оператор SELECT, представляющий язык запросов к данным (Data Query Language — DQL) в SQL, используется для составления запросов к базе данных. Оператор SELECT не используется сам по себе, а требует указания некоторых параметров с помощью ключевых слов. Кроме обязательных, у этого оператора имеется несколько необязательных ключевых слов, расширяющих его возможности. Оператор SELECT является, пожалуй, одним из наиболее полезных операторов SQL. С оператором SELECT должно использоваться ключевое слово FROM, которое для этого оператора является обязательным.
• SELECT В операторе SELECT ключевое слово SELECT используется в совокупности с ключевым словом FROM для того, чтобы организовать извлечение данных из базы данных в удобном для чтения формате. Часть запроса, заданная ключевым словом SELECT, определяет источник отбора данных. Синтаксис простого оператора SELECT следующий.
FROM ТАБЛИЦА1 [ , ТАБЛИЦА2 ]; За ключевым словом SELECT в запросе следует список столбцов, значения которых вы хотели бы видеть в результате запроса За ключевым словом FROM следует список таблиц, из которых должны извлекаться данные. Звездочка (*) используется для указания того, что в результате запроса должны быть показаны значения всех столбцов таблицы. По поводу ее использования обратитесь к документации той реализации SQL, с которой работаете вы. Опция ALL используется тогда, когда нужно показать все значения столбца, включая и повторяющиеся. Опция DISTINCT используется для того, чтобы повторения исключить. Из этих опций используемой по умолчанию опцией является ALL, которую поэтому указывать не обязательно. Обратите внимание на то, что имена столбцов в списке, следующем за ключевым словом SELECT, разделяются запятыми, точно так же, как имена таблиц, следующие за ключевым словом FROM.
Основные возможности оператора SELECT раскрываются в следующих примерах. Давайте сначала выполним простой запрос по отношению к таблице PRODUCT S_TBL:
11235 КОСТЮМ ВЕДЬМЫ 29.99 222 ПЛАСТИКОВЫЕ ТЫКВЫ 7.75 13 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1 90 ФОНАРИ 14.5 11 строк выбраны. Звездочка означает выбор всех столбцов таблицы, которая, как видите, состоит из трех столбцов PROD_ID, PROD_DESC и COST. При выводе столбцы показываются в том порядке, в котором они расположены в таблице. В данной таблице 11 записей, на что указывает последняя строка вывода. Содержимое этой строки зависит от конкретной реализации SQL, например, в Oracle это будет 11 rows selected, а в другой реализации эта строка может выглядеть как 11 rows affected. Теперь выберем данные из таблицы CANDY_TBL. Создадим эту таблицу из таблицы PRODUCTSJTBL специально для данного примера. Чтобы показать данные только одного столбца, укажем имя столбца после ключевого слова SELECT
СЛАДКАЯ КУКУРУЗА СЛАДКАЯ КУКУРУЗА ШОКОЛАД HERSHEYS СНИКЕРС 4 строки выбраны. В таблице CANDY_TBL четыре записи. В следующем примере для отображения всех записей используется опция ALL, чтобы показать, что эта опция необязательна и вообще лишняя. Нет необходимости указывать ALL, поскольку эта опция подразумевается по умолчанию.
СЛАДКАЯ КУКУРУЗА СЛАДКАЯ КУКУРУЗА ШОКОЛАД HERSHEYS СНИКЕРС 4 строки выбраны. В следующем операторе использована опция DISTINCT, чтобы подавить вывод повторяющихся строк. Обратите внимание на то, что здесь значение СЛАДКАЯ КУКУРУЗА напечатано только один раз.
СЛАДКАЯ КУКУРУЗА ШОКОЛАД HERSHEYS СНИКЕРС 3 строки выбраны. При использовании DISTINCT и ALL можно заключить имя соответствующего столбца в круглые скобки. Скобки часто используются в SQL, как и во многих других языках, для удобства чтения операторов.
СЛАДКАЯ КУКУРУЗА ШОКОЛАД HERSHEYS СНИКЕРС 3 строки выбраны.
Ключевое слово FROM всегда используется с оператором SELECT. Это ключевое слово является обязательным элементом запроса. Целью задаваемого с помощью FROM выражения является сообщение базе данных о том, из какой таблицы или таблиц должны извлекаться данные. Выражение FROM может включать как одну, так и несколько таблиц. Синтаксис задаваемого с помощью FROM выражения следующий.
Использование условий для отбора данных
В выражении WHERE может содержаться несколько условий. Если условий несколько, они связываются операциями AND и OR, обсуждение которых предполагается в ходе урока 8, "Операции в условиях для отбора данных". Из того же урока вы узнаете об использовании логических операций, с помощью которых можно конструировать условия в запросах. В ходе данного урока мы будем рассматривать только запросы с одним условием.
Синтаксис оператора SELECT, использующего выражение WHERE следующий.
Вот простой запрос без использования ключевого слова WHERE.
FROM PRODUCTS_TBL;
11235 КОСТЮМ ВЕДЬМЫ 29.99 222 ПЛАСТИКОВЫЕ ТЫКВЫ 7.75 13 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1 90 ФОНАРИ 14.5 15 КОСТЮМЫ В АССОРТИМЕНТЕ 10 9 СЛАДКАЯ КУКУРУЗА 1.35 6 ТЫКВЕННЫЕ КОНФЕТЫ 1.45 87 ПЛАСТИКОВЫЕ ПАУКИ 1.05 119 МАСКИ В АССОРТИМЕНТЕ 4.95 1234 ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ 5.95 2345 ПОЛОЧКА ИЗ ДУБА 59.99 11 строк выбраны. Добавим в тот же запрос условие.
13 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 1.1 9 СЛАДКАЯ КУКУРУЗА 1.35 6 ТЫКВЕННЫЕ КОНФЕТЫ 1.45 87 ПЛАСТИКОВЫЕ ПАУКИ 1.05 119 МАСКИ В АССОРТИМЕНТЕ 4.95 5 строк выбраны. Теперь показаны только строки с информацией о товарах стоимостью меньше $5. С помощью следующего запроса извлекается информация о товаре с кодовым номером 119.
COST FROM PRODUCTS_TBL WHERE PROD_ID = '119';
МАСКИ В АССОРТИМЕНТЕ 4.95 1 строка выбрана. Обычно требуется, чтобы выводимые данные были как-то упорядочены. Выводимые данные можно упорядочить с помощью выражения, связанного с ключевым словом ORDER BY. Упорядочение, задаваемое с помощью ключевого слова ORDER BY, по умолчанию будет упорядочением по возрастанию, обозначается A—Z (А—Я) в случае сортировки имен. Алфавитное упорядочение по убыванию соответствует порядку Z—А (Я—А). Для числовых значений между 1 и 9 упорядочение по возрастанию обозначается 1-9, а по убыванию — 9— 1. Синтаксис оператора SELECT, использующего выражение ORDER BY, следующий.
FROM ТАБЛИЦА1 [ , ТАБЛИЦА2 ] WHERE [ УСЛОВИЕ1 | ВЫРАЖЕНИЕ1 ] [ AND УСЛОВИЕ2 | ВЫРАЖЕНИЕ2 ] ORDER BY СТОЛБЕЦ1|ЦЕЛОЕ_ЗНАЧЕНИЕ [ ASC|DESC ]; Для примера использования ключевого слова ORDER BY расширим один из использовавшихся выше операторов. Отсортируем вывод по описаниям товаров в порядке возрастания (алфавитном порядке). Обратите внимание на использование опции ASC. В выражении, задаваемом ключевым словом ORDER BY, эта опция может указываться после имени каждого из столбцов.
FROM PRODUCTS_TBL WHERE COST < 20 ORDER BY PROD_DESC ASC;
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 13 1.1 КОСТЮМЫ В АССОРТИМЕНТЕ 15 10 МАСКИ В АССОРТИМЕНТЕ 119 4.95 ПЛАСТИКОВЫЕ ПАУКИ 87 1.05 ПЛАСТИКОВЫЕ ТЫКВЫ 222 7.75 СЛАДКАЯ КУКУРУЗА 9 1.35 ТЫКВЕННЫЕ КОНФЕТЫ б 1.45 ФОНАРИ 90 , 14.5 8 строк выбраны.
Можно также использовать DESC, как это сделано в следующем примере, чтобы отсортировать вывод в порядке, обратном алфавитному.
FROM PRODUCTS_TBL WHERE COST < 20 ORDER BY PROD_DESC DESC;
ФОНАРИ 90 14.5 ТЫКВЕННЫЕ КОНФЕТЫ 6 1.45 СЛАДКАЯ КУКУРУЗА 9 1.35 ПЛАСТИКОВЫЕ ТЫКВЫ 222 7.75 ПЛАСТИКОВЫЕ ПАУКИ 87 1.05 МАСКИ В АССОРТИМЕНТЕ 119 4.95 КОСТЮМЫ В АССОРТИМЕНТЕ 15 10 ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 13 1.1 8 строк выбраны. В SQL предлагаются и некоторые сокращения. Столбец, указанный в списке ключевого слова ORDER BY, можно заменить числом. ЦЕЛОЕ_ЗНАЧЕНИЕ является значением, замещающим действительное имя столбца и соответствующим порядку столбца в списке после ключевого слова SELECT. Вот пример использования числового идентификатора вместо имени столбца.
PROD_ID, COST FROM PRODUCTS_TBL WHERE COST < 20 ORDER BY 1;
ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ 13 1.1 КОСТЮМЫ В АССОРТИМЕНТЕ 15 10 МАСКИ В АССОРТИМЕНТЕ 119 4.95 ПЛАСТИКОВЫЕ ПАУКИ 8"? 1.05 ПЛАСТИКОВЫЕ ТЫКВЫ 222 7.75 СЛАДКАЯ КУКУРУЗА 9 1.35 ТЫКВЕННЫЕ КОНФЕТЫ 6 1.45 ФОНАРИ 90 14.5 8 строк выбраны. В этом запросе целое значение 1 представляет столбец PROD_DESC. Точно так же 2 представляет столбец PROD_ID, 3 — COST и т.д. Можно задать упорядочение по нескольким столбцам, используя либо имена столбцов, либо соответствующие им в списке SELECT номера: ORDER BY 1,2,3 Столбцы в выражении ORDER BY не обязательно должны быть в том же порядке, каком они указаны в списке после ключевого слова SELECT, например, как в случае ORDER BY 1,3,2 Для правильного применения запросов очень важно понимание принципов учета регистра символов в SQL. Обычно команды и ключевые слова SQL регистронезави-симы, т. е. вы имеете возможность комбинировать в них символы верхнего и нижнего регистров так, как вам нравится. Подробнее об этом говорилось в ходе урока 5, "Манипуляция данными". Но при работе с данными регистр символов приходится учитывать. В большинстве случаев данные в реляционной базе данных следует сохранять в виде строк, состоящих исключительно из символов верхнего регистра, с целью обеспечения согласованности данных. Например, данные могут не быть согласованными, если использовать символы верхнего и нижнего регистра одновременно: В таком случае если имя хранится как smith, а вы обратитесь к базе данных со следующим запросом, запрос вернет вам пустую строку. SELECT * FROM EMPLOYEEJTBL WHERE LAST_NAME = 'SMITH';
Приведем несколько примеров запросов, построенных на основе обсуждавшихся выше принципов. Начнем с самого простого запроса, а затем постепенно будем усложнять его. Для запроса используем таблицу EMPLOYEE_TBL. Выберем все записи в таблице и все ее столбцы. SELECT FROM EMPLOYEEJTBL; Выберем все записи в таблице и отобразим ее заданный столбец. SELECT EMP_ID FROM EMPLOYEE_TBL; При этом можно разместить весь оператор в одной строке или разделить его на несколько строк. SELECT EMP_ID FROM EMPLOYEEJTBL; Выберем все записи в таблице и отобразим несколько ее столбцов. SELECT EMP_ID, LAST_NAME FROM EMPLOYEEJTBL; Отобразим данные, удовлетворяющие заданному условию. SELECT EMP_ID, LAST_NAME FROM EMPLOYEEJTBL WHERE EMP_ID = '333333333'; Отобразим данные, удовлетворяющие заданному условию,'и отсортируем вывод. SELECT EMP_ID, LAST_NAME FROM EMPLOYEEJTBL WHERE CITY = 'INDIANAPOLIS' ORDER BY EMP_ID; Отобразим данные, удовлетворяющие заданному условию, и отсортируем вывод по нескольким столбцам, причем для одного из столбцов это порядок по убыванию. SELECT EMP_ID, LAST_NAME FROM EMPLOYEE_TBL WHERE CITY = ' INDIANAPOLIS ' ORDER BY EMP_ID, LAST_NAME DESC; Отобразим данные, удовлетворяющие заданному условию, и отсортируем вывод, указав вместо имени столбца для сортировки замещающее его целое значение. SELECT EMP_ID, LAST_NAME FROM EMPLOYEEJTBL WHERE CITY = 'INDIANAPOLIS' ORDER BY 1; Отобразим данные, удовлетворяющие заданному условию, и отсортируем вывод по нескольким столбцам, указав вместо имен столбцов для сортировки замещающие эти имена целые значения в порядке, отличном от порядка столбцов в списке после ключевого слова SELECT. SELECT EMP_ID, LAST_NAME FROM EMPLOYEEJTBL WHERE CITY = 'INDIANAPOLIS' ORDER BY 2, 1;
С помощью простого запроса к таблице можно быстро получить информацию о числе содержащихся в таблице записей. Подсчет осуществляется с помощью функции COUNT. Хотя функции предполагается обсудить в книге позже, эту функцию мы приводим здесь ввиду того, что она часто используется в простых запросах. Синтаксис использования функции COUNT в запросах следующий.
Функция COUNT используется со скобками, в которых указывается столбец, по которому следует вести подсчет, либо звездочка, если нужно посчитать все строки в таблице. Подсчитаем все записи в таблице PRODUCTSJTBL.
-------- 9 1 строка выбрана. Подсчитаем теперь число значений для столбца PROD_ID в таблице PRODUCTS_TBL.
9 1 строка выбрана.
Получение данных из таблиц других пользователей Чтобы иметь возможность обратиться к данным другого пользователя, нужно иметь на это разрешение. Пользователи, не являющиеся владельцами таблицы, без разрешения получить доступ к этой таблице не могут. Только после того, как разрешение на доступ получено (соответствующая команда GRANT обсуждается в ходе урока 20, "Создание и использование представлений и синонимов"), вы получаете возможность извлечь данные из таблицы другого пользователя. Чтобы обратиться к данным таблицы другого пользователя с помощью оператора SELECT, перед именем таблицы укажите имя соответствующей схемы, как это сделано в следующем примере. SELECT EMP_ID FROM SCHEMA.EMPLOYEE_TBL
Использование псевдонимов иллюстрируется следующим примером с таблицей PRODUCTS_TBL. Здесь столбец с описаниями товаров отображается дважды, но второй раз столбец отображается с именем ТОВАР (обратите внимание на названия выводимых столбцов).
PROD_DESC ТОВАР FROM PRODUCTS_TBL;
КОСТЮМ ВЕДЬМЫ КОСТЮМ ВЕДЬМЫ ПЛАСТИКОВЫЕ ТЫКВЫ ПЛАСТИКОВЫЕ ТЫКВЫ ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ ФОНАРИ ФОНАРИ КОСТЮМЫ В АССОРТИМЕНТЕ КОСТЮМЫ В АССОРТИМЕНТЕ СЛАДКАЯ КУКУРУЗА СЛАДКАЯ КУКУРУЗА ТЫКВЕННЫЕ КОНФЕТЫ ТЫКВЕННЫЕ КОНФЕТЫ ПЛАСТИКОВЫЕ ПАУКИ ПЛАСТИКОВЫЕ ПАУКИ МАСКИ В АССОРТИМЕНТЕ МАСКИ В АССОРТИМЕНТЕ ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ ПОЛОЧКА ИЗ ДУБА ПОЛОЧКА ИЗ ДУБА 11 строк выбраны. Псевдонимы столбцов применяются для назначения столбцам более понятных имен при выводе данных, а также, в некоторых реализациях SQL, для использования при ссылках на столбцы более коротких имен.
Вы ознакомились с запросами к базе данных, которые являются основным средством извлечения информации из реляционной базы данных. В основе построения запросов лежит использование оператора SELECT, являющегося командой языка запросов к данным (DQL). Каждый оператор SELECT должен включать ключевое слово FROM. Вы узнали о том, как с помощью ключевого слова WHERE в запросах задаются условия отбора, а с помощью ключевого слова ORDER BY — условия сортировки. Вы освоили основы создания запросов и после нескольких упражнений будете готовы к тому, чтобы учиться строить более сложные запросы на следующем уроке. Почему оператор SELECT не может работать без ключевого слова FROM? С помощью ключевого слова SELECT вы сообщаете базе данных, какие данные вы хотели бы увидеть, а с помощью ключевого слова FROM — где взять эти данные. Когда я с помощью ключевого слова ORDER BY указываю обратный порядок сортировки, что происходит с данными? Предположим, что в выражении для ORDER BY вы указали столбец last_name таблицы EMPLOYEE_TBL. При задании обратного порядка сортировки имена будут отсортированы по буквам от Z до А (и от Я до А). Но если с помощью ORDER BY вы отсортировали столбец с данными о зарплате из таблицы EMPLOYEE_PAY_TBL, то при задании обратного порядка сортировки данные будут упорядочены от самого высокого значения зарплаты до самого низкого. В чем преимущества возможности переименования столбцов? Новое имя столбца с точки зрения конкретного отчета может лучше подходить для отображаемых данных. Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы". 1. Назовите обязательные составляющие оператора SELECT. 2. Для всех ли данных в выражении ключевого слова WHERE обязательно нужно использовать кавычки? 3. К какому разделу SQL относится оператор SELECT? 4. Можно ли в выражении для ключевого слова WHERE задать несколько условий? 1. Рассмотрите следующие операторы SELECT и выясните, являются ли они правильными с точки зрения синтаксиса. Если нет, то что в них следует исправить? Здесь использовалась таблица EMPLOYEE_TBL. а. SELECT EMP_ID, LAST_NAME, FIRST_NAME, FROM EMPLOYEE_TBL; 6. SELECT EMP_ID, LAST_NAME ORDER BY EMP_ID FROM EMPLOYEEJTBL; B. SELECT EMP_ID, LAST_NAME, FIRST_NAME FROM EMPLOYEEJTBL WHERE EMP_ID = '333333333' ORDER BY EMP_ID; Г. SELECT EMP_ID SSN, FIRST_NAME FROM EMPLOYEE_TBL WHERE EMP_ID = '333333333' ORDER BY 1; д. SELECT EMP_ID, LAST_NAME, FIRST_NAME FROM EMPLOYEEJTBL WHERE EMP__ID = '333333333' ORDER BY 3, 1, 2; |
Реклама |
|