View
254
Download
4
Category
Preview:
Citation preview
1
БАЗЫ ДАННЫХБАЗЫ ДАННЫХ
НЕСКОЛЬКО НЕСКОЛЬКО SELECT’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
3
ПОДЗАПРОСЫ ИЛИПОДЗАПРОСЫ ИЛИВЛОЖЕННЫЙ ВЛОЖЕННЫЙ SELECTSELECT
SELECT "column_name1" FROM "table_name" WHERE "column_name2" [Оператор сравнения] (SELECT "column_name1"
FROM "table_name" WHERE [Условия]);
Результат Результат подзапроса подзапроса
должен должен содержать содержать
ЕДИНСТВЕННЕДИНСТВЕННОЕ значениеОЕ значение
Результат Результат подзапроса подзапроса
должен должен содержать содержать
ЕДИНСТВЕННЕДИНСТВЕННОЕ значениеОЕ значение
4
КВАНТОР СУЩЕСТВОВАНИЯКВАНТОР СУЩЕСТВОВАНИЯОПЕРАТОР EXISTS ОПЕРАТОР EXISTS
SELECT columns SELECT columns FROM tablesFROM tablesWHERE WHERE EXISTSEXISTS (subquery); (subquery);
Выражение считается истинным только тогда, когда результат вычисления subquerysubquery является непустым множеством, т.е. когда существует какая-либо запись в таблице, указанной во фразе FROM подзапроса, которая удовлетворяет условию WHERE подзапроса.
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 проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов.
Определить список имеющихся на складе товаров
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 проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов.
Определить список отсутствующих на складе товаров
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.
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.
9
ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВUNIONUNION
[SQL Statement 1][SQL Statement 1]UNIONUNION
[SQL Statement 2][SQL Statement 2]
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
11
ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВUNIONUNION
[SQL Statement 1][SQL Statement 1]UNION ALLUNION ALL
[SQL Statement 2][SQL Statement 2]
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
13
ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВINTERSECTINTERSECT
[SQL Statement 1][SQL Statement 1]INTERSECTINTERSECT
[SQL Statement 2][SQL Statement 2]
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
15
ОБЪЕДИНЕНИЕ ЗАПРОСОВОБЪЕДИНЕНИЕ ЗАПРОСОВMINUSMINUS
[SQL Statement 1][SQL Statement 1]MINUSMINUS
[SQL Statement 2][SQL Statement 2]
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
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
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
КТО КУПИЛ КТО КУПИЛ ПРИНТЕР?ПРИНТЕР?
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
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
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
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
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
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
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
26
ГРУППИРОВАНИЕ - GROUP BY ГРУППИРОВАНИЕ - GROUP BY
SELECT column, SUM(column) SELECT column, SUM(column) FROM table FROM table GROUP BYGROUP BY column column
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
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
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
30
ПРЕДЛОЖЕНИЕ SELECT INTOПРЕДЛОЖЕНИЕ SELECT INTO
SELECT column_name(s) SELECT column_name(s) INTOINTO newtable [IN externaldatabase] newtable [IN externaldatabase] FROM source FROM source
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
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
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';;
34
БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ ДОСТУПАДОСТУПА
ПРЕДЛОЖЕНИЯ ПРЕДЛОЖЕНИЯ GRANT GRANT и и REVOKEREVOKE
GRANT {привилегии} GRANT {привилегии} ON {объекты} ON {объекты} TO {пользователи} [ WITH ADMIN OPTION]TO {пользователи} [ WITH ADMIN OPTION]
Привилегии для таблиц и представлений:
SELECT
UPDATE (может относиться к конкретным столбцам)
DELETE
INSERT
ALL PRIVILEGES – все привилегии
Только для базовых таблиц:
ALTER
INDEX
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;;
Специальное ключевое слово
означающее общедоступныйобщедоступный
36
БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ БЕЗОПАСНОСТЬ И САНКЦИОНИРОВАНИЕ ДОСТУПАДОСТУПА
ПРЕДЛОЖЕНИЯ ПРЕДЛОЖЕНИЯ GRANT GRANT и и REVOKEREVOKE
REVOKE {привилегии} [ON объекты] FROM {пользователи}
REVOKEREVOKE SELECTSELECT ON TABLE ON TABLE SS FROM FROM U1805U1805;;
Отмена привилегии Отмена привилегии UPDATE UPDATE не может не может относиться к конкретным столбцамотноситься к конкретным столбцам
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
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
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;
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 или при прекращении соединения с сервером.
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;
ЗавершитЗавершить цикл ь цикл если если
курсор курсор пустпуст
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
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
44
КАК УБРАТЬ ОДИНАКОВЫЕ СТРОКИКАК УБРАТЬ ОДИНАКОВЫЕ СТРОКИПЕРВЫЙ СПОСОБПЕРВЫЙ СПОСОБ
select * from foo; -----------------------------------| first_name | last_name | -----------------------------------| DonaldDonald | DuckDuck | | Mighty | Mouse | | DonaldDonald | DuckDuck |-----------------------------------3 rows selected
select distinct into {временная таблицавременная таблица}
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
Recommended