Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.54 Mб
Скачать
  1. Create table Orders - - заказы

(

onum INTEGER NOT NULL PRIMARY KEY,

amt REAL,

odate DATETIME NOT NULL,

cnum INTEGER NOT NULL,

snum INTEGER NOT NULL,

FOREIGN KEY (snum) REFERENCES Salespeople (snum),

FOREIGN KEY (cnum) REFERENCES Customers (cnum)

);

Столбцы Таблицы Orders

1

onum

Уникальный номер, присваиваемый каждой покупке (номер покупки). Это первичный ключ таблицы.

2

amt

Сумма покупки.

3

odate

Дата покупки.

4

cnum

Номер покупателя, делающего покупку. Это внешний ключ, ссылающийся на Customers (cnum).

5

snum

Номер продавца, совершившего продажу. Это внешний ключ, ссылающийся на Salespeople (snum)

Orders (Заказы)

onum

amt

odate

cnum

snum

3001

18.69

10/03/2000

2008

1007

3003

767.19

10/03/2000

2001

1001

3002

1900.10

10/03/2000

2007

1004

3005

5160.45

10/03/2000

2003

1002

3006

1098.16

10/03/2000

2008

1007

3009

1713.23

10/04/2000

2002

1003

3007

75.75

10/04/2000

2004

1002

3008

4723.00

10/05/2000

2006

1001

3010

1309.95

10/06/2000

2004

1002

3011

9891.88

10/06/2000

2006

1001

Вставка данных

INSERT INTO Salespeople

VALUES (1001,’Peel’, ‘London’, 0.12);

или

INSERT INTO Salespeople (snum, sname, city, comm)

VALUES (1001,’Peel’, ‘London’, 0.12);

Дату вводить как текст, т.е. в апострофах, например: ‘10/03/2000’

Удаление строк из таблицы DELETE FROM Salespeople

WHERE snum = 1007 - Удаляется строка с номером 1007

Удаление таблицы из базы данных

DROP TABLE Salespeople

Изменение значений полей

UPDATE Salespeople

SET city = ‘London’

WHERE snum = 1003

Тема. Использование SQL для выборки информации из таблиц.

Оператор SELECT

  1. Напишите оператор SELECT, который выводит номер заказа, сумму покупки и дату покупки для всех строк в таблице Orders (Заказы).

  2. Составьте запрос, который выводит все строки таблицы Customers (Покупатели) с номером продавца 1001.

  3. Напишите запрос, который выводит таблицу Salespeople (Продавцы) в следующем порядке: city, sname, snum, comm.

  4. Составьте запрос, который выводит без повторов значения snum для всех продавцов, обслуживающих заказы из таблицы Orders (Заказы).

  5. Напишите запрос, который выдает имена всех продавцов в Лондоне с комиссионными более 0.10.

  6. Напишите запрос к таблице Customers (Покупатели), из результата которого будут исключены все покупатели с рейтингом <=100, если только они не находятся в Риме.

  7. Каким будет результат следующего запроса? SELECT * FROM Orders WHERE (amt < 1000 OR NOT (odate = ‘1/03/2000’ AND cnum > 2000) );

  8. Каким будет результат следующего запроса? SELECT * FROM Orders WHERE NOT ((odate = ‘1/03/2000’ OR snum > 1006 ) AND amt>=1500);

  9. Каким образом можно упростить следующий запрос? Считайте, что столбец coom не содержит NULL-значений. SELECT snum, sname, city, comm. FROM Salespeople WHERE (comm. >= 0.12 OR comm. < 0.14);

Тема. Операторы IN, BETWEEN, LIKE, IS NULL. Вычисление итоговых значений с помощью агрегатных функций.

  1. Составьте два запроса, которые выводят все заказы, полученные 3 или 4 октября 2000 г.

  2. Напишите запрос, который выводит всех покупателей, чьи имена начинаются на буквы с A по G.

  3. Напишите запрос, который выбирает всех покупателей, чьи имена начинаются на букву C (как заглавную, так и строчную).

  4. Составьте запрос, который выбирает все заказы с нулями или NULL в столбце amt (amount).

  5. Напишите запрос, который подсчитывает число заказов, сделанных 3 октября.

  6. Напишите запрос, который подсчитывает количество различных непустых значений столбца city в таблице Customers.

  7. Составьте запрос, который выбирает наименьший заказ каждого покупателя.

  8. Напишите запрос, который выбирает первого покупателя (в алфавитном порядке), чье имя начинается на букву G.

  9. Напишите запрос, который выбирает наибольший рейтинг в каждом городе.

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

