Мова запитів SQL

Мова запитів SQL

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

SQL визначається Американським Національним Інститутом Стандартів та Міжнародною Організацією зі стандартизації (ISO). Незважаючи на це, деякі виробники баз даних вносять зміни та доповнення до цієї мови. Ці зміни є незначними і основа залишається сумісною зі стандартом. Ми з тобою вчимо мову в чистому вигляді без змін.

Стовпці в базі даних також повинні бути унікальними, але в цьому випадку не обов'язково числовими. Їх можна називати як завгодно, аби було унікально і тобі зрозуміло, а решта нікого не стосується.

SQL може бути двох типів: інтерактивний та вкладений . Перший - це окрема мова, вона сама виконує запити і відразу показує результат роботи. Другий - це коли SQL мову вкладено в інший, як, наприклад, С++ чи Delphi. У цьому розділі я уявлятиму, що у нас інтерактивний SQL, а в практичній частині ми будемо працювати з вкладеним (SQL буде вкладено в Delphi). плаваючий спосіб укладання масивної паркетної дошки та доповнення. Наприклад, у стандартному SQL розрізняються лише два типи даних: рядки та числа, але деякі виробники додають свої типи

(Date, Time, Binary тощо). Числа в SQL поділяються на два типи: цілі (INTEGER чи INT) та дробові (DECIMAL чи DEC). Рядки обмежені розміром 254 символи. Для подальшого розуміння матеріалу нам знадобляться наочні таблиці. Уявимо, що на твоюпрогу набралося багато покупців І тут тобі знадобиться база даних, щоб ефективно вести їх облік. Перед тим, як створювати поля, потрібно обов'язково продумати, які дані потрібні, і як вони будуть представлені. У нашому випадку знадобиться:

• Найменування проги (ProgName), яку купили (ти можеш мати кілька прог).

• Прізвище покупця (LastName).

• Ім'я покупця (FirstName).

• Адреса електронної пошти (Email).

• Країна проживання (Country). Непогано знати, де мешкає твій користувач.

• Кількість придбаних ліцензій (LecNumber).

• Реєстраційний код (RegNum).

На перший погляд, все досить легко. Але це лише на перший. Уявімо, що в тебе 2 проги, тоді у кожного другого таблиці буде однакове перше поле. Головна проблема, що це поле є громіздким, як мінімум 20 символів. Щоб позбавитися цього недоліку необхідно винести назви та ціну прог в окрему таблицю. Те саме з країнами. Більшість твоїх користувачів зосереджено у трьох чи чотирьох країнах, тому буде дуже багато повторень. Країни я теж винесу окремо, і використовуватиму як довідник. У цьому випадку в основній таблиці зберігатимуться лише посилання на довідник, що значно зменшить базу даних. Зв'язок між цими таблицями буде складним. Ну, а кому зараз легко? Подивися на рис

запитів
Там показано цей зв'язок. Як "Key1" виступають первинні ключі, а "Key2" - вторинні. Що таке вторинний ключ ти зрозумієш у процесі читання моїх статей.

Тепер ми переходимо до вивчення команд мови SQL. Для цього ми створимо найпростіший запит.

SELECT ProgName, Cost

SELECT всі запити починаються з цієї команди і означає - "вибрати". Після команди перераховуються імена полів, які необхідновибрати з бази даних. FROM - ця команда також є у всіх запитів і вказує на таблицю (або кілька таблиць) до якої направлений цей запит. Крапка з комою ";" використовується в інтерактивному SQL як індикатор кінця запиту. У деяких системах цю роль виконує "". У вкладеному такого індикатора немає.

У результаті ми отримуємо, що наш запит вибере усі рядки з полями "ProgName" та "Cost" із таблиці "Prog". Як бачиш, нічого складного тут нема. Такий маленький запит повертає всі поля з таблиці, крім ключового. Якщо потрібно вивести все, можна перерахувати всі поля або скористатися значком "*". Наступний запит виведе всі поля із таблиці "prog":

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

У SQL існує два ключові слова, які характеризують параметри виведення інформації: ALL і DISTINCT. Параметр All означає, що виводити нудно всі рядки, а DISTINCT означає, що не потрібно виводити рядки, що повторюються. Наступний запит виведе усі можливі імена програм. Якщо в таблиці зустрінеться два рядки з однаковим ім'ям програми, він виведе це ім'я лише один раз.

SELECT DISTINCT ProgName

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

• Деякі бази даних чутливі до регістру.

• Можливо, ваша база даних може сприймати текст тільки у верхньому регістрі.

• Деякі виробники відхиляються від стандартів, таможливі відхилення від того, що я говорю.

Я вже застерігав тебе в минулому номері, але все ж таки мені захотілося повторитися (повторення - мати муки).

Наступний оператор, з яким я хочу тебе познайомити, буде WHERE. Цей оператор визначає критерії пошуку. Наприклад, мені потрібно вибрати всі записи з таблиці User.db, де поле Country міститься значення "USA". У цьому випадку я маю написати наступний запит:

WHERE Сountry LIKE "USA"

Я трохи поквапився і використав у запиті ключове слово LIKE. Це слово ідентичне знаку "=" (рівно), тільки використовується для порівняння рядків. Якщо тобі треба порівнювати числа, то ти повинен використовувати знак (=), а якщо рядки, то оператор LIKE . Давай тепер розглянемо, як цей запит буде виглядати під час пошуку за числами. Для цього знайдемо всі рядки з тієї ж бази, де кількість ліцензій 1.

WHERE LecNumber =1

У цьому випадку ми робимо пошук по числовому полю, тому використовуємо знак (=). Результатом запиту будуть усі рядки, що містять у полі LecNumber значення 1. У всіх запитах я використовував єдиний оператор "=" (рівно). Але це не означає, що нічого більше немає. Стандарт дозволяє використовувати такі оператори:

• "=" - більше або одно

Оператори "більше", "менше" та ін. можна використовувати не тільки з числами, але і рядками. В цьому випадку буква "А" буде меншою за "Р". При порівнянні рядків різного регістру, меншим виявляється рядок у верхньому регістрі, наприклад, "А" буде менше "а" і "Р" буде менше "а". При порівнянні рядків тобі також необхідно використовувати лапки.

WHERE LecNumber >1

Результатом цього запиту буде рядки, в яких кількість ліцензій більша за 1. Тепер ускладнимо запит за допомогою булевих операторів.У стандарті передбачено три булеві оператори: AND (логічне "і"), OR (логічне "або"), NOT (логічне "не"). Відразу ж розглянемо приклад:

WHERE Сountry LIKE "USA"

AND LecNumber >1

Результат запиту - всі рядки, що містять у полі "Сountry" значення "USA" і в полі LecNumber значення більше "1". Якщо якась із цих умов не виконається, то рядок не буде вибрано.

WHERE Сountry LIKE "USA"

Результат запиту - всі рядки, що містять у полі "Sountry" значення "USA" або в полі LecNumber значення "1". Для того, щоб рядок був вибраний, необхідно, щоб хоча б одна з цих умов виконалася.

WHERE Сountry LIKE "USA"

AND NOT LecNumber =1

WHERE Сountry LIKE "USA"

AND (LecNumber = 1 OR LecNumber = 2)

Результат запиту - всі рядки, що містять у полі "Sountry" значення "USA" і в полі LecNumber значення не дорівнює "1" або "2". Для того, щоб рядок був вибраний, необхідно щоб умова Сountry LIKE "USA" та умова в дужках були вірні. Продовжуємо вивчати мову запитів SQL. Минулого заняття ми покінчили з булевими операторами. Сьогодні ми познайомимося ще з кількома операторами, які спрощують та посилюють пошук необхідної інформації. Сьогодні це будуть оператори IN, BETWEEN, IS NULL. А також ми познайомимося з шаблонами. Почну з оператора IN. В принципі, можна створювати запити і без нього, але він спрощує SQL-код і робить його більш наочним. Відразу розглянемо приклад:

WHERE Сountry LIKE "USA" or Сountry LIKE "RUSSIA" or

Сountry LIKE "GERMANY";

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

WHERE Сountry IN("USA", "RUSSIA", "GERMANY");

Набагато простіше та менше місця. Якщо уважно оглянути два попередні запити, можна і без моїх пояснень зрозуміти, що робить оператор IN. В даному випадку він виведе всі записи, в яких Counrty має одне із значень вказаних у дужках. Якщо використовується числове поле, то лапки треба прибрати:

WHERE LecNumber IN (1, 2, 3)

У цьому випадку ми побачимо всі записи, де поле LecNumber дорівнює 1 або 2 або 3. Разом з оператором IN та з усіма наступними операторами ти можеш сміливо використовувати булеві оператори, наприклад:

WHERE LecNumber NOT IN (1, 2, 3)

Тепер перейдемо до розгляду оператора BETWEEN. Він також потрібний лише для зручності і ви можете спокійно обійтися без нього. Знову перейдемо, наприклад. Припустимо, що треба вивести всі рядки, де поле LecNumber більше або одно 1 і менше або 5. Цей запит буде виглядати так:

WHERE LecNumber >= 1 AND LecNumber Схожі статті