Лабораторна робота №3, Створення запитів до БД
« НазадЗМІСТЛабораторна робота №3 «Створення запитів до БД». 3 1. Створення запитів за допомогою конструктора. 3 2. Створення запитів з використанням мови T-SQL. 12 3. Використання умов для вибірки. 13 4. Використання в запитах логічних виразів. 15 5. Вибірка з декількох таблиць. 16 6. Сортування. 19 7. Підзапити. 20 8. Групування. 22 9. Створення запитів за допомогою конструктора. 24 Лабораторна робота №3 «Створення запитів до БД»Завданням лабораторної роботи є вивчення основних можливостей мови запитів DQL (Data Query Language). Приклад реалізації запиті виконаний на тестовому прикладі БД лабораторної роботи №2. DQL (Data Query Language) – мова запитів, яка є складовою мови SQL складається з однієї команди SELECT. Проте про цю команду написаний не один підручник. Більш детальну інформацію можна отримати при зверненні до довідникової системи MicrosoftMSDN на сайті msdn.microsoft.com. Запити до БД можна створювати безпосередньо за допомогою операторів мови Transact-SQL, а також за допомогою конструктора. Кожен запит створений конструктором трансформується в запит на мові Transact-SQL. 1. Створення запитів за допомогою конструктораСпочатку слід активізувати опцію Создать запрос ( ), а потім у меню запит активізувати опцію Создать запрос в редакторе (див. рис.1 ) Рис. 1 - Вікно для виклику конструктора запитів У вікні конструктора запитів маркируючи мишкую за допомогою кнопки Добавить вибираємо ті таблиці, які необхідні для реалізації запиту (рис.2). Рис. 2 - Вікно конструктора запитів для вибору таблиць Наприклад, реалізуємо запит, який надасть інформацію про продаж атомобілів з кодом 2, вказавши кількість продаж та менеджера, який оформлював цей продаж. Для цього вибираємо таблиці avtо, Prodaz та Menedzerі і закриваємо вікно Добавление таблиц. У наступному вікні рис.3 відмічаємо в таблицях атрибути, які необхідно видавати на екран у відповідь на запит, та у стовчику Filter у відповідному рядку задаємо умову вибірки (фільтрації). У нижній частині вікна конструктора система відображає створений запит на мові SQL. Після натиснення кнопки ОК і кнопки !Выполнить отримаємо відповідь на сформований запит (рис. 4). Рис. 3 - Вікно конструктора запитів для вибору атрибутів та задання умов фільтрації Відповідь на сформований запит розміщується внизу вікна (рис. 4), у верхній частині вікна представлено запит на мові SQL. Запит на мові SQL модифікуємо для отримання підсумків продаж автомобілів з кодом 2 (рис.5). Рис. 4 - Вікно з результатами запиту Рис. 5 - Вікно з результатами групувального запиту Для збереження запиту необхідно клацнути правою кнопкою мишки по стандартному імені запиту і активізувати опцію збереження. Далі у вікні Сохранить файл как ввести ім’я запиту (рис.6). Рис. 6 - Вікно для збереження запиту Переглянути створені запити можна активізувавши в головному меню Файл команди: открыть/файл (рис.7). Рис. 7 - Вікно для перегляду запитів Якщо результати запиту будуть використовуватись при створенні інших запитів, то їх доцільно зберігати в папці Представления (Views). Розглянемо створення наступого запиту: « Надати інформацію про кількість проданих Автомобілів з кодом 1, вказавши їх назву і дату продажіта Менеджерів, що оформлювали Продаж». Для створення запиту необхідно в оглядачі об’єктів в БД AWTO(див. лабораторну роботу №2)активізувати папку Представления (Views) і вибрати пункт Создать представление (NewViews). З’явиться вікно Добавление таблицы, яке призначене для вибору таблиць і запитів, що приймають участь в новому запиті. Рис. 8 - Вікно вибору таблиць при створенні запиту Спочатку вибираємо таблицю avtoі тиснемо кнопку Добавить(Add). Аналогічно добавляємо таблиці Prodaz і Menedzer і закриваємо вікно добавлення таблиць. Після чого відкриється вікно конструктора зі створення запитів (рис. 8). У верхній частині екрана (перша панель) у вибраних таблицях мишкою ставимо позначку проти полів, які необхідно відображати в результатах запиту: Kod_avto, Name_avto, Date_P, Kol_P, Name_men. На наступній панелі цього вікна визначаємо псевдоніми для кожного з полів, а проти поля Кod_avto у стовпчику Filter ставимо умови вибірки =1. У стовпчику Выход можна знімати позначку видачі на екран. Рис. 9 - Вікно конструктора зі створення запитів Вікно конструктора зі створення запитів складається з таких панелей: - Фрагмент схеми даних, що відображає таблиці, що приймають участь в реалізації запитів. Таблиці в фрагменті схеми даних обов’язково повинні бути пов’язаними між собою дугами. В таблицях схеми даних мишкою маркеруються ті поля, які необхідно видавати як результат реалізації запиту. Якщо необхідно відобразити всі поля таблиці, то активізується опція Все столбцы (AllColumns). Цю панель можна включати та виключати наступною кнопкою на панелі інструментів . Якщо виникне потреба добавити таблиці чи представлення, то слід на панелі інструментів натиснути на кнопку . - Друга панель містить стовпчики, які відображають поля, що видаються у відповідь на запит. Маркеруючи мишкою проти певного поля позначку Выход можна керувати його видачею на екран. Для кожного стовпчика (Column) можна задавати псевдонім (Alias) та установлювати тип сортування по одному чи декількох полях (SortType) та задавати порядок сортування (SortOrder). Також в цій таблиці можна задавати умови вибірки, тобто накладати фільтри (Filter і Or…) на відбір певних записів з таблиць. Якщо в запиті необхідно виконувати группування, то слід натиснути кнопку на панелі інструментів. Після чого після стовпчика, який задає порядок сортування з’явиться стовпчик з назвою Group By. В запиті, що розглядається не потрібно виконувати группування. Другу панель можна включати та виключати наступною кнопкою на панелі інструментів . - Третя панель містить реалізацію запиту на мові Т-SQL. Цю панель можна включати та виключати наступною кнопкою на панелі інструментів . - Результат виконання запиту після його вконання включається та виключається наступною кнопкою на панелі інструментів . Запит виконується за допомогою наступної кнопки на панелі інструментів . Примітка. Якщо при виконанні запиту результат не з’явиться, то необхідно перевірити в першу чергу зв’язки, а потім синтаксис Т-SQL. Виправивши помилку знову виконати запит. Зверніть увагу, що імена полів таблиць БД в результатах запиту замінені на псевдоніми. Виконаний запит зберігається після його закриття і стверджувальної відповіді у вікні (рис. 10) та визначення його імені у вікні (рис. 11). Рис. 10 - Вікно для зберігання запиту, як представлення Рис. 11 - Вікно для вибору імені запиту, як представлення Створений і збережений запит можна використовувати для створення інших запитів. Наприклад, потрібно обрахувати вартість проданих автомобілів з кодом 1. Тоді створюємо нове представлення, використовуючи таблицю Sklad і раніше створене представлення Prodaz_avto (див. рис.12 ) і добавляємо новий стовпчик розрахунку вартості dbo.Prodaz_avto.Кількість_продаж * dbo.Sklad.Cina Рис. 12 - Вікно створення запиту з обрахунку вартості 2. Створення запитів з використанням мови T-SQLОбов’язкові ключові слова команди – SELECT і FROM. Вибірка з однієї таблиці. Якщо потрібно переглянути всі поля і всі рядки таблиці, формується запит: SELECT * FROM dbo.avto Результат виконання запиту має наступний вид: Вибір окремих полів таблиці можна виконувати наступним чином: SELECT Name_mod, Kod_avto FROM Model Для зручності роботи кінцевого користувача можна переіменовувати поля перед видачею їх екран: SELECT Name_mod AS Код_моделі, Kod_avto AS ‘Код авто’ FROM Model Якщо нова назва поля складається з декількох слів, то її необхідно брати в лапки. В запит на вибірку можна включати арифметичні операції. Наприклад, в базі є закупочна ціна автомобілів, а продаються вони з націнкою в 20 %. Щоб показати ціну продаж необхідно виконати такий запит: SELECT Kod_avto AS Код_авто, Cina AS Закупівельна_ціна, Cina*1.2 AS 'Ціна продаж' FROM Sklad Дані в базі даних при цьому не зміняться. 3. Використання умов для вибіркиДля вибору певних рядків за певною умовою використовується ключеве слово WHERE. Наприклад, для вибірки кількості автомобілів на складі з кодом, що дорівнює одиниці, запит буде мати такий вид: SELECT Kod_avto, Kol_S FROM Sklad WHERE (Kod_avto = 1) Оператори умов: < - менше > - більше <= - менше або дорівнює >= - більше чи дорівнює <> - перевірка на нерівність = - перевірка на нерівність !> - не більше чим !< - не менше чим is NULL - перевірка на відсутність запису Умови можуть бути складними, тобто представляти собою комбінацію декількох операцій порівняння. В них можна використовувати логічні зв’язки AND – логічне І (загальна умова буде вірною, коли всі умови об’єднання є вірними), OR - логічне АБО (ЧИ) (загальна умова буде вірною, коли хоч одна з умов об’єднання є вірною), а також заперечення NOT. Якщо умова полягає в порівнянні поля зі списком значень, то можна використовувати ключеве слово IN. Приклад запиту зі складною умовою вибірки з використанням логічної зв’язки OR, який надасть інформацію про автомобілі на складі ціна яких попадає у вказаний діапазон: SELECT* FROM Sklad WHERE (Cina > 100000) OR (Cina < 300000) Для перевірки наявності певного значення в указаному діапазоні також використовується оператор порівняння Between. Наприклад: SELECT* FROM Sklad WHERE Cina between 100000 and 300000 Також Вetween можно використовувати для роботи з першою буквою рядка. Але це перевірка букв по ASCI кодах. При роботі с цифрами верхній діапазон включається в діапазон перевірки, а при роботі з буквами - ні. Наприклад: SELECT* FROM avto WHERE Name_avto between 'A' and 'P' Запит з використанням ключового слова IN: SELECT Kod_avto, Name_avto FROM avto WHERE Name_avto in ('Audi', 'BMW', 'Opel') Пошук за шаблоном виконує оператор Like. Шаблон - це рядок з службовими символами. В шаблоні можна указувати такі службові символи і комбінації символів: % - заміняє будь-яку кількість символів в рядку. _ - заміняє будь-який один символ. [набор символів] - визначає, що на цьому місці може стояти один з перерахованих символів. [перший символ-другий символ] - визначає, що на цьому місці може стояти один из символів з указаного діапазону. [^набор символів] - визначає, що на цьому місці може стояти будь-який, окрім перерахованих символів. [^першийй символ-другий символ] - визначає, що на цьому місці може стояти будь-який, окрім символів з указаного діапазону. Нижче наведено приклад запиту з використанням оператора Like, який видає прізвища менеджерів, які починаються на літеру А і Т. SELECT* FROM Menedzer WHERE Name_men like '[АТ]%'
Якщо перед оператором Like поставимо заперечення NOT, то у відповідь на такий запит будуть видані всі прізвища менеджерів за виключенням тих, які починаються на літеру А і Т. SELECT* FROM Menedzer WHERE Name_men NOT like '[АТ]%' 4. Використання в запитах логічних виразівДля порівняння значень поля з заданим значенням використовується оператор CASE. Приклад його використання в операторі SELECT: SELECT Kod_men AS 'Код менеджера’, Name_men AS 'Прізвище менеджера', [Продано за місяць], 'Рівень продаж'= case when[Продано за місяць]<=2 THEN 'Низький' when [Продано за місяць]>=7 THEN 'Високий' else 'достатній' END FROM dbo.[Продано за місяць] Go Результат виконання запиту з використанням виразу CASE наведено нижче. SQL Server допускає у виразі CASE не більше 10 рівнів вкладень. 5. Вибірка з декількох таблицьДля вибірки даних з декількох таблиць також можливо використовувати ключеве слово WHERE. Наприклад, надати інформацію про філії, що відкриті в кожному регіоні. SELECT Filij.Kod_reg, Region.Name_reg, Filij.Kod_fil, Filij.Name_fil FROM Filij, Region WHERE Filij.Kod_reg = Region.Kod_reg Такий же результат отримаємо при використанні оператора JOIN...ON. Ключовими словами при такому об’єднанні таблиць є наступні: [INNER] JOIN - внутрішнє об’єднання таблиць; LEFT [OUTER]JOIN – ліве зовнішнє об’єднання таблиць; RIGHT [OUTER] JOIN – праве зовнішнє об’єднання таблиць; FULL [OUTER] JOIN – повне зовнішнє об’єднання таблиць; CROS JOIN - декартовий добуток таблиць. Розглянемо внутрішнє (INNER) об’єднання таблиць. Рядки таблиць об’єднуються при співпаданні значень в умові ON. SELECT Filij.Kod_reg, Region.Name_reg, Filij.Kod_fil, Filij.Name_fil FROM Region INNER JOIN Filij ON Region.Kod_reg = Filij.Kod_reg Об’єднувати можна не лише дві таблиці. В Database Engine дозволяється в одному операторі SELECT об’єднувати до 64 таблиць. Якщо потрібно об’єднати більше 64 таблиць, то це однозначно свідчить про не оптимальну модель бази даних. Нижче наведено приклад запиту, який об’єднує чотири таблиці: Menedzer, Sklad, Prodaz, avto і надає інформацію про продані автомобілі кожним менеджером, вказуючи їх кількість, ціну та вартість. SELECT Menedzer.Name_men as Менеджер, avto.Name_avto as Назва_авто, Prodaz.Kol_P as Кількіст_продаж, Sklad.Cina as Ціна,(Prodaz.Kol_P * Sklad.Cina)as Вартість FROM Prodaz INNER JOIN Menedzer ON Prodaz.Kod_men = Menedzer.Kod_men INNER JOIN Sklad ON Prodaz.Kod_dwg = Sklad.Kod_dwg AND Prodaz.Kod_avto = Sklad.Kod_avto AND Prodaz.Kod_mod = Sklad.Kod_mod NNER JOIN avto ON Sklad.Kod_avto = avto.Kod_avto Зовнішнє об’єднання буває: ліве (LEFT), праве (RIGHT) і повне (FULL). Розглянемо приклад лівого зовнішнього об’єднання. В результат попадуть рядки, для яких співпадають значення полів в умові ON, і ті рядки з лівої таблиці, для яких не нашлось відповідних рядків в правій таблиці. Поля з правої таблиці будуть заповнені значеннями NULL. Таким чином можна виявити, які автомобілі є в наявності на склад, а які відсутні. SELECT avto.Kod_avto, avto.Name_avto, Sklad.Kol_S, Sklad.Cina FROM avto LEFT JOIN Sklad ON avto.Kod_avto = Sklad.Kod_avto Результат лівого зовнішнього об’єднання таблиць Приклад правого об’єднання таблиць. В результат попадуть рядки, для яких співпадають значення полів в умові ON, і ті рядки з правої таблиці, для яких не нашлось відповідних рядків в лівій таблиці. Поля з лівої таблиці будуть заповнені значеннями NULL. Таким чином можна виявити, менеджерів, які не продали жодного автомобіля. SELECT Prodaz.Date_P, Prodaz.Kol_P, Menedzer.Kod_men, Menedzer.Name_men FROM Prodaz RIGHT JOIN Menedzer ON Prodaz.Kod_men = Menedzer.Kod_men Результат правого зовнішнього об’єднання таблиць. Вибрати ліве чи праве зовнішнє об’єднання таблиць можна в конструкторі клікнувши правою мишкою по дузі. Якщо вибираємо всі рядки з таблиці avto, то в результаті отримаємо ліве зовнішнє об’єднання таблиць, якщо вибираємо всі рядки з таблиці Sklad, то отримаємо повне зовнішнє об’єднання таблиць. В доповнення до лівого та правого об’єднання таблиць існує ще повне зовнішнє об’єднання таблиць FULL OUTER JOIN, яке об’єднує разом праве та ліве зовнішнє об’єднання таблиць. В результатному наборі будуть представлені всі рядки обох таблиць. Якщо не має відповідного рядка для одной із таблиц, то її стовпчики мати значення NULL. Таблиці, що приймають участь в запиті повинні бути пов’язані між собою дугою, яка забезпечує умову вибіркию. Якщо дуга відсутня, то отримаємо декартовий добуток таблиць (CROS JOIN), в якому кожен рядок першої таблиці буде об’єднаний с кожним рядком другої таблиці і т.д. Результат такого об’єднання дає дуже велику таблицю і в переважній більшості він не має економічно обгрунтованого сенсу. При вибірці з декількох таблиць рекомендується використовувати псевдоніми таблиць. Це повязано з тим, що в різних таблицях є одинакові поля, то завжди потрібно вказувати з якої таблиці береться те чи інше поле, для цього необхідно використовувати наступний синтаксис ім'я_таблиці.ім’я_поля. Але якщо імена таблиць довгі, то краще замінити її на короткі псевдоніми. 6. СортуванняДля сортування використовується директива Order by. Сортування за змовчанням виконується по зростанню. Для сортування по спаданню вказується ключове слово Desc. Є два варіанти написання директиви сортування. 1-й варіант: Order by і’мя_поля [Asc либо Desc] 2-й варіант: Order by номер_поля [Asc либо Desc] Номер поля - порядковый номер поля, який видається в запиті. Можна сортувати рядки навіть по полю, яке не входить в список полів вибірки, а також пожна відсортовувати вихідні дані по декількох полях. Наприклад, результатом наведеного нижче запиту буде список менеджерів відсортованих за алфавітом в розрізі філій. SELECT Name_men FROM Menedzer ORDER BY Kod_fil, Name_men Сортувати дані можна також по спаданню, та обмежувати кількість рядків в результаті. В прикладі, запиту з сортуванням буде видана інформація лише два рядки про дві останніх операції з продажу автомобілів зі спаданням дати продаж: SELECT TOP 2 avto.Name_avto, Prodaz.Date_P, Prodaz.Kol_P FROM Prodaz INNER JOIN avto ON Prodaz.Kod_avto = avto.Kod_avto ORDER BY 2 DESC 7. ПідзапитиІноді для більш складних запитів потрібно використовувати підзапити. Підзапит завжди береться в дужки. Підзапит може буть незв’язаним чи коррельованими. Незв’язаний підзапит – такий в формулюванні якого немає посилання на головний запит. В цьому випадку підзапит подзапит виконується один раз при виконанні головного запиту. Коррельований підзапит – такий, в якому внутрішній запит залежить від зовнішнього запиту для всіх його значень. Наведений приклад є коррельованим підзапитом, в якому використовується ключове слово IN, так як результат підзапиту може мати декілька значень. Надати інформацію про автомобілі, які були продані за період з ‘2013-12-01' по '2013-12-31': SELECT Kod_avto, Name_avto FROM dbo.avto WHERE Kod_avto IN (SELECT Kod_avto FROM Prodaz WHERE Date_P BETWEEN '2013-12-01' and '2013-12-31' ) Такий же можна записати з використанням ключевого слова ANY. Результат даного запиту співпадатиме з результатом попереднього: SELECT Kod_avto, Name_avto FROM dbo.avto WHERE Kod_avto=ANY (SELECT Kod_avto FROM Prodaz WHERE Date_P BETWEEN '2013-12-01' and '2013-12-31') В підзапитах може використовуватись функція EXISTS. Ця функція завжди залежить від змінної зовнішнього запиту, тому, як правило, задається в кореляційних запитах. Функція EXISTS сприймає внутрішній запит, як аргумент і приймає значення істина, якщо внутрішній запит видає один чи декілька рядків і приймає - хибність, якщо запит видає нуль рядків. Приклад запиту та його результату з використанням функції EXISTS. Надати інформацію, про автомобілі, які були продані 2013-12-01: SELECT Kod_avto, Name_avto FROM dbo.avto WHERE EXISTS (SELECT Kod_avto FROM Prodaz WHERE avto.Kod_avto= Prodaz.Kod_avto AND Date_P='2013-12-01' ) В запитах також можна використовувати функцію NOT EXISTS. Приклад використання цієї функції можна розглянути в попередньому запиті. Надати інформацію, про продані автомобілі, за всі дати за виключенням тих автомобілів, які були продані 2013-12-01: SELECT Kod_avto, Name_avto FROM dbo.avto WHERE NOT EXISTS (SELECT Kod_avto FROM Prodaz WHERE avto.Kod_avto= Prodaz.Kod_avto AND Date_P='2013-12-01' ) Практично всі запити SELECT, в яких виконується об’єднання таблиць з використанням оператора JOIN, можна представити у вигляді підзапитів і навпаки. Обидва способи представлення запитів мають право на існування. Розглянемо, в яких випадках потрібно використовувати той чи інший спосіб написання запиту. Підзапити мають перевагу в тому випадку, коли потрібно швидко обчислити агрегатне значення і використовувати його в зовнішньому запиті для виконання порівняння. Об’єднання таблиць має перевагу над підзапитами у випадку, коли список вибору в SELECT повинен містити дані більше ніж з однієї таблиці. 8. ГрупуванняДля підведення підсумків по групі даних використовується комбинація ключевого слова GROUP BY і агрегатних функцій. За допомогою GROUP BY можна виконувати групування даних за умови співпадання значень одного чи декількох стовпчиків таблиці. Слід звернути увагу, що списку полів для вибірки можуть бути лише поля группування і агрегатні функції. Приклад запиту з группуванням та результата його виконання наведений нижче. Надати інформацію про кількість та вартість проданих автомобілі менеджером з кодом 1. SELECT Menedzer.Kod_men AS Код_менеджера, Menedzer.Name_men AS Прізвище, SUM(Prodaz.Kol_P)AS Кількість_продаж, SUM(Sklad.Cina*Prodaz.Kol_P)AS Вартість продаж FROM Filij INNER JOIN Menedzer ON Filij.Kod_fil = Menedzer.Kod_fil INNER JOIN Sklad INNER JOIN Prodaz ON Sklad.Kod_dwg = Prodaz.Kod_dwg AND Sklad.Kod_avto = Prodaz.Kod_avto AND Sklad.Kod_mod = Prodaz.Kod_mod ON Menedzer.Kod_men = Prodaz.Kod_men WHERE (Menedzer.Kod_men = 1) GROUP BY Menedzer.Kod_men, Menedzer.Name_men Надати інформацію про кількість філій, відкритих у регіоні з кодом один. SELECT Region.Kod_reg AS Код_регіону, Region.Name_reg AS Назва_регіону, COUNT(Filij.Kod_fil)AS Кількість_філій FROM Filij INNER JOIN Region ON Filij.Kod_reg = Region.Kod_reg WHERE Region.Kod_reg=1 GROUP BY Region.Kod_reg, Region.Name_reg При группуванні використовуються наступні агрегатні функції: SUM – обраховує підсумок; AVG - середнє арифметичне значення, NULL – ігнорується; COUNT – підрахунок кількості елементів, що рівне кількості рядків; MAX - знаходить максимальне значення; MIN – знаходить мінімальне значення; STDEV – статистичне стандартне відхилення VAR - статистичне відхилення Запити до БД можна створювати безпосередньо за допомогою операторів мови Transact-SQL, а також за допомогою конструктора. Кожен запит створений конструктором трансформується в запит на мові Transact-SQL. 9. Створення запитів за допомогою конструктораСпочатку слід активізувати опцію Создать запрос ( ), а потім у меню запит активізувати опцію Создать запрос в редакторе (див. рис.13 ) Рис. 13 - Вікно для виклику конструктора запитів У вікні конструктора запитів маркируючи мишкую за допомогою кнопки Добавить вибираємо ті таблиці, які необхідні для реалізації запиту (рис.14). Рис. 14 - Вікно конструктора запитів для вибору таблиць Наприклад, реалізуємо запит, який надасть інформацію про продаж атомобілів з кодом 2, вказавши кількість продаж та менеджера, який оформлював цей продаж. Для цього вибираємо таблиці avtо, Prodaz та Menedzerі і закриваємо вікно Добавление таблиц. У наступному вікні рис.15 відмічаємо в таблицях атрибути, які необхідно видавати на екран у відповідь на запит, та у стовчику Filter у відповідному рядку задаємо умову вибірки (фільтрації). У нижній частині вікна конструктора система відображає створений запит на мові SQL. Після натиснення кнопки ОК і кнопки !Выполнить отримаємо відповідь на сформований запит (рис. 16). Рис. 15 - Вікно конструктора запитів для вибору атрибутів та задання умов фільтрації Відповідь на сформований запит розміщується внизу вікна (рис. 16), у верхній частині вікна представлено запит на мові SQL. Запит на мові SQL модифікуємо для отримання підсумків продаж автомобілів з кодом 2 (рис.17). Рис. 16 - Вікно з результатами запиту Рис. 17 - Вікно з результатами групувального запиту Завдання. Для БД, яка проектується в лабораторній роботі створити основні типи запитів: 1. Запити з обчисленнями. 2. Запити, які виконують сортування. 3. Запити вибірки за умовами. 4. Групувальні запити. 5. Підзапити. З повагою ІЦ "KURSOVIKS"! |