fbpx

Питання #77 Що таке оператори SQL?

Кожен оператор SQL — це засіб, за допомогою якого SQL може маніпулювати числами, рядками або перевіряти на рівність.

Є 4 типи операторів, як і типів полів у SQL:

  • арифметичні;
  • діапазону;
  • рівності;
  • логічні.

У СУБД виконання більшості операторів забезпечують вбудовані функції. І це чудово! Вирази одразу повертають значення:

  • Арифметичні вирази — повертають число;
  • Лочічні — Booleans TRUE/FALSE;
  • Вирази стрічок — повертають або перевіряють строки;
  • Вирази дати —  дати та часові позначки.

Питання #78 Який синтаксис команди SELECT?

Оператор SELECT використовується для повернення даних, тобто безпосереднього вибору з БД, однієї таблиці, стовпця чи рядка. Узагалі ключове слово SELECT, повідомляє Базу Даних про те, що оператор є запитом. Усі запити починаються з цього слова.

Повний синтаксис оператора SELECT не є складним. В загальному вигляді синтаксис команди SELECT виглядає наступним чином: у квадратних дужках вказують необов’язкові команди — по правилах, хоча у багатьох СУБД їх давно вже випускають. Ключові слова SELECT і FROM повинні бути присутні завжди. Інші оператори: WHERE, HAVING, GROUP BY, INTO, WITH.

Також необхідно сказати, що SQL код незалежний від регістру. Це означає, що запис SELECT можна написати як select. СУБД не відрізнить ці два записи, проте рекомендовано всі оператори SQL писати великими літерами, щоб легше можна було розібратися у коді.

SELECT список_вибірки
[ INTO нова_таблиця ] 
FROM таблиця
[ WHERE умови_пошуку ] 
[ GROUP BY умова_групування ] 
[ HAVING умови_пошуку ] 
[ ORDER BY умова_сортування [ ASC | DESC ] ]

Питання# 79 Визначте запит командою SELECT?

Наприклад, оператор SELECT використовується для безпосереднього вибору даних з однієї таблиці та вставки в іншу, нова таблиця буде створена з тим самим іменем і типом, що й стара таблиця:

SELECT * INTO newtable FROM oldTable;

Питання# 80 Оператори умови у SQL? Синтаксис опишіть…

У SQL умови працюють таким самим чином як в усіх мовах програмування для здійснення вибору. Галуження забезпечується функціональністю when-then-else. Синтаксис: WHEN THIS_HAPPENS THEN do_this. Або відомим вкладенням IF-THEN-ELSE — IF умовних операторів.

SELECT ename, 
CASE  WHEN sal > 0 AND SAL <= 100000 THEN 1 WHEN sal > 100000 AND SAL < 250000 THEN 2 WHEN sal > 250000 AND SAL < 5000000 THEN 3
ELSE 99
END AS emp_category
FROM EMP

Питання #81 What is a View in SQL?

VIEW — це віртуальна таблиця, іменований набір операторів SQL, на які пізніше можна посилатися та використовувати як таблицю. Причому ці таблиці можуть базуватися одна на одній, тобто можна посилатися з однієї такої таблиці на іншу.

CREATE VIEW VIEW_NAME AS
SELECT COLUMN1, COLUMN2
FROM  TABLE_NAME WHERE CONDITION;

Питання #82 Чому слід використовувати View? Які переваги?

SQL View бажано використовувати щоб:

  • спростити складні запити — для цього спочатку створюються прості запити, котрі нашаровуються для отримання результатів складних запитів. Наприклад, View можуть використовуватися для запиту інформації з кількох таблиць без джойнів.
  • забезпечити незалежність даних — для спеціальних користувачів та прикладних програм. View надають групам користувачів доступ до даних відповідно до їхніх конкретних критеріїв.
  • представляти різну інтерпретацію однакових даних, навіть не у табличному вигляді.

Питання #83 View містить дані?


Повторимося VIEW — це віртуальна таблиця і вона не містить ніяких даних і не зберігає даних у собі.

Питання #84 Про NULL в SQL

