Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_SQL.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
405.5 Кб
Скачать

Манипулирование данными

Операторы языка SQL DML:

SELECT выборка данных из базы;

INSERTвставка данных в таблицу;

UPDATEобновление данных в таблице;

DELETEудаление данных из таблицы.

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

Branch (branchNo, street, city, postcode)

Staff (staffNo, fName, lName, position, sex, DOB, salary, branchNo)

PropertyForRent (propertyNo, street, city, postcode, type, rooms, rent, ownerNo, staffNo, branchNo)

Client (clientNo, fName, lName, telNo, prefType, maxRent)

PrivateOwner (ownerNo, fName, lName, address, telNo)

Viewing (clientNo, propertyNo, viewDate, comment)

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

INSERT INTO PropertyForRent (propertyNo, street, city, postcode, type, rooms, rent, ownerNo, staffNo, branchNo)

VALUES ('PA14', '16 Holhead', 'Aberdeen' , 'AB7 5SU' , 'House' , 6, 650.00, 'C046', 'SA91', ' B007')

Значение столбца rooms является литералом целочисленного типа, а значение столбца rent – это десятичный числовой литерал. Ни один из них не должен заключаться в одинарные кавычки. Значения всех остальных столбцов представляют собой символьные строки и обязательно должны быть взяты в одинарные кавычки.

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

SELECT [DISTINCT | ALL] { * | [columnExpression [AS newName]] [ , …. ] }

FROM TableName [alias] [ , ... ]

[WHERE condition]

[GROUP BY columnlist] [HAVING condition]

[QRDER BY columnList]

Здесь параметр columnExpression представляет собой имя столбца или выражение из нескольких имен. Параметр TableName является именем существующей в базе данных таблицы (или представления), к которой необходимо получить доступ. Необязательный параметр alias – это сокращение, устанавливаемое для имени таблицы TableName. Обработка элементов оператора SELECT выполняется в следующей последовательности.

  1. FROM. Определяются имена используемой таблицы или нескольких таблиц.

  2. WHERE. Выполняется фильтрация строк объекта в соответствии с заданными условиями.

  3. GROUP BY. Образуются группы строк, имеющих одно и то же значение в указанном столбце.

  4. HAVING. Фильтруются группы строк объекта в соответствии с указанным условием.

  5. SELECT. Устанавливается, какие столбцы должны присутствовать в выходных данных.

  6. ORDER BY. Определяется упорядоченность результатов выполнения оператора.

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

Реляционные схемы для той части учебного проекта DreamHome, в которой содержится и обрабатывается информация об аренде собственности, выглядят так:

Branch (branchNo, street, cizy, postcode)

Staff (staffNo, fName, IName, position, sex, DOB, salary, branchNo}

PropertyForRent (propertyNo, street, city, postcode, type, rooms,rent, ownerNo, staf fNo, branchNo)

Client (clientNo, fName, IName, telNo, prefType, maxRent)

PrivateOwner (ownerNo, fName, IName, address, telNo)

Viewing (clientNo, propertyNo, viewDate, comment)

Registration (cJlientNo, branchNo, staffNo, dateJoined)

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

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

В табл. 1-8 показан пример определения реляционной схемы.

Пример некоторого текущего состояния базы данных учебного проекта DreamHome.

Таблица Branch Таблица 1.

branchNo

street

city

postcode

В005

22 Deer Rd

London

SW1 4EH

В007

16 Argyll St

Aberdeen

AB23SU

ВООЗ

163 Main St

Glasgow

Gil 9QX

В004

32 Manse Rd

Bristol

BS99 1N2

В002

56 Clover Dr

London

NW10 6EU

Таблица Staff Таблица 2.

staffNo

fName

