Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / SQL и PL/SQL в Oracle10g
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

2. Основы запросов SELECT

2.1 Базовый синтаксис запросов SELECT

Основы запросов SELECT в Oracle SQL, базовый синтаксис запросов, список столбцов, псевдонимы и литералы, оператор q', ключевое слово DISTINCT

Основное средство для получения информации из базы данных — это запросы, то есть команда SELECT. Базовые возможности этой команды будут рассмотрены в этом разделе, другие, более сложные возможности — в следующих разделах. В каждом разделе будут указываться отличия по сравнению с аналогичными возможностями в Microsoft SQL Server.

Поскольку во всех главных базах данных поддерживается стандарт ANSI SQL, то базовые возможности и в Oracle, и в других базах данных (Microsoft SQL Server, IBM DB2, Informix, Sybase, Microsoft Access) будут схожи. Отличия — в частностях, которые стандарт SQL не определяет, но которые довольно существенны, и которые могут привести к сложностям для пользователей, которые привыкли создавать запросы к другим базам данных.

Базовый синтаксис команды SELECT в Oracle выглядит следующим образом:

SELECT [DISTINCT] список_столбцов FROM источник WHERE фильтр ORDER BY выражение_сортировки

Приведем пример такого запроса:

SELECT employee_id, first_name, last_name, hire_date FROM hr.employees WHERE hire_date < '01.01.2000' ORDER BY last_name

Как мы видим, пока в запросе не используются специальные возможности, он выглядит абсолютно стандартным и полностью идентичен аналогичным запросам, например, в SQL Server. Если нам нужно выбрать все столбцы из базы данных или представления, мы можем указать вместо списка столбцов звездочку:

SELECT * FROM hr.employees WHERE hire_date < '01.01.2000' ORDER BY last_name

Выводимое имя столбца можно поменять при помощи псевдонима (alias). Для этого достаточно просто написать имя пседвонима сразу после названия столбца или использовать ключевое слово AS (оба синтаксиса полностью равнозначны):

SELECT last_name Фамилия FROM hr.employees

SELECT last_name AS Фамилия FROM hr.employees

Особенно удобно использовать псевдонимы для вычисляемых столбцов, для которых изначально имя не предусмотрено:

SELECT last_name AS Фамилия, salary*12 AS "Зарплата за год" FROM hr.employees

Если в псевдониме используются пробелы или какие-то служебные символы, то такой псевдоним нужно поместить в двойные кавычки.

Отметим и некоторые особенности, связанные со списком столбцов в Oracle. Если в SQL Server "проблемные" имена столбцов (с пробелами и зарезервированными словами) можно было помещать в квадратные скобки (а обычно и в двойные кавычки — в зависимости от настроек сеанса), то в Oracle и тот, и другой вариант вызовет ошибку.

В список столбцов в Oracle можно включать литералы (literals). Литералы — это любое строковое значение, дата или число, которое помещается в список столбцов и при этом не является ни названием столбца, ни псевдонимом. Литералы будут повторяться для каждого возвращаемого столбца. Обычно они используются для создания пояснений в возвращаемом наборе результатов:

SELECT last_name AS Фамилия, 'Зарплата за год: ', salary*12 FROM hr.employees

В этом примере 'Зарплата за год: ' — это литерал, который будет выводиться для каждой записи.

Строковые литералы и литералы с датой должны заключаться в одинарные кавычки. Литералы в виде числовых значений в кавычки не помещаются.

Отметим, что литералы часто сливаются в выводимых результатах с возвращаемыми из базы данных значениями при помощи оператора конкатенации (||). Про операторы Oracle будет рассказываться в разделах 2.2, 2.3, 2.4.

При работе с литералами иногда возникает проблема, связанная с тем, что литерал сам по себе может содержать зарезервированный символ, например, одинарные кавычки. Oracle, в отличие, например, от SQL Server, позволяет пользователю самостоятельно определять символ, который будет использоваться в качестве кавычек. Выглядеть такое переопределение может. например, так:

select department_name, q'[It's assigned manager ID: ]', manager_id from departments

Попытка применить обычные одинарные кавычки для литерала приведет к ошибке, поскольку кавычка встречается внутри самого символьного значения литерала. Поэтому в этом примере в качестве кавычек выступают квадратные скобки.

Отметим некоторые особенности применения оператора q':

  • можно использовать как строчную букву q, так и заглавную (Q);
  • после q должна идти обычная одинарная кавычка. Следующая одинарная кавчка определяет завершение области действия оператора q;
  • сразу после одинарной кавычкой должен идти символ, выбранный пользователем для применения в качестве кавычек. Этот символ может быть любым, за исключением пробела, перевода строки или табуляции (в том числе и одинарная кавычка). Если пользователь выбрал символ (, {, [ или <, то закрываться кавычки должны соответствующим символом ), }, ] и >. В других случаях закрытие кавычек производится при помощи того же символа, который использовался для их открытия.

И последний момент, связанный с базовым синтаксисом запросов. По умолчанию запрос возвращает из базы данных все значения, соответствующие параметрам запроса, даже если некоторые из возвращаемых значений будут полностью одинаковыми. Например, запрос

SELECT salary FROM hr.employees

вернет 107 строк, несмотря на то, что значительная часть значений будет повторяться.

Чтобы вернуть только уникальные значения (или наборы значений, если возвращается несколько столбцов), в запросе можно использовать ключевое слово DISTINCT:

SELECT DISTINCT salary FROM hr.employees

Такой запрос вернет уже 57 значений, при этом все значения будут уникальными.

Отличительной особенностью Oracle является то, что вместо DISTINCT можно использовать ключевое слово UNIQUE. SQL Server такого не позволяет.

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2016, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru