45
1 БАЗЫ ДАННЫХ БАЗЫ ДАННЫХ НЕСКОЛЬКО НЕСКОЛЬКО SELECT’ SELECT’ ов ов В ОДНОМ ПРЕДЛОЖЕНИИ В ОДНОМ ПРЕДЛОЖЕНИИ

1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

Embed Size (px)

Citation preview

Page 1: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

1

БАЗЫ ДАННЫХБАЗЫ ДАННЫХ

НЕСКОЛЬКО НЕСКОЛЬКО SELECT’SELECT’овов

В ОДНОМ ПРЕДЛОЖЕНИИВ ОДНОМ ПРЕДЛОЖЕНИИ

Page 2: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

2

ПОДЗАПРОСЫ ИЛИПОДЗАПРОСЫ ИЛИВЛОЖЕННЫЙ ВЛОЖЕННЫЙ SELECTSELECT

Store_Information

store_name Sales Date

Los Angeles $1500 Jan-05-1999

San Diego $250 Jan-07-1999

Los Angeles $300 Jan-08-1999

Boston $700 Jan-08-1999

Geography

region_name store_name

East Boston

East New York

West Los Angeles

West San Diego

SELECT SUM(Sales) FROM Store_Information WHERE Store_name ININ (SELECT store_name FROM Geography (SELECT store_name FROM Geography

WHERE region_name = 'West')WHERE region_name = 'West');

SUM(Sales)

2050

Page 3: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

3

ПОДЗАПРОСЫ ИЛИПОДЗАПРОСЫ ИЛИВЛОЖЕННЫЙ ВЛОЖЕННЫЙ SELECTSELECT

SELECT "column_name1" FROM "table_name" WHERE "column_name2" [Оператор сравнения] (SELECT "column_name1"

FROM "table_name" WHERE [Условия]);

Результат Результат подзапроса подзапроса

должен должен содержать содержать

ЕДИНСТВЕННЕДИНСТВЕННОЕ значениеОЕ значение

Результат Результат подзапроса подзапроса

должен должен содержать содержать

ЕДИНСТВЕННЕДИНСТВЕННОЕ значениеОЕ значение

Page 4: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

4

КВАНТОР СУЩЕСТВОВАНИЯКВАНТОР СУЩЕСТВОВАНИЯОПЕРАТОР EXISTS ОПЕРАТОР EXISTS

SELECT columns SELECT columns FROM tablesFROM tablesWHERE WHERE EXISTSEXISTS (subquery); (subquery);

Выражение считается истинным только тогда, когда результат вычисления subquerysubquery является непустым множеством, т.е. когда существует какая-либо запись в таблице, указанной во фразе FROM подзапроса, которая удовлетворяет условию WHERE подзапроса.

Page 5: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

5

ОПЕРАТОР EXISTS ОПЕРАТОР EXISTS

SELECT Название FROM Товар WHERE EXISTS (SELECT КодТовара FROM Склад

WHERE Товар.КодТовара=Склад.КодТовара)

Ключевые слова EXISTS и NOT EXISTS предназначены для использования только совместно с подзапросами. Результат их обработки представляет собой логическое значение TRUE или FALSE. Для ключевого слова EXISTS результат равен TRUE в том и только в том случае, если в возвращаемой подзапросом результирующей таблице присутствует хотя бы одна строка. Если результирующая таблица подзапроса пуста, результатом обработки операции EXISTS будет значение FALSE. Для ключевого слова NOT EXISTS используются правила обработки, обратные по отношению к ключевому слову EXISTS. Поскольку по ключевым словам EXISTS и NOT EXISTS проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов.

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

Page 6: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

6

ОПЕРАТОР EXISTS ОПЕРАТОР EXISTS

SELECT Название FROM Товар WHERE NOT EXISTS (SELECT КодТовара FROM Склад

WHERE Товар.КодТовара=Склад.КодТовара);