Необхідно відзначити, що мова SQL має вбудовані засоби підтримки відсутності будь-яких даних. І як майже в усіх мовах програмування це здійснюється за допомогою NULL-концепції. NULL не є якісь фіксованими значеннями, що зберігаються в полі запису замість реальних даних. Воно не рівне нулеві. Значення NULL не має певного типу. NULL — це індикатор, який промовляє користувачеві (і SQL) про те, що даних у полі запису НЕМАЄ, вони відсутні. Тому NULL не можна використовувати в операціях порівняння. Для перевірки цього факту: наявності-відсутності даних в SQL введені спеціальні вирази.

Питання #85 Якщо Ви бажаєте об’єднати декілька таблиць у запиті (наприклад, n таблиць), скільки умов зв’язку Вам потрібно використовувати?

Тоді потрібно використовувати n-1 умови зв’язку, щоб виключити декартове з’єднання. Проте може бути і таке, що буде потрібно більше ніж n-1 умови зв’язку, і всі інші умови з’єднання для подальшого скорочення результуючого набору даних.

Питання #86 Яке практичне використання тимчасових таблиць?

Як ми уже щойно згадували… Тимчасова таблиця — це об’єкт бази даних, який зберігається і управляється СУБД на тимчасовій основі. Тимчасові таблиці можуть бути локальними або глобальними. Використовуються для збереження результатів виклику збереженої процедури, зменшення кількості підключень, агрегування даних з різних джерел або заміни курсорів та параметризованих представлень.

Питання #87 Що таке посилання на базу даних?

Посилання на базу даних — це іменований об’єкт, який вказує path “шлях” з однієї бази даних в іншу.

Лінки можуть бути:

  • Private Database Link
  • Public Database Link 
  • Network Database Link

Приватна база даних створюється від імені конкретного користувача. Приватна база даних може бути використана тільки тоді, коли власник посилання вказує ім’я глобального об’єкта в операторі SQL або у визначенні views or procedures.

Загальнодоступний лінк створюється для спеціальної групи користувачів PUBLIC. Він може бути використаний, коли будь-який користувач у пов’язаній базі даних вказує глобальне ім’я об’єкта в операторі SQL або визначення об’єкта.

Network database link створюється та управляється службою мережевого домену. Посилання може бути використане, коли будь-який користувач будь-якої бази даних у мережі визначає назву глобального об’єкта в операторі SQL або визначення об’єкта.

Питання# 88 Що таке JOIN?

JOIN — це бінарна операція з’єднання таблиць в SQL, яка сполучає дві таблиці в реляційній базі даних, утворюючи нову тимчасову таблицю, яку інколи називають «з’єднаною таблицею». Джерело Вікіпедія

Питання #89 Які є типи JOIN’ів? Коротко опишіть кожен з типів.

(INNER) JOIN — внутрішнє з’єднання в результуючому наборі якого присутні тільки записи, значення пов’язаних полів у яких збігаються. З ілюстрації усе зрозуміліше, потрібні нам дані це є дані, котрі опинилися на перетині множин таблиць.

Ілюстрація Inner Join

Синтаксис SQL:

SELECT  
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key

LEFT JOIN — ліве зовнішнє з’єднання. У результуючому наборі будуть присутні всі записи з таблиці А та відповідні записи з таблиці В. Якщо спів падінь не буде, поля з таблиці В будуть пусті.

Синтаксис SQL:

SELECT 
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
Left JOIN
Left JOIN наочна ілюстрація

Щоб отримати дані, які підходять по умові частково, потрібно вибрати зовнішнє з’єднання OUTER JOIN. Таке об’єднання поверне нам дані з 2-х таблиць (співпадають за умовами об’єднання) ПЛЮС доповнить вибірку рештою даних із зовнішньої таблиці (за умовою не підходять), заповнивши відсутні дані значенням NULL.

Синтаксис SQL:

SELECT  
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
Left OUTER JOIN
Left OUTER JOIN з фільтрацією по полю

RIGHT JOIN — праве зовнішнє з’єднання. В результуючому наборі присутні всі записи з таблиці В та відповідні записи з таблиці А. Якщо збігів не має, поля із Таблиці А будуть пусті. Діаграма-малюнок буде дзеркальне відображення LEFT JOIN.

Синтаксис SQL:

SELECT 
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key

FULL JOIN — повне зовнішнє з’єднання. Комбінація двох попередніх. У результуючому наборі будуть присутні всі записи з таблиці А та відповідні записи з таблиці В. Якщо збігів не буде, то поля таблиці В будуть пусті. Записи з таблиці В, які не знайшли пари в таблиці А, також будуть присутні в результуючому наборі. У цьому випадку поля з Таблиці А будуть пустими.