[Name

position

sex

DOB

salary

branchNo

SL21

John

White

Manager

M

l-Oct-45

30000

BOOS

SG37

Ann

Beech

Assistant

F

lO-Nov-60

12000

B003

SG14

David

Ford

Supervisor

M

24-Mar-58

18000

B003

SA9

Mary

Howe

Assistant

F

19-Feb-70

9000

B007

SG5

Susan

Brand

Manager

F

3-Jun-40

24000

BOOS

SL41

Julie

Lee

Assistant

F

13-Jun-65

9000

BOOS

Таблица PropertyForRent Таблица З.

property No

street

city

postcode

type

rooms

rent

РА14

16Holhead

Aberdeen

AB7 5SU

House

6

650

PL94

6 Argyll St

London

NW2

'Flat

4

400

PG4

6 Lawrence St

Glasgow

Gil 9QX

Flat

3

350

PG36

2 Manor Rd

Glasgow

G32 4QX

Flat

3

375

PG21

18 Dale Rd

Glasgow

G12

House

5

600

PG16

5 Novar Dr

Glasgow

G129AX

Flat

4

450

Продолжение таблицы 3.

Owner No

staff No

Branch No

C046

SA9

B007

C087

SL41

BOOS

C040

BOOS

C093

G37 S

BOOS

COS7

SG37

вооз

C093

SG14

вооз

Таблица Client Таблица 4.

clientNo

fName

IName

telNo

prefType

maxRent

CR76

John

Kfy

0207-774-5632

Flat

425

С056

Aline

Stewart

0141-848-1825

Flat

350

CR74

Mike

Ritchie

01475-392178

House

750

CR62

Mary

Tregear

01224-196720

Flat

600

Таблица PrivateOwner Таблица 5.

ownerNo

fName

IName

address

telNo

С046

Joe

Keogh

2 Fergus Dr, Aberdeen AB2 7SX

01224-861212

С087

Carol

Parrel

6 Achray St, Glasgow G32 9DX

0141-357-7419

С040

Tina

Murphy

63 Well St, Glasgow G42

0141-943-1728

С093

Tony

Shaw

12 Park PI, Glasgow G4 OQR

0141-225-7025

Таблица Viewing Таблица 6.

clientNo

propertyNo

viewDate

comment

CR56

РА14

24-May-Ol

too small

CR76

PG4

20-Apr-Ol

too remote

CR56

PG4

26-May-Ol

CR62

РА14

14~May-01

no dining room

CR56

PG36

28-Apr-Ol

блица Registration Таблица 7.

clientNo

branchNo

staffNo

dateJoined

CR76

В005

SL41

2-Jan-Ol

CR56

вооз

SG37

11-Apr-OO

CR74

вооз

SG37

16-Nov-99

CR62

В007

SA9

7-Mar-OO

Пример 1. Выборка всех столбцов и всех строк. Составьте список подробных сведений о каждом из работников.

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

SELECT staffNo, fName, lName, position, sex, DOB, salary, branchNo FROM Staff

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

SELECT * FROM Staff

Результат выполнения этого запроса представлен в табл. 8.

Таблица 8.

Результат выполнения запроса список подробных сведений о каждом из работников

staffNo

fName

lName

position

sex

DOB

salary

branchNo

SL21

John

White

Manager

M

l-Oct-45

30000.00

B005

SG37

Ann

Beech

Assistant

F

10-Nov-60

12000.00

B003

SG14

David

Ford

Supervisor

M

24-Mar-58

18000.00

B003

SA9

Mary

Howe

Assistant

F

19-Feb-70

9000.00

B007

SG5

Susan

Brand

Manager

F

3-Jun-40

24000.00

B003

SL41

Julie

Lee

Assistant

F

13-Jun-65

9000.00

B005

Пример 2. Выборка конкретных столбцов и всех строк. Создайте отчет о заработной плате всех работников с указанием только табельного номера работника (staffNo), его имени и фамилии, а также сведений о зарплате.

SELECT staffNo, fName, lName, salary FROM Staff

В этом примере на основе таблицы Staff создается новая таблица, включающая только указанные в запросе столбцы staffNo, fName, lName и salary, причем именно в этом порядке. Результат выполнения данного запроса приведен в табл. 9. Обратите внимание, что строки в результирующей таблице могут оказаться неотсортированными, если не дано специальное указание. С другой стороны, в некоторых СУБД сортировка результирующей таблицы выполняется по умолчанию с учетом значений одного или нескольких столбцов (например, в базе данных Microsoft Access сортировка этой результирующей таблицы была бы выполнена по значению первичного ключа staffNo).

Таблица 9.

Результат выполнения запроса

staffNo

fName

lName

salary

SL21

John

White

30000.00

SG37

Ann

Beech

12000.00

SG14

David

Ford

18000.00

SA9

Mary

Howe

9000.00

SG5

Susan

Brand

24000.00

SL41

Julie

Lee

9000.00

Пример 3. Использование ключевого слова DISTINCT. Составьте список номеров всех сдаваемых в аренду объектов, осмотренных клиентами.

SELECT propertyNo FROM Viewing

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

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

SELECT DISTINCT propertyNo FROM Viewing

Результаты выполнения второго варианта запроса представлены в табл.11.

Таблица 10. Таблица 11.

propertyNo

PA14

PA4

PA4

PA14

PG36

propertyNo

PA14

PA4

PG36


Пример 4. Вычисляемые поля. Создайте отчет о ежемесячной зарплате всего персонала с указанием табельного номера, имени, фамилии и суммы зарплаты.

SELECT staffNo, fName, lName, salary/12

FROM Staff

Этот запрос почти идентичен запросу из примера 2, за исключением того, что здесь требуется указать сумму не годовой, а ежемесячной зарплаты. В данном случае желаемый результат, может быть достигнут простым делением суммы зарплаты за год на 12. Результаты выполнения запроса представлены в табл. 12.

Таблица 12.

Результат выполнения запроса

staffNo

fName

lName

Exp_1

SL21

John

White

2500.00

SG37

Ann

Beech

1000.00

SG14

David

Ford

1500.00

SA9

Mary

Howe

750.00

SG5

Susan

Brand

2000.00

SL41

Julie

Lee

750.00

Это пример использования в запросе вычисляемого поля (иногда эти поля называют расчетными, или производными). В общем случае для создания вычисляемого поля в списке SELECT следует указать некоторое выражение языка SQL. В этих выражениях могут применяться операции сложения, вычитания, умножения и деления. При построении сложных выражений могут использоваться круглые скобки. Для получения значения вычисляемого поля могут использоваться значения из нескольких столбцов таблицы, однако тип данных тех столбцов, которые входят в арифметические выражения, обязательно должен быть цифровым. В таблице, полученной в результате выполнения запроса, четвертый столбец называется Exp_1. Обычно столбцам результирующей таблицы присваиваются имена соответствующих им столбцов исходных таблиц базы данных. Однако в данном случае это правило неприменимо, поскольку в стандарте SQL не определены правила именования производных столбцов. В одних диалектах языка SQL имена таким столбцам присваивают в соответствии с порядком их расположения в таблице (например, соl4), в других диалектах у подобного столбца имя может вовсе отсутствовать или вместо него может использоваться выражение, находящееся в списке SELECT. Стандарт ISO позволяет явным образом задавать другие имена столбцов результирующей таблицы, для чего применяется конструкция AS. При использовании этой конструкции приведенный выше оператор SELECT может быть переписан следующим образом:

SELECT staffNo, fName, lName, salary/12 AS monthlySalary

FROM Staff

В этом случае четвертый столбец результирующей таблицы будет называться monthlySalary, а не Exp_1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]