Ключевые слова EXISTS и NOT EXISTS предназначены для использования только совместно с подзапросами. Результат их обработки представляет собой логическое значение TRUE или FALSE. Для ключевого слова EXISTS результат равен TRUE в том и только в том случае, если в возвращаемой подзапросом результирующей таблице присутствует хотя бы одна строка. Если результирующая таблица подзапроса пуста, результатом обработки операции EXISTS будет значение FALSE. Для ключевого слова NOT EXISTS используются правила обработки, обратные по отношению к ключевому слову EXISTS. Поскольку по ключевым словам EXISTS и NOT EXISTS проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов.

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

Page 7: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

7

ОПЕРАТОР EXISTS ОПЕРАТОР EXISTS

EXISTS uses a subquery as a condition, where the condition is True if the subquery returns any rows, and False if the subquery does not return any rows; this is a nonintuitive feature with few unique uses. However, if a prospective customer wanted to see the list of Owners only if the shop dealt in Chairs, try использует подвопрос

SELECT OWNERFIRSTNAME, OWNERLASTNAME FROM ANTIQUEOWNERSWHERE EXISTS

(SELECT * FROM ANTIQUES WHERE ITEM = 'Chair');

If there are any Chairs in the Antiques column, the subquery would return a row or rows, making the EXISTS clause true, causing SQL to list the Antique Owners. If there had been no Chairs, no rows would have been returned by the outside query.

Page 8: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

8

ОПЕРАТОР EXISTS ОПЕРАТОР EXISTS

ALL is another unusual feature, as ALL queries can usually be done with different, and possibly simpler methods; let's take a look at an example query:SELECT BUYERID, ITEM FROM ANTIQUES

WHERE PRICE >= ALL (SELECT PRICE FROM ANTIQUES);This will return the largest priced item (or more than one item if there is a tie), and its buyer. The subquery returns a list of all Prices in the Antiques table, and the outer query goes through each row of the Antiques table, and if its Price is greater than or equal to every (or ALL) Prices in the list, it is listed, giving the highest priced Item. The reason ">=" must be used is that the highest priced item will be equal to the highest price on the list, because this Item is in the Price list.

Page 9: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

9

ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВUNIONUNION

[SQL Statement 1][SQL Statement 1]UNIONUNION

[SQL Statement 2][SQL Statement 2]

Page 10: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

10

ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВUNIONUNION

Store_Informationstore_name Sales Date

Los Angeles $1500 Jan-05-1999

San Diego $250 Jan-07-1999

Los Angeles $300 Jan-08-1999

Boston $700 Jan-08-1999

Internet Sales Date Sales

Jan-07-1999 $250

Jan-10-1999 $535

Jan-11-1999 $320

Jan-12-1999 $750

SELECT Date FROM Store_InformationSELECT Date FROM Store_InformationUNIONUNION

SELECT Date FROM Internet_SalesSELECT Date FROM Internet_Sales;;

Date

Jan-05-1999

Jan-07-1999

Jan-08-1999

Jan-10-1999

Jan-11-1999

Jan-12-1999

Page 11: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

11

ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВUNIONUNION

[SQL Statement 1][SQL Statement 1]UNION ALLUNION ALL

[SQL Statement 2][SQL Statement 2]

Page 12: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

12

ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВUNIONUNION

Date

Jan-05-1999

Jan-07-1999

Jan-08-1999

Jan-08-1999

Jan-07-1999

Jan-10-1999

Jan-11-1999

Jan-12-1999

Store_Informationstore_name Sales Date

Los Angeles $1500 Jan-05-1999

San Diego $250 Jan-07-1999

Los Angeles $300 Jan-08-1999

Boston $700 Jan-08-1999

Internet Sales Date Sales

Jan-07-1999 $250

Jan-10-1999 $535

Jan-11-1999 $320

Jan-12-1999 $750

SELECT Date FROM Store_InformationSELECT Date FROM Store_InformationUNION ALLUNION ALL

SELECT Date FROM Internet_SalesSELECT Date FROM Internet_Sales ;;

Date

Jan-05-1999

Jan-07-1999