FULL JOIN

Синтаксис SQL:

SELECT 
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key

І так само з фільтрацією:

Синтаксис:

SELECT 
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL

CROSS JOIN — декартовий продукт. Результуючий набір містить всі варіанти комбінації рядків з Таблиці А та Таблиці В. Умови з’єднання при цьому не вказуються.

SELF JOIN — це коли таблиця посилається на себе, на свої власні ресурси.

Синтаксис SQL:

SELECT
FROM TABLEA_A, TABLEB_B 
WHERE A.Key = B.Key

Ось гарна ілюстрація, табличного представлення JOIN -ів

а за посиланням ВІДМІННА стаття, яка в деталях описує концепцію JOIN -ів, але водночас не рекомендує представлення концепції JOIN -ів діаграмами Ганта (ілюстрації наших кружечків). Однозначно ДУЖЕ рекомендуємо ознайомитися!

Питання# 90 Яка різниця між CROSS JOIN and FULL OUTER JOIN?

CROSS JOIN повертає дані з двох таблиць, без жодних умов, оскільки кожен рядок Table A об’єднується з кожним рядком Table B (уявіть це як 2 печенька перемащені кремом) 😛 , а повне FULL JOIN  з’єднує дві таблиці на основі умови, записи котрі не задовольняють умовам NULL значення, розміщується в результаті об’єднання.

Питання# 91 Для чого використовується слово HAVING?

HAVING — необов’язковий параметр оператора SELECT для зазначення умови на результат. Cекція HAVING визначає умову, яка потім застосовується до групи рядків. Цей оператор дещо схожий на оператор WHERE за змістом.

Приклад синтаксису  HAVING повертає список департаментів, де працює більше 1 робітника:

 SELECT DepartmentName, COUNT(*) 
 FROM employee,department 
 WHERE employee.DepartmentID = department.DepartmentID 
 GROUP BY DepartmentName
 HAVING COUNT(*)>1;

Важливо розуміти конструкції HAVING та WHERE взаємно доповнюють одна одну. HAVING є зручно, але необов’язково. Ідентичний приклад, без оператора HAVING виглядатиме наступним чином:

SELECT * FROM (
   SELECT DepartmentName AS deptNam, COUNT(*) AS empCnt
   FROM Employee AS emp, Department AS dept
   WHERE emp.DepartmentID = dept.DepartmentID
   GROUP BY deptNam
) AS grp
WHERE grp.empCnt > 1;

Питання# 92 Яка різниця між HAVING та WHERE операторами?

Повторимося, як ми вже обговорювали, оператор WHERE декларує умови, а оператор HAVING використовується разом з GROUP BY для отримання даних, які відповідають певним критеріям, визначеним функцією GROUP BY. Ще раз уважно перегляньте приклади, як ми спочатку сортували робітників по департаментам, а потім уже сортували самі відділи.

GbCan we use ‘where’ clause with ‘groupby’?

Так, ми можемо використовувати пункт “де” з “groupBy”. Ряди, які не відповідають умовам, де спочатку видаляються, а потім групування виконується на основі колонки групи.

Питання #93 Для чого потрібні оператори UNION, INTERSECT, EXCEPT?

Оператор UNION — застосовується для об’єднання результатів двох SQL-запитів у єдину таблицю, що складається з подібних термінів. Оба запрос Должны віддавати однакову кількість стовпчиків і сумісних типів даних у відповідних колонках.

Оператор INTERSECT — використовується для наведення перетину двох множин. Результатом його виконання буде безліч строк, які присутні в обох множинах.

Оператор EXCEPT — використовується для виявлення різниці двох множин. Результатом виконання є безліч стрічок з множини 1, які відсутні в мнозі 2.

Пріоритет виконання операторів над множинами:
INTERSECT -> EXCEPT -> UNION

Питання #94 Яка різниця між UNION та UNION ALL командами?

Фундаментальна відмінність між командою Union і Union All, за замовчуванням, є різною, тобто вона поєднує у собі відмінний набір результатів з двох або більше виділених тверджень. Враховуючи, що Union All поєднує в собі всі рядки, включаючи дублікати, у наборі результатів різних висловлювань.

