asyan.org
добавить свой файл
1

КОМПЬЮТЕРНАЯ АКАДЕМИЯ «ШАГ»












Модуль #3

План заняття:

  1. Вибірка даних. Оператор SELECT

  2. Оператори IN, BETWEEN, LIKE

  3. Практична частина

1. Вибірка даних. Оператор SELECT


Ми створили базу даних, заповнили її значеннями, час перейти до вивчення способів отримання та модифікації даних. Почнемо ми просто з вибірки даних, для якої, як Ви вже знаєте існує оператор SELECT.

Як вже не раз говорилось MS SQL Server 2000/2005 підтримує як стандарт ANSI, так і власний синтаксис.ю який був розроблений компанією Microsoft для SQL Server, що отримав назву Transact-SQL (T-SQL). Дана мова практично нічим не відрізняється від базового стандарту ANSI, хоча має свої особливості, на яких ми будемо зупинятись.

Отже, до праці. Оператор SELECT, як Ви вже знаєте, призначений для вибірки даних та складається з трьох основних елементів: SELECT, FROM та WHERE, хоча повний синтаксис включає ще й інші оператори:

^ SELECT [ALL | DISTINCT ]

[TOP n [PERCENT] [WITH TIES] ] /*використовувати для вибірки перші n записів

(можливе відсоткове значення полів). n = 0..4294967295 або 0..100.

WITH TIES використовується, якщо існує ORDER BY та визначеє

наявність додаткових рядків для результуючого запиту*/

{ * | поля_для_вибірки }

/*створити нову таблицю, яка основана на результаті виконання запиту*/

[INTO ім’я_нової таблиці]

[FROM { таблиці | представлення } [as] [псевдонiм] ]

[WHERE умова]

[GROUP BY [ALL] вираз_групування]
/*для створення додаткових “надагрегатних” рядків*/

^ [WITH {CUBE | ROLLUP} ]

[HAVING умова_на_групу]

[ORDER BY імя_поля | номер_поля [{ASC | DESC}] ]
/*ставорюють нові рядки на основі даних, які повертаються оператором SELECT*/