Тема: Работа с выражениями

  • Использование выражений в предложении SELECT

  • Более сложные применения выражений

  • Упорядочение результатов по значениям столбцов

  1. Предположим, что каждый продавец имеет 12% комиссионных. Напишите запрос к таблице Orders, который выводит номер заказа, номер продавца и размер комиссионных для данного заказа.

  2. Напишите запрос к таблице Customers, который ищет максимальный рейтинг в каждом городе. Выведите данные в формате:For the city (city), the highest rating is: (rating).

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

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

  5. Cоставьте запрос, который для всех покупателей из Парижа заменяет город на Брюссель, а для остальных покупателей оставляет в списке их настоящие города.

  6. Напишите оператор UPDATE, который увеличивает рейтинг всех покупателей на 100. Предполагается, что покупатели могут иметь рейтинг NULL, в этом случае он должен стать 100.

Тема: Запросы к нескольким таблицам

  • Соединение таблиц

  • Соединение таблицы с собой

  • Более сложные применения соединений

  1. Напишите запрос, который выводит номер каждого заказа вместе с именем покупателя, сделавшего этот заказ.

  2. Cоставьте запрос, который показывает всех покупателей, обслуживаемых продавцом с комиссионными более 12%. Выведите имя покупателя, имя продавца и комиссионные продавца.

  3. Напишите запрос, который рассчитывает комиссионные продавца от каждого заказа покупателей, имеющих рейтинг выше 100.

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

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

  6. С какой целью в запрос включен последний предикат (a.cnum < b.cnum)? SELECT sname, Salespeople.snum, a.cname, b.cname FROM Customers a, Customers b, Salespeople WHERE a.snum = b.snum AND Salespeople.snum = a.snum AND a.cnum < b.cnum;

Тема: Вложенные запросы

  • Работа подзапросов

  • Подзапросы и соединения

  • Коррелированные подзапросы

  1. Напишите запрос, в котором для получения всех заказов покупателя Cisneros используется подзапрос. Предполагается, что номер этого покупателя (cnum) неизвестен.

  2. Cоставьте запрос для вывода имен и рейтингов всех покупателей, сделавших заказы на сумму выше средней по всем заказам.

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

  4. Запишите оператор SELECT с коррелированным подзапросом, который выбирает имена и номера всех покупателей с рейтингами, равными максимальному рейтингу для данного города.

  5. Cоставьте два запроса для вывода имен и номеров всех продавцов, в чьих городах есть покупатели, которых они не обслуживают. В одном запросе должно использоваться соединение, а в другом - коррелированный подзапрос. Какое решение более элегантно? (Указание: один из способов решения этой задачи заключается в том, чтобы найти всех покупателей, которые не обслуживаются данным продавцом, а затем проверить, находится ли кто-то из них в его городе).

