Материал для самостоятельной проработки
Операции реляционной алгебры
3 Объединение отношений R1R1 абвR=R1 U R2 абв делаR = R1 UNION R2 дела клик где R2R2 игл где
4 Пересечение отношений R=R1 R2 R=R1 INTERSECT R2 игл
5 Разность отношений R=R1–R2 абв R=R1 MINUS R2 дела
6 Декартово произведение отношений R=R1 R2 абвигл R = R1 TIMES R2 абвгде делаигл делагде клик иглгде
7 S#SNAMESTATUSCITY S1Smith20London S2Jones10Paris S#SNAMESTATUSCITY S1Smith20London S4Clark20London Примеры операций Объединение Пересечение Разность S#SNAMESTATUSCITY S1Smith20London S4Clark20London S2Jones10Paris S#SNAMESTATUSCITY S1Smith20London S#SNAMESTATUSCITY S4Clark20London
8 Ограничение отношений (выборка) S#SNAMESTATUS S1Smith20 S4Clark20 S where city =London P where weight < 14 P#PNAMECOLORWEIGHT P1NutRed12 P5CamBlue12 SP where S# = S1 and P# = P1 S#P#QTY S1P1300
9 Проекция отношений CITY London Paris Athens S [CITY] COLORCITY RedLondon GreenParis BlueRome BlueParis P [COLOR, CITY] S# S2 S3 (S where city = Paris) [S#]
10 Соединение отношений A B C X Y AX BX CY S#SNAMESTATUSCITYP#PNAMECOLORWEIGHT S1Smith20LondonP1NutRed12 S1Smith20LondonP4ScrewRed14 S1Smith20LondonP6CogRed19 S2Jones10ParisP2BoltGreen17 S2Jones10ParisP5CamBlue12 S3Blake30ParisP2BoltGreen17 S3Blake30ParisP5CamBlue12 S4Clark20LondonP1NutRed12 S4Clark20LondonP4ScrewRed14 S4Clark20LondonP6CogRed19 (R1 TIMES R2) WHERE X Y X = Y (S JOIN P) WHERE S.CITY = P.CITY
11 Соединение отношений (R1 TIMES R2) WHERE X Y X > Y (S JOIN P) WHERE SCITY > PCITY S#S#SNAMESTATUSSCITYP#PNAMECOLORWEIGHTPCITY S2Jones10ParisP1NutRed12London S2Jones10ParisP4ScrewRed14London S2Jones10ParisP6CogRed19London S3Black30ParisP1NutRed12London S3 Black 30ParisP4ScrewRed14London S3 Black 30ParisP6CogRed19London
12 Деление отношений S#S#P#P# S1Р1 S1Р2 S1РЗ S1Р4 S1Р5 S1Р6 S2Р1 S2Р2 S3Р2 S4Р2 S4Р4 S4Р5 P# P1 P# P2 P4 P# P1 P2 P3 P4 P5 P6 S# S1 S2S2 S# S1 S4S4 S# S1 R1R2 R1 DEVIDEBY R2
13 Дополнительные операции Переименование RENAME NAME1 AS NAME2 Присваивание S:=S UNION {,,, } Вставка INSERT (S WHERE CITY = LONDON) INTO TEMP Обновление UPDATE P WHERE COLOR = Red CITY := Paris Удаление DELETE S WHERE STATUS < 20
14 Подведение итогов SUMMARIZE (P JOIN SP) BY (CITY) ADD COUNT AS NSP CITYNSP London Paris Rome SUMMARIZE SP BY (P#) ADD SUM (QTW) AS TOTQTY SUMMARIZE A BY (A1, A2, …, An) ADD exp AS Z
15 Примеры 1. Получить имена поставщиков, которые поставляют деталь P2: 2. Получить имена поставщиков, которые поставляют, по крайней мере, одну красную деталь: 3. Получить имена поставщиков, которые не поставляют деталь P2: ((SP JOIN S) WHERE P# = P2) [SNAME]. (((P WHERE COLOR = Red) JOIN SP) [S#] JOIN S) [SNAME] или (((P WHERE COLOR = Red) [P#] JOIN SP) JOIN S) [SNAME]. ((S [S#] MINUS (SP WHERE P# = P2) [S#]) JOIN S) [SNAME]
16
17
18 SQL - запросы
19 Общий синтаксис SQL -запроса SELECT FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ];
20 Синтаксис инструкции SELECT : SELECT [предикат] Предикаты TOP [PERCENT] DISTINCT DISTINCTROW
21 Примеры SELECT DISTINCT SP.SN, SP.PN SELECT SP.SN, SP.PN AS DETAL SELECT * FROM SP WHERE SN="S1" AND QTY<300; SELECT * FROM SP WHERE SN IN (S2, S4)
22 Запросы с вычислениями SUM, AVG, COUNT, MAX, MIN, FIRST, LAST SELECT SP.SN, P.WEIGHT * SP.QTY AS TOTAL_W FROM P, SP; SELECT MAX(QTY)-MIN(QTY) AS RAZBROS FROM SP; SELECT MAX(QTY)-MIN(QTY) AS RAZBROS FROM SP WHERE PN=P2;
23 Пример По каждому виду деталей определить количество поставщиков, разброс количества и вывести итоги в порядке уменьшения разброса. SELECT PN, COUNT(*) AS KOLPOST, MAX(QTY)-MIN(QTY) AS RAZBROSPOST FROM SP GROUP BY PN ORDER BY MAX(QTY)-MIN(QTY) DESC;
24 HAVING Предыдущий пример - при условии, что учитываются только детали с поставкой не менее 400 штук. SELECT PN, COUNT(*) AS KOLPOST, MAX(QTY)-MIN(QTY) AS RAZBROSPOST FROM SP GROUP BY PN HAVING MAX(QTY)-MIN(QTY)>=400 ORDER BY MAX(QTY)-MIN(QTY) DESC ;
25 Объединение таблиц в запросах FROM INNER JOIN ON = Из таблицы P отобрать записи только для тех товаров, которые присутствуют в таблице SP. SELECT P.PN, PNAME,CITY,QTY FROM P INNER JOIN SP ON P.PN=SP.PN ;
26 Несимметричное объединение таблиц в запросах FROM LEFT JOIN ON = Из таблицы P отобрать записи для всех деталей и по возможности дополнить их данными, которые присутствуют в таблице SP. SELECT P.PN, PNAME,CITY,QTY FROM P LEFT JOIN SP ON P.PN=SP.PN ;