Питання #95 Як оператор GROUP BY обробляє значення NULL?

При використанні GROUP BY всі значення NULL вважаються рівними. Значение NULL — це спеціальне значення, яке можна присвоїти комірці таблиці. Це значення зазвичай застосовується, коли інформація в блоці невідома або неприйнятна.

Питання #96 В чім різниця між COUNT (*) і COUNT (стовбця)?

Форма COUNT (стовпця) підраховує кількість значень в “стовпці”. При підрахунку кількості значень форма функції COUNT не приймає значення значення NULL. Функція COUNT (*) підраховує кількість стрічок у таблиці, не ігнорує значення NULL, оскільки ця функція працює строками, а не колонками.

Питання #97 В чім різниця між операторами DISTINCT і GROUP BY?

DISTINCT — вказує, що для розрахунків використовуються лише унікальні значення стовпця. NULL вважається як окреме значення. Якщо потрібно видалити тільки дублікати, краще використовувати DISTINCT.

GROUP BY — групує вибраний набір стрічок для отримання набору сусідніх стрічок за значеннями одного або декількох стовпців, або виразів. GROUP BY створює окрему групу для всіх можливих значень (включаючи значення NULL). GROUP BY краще використовувати для визначення груп вихідних рядків, до яких можуть застосовуватися агрегатні функції (COUNT, MIN, MAX, AVG і SUM).

Питання #98 Є таблиця table1 з колонками id і datetime написати запит, який поверне максимальне значення ідентифікатора та значення дати для цього id.

Рішень цієї програми є кілька, найпростіше це отримання максимального значения для id і потім вивести значения:

SELECT id, datetime FROM table1 де id = (SELECT max (id) FROM table1);

або
SELECT id, datetime FROM table1, де id в (SELECT max (id) FROM table1);

можна й так (mysql)
SELECT id, datetime FROM table1 замовлення за ідентифікатором desc LIMIT1

Питання #99 Що краще використовувати JOIN чи Sub-Query?

Краще використовувати JOIN, оскільки в більшості випадків він зрозумілий, і краще оптимізується за допомогою Database Engine, але не завжди.  JOIN має перевагу над підпрограмами у випадку, коли список вибору SELECT у запиті містить колонтитули більш ніж однієї таблиці.

Sub-Query кращі тоді, коли потрібно розрахувати агрегатні значення і використовувати їх у зовнішніх запитах для порівнянь.

Питання# 100 Яка різниця між командами Delete, Truncate та Drop?

DELETE — це команда DML, вона видаляє рядки з таблиці на основі умови, що є твердженням DML, в якому ми можемо відкотити зміни, внесені командою видалення. Тобто DELETE дозволяє фільтрувати видалення. База даних активізує запуск на DELETE.

TRUNCATE — це команда DDL, котра видаляє всі рядки з таблиці, а також пробіли. У цьому випадки дії не можуть бути повернуті назад. Тригери бази даних не спрацьовують на TRUNCATE.

DROP — команда DDL, яка видаляє повні дані разом зі структурою таблиці (на відміну від команди TRUNCATE, яка видаляє лише рядки).

Питання #101 Яка різниця між TRUNCATE TABLE table_name і DELETE FROM table_name?

Фактично обидві ці команди викличуть видалення усіх рядків з таблиці під назвою table_name, але ось станеться це зовсім по-різному:

При виклику команди TRUNCATE таблиця повністю скидається і створюється знову, в той час як команда DELETE видаляє кожен рядок таблиці окремо. Через це TRUNCATE відпрацьовує значно швидше. І як наслідок команда TRUNCATE не викликає спрацьовування тригерів і правил зовнішніх ключів, тобто, очищаючи таблицю таким способом, можна не боятися каскадного видалення або зміни даних в інших таблицях.

На відміну від DELETE команда TRUNCATE НЕ транзакційна. Тобто, якщо в момент її виклику, таблиця table_name буде заблокована будь-якої транзакцією — може виникнути помилка.

Питання #102 Використання оператора PIVOT:

