Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие.doc
Скачиваний:
57
Добавлен:
14.05.2015
Размер:
1.51 Mб
Скачать

From titles

3) SELECT ’наименований’=count(title)

FROM titles

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

4. Использование директив group by иHaving

Рассмотрим применение директивы группировки вместе с итоговой функцией, чтобы показать, как эта функция применяется к значениям внутри каждой отдельной группы. Для каждой группы авторов ведется собственный счет наименований, а не сквозной по всей таблице:

SELECT authors.au_lname, authors.au_fname,count(titles.title)’названий’

FROM authors, titleauthor, titles

WHERE authors.au_id = titleauthor.au_id

AND titleau­thor.title_id = titles.title_id

GROUP BY authors.au_lname, authors.au_fname

С помощью псевдонима таблицы можно уменьшить длину оператора SQL. Обычно имена таблиц заменяются псевдони­мами, состоящими из одного символа. Пример того же опера­тора, но с псевдонимами:

SELECT a.au_lname, a. au_ fname, count(c.title) ’названий’

FROM authors a, titleauthor b, titles c

WHERE a.an_id = b.au_id AND b.title_id = c.title_id

GROUP BY a.au_lname, a.au_fname

Еще один пример использования GROUP BY:

SELECT pub_id, type, “Число книг по заданной

тематике”=COUNT (type)

FROM titles

GROUP BY pub_id, type

Директива HAVING подобно WHERE используется для задания критерия отбора возвращаемых запросом данных. Разли­чие связано с уровнем, на котором выполняется проверка крите­рия. В директиве WHERE критерий используется для ограниче­ния количества строк, возвращаемых запросом. А затем дирек­тива GROUP BY формирует из этих строк группы и вычисляет заданные итоговые значения. Поле этого критерия директивы HAVING используется для ограничения количества групп в со­ответствии с данными на уровне группы.

Пример: HAVING используется для выборки имен только тех авторов, которые написали более одной книги:

SELECT a.au_lname, a. au_ fname, count(c.title) ’названий’

FROM authors a, titleauthor b, titles c

WHERE a.au_id = b.au_id AND b.title_id = c.title_id

GROUP BY a.au_lname, a.au_fname

HAVING count(c.title)>1

5. Оператор insert

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

Компоненты оператора INSERT:

INSERT INTO

Задает таблицу, в которую будут добавлены строки

список столбцов

Задает столбцы, в которые будут добавлены данные (используется, если данные добавляются не во все столбцы таблицы). Если список не задан, добавление производится во все столбцы в порядке, указанном в структуре таблицы

VALUES(список значений)

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

SELECT

Выбирает строки, которые будут добавлены в таблицу

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

Примеры:

1) Оператор INSERT со списком значений используется для добавления одной строки в таблицу titles:

INSERT INTO titles

VALUES (‘SM1234’, ‘The Small Business Tax Guide’, ‘business’, ‘1389’, 15.99, 3000, 10.0, ‘Tax guide for owners of small business’, ‘1/1/1997’)

2) В директиве INSERT можно так же задавать список заполняемых столбцов:

INSERT INTO titles (title_id, title)

VALUES(‘5678’,’Базы данных’)

3) Пусть имеется временная рабочая таблица newtitles, содержащая новую информацию о названиях печатных работ. Из этой таблицы нужно добавить в таблицу titles все записи о книгах, в столбце procdate которых содержится значение NULL:

INSERT INTO titles

(title_id, title, type, pub_id, price, advance, royalty, ytd_sales,

notes, pubdate)

SELECT title_id, title, type, pub_id, price, advance,

royalty, ytd_sales, notes, pubdate

FROM newtitles

WHERE procdate = NULL

Оператор INSERT INTO… SELECT можно интерпретировать как запрос, состоящий из двух частей. Сначала выполняется внутренняя часть запроса, содержащая SELECT, а затем резуль­тирующий набор строк передается оператору INSERT INTO и выполняется вторая фаза.