Jan-08-1999

Jan-10-1999

Jan-11-1999

Jan-12-1999

Page 13: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

13

ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВINTERSECTINTERSECT

[SQL Statement 1][SQL Statement 1]INTERSECTINTERSECT

[SQL Statement 2][SQL Statement 2]

Page 14: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

14

ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВUNIONUNION

Store_Informationstore_name Sales Date

Los Angeles $1500 Jan-05-1999

San Diego $250 Jan-07-1999Jan-07-1999

Los Angeles $300 Jan-08-1999

Boston $700 Jan-08-1999

Internet Sales Date Sales

Jan-07-1999Jan-07-1999 $250

Jan-10-1999 $535

Jan-11-1999 $320

Jan-12-1999 $750

SELECT Date FROM Store_InformationSELECT Date FROM Store_InformationINTERSECTINTERSECT

SELECT Date FROM Internet_SalesSELECT Date FROM Internet_Sales ;;

Date

Jan-07-1999

Page 15: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

15

ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВMINUSMINUS

[SQL Statement 1][SQL Statement 1]MINUSMINUS

[SQL Statement 2][SQL Statement 2]

Page 16: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

16

ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВMINUSMINUS

Store_Informationstore_name Sales Date

Los Angeles $1500 Jan-05-1999

San Diego $250 Jan-07-1999

Los Angeles $300 Jan-08-1999

Boston $700 Jan-08-1999

Internet Sales Date Sales

Jan-07-1999 $250

Jan-10-1999 $535

Jan-11-1999 $320

Jan-12-1999 $750

SELECT Date FROM Store_InformationSELECT Date FROM Store_InformationMINUSMINUS

SELECT Date FROM Internet_SalesSELECT Date FROM Internet_Sales ;;

Date

Jan-05-1999

Jan-08-1999

Page 17: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

17

СОЕДИНЕНИЕ - СОЕДИНЕНИЕ - JOINJOIN

Employees

Employee_ID Name

01 Hansen, Ola

02 Svendson, Tove

03 Svendson, Stephen

04 Pettersen, Kari

Orders

Prod_ID Product Employee_ID

234 Printer 01

657 Table 03

865 Chair 03

SELECT Employees.Name, Orders.Product SELECT Employees.Name, Orders.Product FROM Employees, Orders FROM Employees, Orders WHERE Employees.Employee_ID=Orders.Employee_IDWHERE Employees.Employee_ID=Orders.Employee_ID;;

Name Product

Hansen, Ola Printer

Svendson, Stephen Table

Svendson, Stephen Chair

Page 18: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

18

СОЕДИНЕНИЕ - СОЕДИНЕНИЕ - JOINJOIN

Employees

Employee_ID Name

01 Hansen, Ola

02 Svendson, Tove

03 Svendson, Stephen

04 Pettersen, Kari

Orders

Prod_ID Product Employee_ID

234 Printer 01

657 Table 03

865 Chair 03

SELECT Employees.Name FROM Employees, Orders SELECT Employees.Name FROM Employees, Orders WHERE Employees.Employee_ID=Orders.Employee_ID WHERE Employees.Employee_ID=Orders.Employee_ID

AND AND Orders.Product='Printer'Orders.Product='Printer' ;;

Name

Hansen, Ola

КТО КУПИЛ КТО КУПИЛ ПРИНТЕР?ПРИНТЕР?

Page 19: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

19

ЯВНОЕ СОЕДИНЕНИЕ – ЯВНОЕ СОЕДИНЕНИЕ – INNER JOININNER JOIN

SELECT field1, field2, field3 FROM first_table SELECT field1, field2, field3 FROM first_table INNER JOININNER JOIN second_table second_table ONON first_table.keyfield = second_table.foreign_keyfield first_table.keyfield = second_table.foreign_keyfield

Page 20: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

20

ЯВНОЕ СОЕДИНЕНИЕ – ЯВНОЕ СОЕДИНЕНИЕ – INNER JOININNER JOIN

Employees