Зведена таблиця (англ. Pivot table) — це інструмент обробки даних, призначений для їх узагальнення. Даний інструмент використовується у реляційних базах даних, перш за все, у програмах візуалізації даних, щоб узагальнити їх у електронні таблиці або програмному забезпечення для бізнес-аналізу. Оператор PIVOT автоматично сортує, розраховує суми стовпців щоб отримати середнє значення з даних, записаних в електронній таблиці. А результати відображає у другій таблиці (так званій «зведеній таблиці») у вигляді підсумованих даних. Незрозумілість і обмеження оператора PIVOT полягає в тому, що йому потрібно перерахоувати стовпці, а значить нам повинен бути відомий характер даних, які вони містять.

Оператор PIVOT і його протилежний варіант найчастіше зустрічається у синтаксисі продуктів від Microsoft. Що таке опретор UNPIVOT? Опретор UNPIVOT — використовується спільно з інструкцією SELECT і дозволяє рядок з даними розвернути у вигляді колонки.

DaysToManufacture AverageCost
----------------- -----------
0                 5.0885
1                 223.88
2                 359.1082
4                 949.4105
Cost_Sorted_By_Production_Days 0           1           2           3           4         
------------------------------ ----------- ----------- ----------- ----------- -----------
AverageCost                    5.0885      223.88      359.1082    NULL        949.4105

Питання #103 Видалення повторюваних рядків з використанням ключового слова DISTINCT:

Ключове слово DISTINCT в SQL використовується у поєднанні з оператором SELECT для усунення всіх повторюваних записів і одержання тільки унікальних.

У вас може виникнути ситуація, коли в таблиці є кілька повторюваних записів. Під час вилучення таких записів потрібно тільки щоб залишився 1 без дублікатів.

Синтаксис DISTINCT в SQL:

Основний синтаксис ключового слова DISTINCT для усунення дублюючих записів виглядає наступним чином:

SELECT DISTINCT столбец1, столбец2,.....столбецN 
FROM имя_таблицы
WHERE [условие]

Приклад


Цей код дає наступний результат, зарплата (2000) виводиться двічі, що є дублікатом з вихідної таблиці.

Тепер давайте використаємо ключове слово DISTINCT з вищевказаним запитом SELECT, який покаже результат без дублікатів.

SELECT DISTINCT SALARY FROM CUSTOMERS
  ORDER BY SALARY;

Питання #104 Explain UNION, MINUS, UNION ALL, INTERSECT?


INTERSECT — returns all distinct rows selected by both queries.
MINUS — returns all distinct rows selected by the first query but not by the second.
UNION — returns all distinct rows selected by either query.
UNION ALL — returns all rows selected by either query, including all duplicates.

Питання #105 Що робить SQL оператор MERGE?

Оператор MERGE дозволяє одночасно вставляти і змінювати записи згідно критерію. При виконанні умови рядки вставляються. Оператор MERGE можна замінювати послідовним викликом INSERT та UPDATE. У деяких БД схожа операція називається UPSERT.

Питання #106 Швидше IN чи EXISTS?

EXISTS є більш швидким, ніж IN, оскільки EXISTS повертає логічне значення, тоді як IN повертає значення.

Питання #107 Яке найбільше значення можна зберегти в BYTE data field?

Найвище значення, яке можна зберегти у полі BYTE 255, або від -128 до 127. Байт — це набір бітів, що представляють один символ. В байті 8 бітів. Кожен CHAR вимагає одного байта пам’яті і може мати значення від 0 до 255 (або від 0 до 11111111 в двійковій системі).

Питання #108 Що таке SNAPSHOT?

Знімки (SNAPHOT) — це лише копії для читання головної таблиці, розташованої на віддаленому вузлі, який періодично оновлюється, щоб відобразити зміни, внесені до головної таблиці.

Питання #109 Що таке SNAPSHOT LOG?

Журнал знімків (SNAPHOT LOG) — це таблиця в основній базі даних, яка пов’язана з основною таблицею. ORACLE використовує журнал знімків для відстеження рядків, оновлених в головній таблиці. Журнали знімків використовуються для оновлення знімків на основі головної таблиці.

Питання #110 Що таке псевдо колонки? Для чого вони використовуються?

Pseudo Column — це стовпець, який не є фактичним стовпцем у таблиці. Це як функція тому, що вона повертає значення при виборі. Наприклад: USER, UID, SYSDATE, ROWNUM, ROWID, NULL, AND LEVEL.

Related posts

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.