Тема: Объединение запросов

  • Объединение множества запросов в один

  • Использование UNION с ORDER BY

  • Другие способы объединения запросов

  1. Создайте объединение двух запросов, которое показывает имена, города и рейтинги всех покупателей. Сведения о тех из них, кто имеет рейтинг 200 и выше, должны сопровождаться словами «High Rating», а об остальных - словами «Low Rating». NULL-рейтинги считаются низкими (Low».

  2. Напишите оператор, который выводит имена и номера всех продавцов и покупателей с более чем одним текущим заказом. Расположите результаты в алфавитном порядке.

  3. Сформируйте объединение трех запросов. Первый должен выбирать snum всех продавцов в Сан-Хосе, второй - cnum всех покупателей в Сан-Хосе и третий – onum всех заказов от октября. Сохраните повторяющиеся значения в двух последних запросах, но исключите их дублирование с данными первого запроса. (Замечание: в приведенных таблицах-примерах такая избыточность отсутствует, поскольку snum, cnum и onum лежат в разных диапазонах (кстати, это полезный прием). Тем не менее данное упражнение послужит задачей на сообразительность_.

  4. Напишите объединенный запрос, который находит всех продавцов из Лондона, имеющих в Лондоне как минимум одного покупателя. Выведите номера и имена продавцов.

  5. Составьте объединенный запрос, который находит всех продавцов с хотя бы одним заказом свыше $1000, сделанным покупателем из другого города. Выведите snum и cnum. Продавцы, имеющие такие заказы от нескольких покупателей, должны отображаться более одного раза.

Учебная база данных содержит информацию по обработке заказов в торговой компании.

Она состоит из пяти таблиц: Таблица Customers (Клиенты = Покупатели).

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

CUST_NUM

COMPANY

CUST_REP

CREDIT_LIMIT

2111

JCP Inc.

103

$50, 000. 00

2102

First Corp.

101

$65, 000. 00

2103

Acme Mfg.

105

$50, 000. 00

2123

Carter & Sons

102

$40, 000. 00

2107

Ace International

110

$35, 000. 00

2115

Smithson Corp.

101

$20, 000. 00

2101

Jones Mfg.

106

$65, 000. 00

2112

Zetacorp.

108

$50, 000. 00

2121

QMA Assoc.

103

$45, 000. 00

2114

Orion Corp.

102

$20, 000. 00

2124

Peter Brothers

107

$40, 000. 00

2108

Holm & Landis

109

$55, 000. 00

2117

J. P. Sinclair

106

$35, 000. 00

2122

Three-Way Lines

105

$30, 000. 00

2120

Rico Enterprises

102

$50, 000. 00

2106

Fred Lewis Corp.

102

$65, 000. 00

2119

Solomon Inc.

109

$25, 000. 00

2118

Midwest Systems

108

$60, 000. 00

2113

Lan & Schmidt

104

$20, 000. 00

2109

Chen Associates

103

$25, 000. 00

2105

AAA Investments

101

$45, 000. 00

CUST_NUM – идентификатор компании (клиента)

COMPANY – название компании

CUST_REP – идентификатор служащего, отвечающего за связь с компанией

CREDIT_LIMIT – лимит кредита для клиента

Таблица OFFICES (Офисы). Содержит по одной строке для каждого из 5 офисов компании.

OFFICE

CITY

REGION

MGR

TARGET

SALES

22

Denver

Western

108

$300, 000. 00

$186, 042. 00

11

New York

Eastern

106

$575, 000. 00

$692, 637. 00

12

Chicago

Eastern

104

$800, 000. 00

$735, 042. 00

13

Atlanta

Eastern

105

$350, 000. 00

$367, 911. 00

21

Los Angeles

Western

108

$725, 000. 00

$835, 915. 00

OFFICE – идентификатор офиса

CITY – город, где размещается офис компании

REGION – регион продаж, к которому принадлежит офис

MGR – идентификатор служащего, управляющего офисом (менеджер офиса)

TARGET – плановый объем продаж офиса

SALES – объем продаж офиса с начала года по текущую дату

Таблица PRODUCTS (Товары). Содержит по одной строке для каждого наименования товара, продаваемого компанией.

MFR_ID

PRODUCT_ID

DESCRIPTION_P

PRICE

QTY_ON_HAND

REI

2A45C

Ratchet Link

$79. 00

210

ACI

4100Y

Widget Remover

$2, 750. 00

25

QSA

XK47

Reducer

$355. 00

38

BIC

41672

Plate

$180. 00

0

INN

779C

900-1b Brace

$1, 875. 00

9

ACI

41003

Size 3 Widget

$107. 00

207

ACI

41004

Size 4 Widget

$117. 00

139

BIC

41003

Handle

$652. 00

3

INN

887P

Brace Pin

$250. 00

24

QSA

XK48

Reducer

$134. 00

203

RET

2A44L

Left Hinge

$4, 500. 00

12

FEA

112

Housing

$148. 00

115

INN

887H

Brace Holder

$54. 00

223

BIC

41089

Retainer

$225. 00

78

ACI

41001

Size 1 Widget

$55. 00

277

INN

775C

500-1b Brace

$1, 425. 00

5

ACI

4100Z

Widget Installer

$2, 500. 00

28

QSA

XK48A

Reducer

$177. 00

27

ACI

41002

Size 2 Widget

$76. 00

167

REI

2A44R

Right Hinge

$4, 500. 00

12

INN

773C

300-1b Brace

$975. 00

28

ACI

4100X

Widget Adjuster

$25. 00

37

FEA

114

Motor Mount

$243. 00

15

INN

887X

Brace Retainer

$475. 00

32

REI

2A44G

Hinge Pin

$350. 00

14

MFR_ID – идентификатор производителя (manufactured ID)

PRODUCT_ID – идентификатор товара (номера, присвоенные товарам производителями)

DESCRIPTION_P – описание товара

PRICE – цена товара

QTY_ON_HAND – количество товара, имеющегося в наличии (quantity on hand)

  1. Таблица SALESREPS (Служащие = Продавцы). Содержит по одной строке для каждого из 10 служащих компании. Служащие продают товары клиентам компании.

EMPL_NUM

NAMES

AGE

REP_OFFICE

TITLE

HIRE_DATE

MANAGER

QUOTA

SALES

105

Bill Adams

37

13

Sales Rep

12-FEB-88

104

$350, 000. 00

$367, 911. 00

109

Mary Jones

31

11

Sales Rep

12-OCT-89

106

$300, 000. 00

$350, 725. 00

102

Sue Smith

48

21

Sales Rep

10-DEC-88

108

$350, 000. 00

$474, 050. 00

106

Sam Clark

52

11

VP Sales

14-JUN-88

NULL

$275, 000. 00

$299, 912. 00

104

Bob Smith

33

12

Sales Mgr

19-MAY-87

106

$200, 000. 00

$142, 594. 00

101

Dan Roberts

45

12

Sales Rep

20-OCT-88

104

$300, 000. 00

$305, 673. 00

110

Tom Snyder

41

NULL

Sales Rep

13-JAN-90

101

NULL

$75, 985. 00

108

Larry Fitch

62

21

Sales Mgr

12-OCT-89

106

$350, 000. 00

$361, 865. 00

103

Paul Cruz

29

12

Sales Rep

01-MAR-87

104

$275, 000. 00

$286, 775. 00

107

Nancy Angelli

49

22

Sales Rep

14-NOV-88

108

$300, 000. 00

$186, 042. 00

EMPL_NUM – идентификатор служащего

NAMES – имена служащего

AGE – возраст служащего

REP_OFFICE – номер офиса, где работает служащего

TITLE – должность служащего

HIRE_DATE – дата приема на работу служащего

MANAGER – идентификатор менеджера (из служащих)

QUOTA – планируемый объем продаж для данного служащего.

SALES – текущий (фактический) объем продаж

  1. Таблица ORDERS (Заказы). Содержит по одной строке для каждого из заказов, сделанных клиентом. Для простоты считается, что один заказ может содержать только один товар.

ORDER_NUM

ORDER_DATE

CUST

REP

MFR

PRODUCT

QTY

AMOUNT

112961

17-DEC-89

2117

106

REI

2A44R

7

$31, 500. 00

113012

11-JAN-90

2111

105

ACI

41003

35

$3, 745. 00

112089

03-JAN-90

2101

106

FEA

114

6

$1, 458. 00

113051

10-FEB-90

2118

108

QSA

XK47

4

$1, 420. 00

112968

12-OCT-89

2102

101

ACI

41004

34

$3, 978. 00

113036

30-JAN-90

2107

110

ACI

4100Z

9

$22, 500. 00

113045

02-FEB-90

2112

108

REI

2A44R

10

$45, 000. 00

112963

17-DEC-89

2103

105

ACI

41004

28

$3, 276. 00

113013

14-JAN-90

2118

108

BIC

41003

1

$652. 00

113058

23-FEB-90

2108

109

FEA

112

10

$1, 480. 00

112997

08-JAN-90

2124

107

BIC

41003

1

$652. 00

112983

27-DEC-89

2103

105

ACI

41004

6

$702. 00

113024

20-JAN-90

2114

108

QSA

XK47

20

$7, 100. 00

113062

24-FEB-90

2124

107

FEA

114

10

$2, 430. 00

112979

12-OCT-89

2114

102

ACI

4100Z

6

$15, 000. 00

113027

22-JAN-90

2103

105

ACI

41002

54

$4, 104. 00

113007

08-JAN-90

2112

108

INN

773C

3

$2, 925. 00

113069

02-MAR-90

2109

107

INN

775C

22

$31, 350. 00

113034

29-JAN-90

2107

110

REI

2A45C

8

$632. 00

112992

04-NOV-89

2118

108

ACI

41002

10

$760. 00

112975

12-OCT-89

2111

103

REI

2A44G

6

$2, 100. 00

113055

15-FEB-90

2108

101

ACI

4100X

6

$150. 00

113048

10-FEB-90

2120

102

INN

779C

2

$3, 750. 00

112993

04-JAN-89

2106

102

REI

2A45C

24

$1, 896. 00

113065

27-FEB-90

2106

102

QSA

XK47

6

$2, 130. 00

113003

25-JAN-90

2108

109

INN

779C

3

$5, 625. 00

113049

10-FEB-90

2118

108

QSA

XK47

2

$710. 00

112987

31-DEC-89

2103

105

ACI

4100Y

11

$27, 500. 00

113057

18-FEB-90

2111

103

ACI

4100X

24

$600. 00

113042

02-FEB-90

2113

101

REI

2A44R

5

$22, 500. 00

ORDER_NUM – номер заказа

ORDER_DATE – дата заказа

CUST – идентификатор компании

REP – идентификатор служащего, принявшего заказ

MFR – идентификатор производителя товара

PRODUCT – идентификатор заказанного товара

QTY – количество заказанного товара

AMOUNT – стоимость заказанного товара

Описание учебной БД

1. table Products компилируется первой

Create table Products

(Mfr_Id char(3) not null,

Product_Id char(5) not null,

Description_P varchar(20) not null,

Price money not null,

Qty_On_Hand integer not null,

primary key (Mfr_Id,Product_Id));

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