· 6 years ago · Dec 03, 2019, 12:28 PM
1-- убить все соединения
2USE master;
3GO
4DECLARE @kill varchar(8000) = '';
5
6SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(5), c.session_id) + ';'
7FROM sys.dm_exec_connections AS c
8JOIN sys.dm_exec_sessions AS s
9 ON c.session_id = s.session_id
10WHERE c.session_id <> @@SPID
11ORDER BY c.connect_time ASC
12
13EXEC(@kill)
14GO
15
16
17--1. создать базу данных, спроектированную в рамках лабораторной работы No4, используя изученные в
18--лабораторных работах 5-10 средства SQL Server 2012:
19--• поддержания создания и физической организации базы данных;
20--• различных категорий целостности;
21--• представления и индексы;
22--• хранимые процедуры, функции и триггеры;
23
24USE master;
25GO
26--удаление БД
27IF DB_ID (N'Lab11') IS NOT NULL
28DROP DATABASE Lab11;
29GO
30
31--создание БД
32CREATE DATABASE Lab11
33ON ( NAME = Lab11_dat,
34FILENAME = '/tmp/data/lab11dat.mdf',
35SIZE = 10, MAXSIZE = 150, FILEGROWTH = 5% )
36LOG ON ( NAME = Lab11_log,
37FILENAME = '/tmp/data/lab11dat.ldf',
38SIZE = 5MB, MAXSIZE = 150MB, FILEGROWTH = 5MB )
39GO
40
41USE Lab11;
42GO
43
44--удаление таблицы
45IF OBJECT_ID (N'PUBLISHER') IS NOT NULL
46DROP TABLE PUBLISHER;
47GO
48
49--создание таблицы с автоинкрементным первичным ключом
50CREATE TABLE PUBLISHER (
51 PublisherId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
52 Company NVARCHAR(50) NOT NULL,
53 LastName NVARCHAR(50) NULL DEFAULT 'Unknown',
54 FirstName NVARCHAR(50) NULL DEFAULT 'Unknown',
55 Redaction NVARCHAR (50) NULL
56)
57
58INSERT INTO PUBLISHER (Company, LastName, FirstName, Redaction)
59VALUES (N'Издательство АСТ', 'Unknown', 'Unknown', N'Neoclassic'),
60 (N'Издательство АСТ', 'Unknown','Unknown', N'Образовательные проекты'),
61 (N'Издательство АСТ', 'Unknown','Unknown', N'Жанры'),
62 (N'Издательство АСТ', 'Unknown','Unknown', N'Времена');
63GO
64
65INSERT INTO PUBLISHER (Company, Redaction)
66VALUES (N'Издательство Самокат', N'Unknown'),
67 (N'Издательство "Эксмо"', N'Редакция №1')
68GO
69
70SELECT * FROM PUBLISHER
71GO
72
73
74--удаление таблицы
75IF OBJECT_ID (N'Book') IS NOT NULL
76DROP TABLE Book;
77GO
78
79--таблица с первичным ключом на основе последовательности
80CREATE TABLE Book
81(BookId int IDENTITY(1,1) PRIMARY KEY,
82BookName NVARCHAR(50) NOT NULL,
83Year int NULL,
84Country NVARCHAR(50) NULL,
85Genre NVARCHAR (50) NULL,
86Description NVARCHAR(1000) NULL DEFAULT N'Нет описания',
87PublisherId INT NULL
88CONSTRAINT FK_Publisher_Book
89 FOREIGN KEY (PublisherId) REFERENCES PUBLISHER (PublisherId)
90 --ON UPDATE CASCADE
91 ON DELETE NO ACTION --Компонент Компонент SQL Server Database Engine формирует ошибку, и выполняется откат операции удаления строки из родительской таблицы.
92 --ON UPDATE NO ACTION
93 --ON DELETE SET DEFAULT --Все значения, содержащие внешний ключ, при удалении соответствующей строки родительской таблицы устанавливаются в значения по умолчанию. Для выполнения этого ограничения все внешние ключевые столбцы должны иметь определения по умолчанию. Если столбец допускает значения NULL и значение по умолчанию явно не определено, значением столбца по умолчанию становится NULL.
94 ON UPDATE SET DEFAULT,
95);
96GO
97
98INSERT Book (BookName, Year, Country, Genre, Description, PublisherId)
99VALUES ('Inferno', 2013, 'USA', 'Mystery', N'Novel of Dan Brown "Inferno" will be loved by fans of adventures, dangers, and detectives. In this book main character is Robert Langdon, professor of Harvard Univerity, aleady known for readers for the book "Davinci code". Сюжет «Инферно» разворачивается в 21 веке во Флоренции, но даже здесь герою придется столкнуться с тайнами прошлого и разгадать секрет биологического цилиндра. Сюжет произведения тесно переплетен с «Божественной комедией» Данте Алигьери. «Ищите — и найдете» — эта фраза из Библии помогает герою приблизиться к разгадке. ', 1);
100INSERT Book (BookName, Year, Country, Genre, Description)
101VALUES ('1984', 1949, 'UK', 'Dystopian', N'Фантастическая антиутопия Оруэлла – это мир тотального контроля и страха, где люди живут ради войны, ради того, чтобы скрыть правду и воспитать настоящих патриотов. В жестоком тоталитарном государстве люди лишены гражданских прав и собственного мнения. Культ Большого Брата подразумевает жесткую социальную иерархию, где даже проявление любви считается мыслепреступлением. Уинстон Смит понимает, что он пешка в этой истории, и тем не менее пытается что-то изменить. «1984» – это аллюзия на страны, в которых господствовал тоталитаризм.');
102INSERT Book (BookName, Year, Country, Genre, Description)
103VALUES ('Animal Farm', 1945, 'UK', 'Political satire', N'Притча, полная юмора и сарказма. Может ли скромная ферма стать символом тоталитарного общества? Конечно, да. Но… каким увидят это общество его «граждане» – животные, обреченные на бойню?');
104INSERT Book (BookName, Year, Country, Genre, Description, PublisherId)
105VALUES ('Robinson Crusoe', 1719, 'UK', 'Adventure', N'История жизни Робинзона на необитаемом острове – повествование о мужественном и находчивом человеке, который сумел выжить и не одичать благодаря своему сильному духу и трудолюбию.', 2);
106INSERT Book (BookName, Year, Country, Genre, Description)
107VALUES ('Excalibur', 1997, 'Unknown', 'Adventure', DEFAULT);
108GO
109
110SELECT * FROM Book
111GO
112
113--удаление таблицы
114IF OBJECT_ID (N'Audiobook') IS NOT NULL
115DROP TABLE Audiobook;
116GO
117
118--создание таблицы с автоинкрементным первичным ключом
119CREATE TABLE Audiobook (
120 ABookID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
121 ABookName NVARCHAR(50) NOT NULL,
122 ReaderLastName NVARCHAR(50) NULL,
123 ReaderFirstName NVARCHAR(50) NULL,
124 Description NVARCHAR(1000) NULL DEFAULT N'Нет описания',
125 BookId INT NULL
126 CONSTRAINT FK_Book_Audiobook
127 FOREIGN KEY (BookId) REFERENCES Book (BookId)
128 --ON UPDATE CASCADE
129 ON DELETE NO ACTION --Компонент Компонент SQL Server Database Engine формирует ошибку, и выполняется откат операции удаления строки из родительской таблицы.
130 --ON UPDATE NO ACTION
131)
132
133INSERT INTO Audiobook (ABookName, ReaderLastName, ReaderFirstName, BookId)
134VALUES ('Inferno', /*2013,*/ 'Unknown', 'Unknown', 1),
135 ('Excalibur',/* 2018, */'Unknown','Unknown', 5);
136GO
137INSERT INTO Audiobook (ABookName, ReaderLastName, ReaderFirstName)
138VALUES ('Adventures of Tomek', 'Unknown', 'Unknown');
139GO
140
141INSERT INTO Audiobook (ABookName, ReaderLastName, ReaderFirstName, Description, BookId)
142VALUES ('Robinson Crusoe', /*2013,*/ 'Shishmareva', 'Maria', 'Hystory adventures, England',4),
143 ('1984',/* 2018, */'Litvinov','Ivan', 'Dystopian, political fiction, social science fiction, UK', 2);
144GO
145INSERT INTO Audiobook (ABookName, ReaderLastName, ReaderFirstName)
146VALUES ('Inferno 2', /*2013,*/ 'Unknown', 'Unknown'),
147 ('Excalibur 2',/* 2018, */'Unknown','Unknown');
148GO
149
150SELECT * FROM Audiobook
151GO
152
153IF OBJECT_ID (N'BookAudiobook') IS NOT NULL
154DROP VIEW BookAudiobook;
155GO
156
157CREATE VIEW BookAudiobook AS
158SELECT
159 b.BookName, b.Year, b.Genre, a.ABookName
160 FROM Audiobook a INNER JOIN Book b
161 ON b.BookId = a.BookId
162 -- WITH CHECK OPTION
163GO
164
165SELECT * FROM BookAudiobook;
166GO
167
168IF OBJECT_ID (N'Author') IS NOT NULL
169DROP TABLE Author;
170GO
171
172--ON [PRIMARY]
173--таблица с первичным ключом на основе глобального уникального идентификатора
174CREATE TABLE Author
175 (AuthorId INT IDENTITY(1, 1) PRIMARY KEY,
176 LastName NVARCHAR(50) NOT NULL,
177 FirstName NVARCHAR(50) NOT NULL,
178 Country NVARCHAR(50),
179 BirthDate NUMERIC(4),
180 Description NVARCHAR(1000) DEFAULT N'Нет описания'
181 )
182GO
183
184INSERT INTO Author (LastName, FirstName, Country, BirthDate, Description)
185VALUES ('Brown', 'Dan', 'USA', 1964, 'Unknown'),
186 ('Defoe','Daniel', 'England', 1731, 'Unknown'),
187 ('Cornwell', 'Bernard', 'England', 1944, 'Author of historical novels and a history of the Waterloo Campaign'),
188 ('Orwell', 'George', 'India', 1903, 'An English novelist and essayist, journalist and critic');
189
190GO
191
192SELECT * FROM Author
193GO
194
195--удаление таблицы
196IF OBJECT_ID (N'AUTHOR_BOOK_INT') IS NOT NULL
197DROP TABLE AUTHOR_BOOK_INT;
198GO
199
200--создание таблицы
201CREATE TABLE AUTHOR_BOOK_INT (
202 AuthorId INT
203 CONSTRAINT FK_Author_Book
204 FOREIGN KEY (AuthorId) REFERENCES Author (AuthorId)
205 ON DELETE CASCADE --Если из родительской таблицы удаляется строка, соответствующие ей строки удаляются и из ссылающейся таблицы.
206 --ON UPDATE CASCADE
207 --ON DELETE NO ACTION --Компонент Компонент SQL Server Database Engine формирует ошибку, и выполняется откат операции удаления строки из родительской таблицы.
208 --ON UPDATE NO ACTION
209 --ON DELETE SET DEFAULT --Все значения, содержащие внешний ключ, при удалении соответствующей строки родительской таблицы устанавливаются в значения по умолчанию. Для выполнения этого ограничения все внешние ключевые столбцы должны иметь определения по умолчанию. Если столбец допускает значения NULL и значение по умолчанию явно не определено, значением столбца по умолчанию становится NULL.
210 ON UPDATE SET DEFAULT,
211 BookId INT
212 CONSTRAINT FK_Book_Author
213 FOREIGN KEY (BookId) REFERENCES Book (BookId)
214 ON DELETE CASCADE --Если из родительской таблицы удаляется строка, соответствующие ей строки удаляются и из ссылающейся таблицы.
215 --ON UPDATE CASCADE
216 --ON DELETE NO ACTION --Компонент Компонент SQL Server Database Engine формирует ошибку, и выполняется откат операции удаления строки из родительской таблицы.
217 --ON UPDATE NO ACTION
218 --ON DELETE SET NULL --Все значения, составляющие внешний ключ, при удалении соответствующей строки родительской таблицы устанавливаются в значение NULL.
219 --ON UPDATE SET NULL
220 ON UPDATE SET DEFAULT
221)
222GO
223
224INSERT INTO AUTHOR_BOOK_INT (BookId, AuthorId)
225VALUES (1, 1),
226 (4, 2),
227 (5, 4),
228 (2, 3);
229GO
230
231--вывод таблицы на экран
232SELECT * FROM AUTHOR_BOOK_INT;
233GO
234
235/*IF OBJECT_ID('AuthorINT', 'TR') IS NOT NULL
236 DROP TRIGGER AuthorINT
237GO
238CREATE TRIGGER AuthorINT
239ON Author
240INSTEAD OF INSERT
241AS BEGIN
242 INSERT INTO AUTHOR_BOOK_INT(AuthorId)
243 SELECT AuthorId FROM Author WHERE Author.LastName in (select inserted.LastName from inserted)
244 --FROM inserted
245END
246GO
247
248IF OBJECT_ID('BookINT', 'TR') IS NOT NULL
249 DROP TRIGGER BookINT
250GO
251CREATE TRIGGER BookINT
252ON Book
253For INSERT
254AS BEGIN
255 INSERT INTO AUTHOR_BOOK_INT(BookId)
256 SELECT BookId FROM Book WHERE Book.BookName in (select inserted.BookName from inserted)
257 --FROM inserted
258END
259*/
260
261IF OBJECT_ID (N'AuthorBook') IS NOT NULL
262DROP VIEW AuthorBook;
263GO
264
265CREATE VIEW AuthorBook AS
266SELECT
267 b.BookName, b.Year, b.Genre, a.LastName, a.FirstName
268 FROM AUTHOR_BOOK_INT i INNER JOIN Book b
269 ON b.BookId = i.BookId
270 INNER JOIN Author a
271 ON i.AuthorId = a.AuthorId
272 --WITH CHECK OPTION
273GO
274
275SELECT * FROM AuthorBook;
276GO
277
278
279IF OBJECT_ID('trig_INSERT_Book_INT', 'TR') IS NOT NULL
280 DROP TRIGGER trig_INSERT_Book_INT
281GO
282CREATE TRIGGER trig_INSERT_Book_INT
283 ON AuthorBook
284 INSTEAD OF INSERT
285 AS
286 BEGIN
287 SET NOCOUNT ON
288 /*INSERT INTO Book(BookName, Year, Genre)
289 SELECT BookName, Year, Genre
290 FROM Book
291 WHERE Book.BookName IN (SELECT BookName FROM inserted)
292
293 INSERT INTO Author(LastName, FirstName)
294 SELECT LastName, FirstName
295 FROM Author
296 WHERE Author.LastName IN (SELECT LastName FROM inserted)*/
297 INSERT INTO Book (BookName, Year, Genre)
298 SELECT BookName, Year, Genre
299 from inserted
300 where Not EXISTS (select * FROM Book WHERE Book.BookName = inserted.BookName)
301
302 INSERT INTO Author (LastName, FirstName)
303 SELECT LastName, FirstName
304 FROM inserted
305 where Not EXISTS (select * FROM Author WHERE Author.LastName = inserted.LastName)
306
307 INSERT INTO AUTHOR_BOOK_INT(AuthorId,BookId)
308 SELECT(SELECT AuthorId FROM Author WHERE Author.LastName = inserted.LastName),
309 --SELECT(SELECT AuthorId FROM Author WHERE Author.LastName in (select LastName from inserted)),
310 (SELECT BookId FROM Book WHERE Book.BookName = inserted.BookName)
311 --(SELECT BookId FROM Book WHERE Book.BookName in (select BookName from inserted))
312 FROM inserted
313 END
314GO
315
316/*
317CREATE TRIGGER TriggerViewInsert
318 ON Book
319 INSTEAD OF INSERT
320 AS BEGIN
321 INSERT INTO Book (BookName, Year, Genre)
322 SELECT BookName, Year, Genre
323 from inserted
324 INSERT INTO Author (LastName, FirstName)
325 SELECT LastName, FirstName
326 FROM inserted
327 END
328GO*/
329
330INSERT INTO AuthorBook (BookName, Year, Genre, LastName, FirstName)
331VALUES (N'Чужак', 1996, N'Фэнтези', N'Фрай', N'Макс'),
332 (N'35 кило надежды', 2002, N'Художественное произведение', N'Гавальда', N'Анна'),
333 (N'Книжный вор', 2005, N'Роман', N'Зусак', N'Маркус'),
334 (N'A Song of Ice and Fire', 1996, N'High fantasy', N'Martin', N'George'),
335 (N'Географ глобус пропил', 2013, N'Проза', N'Иванов', N'Алексей'),
336 (N'Дом Аида', 2013, N'Современная зарубежная проза', N'Риордан', N'Рик'),
337 (N'Записки охотника', 1852, N'Художественное произведение', N'Тургенев', N'Иван'),
338 (N'Мандарин', 2002, N'Рассказ', N'Брэдбери', N'Рэй'),
339 (N'Король зимы', 1995, N'Любовный роман', N'Cornwell', N'Bernard'),
340 --(N'Король зимы', 1995, N'Любовный роман', N'Cornwell', N'Bernard'),
341 (N'Скотный двор', 1945, N'Притча', N'Orwell', N'George'),
342 (N'Код да Винчи', 1996, N'Фэнтези', N'Brown', N'Dan'),
343 (N'Ангелы и дамоны', 1996, N'Фэнтези', N'Brown', N'Dan')
344 --(N'Перси Джексон и Похититель молний', 2005, N'Современная зарубежная проза', N'Риордан', N'Рик')
345 -- (N'Перси Джексон и Море чудовищ', 2006, N'Современная зарубежная проза', N'Риордан', N'Рик'),
346 --(N'Сын Нептуна', 2011, N'Современная зарубежная проза', N'Риордан', N'Рик'),
347 --(N'Марсианские хроники', 1950, N'Современная зарубежная проза', N'Брэдбери', N'Рэй'),
348 --(N'451 градус по Фаренгейту', 1953, N'Современная зарубежная проза', N'Брэдбери', N'Рэй');
349 ;
350GO
351
352UPDATE Author
353SET Country = N'Австралия', BirthDate = 1975
354WHERE LastName = N'Зусак'
355UPDATE Author
356SET Country = 'England', BirthDate = 1944
357WHERE LastName = 'Cornwell'
358UPDATE Author
359SET Country = 'India', BirthDate = 1903
360WHERE LastName = 'Orwell'
361
362SELECT * FROM AuthorBook
363SELECT * FROM Book
364SELECT * FROM Author
365GO
366
367INSERT INTO AuthorBook (BookName, LastName, FirstName)
368VALUES (N'Война и мир', N'Толстой', N'Лев');
369GO
370
371UPDATE Author
372SET Country = N'Россия', BirthDate = 1828
373WHERE LastName = N'Толстой'
374
375
376/*--Не льзя удалить, потому что стоит запрет на удаление, если есть ребенок
377DELETE Book
378WHERE BookName = '1984'*/
379
380/*DELETE Author
381WHERE LastName = 'Brown'
382SELECT * FROM Author
383SELECT * FROM AUTHOR_BOOK_INT*/
384
385--2. создание объектов базы данных должно осуществляться средствами DDL (CREATE/ALTER/DROP), в обязательном
386--порядке иллюстрирующих следующие аспекты:
387--• добавление и изменение полей;
388--• назначение типов данных;
389--• назначение ограничений целостности (PRIMARY KEY, NULL/NOT NULL/UNIQUE, CHECK и т.п.);
390--• определение значений по умолчанию;
391
392--3. в рассматриваемой базе данных должны быть тем или иным образом (в
393--рамках объектов базы данных или дополнительно) созданы запросы DML для:
394--• выборки записей (команда SELECT);
395--• добавления новых записей (команда INSERT), как с помощью непосредственного указания значений, так и с помощью команды SELECT;
396--• модификации записей (команда UPDATE);
397--• удаления записей (команда DELETE);
398
399
400--4. запросы, созданные в рамках пп.2,3 должны иллюстрировать следующие возможности языка:
401-- удаление повторяющихся записей (DISTINCT);
402SELECT DISTINCT a.[LastName], a.[FirstName]
403FROM [Author] as a, [AUTHOR_BOOK_INT] as b--, [Suppliers] as c
404WHERE a.[AuthorId] = b.[AuthorId] --and b.[SupplierID] = c.[SupplierID]
405GO
406SELECT * FROM Author
407GO
408
409--– выбор, упорядочивание и именование полей (создание псевдонимов для полей и таблиц / представлений);
410--псевдонимы полей
411SELECT BookID as [Identity], BookName, Description
412From [Book]
413
414--псевдонимы полей
415SELECT a.ABookName, a.[Description] as AudiobookDescription,
416b.BookName, b.[Description] as BookDescription
417FROM Book as b, Audiobook as a
418WHERE a.BookId = b.BookId
419
420
421
422--– соединение таблиц (INNER JOIN / LEFT JOIN / RIGHT JOIN / FULL OUTER JOIN);
423select a.BookId, a.BookName, a.Country,
424b.ABookID, b.ABookName, b.ReaderLastName, b.ReaderFirstName
425from Book as a INNER JOIN Audiobook as b
426ON a.BookId = b.BookId
427GO
428
429select a.BookId, a.BookName, a.Country,
430b.ABookID, b.ABookName, b.ReaderLastName, b.ReaderFirstName
431from Book as a LEFT JOIN Audiobook as b
432ON a.BookId = b.BookId
433GO
434
435select a.BookId, a.BookName, a.Country,
436b.ABookID, b.ABookName, b.ReaderLastName, b.ReaderFirstName
437from Book as a RIGHT JOIN Audiobook as b
438ON a.BookId = b.BookId
439GO
440
441select a.BookId, a.BookName, a.Country,
442b.ABookID, b.ABookName, b.ReaderLastName, b.ReaderFirstName
443from Book as a FULL OUTER JOIN Audiobook as b
444ON a.BookId = b.BookId
445GO
446
447
448SELECT N'проверка'
449
450--– условия выбора записей (в том числе, условия NULL / LIKE / BETWEEN / IN / EXISTS);
451SELECT BookName, Country
452FROM Book
453WHERE Country is NULL
454GO
455
456--Предикат LIKE используется для выборки тех строк, в значениях которых встречаются символы, указанные после предиката между апострофами (').
457SELECT ABookName
458FROM Audiobook
459WHERE [ABookName] LIKE 'I%'
460GO
461
462SELECT Name
463FROM sys.system_views
464WHERE Name LIKE 'dm%';
465GO
466
467SELECT BookName, [Year], Genre, Country
468 FROM Book
469 WHERE [Year] BETWEEN 1990 AND 2015
470GO
471
472SELECT a.LastName, a.FirstName, a.[BirthDate], a.Country
473FROM Author as a
474WHERE a.[Country] IN (N'Россия', N'Австралия')
475GO
476
477--Указывает вложенный запрос для проверки существования строк.
478SELECT a.[LastName],
479a.[FirstName]
480FROM [Author] as a
481WHERE exists (select * from
482[AUTHOR_BOOK_INT] as b where a.[AuthorId] = b.[AuthorId] and FirstName = N'George')
483GO
484
485--– сортировка записей (ORDER BY - ASC, DESC);
486SELECT a.[BookName], a.[Year]
487FROM [Book] as a
488ORDER BY a.[Year] asc --по возрастанию
489GO
490SELECT a.[LastName], a.[FirstName], a.[BirthDate]
491FROM [Author] as a
492ORDER BY a.[LastName] desc --по убыванию
493GO
494
495
496--– группировка записей (GROUP BY + HAVING, использование функций агрегирования – COUNT / AVG / SUM / MIN / MAX);
497select Min([BookId]), [Year]
498from Book
499group by [YEAR]
500HAVING count([BookId]) > 1
501go
502
503select AuthorId, count(*)
504as cnt
505from AUTHOR_BOOK_INT
506GROUP BY AuthorId
507GO
508
509select Country, count(*)
510as cnt
511from Author
512GROUP BY Country
513GO
514
515--AVG - среднее арифметическое
516SELECT [Year], AVG([BookId])AS 'Average ID',
517 SUM([BookId]) AS 'Sum of all ID'
518FROM Book
519GROUP BY Year;
520
521select PublisherId, MIN([Year]) as minYear
522from Book
523group by PublisherId
524GO
525
526select PublisherId, MAX([Year]) as minYear
527from Book
528group by PublisherId
529GO
530
531
532--– объединение результатов нескольких запросов (UNION / UNION ALL / EXCEPT / INTERSECT);
533SELECT b.[aBookName], a.[Description]
534FROM [Book] as a, [Audiobook] as b
535where a.[BookId] = b.[BookId]
536UNION
537SELECT a.[BookName], a.[Description]
538FROM [Book] as a, [Audiobook] as b
539where a.[BookId] = b.[BookId]
540
541SELECT b.[ABookName], a.[Description]
542FROM [Book] as a, [Audiobook] as b
543where a.[BookId] = b.[BookId]
544UNION ALL
545SELECT a.[BookName], a.[Description]
546FROM [Book] as a, [Audiobook] as b
547where a.[BookId] = b.[BookId]
548
549
550SELECT b.[ABookName], a.[Description]
551FROM [Book] as a, [Audiobook] as b
552where a.[BookId] = b.[BookId]
553EXCEPT
554SELECT a.[BookName], a.[Description]
555FROM [Book] as a, [Audiobook] as b
556where a.[BookId] = b.[BookId]
557
558SELECT b.[ABookName], a.[Description]
559FROM [Book] as a, [Audiobook] as b
560where a.[BookId] = b.[BookId]
561INTERSECT
562SELECT a.[BookName], a.[Description]
563FROM [Book] as a, [Audiobook] as b
564where a.[BookId] = b.[BookId]
565
566
567--– вложенные запросы.
568SELECT BookName,
569 (SELECT MAX(PublisherId)
570 FROM Publisher
571 ) as MaxPublisherId
572 FROM Book;
573GO