Employee_ID Name

01 Hansen, Ola

02 Svendson, Tove

03 Svendson, Stephen

04 Pettersen, Kari

Orders

Prod_ID Product Employee_ID

234 Printer 01

657 Table 03

865 Chair 03

SELECT Employees.Name, Orders.Product SELECT Employees.Name, Orders.Product FROMFROM Employees Employees INNER JOININNER JOIN Orders Orders ONON Employees.Employee_ID=Orders.Employee_IDEmployees.Employee_ID=Orders.Employee_ID ;;

Name Product

Hansen, Ola Printer

Svendson, Stephen Table

Svendson, Stephen Chair

Page 21: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

21

СОЕДИНЕНИЕ СЛЕВА – LEFT JOINСОЕДИНЕНИЕ СЛЕВА – LEFT JOIN

SELECT field1, field2, field3 FROM first_table SELECT field1, field2, field3 FROM first_table LEFT JOINLEFT JOIN second_table second_table ONON first_table.keyfield = second_table.foreign_keyfield first_table.keyfield = second_table.foreign_keyfield

Page 22: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

22

СОЕДИНЕНИЕ СЛЕВА – LEFT JOIN СОЕДИНЕНИЕ СЛЕВА – LEFT JOIN

Employees

Employee_ID Name

01 Hansen, Ola

02 Svendson, Tove

03 Svendson, Stephen

04 Pettersen, Kari

Orders

Prod_ID Product Employee_ID

234 Printer 01

657 Table 03

865 Chair 03

SELECT Employees.Name, Orders.Product FROM EmployeesSELECT Employees.Name, Orders.Product FROM EmployeesLEFT JOINLEFT JOIN Orders OrdersONON Employees.Employee_ID=Orders.Employee_ID Employees.Employee_ID=Orders.Employee_ID ;;

Name Product

Hansen, Ola Printer

Svendson, Tove  

Svendson, Stephen Table

Svendson, Stephen Chair

Pettersen, Kari  

Page 23: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

23

СОЕДИНЕНИЕ СПРАВА – RIGHT JOINСОЕДИНЕНИЕ СПРАВА – RIGHT JOIN

SELECT field1, field2, field3 FROM first_table SELECT field1, field2, field3 FROM first_table RIGHT JOINRIGHT JOIN second_table second_table ONON first_table.keyfield = second_table.foreign_keyfield first_table.keyfield = second_table.foreign_keyfield

Page 24: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

24

СОЕДИНЕНИЕ СПРАВА – LEFT JOIN СОЕДИНЕНИЕ СПРАВА – LEFT JOIN

Employees

Employee_ID Name

01 Hansen, Ola

02 Svendson, Tove

03 Svendson, Stephen

04 Pettersen, Kari

Orders

Prod_ID Product Employee_ID

234 Printer 01

657 Table 03

865 Chair 03

SELECT Employees.Name, Orders.Product FROM EmployeesSELECT Employees.Name, Orders.Product FROM EmployeesRIGHT JOINRIGHT JOIN Orders OrdersONON Employees.Employee_ID=Orders.Employee_ID Employees.Employee_ID=Orders.Employee_ID ;;

Name Product

Hansen, Ola Printer

Svendson, Stephen Table

Svendson, Stephen Chair

Page 25: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

25

СОЕДИНЕНИЕ СПРАВА – LEFT JOIN СОЕДИНЕНИЕ СПРАВА – LEFT JOIN

Employees

Employee_ID Name

01 Hansen, Ola

02 Svendson, Tove

03 Svendson, Stephen

04 Pettersen, Kari

Orders

Prod_ID Product Employee_ID

234 Printer 01

657 Table 03

865 Chair 03

SELECT Employees.Name FROM Employees SELECT Employees.Name FROM Employees INNER JOININNER JOIN Orders Orders ONON Employees.Employee_ID=Orders.Employee_ID Employees.Employee_ID=Orders.Employee_ID

WHEREWHERE Orders.Product = 'Printer' Orders.Product = 'Printer' ;;