[COMPUTE { {AVG | COUNT | MAX | MIN | SUM} (вираз)}

[BY вираз]

;


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

  1. Напишемо запит, що дозволять переглянути назви книг, їх ціну та дату випуску

SELECT NameBook as 'Назва книги',

Price as 'Ціна',

DateOfPublish as 'Дата випуску'

FROM book.Books;

Результат:




  1. Розширимо наші можливості, додамо до нашого запиту можливість отримати назву категорії книги та автора.

SELECT NameBook as 'Назва книги',

Price as 'Ціна',

'Дата випуску' = DateOfPublish,

a.FirstName + ' ' + a.LastName as 'Повне імя',

t.NameTheme 'Тематика'

FROM book.Books b, book.Authors a, book.Themes t

WHERE b.ID_AUTHOR = a.ID_AUTHOR AND b.ID_THEME = t.ID_THEME;

Результат:




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

SELECT NameBook as 'Назва книги',

Price as 'Ціна',

'Дата випуску' = DateOfPublish,

a.FirstName + ' ' + a.LastName as 'Повне імя',

t.NameTheme 'Тематика',

(b.Price * b.Tiraz) as 'Загальна сума'

FROM book.Books b, book.Authors a, book.Themes t

WHERE b.ID_AUTHOR = a.ID_AUTHOR AND b.ID_THEME = t.ID_THEME

AND b.Price > 50;

Результат:




  1. Всю сукупність можна і відсортувати по назві книги в зростаючому порядку:

SELECT NameBook as 'Назва книги',

Price as 'Ціна',

'Дата випуску' = DateOfPublish,

a.FirstName + ' ' + a.LastName as 'Повне імя',

t.NameTheme 'Тематика',

(b.Price * b.Tiraz) as 'Загальна сума'

FROM book.Books b, book.Authors a, book.Themes t

WHERE b.ID_AUTHOR = a.ID_AUTHOR AND b.ID_THEME = t.ID_THEME

AND b.Price > 50

/*ORDER BY 1 ASC*/

ORDER BY b.NameBook;


^

2. Оператори IN, BETWEEN, LIKE…


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

  1. Ключеве слово IN використовується для перевірки наявності чого-небудь в множині. Наприклад, покажемо на екран всі книги, які належать тематикам “C & C++” та “Java, J++, JBuilder, JavaScript”. Це можна зробити двома способами:

select b.NameBook as 'Назва книги', t.NameTheme as 'Тематика'

from book.Books b, book.Themes t

where b.id_theme = t.id_theme

and t.NameTheme = 'C & C++' or t.NameTheme = ’Java, J++, JBuilder, JavaScript';

або:

select b.NameBook as 'Назва книги', t.NameTheme as 'Тематика'

from book.Books b, book.Themes t

where b.id_theme = t.id_theme

and t.NameTheme IN ('C & C++', ’Java, J++, JBuilder, JavaScript');

Результат буде однаковий в обох випадках:



  1. Оператор BETWEEN..AND… використовується для перевірки приналежності до діапазону значень. Наприклад, потрібно вивести всі книги, дати видання яких знаходяться в проміжку 01/12/2006 до 01/02/2007

select *

from book.Books

where Books.DateOfPublish = '2006.12.01' AND Books.DateOfPublish = '2007.02.01';

або:

select *

from book.Books

where Books.DateOfPublish BETWEEN '2006.12.01' AND '2007.02.01';

Результат:




  1. Оператор LIKE дозволяє здійснювати пошук даних по шаблону. Шаблон являє собою рядок з використанням службових символів, до яких належать:

    • % - в даній позиції може бути присутній 0 або більше символів;

    • _ – в даній позиції обов’язково присутній один довільний символ;

    • [a-z] - в даній позиції обов’язково присутній один символ з вказаного діапазону;

    • [abc] - в даній позиції обов’язково присутній один символ з вказаного діапазону значень;

    • [^a-z] - в даній позиції обов’язково присутній один символ, що не входить в вказаний діапазон;

    • [^abc] - в даній позиції обов’язково присутній один символ, що не входить в вказаний діапазон значень.


Наприклад, вивести на екран імена та прізвища тих авторів, в прізвищі яких зустрічається літера “М”:

select FirstName + ' ' + LastName as 'Повне імя автора'

from book.Authors

where LastName LIKE '%[Mm]%';

Результат:



  1. Оператор ^ IS NULL, який дозволяє перевірити наявність пустих (NULL) полів. Наприклад, показати всіх книги, тираж яких НЕВІДОМИЙ.

select *

from book.Books

where Tiraz IS NULL;




  1. Крім того, перед кожним з перелічених операторів можна вказувати оператор заперечення ^ NOT, що заперечує умову, яка описана після нього. Наприклад, показати всіх книги, тираж яких ВІДОМИЙ.

select *

from book.Books

where Tiraz IS NOT NULL;
^

3. Практична частина


  1. Показати всі книги трьох довільних авторів

  2. Показати всі книги, в яких кількість сторінок більше 500, але меньше 650

  3. Необхідно вивести всі кники, в назвах яких є слово "Словник"

  4. Необходимо вивести всі назви книг, в яких перша літера або А, або З

  5. Показати всі книги, ціна яких не знаходиться в діапазоні від 25 до 150

  6. Показати назви підручників, тематика яких не "Детектив", і тираж яких >= 3000 екземплярів.

  7. Показати всі книги-новинки, ціна яких нижче 30 грн. (Новинкою буде вважатись книга, що була видана на протязі останнього тиждня)

  8. Показати книги, в назвах яких є слово Microsoft, але немає слова Windows

  9. Показати книги, автор яких живе в Україні

  10. Вивести назви книг, тематику, автора, ціна однієї сторінки яких меньше 10 копійок

  11. Вивести всіх авторів, книги яких хоч раз видавались видавництвом (без повторень)

  12. Вивести інформацію про всі книги, в яких в імені більше 4-ьох слів

  13. Вивести на екран всі книги, їх авторів та ціни їх продажу в у.о., дата продажу яких знаходиться в діапазоні 01/01/2007 по сьогоднішню дату

  14. Показати всю інформацію по продажах книг в наступному вигляді:

      • назва книги

      • тематик, які стосуються "Програмування"

      • автор книги

      • ціна продажу книги

      • наявна кількість продажу даної книги

      • назва магазину, який знаходиться не в Україні та не в Росії і продає дану книгу

  15. Вивести всю інформацію про книги з повними іменами авторів (в одному полі), про країну яких щось відомо


Copyright © 2007 Iryn Darkness