Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Предложения select и FROM

FROM

{ имя_таблицы [@ связь_БД ] [AS OF {SCN | TIMESTAMP} выражение ]

| имя_таблицы PARTITION (имя_раздела) [AS OF {SCN | TIMESTAMP} выражение ]

| имя_таблицы SUBPARTITION (имя_подраздела) [AS OF{SCN | TIMESTAMP} выражение ]

| имя_таблицы SAMPLE[BLOCK] процент_выборки [AS OF{SCN | TIMESTAMP} выражение ]

| представление [@ связь_БД ] [AS OF {SCN | TIMESTAMP} выражение ]

| представление PARTITION (имя_ раздела) [AS OF {SCN | TIMESTAMP} выражение ]

| представление SUBPARTITION (имя_подраздела) [AS OF {SCN | TIMESTAMP} выражение ]

| представление SAMPLE [BLOCK] процент_выборки [AS OF {SCN | TIMESTAMP} выражение ]

| моментальная_копия [@связь_БД] [AS OF{SCN | TIMESTAMP} выражение ]

| моментальная_копия PARTITION (имя_ раздела) [AS OF {SCN | TIMESTAMP} выражение ]

| моментальная_копия SUBPARTITION (имя_подраздела) [AS OF {SCN | TIMESTAMP} выражение ]

| моментальная_копия SAMPLE [BLOCK] процент_выборки [AS OF {SCN | TIMESTAMP} выражение ]

| (подзапрос)

| имя_таблицы

{[ тип_соединения ] JOIN имя_таблицы

{ ON условие

|USING (столбец [ столбец ]…)

|{CROSS JOIN|NATURAL [ тип_соединения ] JOIN имя_таблицы }

}

[, [ псевдоним_таблицы ]

[, имя таблицы …]

[ WHERE условие ]

{[ GROUP BY { выражение | { выражение [, выражение …]}

| CUBE (выражение [, выражение …])

| ROLLUP (выражение [, выражение …])

}

GROUPING SETS (

{ выражение | { выражение [, выражение …]}

|CUBE (выражение [, выражение …])

|ROLLUP (выражение [, выражение …])

}

[ HAVING условие ]

[[START WITH условие ] CONNECT BY условие ]

[{UNION [ALL]] | INTERSECT | MINUS} { подзапрос }

[,{UNION [ALL] | INTERSECT | MINUS} { подзапрос }…]]

[ ORDER BY { выражение | позиция | псевдоним } [ASC | DESC]

[, { выражение | позиция | псевдоним } [ASC | DESC] …]

FOR UPDATE[OF] { таблица | представление }. столбец

[{ таблица | представление }. столбец ]

[ NOWAIT ]

 

При описании инструкции используются следующие ключевые слова:

DISTINCT – указывает, что должна быть возвращена только одна копия строки, даже в случае наличия дубликатов строк;

AS - задает псевдоним для столбца или выражения, может отсутствовать;

ALL - указывает, что должны быть возвращены все строки, включаю дубликаты. По умолчанию ALL.

AS OF - обеспечивает работу с данными по состоянию на конкретный номер системного изменения (SCN) или временную метку как указывает выражение;

SAMPLE [BLOCK] -выполняется случайная (или блочная) выборка строк таблицы;

START WITH – указывает строки, выступающие в качестве корневых в иерархическом запросе (если эти ключевые слова пропущены, то все строки таблицы считаются корневыми);

CONNECT BY – определяет отношение между родительскими и дочерними строками иерархии;

INNER - внутреннее соединение (установлено по умолчанию);

RIGHT - правое внешнее соединение;

LEFT - левое внешнее соединение;

FULL - полное внешнее соединение;

ON условие - задает условие соединения, которое не привязано к условию WHERE;

USING - соединение по равенству для столбцов, имеющих одинаковые имена;

CROSS JOIN - перекрёстное соединение, т.е. прямое произведение двух отношений;

NATURAL - естественное соединение по одноименным столбцам двух таблиц с одинаковыми значениями;

JOIN - явное указание на соединение, эквивалентно перечислению таблиц через запятую;

CUBE - группировка на основе всех возможных комбинаций значений предложенного списка отношений;

ROLLUP - группировка на основе значений предложенного списка выражений и сводных строк, возвращённых для каждого выражения наряду с дополнительной строкой общего итога;

GROUPING SETS – задает несколько групп данных для более удобного агрегирования (если указаны только нужные группы, то серверу не приходится выполнять все множество агрегатирований, которые требуют CUBE и ROLLUP);

FOR UPDATE [OF] – означает, что выбранные строки будут заблокированы. Если указывается ключевое слово OF, то будут заблокированы только строки названной таблицы;

NOWAIT – означает, что если таблица уже заблокирована, то сервер Oracle не будет ждать снятия блокировки.

 

 

 

В предложении SELECT, с которого начинаются все инструкции SELECT, необходимо указать элементы данных, которые будут возвращены в результате запроса. Эти элементы задаются в самом простом случае в виде списка возвращаемых столбцов, разделенных запятыми. Для каждого элемента из этого списка в таблице результатов запроса будет создан один столбец. Столбцы в таблице результатов будут расположены в том же порядке, что и элементы списка возвращаемых столбцов. Возвращаемый столбец может представлять собой:

- имя столбца, идентифицирующее один из столбцов, содержащихся в таблицах, которые перечислены в предложении FROM. СУБД просто берет значение этого столбца для каждой из строк исходной таблицы и помещает его в соответствующую строку таблицы результатов запроса;

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

- выражение, показывающее, что СУБД должна вычислять значение, помещаемое в таблицу результатов запроса, по формуле, определенной в выражении. Такие столбцы таблицы результатов носят название вычисляемых.

Предложение FROM состоит из ключевого слова FROM, за которым следует список спецификаторов таблиц, разделенных запятыми. Каждый спецификатор таблицы идентифицирует таблицу, содержащую данные, которые извлекает запрос. Такие таблицы называются исходными таблицами запроса.

Результатом SQL-запроса на выборку всегда является таблица. Если пользователь выполняет инструкцию SQL в интерактивном режиме, СУБД выводит результаты запроса на экран в табличной форме. Если программа посылает запрос СУБД с помощью “программного SQL”, то СУБД возвращает таблицу результатов запроса программе.

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

То что, SQL-запрос всегда возвращает таблицу, означает следующее:

1) результаты запроса можно записать обратно в базу данных в виде таблицы,

2) результаты двух запросов, имеющие похожую структуру, можно объединить в одну таблицу,

3) результаты запроса сами могут стать предметом дальнейших запросов.

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

Простые запросы. Простые запросы извлекают данные из столбцов, расположенных в одной таблице базы данных. Например, следующий запрос извлекает из таблицы STAFF три столбца:

 

Вывести для каждого сотрудника имя, фамилию и занимаемую должность:

SELECT fname, lname, position

FROM staff;

 

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

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

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

 

Выдать строки сотрудников с указанием зарплаты с 10 % надбавкой

SELECT fname, lname, position, (salary + 0.1*salary) AS percent

FROM staff;

 

Ключевое слово AS используют для того, чтобы присвоить новое имя вычисляемому столбцу или использовать сокращенное имя столбца вместо полного.

Фраза SELECT может включать не только выражения, но и отдельные числовые или текстовые константы. Текстовые константы должны заключаться в апострофы ('). Это необходимо для создания результата запроса в более удобном для пользователя виде.

 

SELECT pno, type, 'with rent', rent, 'per cent'

FROM property_for_rent;

Выборка всех столбцов. Иногда требуется получить содержимое всех столбцов таблицы, например, необходимо составить представление о структуре незнакомой базы и хранимых в ней данных. С учетом этого в SQL разрешается использовать вместо списка возвращаемых столбцов символ *, который означает, что требуется извлечь все столбцы в том порядке, в каком они расположены в исходной таблице:

 

SELECT * FROM staff;

 

В стандарте ANSI/ISO сказано, что в предложении SELECT может использоваться либо символ выборки всех столбцов либо список возвращаемых столбцов, однако большинство коммерческих СУБД допускают использование и того и другого одновременно, например: SELECT *, salary FROM staff. В Oracle, как и требует стандарт, такой запрос не работает.

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

 

Определи ть в каких городах существуют отделения предприятия

SELECT DISTINCT city

FROM branch;

 

Если в одном и том же городе существует несколько отделений, название этого города будет повторяться в результирующей таблице.

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

DISTINCT может указываться только один раз в данном предложении SELECT. Если предложение выбирает многочисленные поля, DISTINCT опускает строки, где все выбранные поля идентичны. Строки, в которых некоторые значения одинаковы, а некоторые различны - будут сохранены. DISTINCT, фактически, приводит к показу всей строки вывода, не указывая полей (за исключением, когда он используется внутри агрегатных функций), так что нет никакого смысла чтобы его повторять.

Вместо DISTINCT можно указать - ALL тогда дублирование строк вывода сохранится.

Сортировка результатов запроса (предложение ORDER BY). Строки результатов запроса, как и строки таблицы БД, не имеют определенного порядка. Поэтому, включив в инструкцию SELECT предложение ORDER BY, можно отсортировать результаты запроса. При этом упорядочение можно производить в порядке возрастания - ASC (ASCending) или убывания DESC (DESCending), по умолчанию принимается ASC.

В предложение ORDER BY входит список имен, разделенных запятыми:

 

Вывести отделения компании, отсортированные в алфавитном порядке по названию городов:

SELECT bno, city, tel_no

FROM branch

ORDER BY city;

 

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

Если в списке ORDER BY несколько столбцов, то используется понятие старшего и младшего ключей сортировки. Особенно удобно использовать это в многотабличных запросах:

 

Для каждого отделения компании вывести ФИО работников, отвечающих за какие-либо объекты, а также перечень этих объектов в порядке убывания:

SELECT s.bno, s.sno, fname, lname, pno

FROM staff s, property_for_rent p

WHERE s.sno = p.sno

ORDER BY s.bno, s.sno, pno DESC;

 

 

<== предыдущая лекция | следующая лекция ==>
Инструкция select | Отбор строк (предложение WHERE)
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 304; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.036 сек.