КТО КУПИЛ КТО КУПИЛ ПРИНТЕР?ПРИНТЕР?

Name

Hansen, Ola

Page 26: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

26

ГРУППИРОВАНИЕ - GROUP BY ГРУППИРОВАНИЕ - GROUP BY

SELECT column, SUM(column) SELECT column, SUM(column) FROM table FROM table GROUP BYGROUP BY column column

Page 27: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

27

ГРУППИРОВАНИЕ - GROUP BY ГРУППИРОВАНИЕ - GROUP BY

Company SUM(Amount)

W3Schools 17100

IBM 17100

W3Schools 17100

Sales

Company Amount

W3Schools 5500

IBM 4500

W3Schools 7100

SELECT Company, SUM(Amount) FROM Sales;

SELECT Company,SUM(Amount) FROM Sales GROUP BYGROUP BY Company;

Company SUM(Amount)

W3Schools 12600

IBM 4500

Page 28: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

28

ГРУППИРОВАНИЕ - GROUP BYГРУППИРОВАНИЕ - GROUP BY… … HAVING... HAVING...

SELECT column,SUM(column) FROM table SELECT column,SUM(column) FROM table GROUP BYGROUP BY column column HAVINGHAVING SUM(column) condition value SUM(column) condition value

Page 29: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

29

ГРУППИРОВАНИЕ - GROUP BYГРУППИРОВАНИЕ - GROUP BY… … HAVING... HAVING...

Sales

Company Amount

W3Schools 5500

IBM 4500

W3Schools 7100

SELECT Company,SUM(Amount) FROM Sales GROUP BY Company HAVINGHAVING SUM(Amount)>10000;

Company SUM(Amount)

W3Schools 12600

Page 30: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

30

ПРЕДЛОЖЕНИЕ SELECT INTOПРЕДЛОЖЕНИЕ SELECT INTO

SELECT column_name(s) SELECT column_name(s) INTOINTO newtable [IN externaldatabase] newtable [IN externaldatabase] FROM source FROM source

Page 31: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

31

ПРЕДЛОЖЕНИЕ SELECT INTOПРЕДЛОЖЕНИЕ SELECT INTO

SELECT * INTO Persons_backup FROM Persons

SELECT Persons.* INTO Persons IN 'Backup.mdb' FROM Persons

SELECT LastName,FirstName INTO Persons_backup FROM Persons

SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Sandnes'

SELECT Employees.Name,Orders.Product INTO Empl_Ord_backup FROM Employees INNER JOIN OrdersON Employees.Employee_ID=Orders.Employee_ID

Page 32: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

32

ПРЕДСТАВЛЕНИЯПРЕДСТАВЛЕНИЯПРЕДЛОЖЕНИЕ CREATE VIEWПРЕДЛОЖЕНИЕ CREATE VIEW

CREATE VIEWCREATE VIEW view_name AS view_name AS SELECT column_name(s) FROM table_name SELECT column_name(s) FROM table_name

WHERE conditionWHERE condition

Page 33: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

33

ПРЕДСТАВЛЕНИЯПРЕДСТАВЛЕНИЯПРЕДЛОЖЕНИЕ CREATE VIEWПРЕДЛОЖЕНИЕ CREATE VIEW

CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName FROM Products

WHERE Discontinued=No;

CREATE VIEW [Products Above Average Price] AS SELECT ProductName,UnitPrice FROM Products

WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products);

CREATE VIEW [Category Sales For 1997] AS SELECT DISTINCT CategoryName,Sum(ProductSales)

AS CategorySales FROM [Product Sales for 1997] GROUP BY CategoryName;

SELECT * FROM [Category Sales For 1997] SELECT * FROM [Category Sales For 1997] WHERE CategoryName='Beverages'WHERE CategoryName='Beverages';;

Page 34: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

34

БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ ДОСТУПАДОСТУПА

ПРЕДЛОЖЕНИЯ ПРЕДЛОЖЕНИЯ GRANT GRANT и и REVOKEREVOKE

