Программирование >>  Руководство по sql 

1 ... 21 22 23 [ 24 ] 25 26 27 ... 105


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

SQL:

select au lname, au fname from authors where state = CA

Результат:

au lname au fname

Bennet Abraham

Carson Cheryl

McBadden Heather

Dull Ann

Yokomoto Akiko

OLeary Michael

Gringlesby Burt

White Johnson

Hunter Sheryl

Locksley Chastity

Теперь в списке будут перечислены только авторы, проживающие в Калифорнии.

На практике синтаксис оператора SELECT может быть простым и сложным. Он упрощается, если в оператор включаются только предложения SELECT и FROM. Предложение WHERE (и все другие предложения) в принципе необязательны. С другой стороны, полный синтаксис оператора SELECT имеет следующий вид:

SELECT [ALL DISTINCT] список Выбора FROM {имя таблицы имя курсора}

[ , {имя таблицы I имя курсора}]... [WHERE условия]

[GROUP BY имя столбца [ , имя столбца]...]

[HAVING условия] [ORDER BY {имя столбца список выбора} [ASC j DESC]

[ , {column name список выбора} [ASC DESC] ]...]

Хотя SQL и является языком с необусловленной формой, порядок предложений в операторе SELECT должен строго соблюдаться (например, предложение GROUP BY должно предшествовать предложению ORDER BY). В противном случае это приведет к появлению ошибки синтаксиса.

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

база данных. владелец. имя таблицы. notes база данных. владелец. имя курсора. notes

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



ВЫБОР СТОЛБЦОВ: СПИСОК ВЫБОРА

Любой оператор SELECT начинается с ключевого слова SELECT. Ключевые слова ALL и DISTINCT, которые определяют, будут ли включаться в результат повторяющиеся строки, являются необязательными и описываются в следующей главе.

В списке выбора (select list) определяется столбец или столбцы, включаемые в результат. Он может состоять из имен одного или нескольких столбцов, или включать единственную звездочку (*), определяющую все столбцы. Можно также использовать выражения - константы, имена столбцов, функций и их комбинации с арифметическими операторами и скобками. Вот несколько примеров выражений:

ytd sales * price price * 1.2 (12000 - 500)/ 13 avg(advance)

Каждый элемент в списке выбора отделяется от другого запятой.

Выбор всех столбцов: SELECT *

Знак звездочки (*) ифает в списке выбора особую роль. Он означает выбор всех имен столбцов во всех таблицах из списка таблиц. Столбцы отображаются в соответствии с порядком, в котором они были определены в операторе (операторах) CREATE TABLE. Этот знак используется, если необходимо увидеть все столбцы таблицы.

Для выбора всех столбцов таблиц используется следующий оператор:

SELECT *

FROM список таблиц

Так как оператор SELECT * находит все текущие столбцы таблицы, при изменении структуры таблицы (добавление, удаление или переименование столбцов) соответственно изменяются и его результаты. Просмотр столбцов по отдельности, конечно, позволяет более тщательно контролировать получаемые результаты, однако вводить оператор SELECT * значительно проще (к тому же в нем сложно сделать ощибку). Оператор SELECT * наиболее подходит для таблиц с несколькими столбцами, так как одновременное отображение данных из большого количества столбцов обычно неудобно. Также этот оператор будет полезен, если вы хотите получить общие представления о структуре таблицы (о столбцах и их порядке).

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

SQL:

select *

from publishers

Результат:

pub id pub name address city state

0736 New Age Books 1 1st St Boston MA

0877 Binnet & Hardley 2 2nd Ave. Washington DC 1389 Algodata Infosystems 3 3rd Dr. Berkeley CA

Tot же результат получается и при перечислении всех имен столбцов этой таблицы после ключевого слова SELECT:

SQL:

select pub id, pub name, address, city, state from publishers



Звездочка в списке выбора многотабличного запроса заставляет SQL отображать все столбцы из всех таблиц в списке таблиц. В некоторых системах в списке выбора могут одновременно присутствовать и звездочка, и имена отдельных столбцов. Это наиболее удобно в многотабличных запросах, когда вместе со звездочкой используется имя таблицы. Следующий оператор извлекает информацию из таблицы publishers для каждого значения titlejd из таблицы titles. При этом будут извлекаться все столбцы из таблицы publishers (так как в списке выбора присутствует publishers. *) и только один столбец из таблицы titles (так как в списке выбора присутствует titlejd).

SQL:

SELECT title id, publishers.*

from titles, publishers

where titles.pub id = publishers.pub id

Результат:

title id

pub id

pub name

address

city

state

PS1372

~0736

New Age Books

1st St

Boston

0736

New Age Books

1st St

Boston

PS3333

0736

New Age Books

1st St

Boston

PS2106

0736

New Age Books

1st St

Boston

PS2091

0736

New Age Books

1st St

Boston

BU2075

0736

New Age Books

1st St

Boston

MC3026

0877

Binnet & Hardley

2nd Ave.

Washington

MC2222

0877

Binnet & Hardley

2nd Ave.

Washington

JQ.1111

0877

Binnet & Hardley

2nd Ave.

Washington

TC4203

0877

Binnet & Hardley

2nd Ave.

Washington

MC3021

0877

Binnet & Hardley

2nd Ave.

Washington

TC3218

0877

Binnet & Hardley

2nd Ave.

Washington

PC8888

1389

Algodata Infosystems

3rd Dr.

Berkeley

PC9999

1389

Algodata Infosystems

3rd Dr.

Berkeley

BUllll

1389

Algodata Infosystems

3rd Dr.

Berkeley

BU7832

1389

Algodata Infosystems

3rd Dr.

Berkeley

BU1032

1389

Algodata Infosystems

3rd Dr.

Berkeley

PC1035

1389

Algodata Infosystems

3rd Dr.

Berkeley

Без использования звездочки этот запрос имел бы следующий вид: SQL:

select title id, publishers.pub id, publishers.pub name, publishers.address, publishers.city, publishers.state from titles, publishers where titles.pub id = publishers.pub id

(Вопросы, связанные с операцией объединения, будут рассматриваться в главе 7. Поэтому сейчас не обращайте особого внимания на вид этого запроса.)



1 ... 21 22 23 [ 24 ] 25 26 27 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика