Вибірка з винятком дублікатів
Видати повні характеристики для всіх постачальників:
Зазначимо, що "*" може уточнюватися ім'ям відповідної таблиці. Допустима, наприклад, наступна форма запису:
Вибірка з винятком дублікатів
Видати різні кольори для всіх деталей, що поставляються:
У цьому випадку результат такий:
Вибірка значень, що обчислюються
Вибрати назви деталей та вагу в кілограмах:
Фраза SELECT (і фраза WHERE) може містити арифметичні висловлювання, і навіть прості імена полів. Можна, крім того, здійснювати вибірку просто констант. Наприклад:
Зауважимо, що в цьому результаті три стовпці. У зв'язку з цим прикладом виникає таке питання: що станеться, якщо вага будь-якої деталі має невизначене значення (NULL)? Нагадаємо, що NULL є невідомим значенням. Припустимо, наприклад, що вага деталі Гайка задана в базі даних як невизначене значення замість значення 12. Яке значення виразу Вага/1000 для цієї деталі? Відповідь у тому, що також є невизначеним значенням. У загальному випадку фактично будь-яке арифметичне вираз вважається таким, що має невизначене значення, якщо який-небудь з його операндів сам має невизначене значення. Невизначені значення показуються на терміналі як тире чи дефіс.
Обмежена вибірка
Видати постачальників, які знаходяться в Лондоні і мають номер більше, ніж 3:
Умова або предикат, який слідує за ключовим словом WHERE, може включати оператори порівняння =, <> (Нерівно), >, > =,
Вибірка з упорядкуванням
Видати номери, прізвища та міста постачальників, що знаходяться в Лондоні, у зворотному алфавітному порядку: Результат:
Загалом не гарантується, щорезультуюча таблиця буде впорядковано певним чином. Тут, однак, користувач специфікував, що результат перед тим, як він буде показаний, повинен бути організований певною послідовністю. Упорядкування може бути:
де "впорядкування", як і раніше, це ASC (зростання) або DECS (зменшення), і за умовчанням приймається ASC. Кожне "ім'я-стовпця" має ідентифікувати деякий стовпець результуючої таблиці. Тому, наприклад, така пропозиція неприпустима:
Вибірка з використанням BETWEEN (між)
Виберіть всі деталі, вага яких знаходиться в діапазоні від 10 до 15 включно.
Маємо наступний результат:
Може бути також специфіковано NOT BETWEEN (не належить діапазону між), наприклад:
Вибірка з використанням IN (належить)
Вибрати всі деталі, вага яких дорівнює 10, 12 або 15.
Є також у розпорядженні предикат NOT IN (не належить), наприклад:
дає результат: Подібно до предикату IN предикат NOT IN може розглядатися тільки як скорочений запис іншого предикату, який не використовує NOT IN.
Вибірка з використанням предикату LIKE (схоже)
Зазвичай предикат LIKE має форму:
де "ім'я_стовпця" має позначати стовпець типу CHAR або VARCHAR. Цей предикат приймає для заданого запису значення істина, якщо значення у вказаному стовпці відповідає зразку, що специфікується "літерною_рядковою_константою". Літери цієї константи інтерпретуються так:
- Літера "_" (розрив або підкреслення) позначає будь-яку поодиноку літеру
- Літера "%" (відсоток) позначає будь-яку послідовність з n літер (n може бути нулем)
- Усі інші літери позначають самі себе
Вибірка, за якої залучається NULL (невизначене значення)
Часто, будуть записи в таблиці які не мають жодних значень для кожного підлогу, наприклад тому що інформація не завершена, або тому що це поле просто не заповнювалося. SQL враховує такий варіант, дозволяючи вам вводити значення NULL(ПОРОЖНІЙ) у поле, замість значення. Коли значення підлогу дорівнює NULL, це означає, що програма бази даних спеціально промаркувала це поле як таке, що не має ніякого значення для цього рядка (або запису). Це відрізняється від просто призначення поля, значення нуля або пробілу, які база даних оброблятиме також як і будь-яке інше значення. Так само, як NULL не є технічним значенням, воно не має і типу даних. Воно може поміщатися у будь-який тип підлоги. Тим не менш, NULL в SQL часто згадується як нуль.Невизначене значенняФактично будь-який стовпець може містити невизначене значення, якщо у визначенні цього стовпця у реченні CREATE TABLE явно не специфіковано NOT NULL (невизначене значення не допускається). Невизначене значення - це спеціальне значення, яке використовується для того, щоб представляти "невідоме значення" або "незастосовне значення". Це не те саме, що пробіл або нуль. Повернімося до пропозиції CREATE TABLE для базової таблиці Постачальники. Ми специфікували NOT NULL тільки для стовпця НОМЕР_ПОСТАЧАЛЬНИКА. Результатом цієї специфікації є гарантія того, що запис кожного постачальника в базовій таблиці Постачальники завжди міститиме будь-який реальний (відмінний від невизначеного значення) номер постачальника. Навпаки, будь-яке зі значень Прізвище і МІСТО або всі вони можуть бути невизначеними в тій самійзапис.
Так як NULL вказує на відсутність значення, ви не можете знати, який буде результат будь-якого порівняння з використанням NULL. Коли NULL порівнюється з будь-яким значенням, навіть з іншим таким самим NULL, результат буде ні вірним ні невірним, він невідомий. Невідомий Булев, взагалі веде себе також як неправильний рядок, який зробивши невідоме значення в предикаті не буде обраний запитом - майте на увазі що в той час як NOT (невірне) - дорівнює вірно, NOT (невідоме) - дорівнює невідомо. Отже, вираз типу 'Вага = NULL' або 'Вага IN (NULL)' буде невідомим, незалежно від значення Вага. Часто ви повинні робити різницю між невірно і невідомо - між рядками, що містять значення стовпців, які не відповідають умові предикату і які містять NULL в стовпцях. Тому SQL надає спеціальний оператор IS, який використовується з ключовим словом NULL, для розміщення значення NULL. Знайдемо всі записи в таблиці Деталі зі значеннями не рівними NULL в стовпці Вага:
Запити, які використовують приєднання.
Здатність "з'єднувати" дві або більше таблиці в одну є однією з найбільш потужних можливостей реляційних систем. Фактично наявність операції з'єднання (join) – чи не найголовніше, що відрізняє реляційні системи від інших систем типів. Отже, що таке з'єднання? Нестрого кажучи, це запит, в якому вибірка даних здійснюється більш ніж з однієї таблиці. Нижче наводиться простий приклад.
Просте еквісполучення
Об'єднання двох таблиць за загальним полем "Номер_Постачальника":
Зауважимо, що тут посилання на поля у фразі WHERE повинні уточнюватися іменами таблиць, що їх містять. У результаті отримаємо наступну таблицю. Результат цього запитуназивається з'єднанням таблиць Постачальники та Деталі щодо відповідності значень Номер_Постачальника. Термін "з'єднання" використовується для позначення операції конструювання такого результату. Умова Постачальника.Номер_Постачальника = Деталі.Номер_Постачальника називається умовою з'єднання або предикатом з'єднання. У зв'язку з наведеним прикладом слід зазначити низку моментів. Одні з них мають велике значення, інші не настільки суттєві.
- Необов'язково, щоб поля в предикаті з'єднання мали однакові імена, хоча часто це буде саме так
- Немає необхідності в тому, щоб оператор порівняння у предикаті з'єднання обов'язково був рівним, хоча це буде дуже часто. Надалі будуть наведені приклади такого роду. У разі оператора рівності з'єднання називають іноді еквісполукою
- Обидва поля в предикаті з'єднання мають бути чисельними, чи рядками літер. Не обов'язково, щоб їх типи даних ідентичні. Однак, з міркувань продуктивності це було б, взагалі кажучи, непогано.
- Фраза WHERE у SELECT-з'єднанні може включати, крім самого предикату з'єднання, інші умови. Ця можливість ілюструється нижче.
- Можна, звісно, передбачити у SELECT вибірку лише специфікованих полів з'єднання, а чи не всіх.
- Вираз може бути ще спрощено: З іншого боку, воно може бути записано і в розширеному вигляді.
- За визначенням, еквісполучення має продукувати результат, що містить два ідентичні стовпці. Якщо виключити один із цих стовпців, то те, що залишилося називається природним з'єднанням. Щоб побудувати природне з'єднання таблиць Постачальники і Деталі містами в SQL, слід записати:
Насамперед побудуємо декартове твір таблиць, перелічених у фразі FROM.Декартове твір множини, що складається з n таблиць,- це таблиця, що містить всілякі рядки r, такі, що r є конкатенацією будь-якої рядки з першої таблиці, рядки з другої таблиці, . та рядки з n-ї таблиці. Тепер виключимо з цього декартового твору всі рядки, які не задовольняють предикату з'єднання. Те, що залишиться, є необхідною сполукою. До речі, цілком можливо, хоча, можливо, і дещо незвичайним чином, сформулювати в мові SQL запит, результатом якого буде декартове твір. Наприклад:
З'єднання з додатковою умовою
Вибрати прізвища постачальників, що знаходяться в Лондоні і постачають деталь 'гвинт':
Результат умови Постачальники.Номер_Постачальника = Деталі.Номер_Постачальника