GRANT {привилегии} GRANT {привилегии} ON {объекты} ON {объекты} TO {пользователи} [ WITH ADMIN OPTION]TO {пользователи} [ WITH ADMIN OPTION]

Привилегии для таблиц и представлений:

SELECT

UPDATE (может относиться к конкретным столбцам)

DELETE

INSERT

ALL PRIVILEGES – все привилегии

Только для базовых таблиц:

ALTER

INDEX

Page 35: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

35

БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ ДОСТУПАДОСТУПА

ПРЕДЛОЖЕНИЯ ПРЕДЛОЖЕНИЯ GRANT GRANT и и REVOKEREVOKE

GRANT GRANT SELECTSELECT ON TABLE ON TABLE SS TO TO U1805U1805;;

GRANT GRANT SELECT, UPDATE (CITY, PERSON)SELECT, UPDATE (CITY, PERSON) ON TABLE ON TABLE SS TO TO U1805, Mary, BobU1805, Mary, Bob;;

GRANT GRANT ALL PRIVELEGESALL PRIVELEGES ON TABLE ON TABLE S, P, SPS, P, SP TO TO BossBoss;;

GRANT GRANT SELECTSELECT ON TABLE ON TABLE PP TO TO PUBLICPUBLIC;;

Специальное ключевое слово

означающее общедоступныйобщедоступный

Page 36: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

36

БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ ДОСТУПАДОСТУПА

ПРЕДЛОЖЕНИЯ ПРЕДЛОЖЕНИЯ GRANT GRANT и и REVOKEREVOKE

REVOKE {привилегии} [ON объекты] FROM {пользователи}

REVOKEREVOKE SELECTSELECT ON TABLE ON TABLE SS FROM FROM U1805U1805;;

Отмена привилегии Отмена привилегии UPDATE UPDATE не может не может относиться к конкретным столбцамотноситься к конкретным столбцам

Page 37: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

37

результат обновления утрачен

УТРАТА ОБНОВЛЕНИЯ ИУТРАТА ОБНОВЛЕНИЯ ИУСТАНОВКА БЛОКИРОВКИУСТАНОВКА БЛОКИРОВКИ

Iu1, c1

u2, c2

редактирование

редактирование

Отказ в доступе

редактирование

I

u1, c1

u2, c2

редактирование

Блокировка LI снята

ожидание

Блокировка L2 снятаБлокировка L2

21i

11t

11i

21t

es es12t

22t

21i

21i

31t 4

1t

wsws

12i

12i

22i

22i

32t

42t

21i

11i

Блокировка LI

11i

11i

21i

21i 1

2i

12i

22i

22i

11t

21t

eses es

wsws1

2t22t

31t 4

1t

52t

62t3

2t42t

1 12 1i i

1 22 1i i

Page 38: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

38

БЕСКОНЕЧНОЕ ОТКЛАДЫВАНИЕ И БЕСКОНЕЧНОЕ ОТКЛАДЫВАНИЕ И ПРИОРИТЕТНЫЙ ПОЛЬЗОВАТЕЛЬПРИОРИТЕТНЫЙ ПОЛЬЗОВАТЕЛЬ

Отказ в доступе

редактирование

I

u1, c1 Блокировка LI снятаБлокировка LI

11i

11i

21i

21i

11t

21t

es esws

22t

31t 4

1t Блокировка L2

11i

11i

11t

21t

es

редактирование

u2, c2

ожидание

12t

Отказ в доступе

22t

es

ожидание

12t

es

Iu1, c1

u2, c2

редактирование

редактирование

11t

11i

21t

12t

22t

21i

21i

31t 4

1t

wsws

12i

42t

11i

1 12 1i i

eses

12i

22i

32t

22i

Page 39: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

39

ТРАНЗАКЦИИТРАНЗАКЦИИCOMMIT COMMIT и и ROLLBACKROLLBACK

START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summmary=@A WHERE type=1;

IF «всё завершилось хорошо»«всё завершилось хорошо» THENCOMMIT; -- «утвердить» изменения«утвердить» изменения

ELSEROLLBACK; -- восстановить состояние до начала транзакциивосстановить состояние до начала транзакции

END IF;

Page 40: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

40

ТРАНЗАКЦИИТРАНЗАКЦИИCOMMIT COMMIT и и ROLLBACKROLLBACK

LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} [, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} ...] ...UNLOCK TABLES

Команда LOCK TABLES блокирует указанные в ней таблицы для данного потока. Команда UNLOCK TABLES снимает любые блокировки, удерживаемые данным потоком. Все таблицы, заблокированные текущим потоком, автоматически разблокируются при появлении в потоке иной команды LOCK TABLES или при прекращении соединения с сервером.

Page 41: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

41

КУРСОРЫКУРСОРЫВЕРСИЯ ВЕРСИЯ ORACLEORACLE

DECLARE CURSOR c_american_pie IS SELECT Film_Title FROM Film_Table

WHERE Film_Title like "American Pie%";

OPEN c_american_pie; LOOP

FETCH c_american_pie INTO v_film_title; EXIT WHEN c_american_pie%NOT_FOUND;

-- Обрабатываем полученные данные.Обрабатываем полученные данные. -- В этом примере просто наращивается счётчик,В этом примере просто наращивается счётчик,-- Хотя что-то можно сделать с значением переменной v_film_titleХотя что-то можно сделать с значением переменной v_film_title

v_american_pie_count := v_american_pie_count + 1; END LOOP;

CLOSE c_american_pie;

ЗавершитЗавершить цикл ь цикл если если

курсор курсор пустпуст

Page 42: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

42

КУРСОРЫКУРСОРЫВЕРСИЯ ВЕРСИЯ DB2DB2

Declare MyCursor Cursor for Select Film_Title From Director_Film_Table, Where Director_Last_Name equals "Cameron" and Director_First_Name equals "James" Order By Film_Title;

Open MyCursor;

LOOPFetch MyCursor Into : CameronMovieName;

END LOOP;

Close MyCursor;

SQLCODESQLCODE is set to is set to +100 +100

Page 43: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

43

VBS & RECORDSETVBS & RECORDSET

Pth= "путь к файлу .mdb"Set oConn = CreateObject("ADODB.Connection")oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PthsSQL = "SELECT…;"Set oRs = oConn.Execute(sSQL)If oRs.eof then' WScript.Echo(oRs("STAT0"))Else CodeMax = oRs("STAT0")End IfoRs.CloseoConn.Closeset oRs = nothingset oConn = nothing

Page 44: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

44

КАК УБРАТЬ ОДИНАКОВЫЕ СТРОКИКАК УБРАТЬ ОДИНАКОВЫЕ СТРОКИПЕРВЫЙ СПОСОБПЕРВЫЙ СПОСОБ

select * from foo; -----------------------------------| first_name | last_name | -----------------------------------| DonaldDonald | DuckDuck | | Mighty | Mouse | | DonaldDonald | DuckDuck |-----------------------------------3 rows selected

select distinct into {временная таблицавременная таблица}

Page 45: 1 БАЗЫ ДАННЫХ НЕСКОЛЬКО SELECT’ов В ОДНОМ ПРЕДЛОЖЕНИИ

45

КАК УБРАТЬ ОДИНАКОВЫЕ СТРОКИКАК УБРАТЬ ОДИНАКОВЫЕ СТРОКИВТОРОЙ СПОСОБВТОРОЙ СПОСОБ

select * from foo; -----------------------------------| first_name | last_name |-----------------------------------| DonaldDonald | DuckDuck | | Mighty | Mouse | | DonaldDonald | DuckDuck |-----------------------------------3 rows selected

-------------------------------------------- | oidoid | first_name | last_name | -------------------------------------------- | 20012001 | Donald | Duck | | 20022002 | Mighty | Mouse | | 20032003 | Donald | Duck | -------------------------------------------- 3 rows selected