Файл: Лабораторна робота7.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.10.2024

Просмотров: 12

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лабораторна робота 7

Тема: Логічні оператори.

Мета: розглянути логічні оператори і способи їх вживання в MySql. Ознайомитися зі способами впорядковування даних, способами обмеження витягуваних даних і командами оновлення записів.

Теоретична частина

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

AND

OR

NOT

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

SELECT f_name, l_name from employee_data

where salary > 70000 AND salary < 90000;

На мал. 7.1. приведений результат запиту.

Мал. 7.1. Імена співробітників, які одержують більше 70000, але менше 90000

Давайте виведемо список співробітників, прізвища яких починаються з букви К або Л.

SELECT l_name from employee_data where

l_name like 'К%' OR l_name like 'Л%';

На мал. 7.2. приведений результат запиту.

Мал. 7.2. Співробітники, прізвища яких починаються з букви К або Л

Ось складніший приклад - список імен і віку співробітників, прізвища яких починаються з К або Л, і які молодше 30 років.

SELECT f_name, l_name, age from employee_data

where (l_name like 'К%' OR l_name like 'Л%') AND age < 30;

На мал. 7.3. приведений результат запиту.

Мал. 7.3. Список імен і віку співробітників, прізвища яких починаються з К або Л, і які молодше 30 років

Зверніть увагу на використання дужок в представленому вище операторі. Дужки призначені для виділення різних логічних умов і видалення двозначностей.

Оператор NOT допоможе при пошуку всіх співробітників, які не є програмістами. (Програмісти включають старших програмістів, програмістів мультимедіа і програмістів).

SELECT f_name, l_name, title from employee_data

where title NOT LIKE "%программист%";

На мал. 7.4. приведений результат запиту.

Мал. 7.4. Пошук всіх співробітників, які не є програмістами


І останній приклад перед вправами.

Показати всіх співробітників із стажем роботи в компанії більше 3 років, які старше 30 років.

select f_name, l_name from employee_data

where уоs > 3 AND age > 30;

На мал. 7.5. приведений результат запиту.

Мал. 7.5. Всі співробітники, які старше 30 років, і мають стаж роботи більше 3 років

Завдання

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

2. Що робить наступний оператор?

SELECT l_name, f_name from employee_data

where title NOT LIKE '%продавец%'

AND age < 30;

3. Вивести всі ідентифікаційні номери і імена співробітників у віці між 32 і 40 роками.

4. Виберіть імена всіх співробітників у віці 32 років, які не є програмістами.

Оператори IN і BETWEEN

Щоб знайти співробітників, які є розробниками Web або системними адміністраторами, можна використовувати оператор SELECT наступного вигляду:

SELECT f_name, l_name, title from

-> employee_data where

-> title = 'разработчик Web' OR

-> title = 'системный адм.';

На мал. 7.6. приведений результат запиту.

Мал. 7.6. Пошук співробітників, які є розробниками Web або системними адміністраторами

В SQL є більш простий спосіб зробити це за допомогою оператора IN (в множині). Його використовування не представляє ніяких труднощів.

SELECT f_name, l_name, title from

-> employee_data where title

-> IN ('разработчик Web', 'системный адм.');

Результат буде аналогічний мал. 7.6.

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

SELECT f_name, l_name, title from

-> employee_data where title NOT IN

-> ('программист', 'системный адм.');

Оператор BETWEEN використовується для визначення цілочисельних меж. Тому замість age >= 32 AND age <= 40 можна використовувати age BETWEEN 32 AND 40.

select f_name, l_name, age from

-> employee_data where age BETWEEN

-> 32 AND 40;

На мал. 7.7. приведений результат запиту.


Мал. 7.7. Пошук співробітників, вік яких лежить в проміжку від 32-х до 40 років

NOT також можна використовувати разом з BETWEEN, як в наступному операторі, який виводить співробітників, зарплата яких менше 90000 або більше 150000.

select f_name, l_name, salary

-> from employee_data where salary

-> NOT BETWEEN

-> 90000 AND 150000;

Завдання

1. Знайдіть всіх співробітників, які обіймають посаду "старший програміст" і "програміст мультимедіа".

2. Виведіть список імен співробітників, зарплата яких складає від 70000 до 90000.

3. Що робить наступний оператор?

SELECT f_name, l_name, title from

employee_data where title NOT IN

('программист', 'старший программист'

'программист мультимедиа');

4. Ось складніший оператор, який об'єднує BETWEEN і IN. Що він робить?

SELECT f_name, l_name, title, age

from employee_data where

title NOT IN

('программист', 'старший программист'

'программист мультимедиа') AND age

NOT BETWEEN 28 and 32;

Впорядковування даних

Розглянемо питання про те, як можна змінити порядок виведення даних, витягнутих з таблиць MySQL, використовуючи пропозицію ORDER оператора SELECT.

Витягувані дотепер дані завжди виводилися в тому порядку, в якому вони були збережені в таблиці. Насправді SQL дозволяє сортувати витягнуті дані за допомогою пропозиції ORDER. Ця пропозиція вимагає ім'я стовпця, на основі якого сортуватимуться дані. Давайте подивимося, якомога вивести імена співробітників з впорядкованими за абеткою прізвищами співробітників (в зростаючому порядку).

SELECT l_name, f_name from

employee_data ORDER l_name;

А ось так співробітників можна відсортувати по віку.

SELECT f_name, l_name, age

from employee_data

ORDER age;

Пропозиція ORDER може сортувати в зростаючому порядку (ASCENDING або ASC) або в убуваючому порядку (DESCENDING або DESC) залежно від вказаного аргументу.

Щоб вивести список співробітників в убуваючому порядку, можна використовувати наступний оператор.

SELECT f_name from employee_data

ORDER f_name DESC;

Примітка: Зростаючий порядок (ASC) використовується за умовчанням.

Завдання

1. Вивести список співробітників в порядку, визначуваному зарплатою, яку вони одержують.


2. Виведіть список співробітників в убуваючому порядку їх стажу роботи в компанії.

3. Що робить наступний оператор?

SELECT emp_id, l_name, title, age

from employee_data ORDER

title DESC, age ASC;

4. Вивести список співробітників (прізвище і ім'я), які посідають посаду "програміст" або "розробник Web" і відсортувати їх прізвища за абеткою.

Обмеження кількості витягуваних даних

Далі розглянемо, як обмежити число записів, що виводяться оператором SELECT.

У міру збільшення таблиць виникає необхідність виведення тільки підмножини даних. Цього можна добитися за допомогою пропозиції LIMIT.

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

SELECT f_name, l_name from

employee_data LIMIT 5;

На мал. 7.8. приведений результат запиту.

Мал. 7.8. Імена перших п'яти співробітників

Це перші п'ять записів таблиці.

Можна з'єднати оператор LIMIT з оператором ORDER. Таким чином, наступний оператор виведе четверо найстаріших співробітників компанії.

SELECT f_name, l_name, age FROM

employee_data ORDER age

DESC LIMIT 4;

На мал. 7.9. приведений результат запиту.

Мал. 7.9. Четверо найстаріших співробітників компанії

Аналогічно можна вивести двох наймолодших співробітників.

SELECT f_name, l_name, DESC age from

employee_data ORDER age LIMIT 2;

На мал. 7.10. приведений результат запиту.

Мал. 7.10. Двоє наймолодших співробітників

Витягання підмножин

LIMIT можна використовувати також для витягання підмножини даних, використовуючи додаткові аргументи.

Загальна форма оператора LIMIT має наступний вигляд:

SELECT (що-небудь) from таблиця LIMIT початковий рядок, витягуване число записів;

SELECT f_name, l_name from

employee_data LIMIT 6,3;

На мал. 7.11. приведений результат запиту.

Мал. 7.11. Витягання трьох рядків починаючи з 6-й

Будуть витягнуто три рядки, починаючи з шостою.


Завдання

Знайдіть імена 5 наймолодших співробітників компанії.

Витягніть 5 записів, починаючи з 10 рядком.

Виведіть ім'я і зарплату співробітника, який одержує найбільшу зарплату.

Що робить наступний оператор?

SELECT emp_id, age, реrks

from employee_data ORDER

реrks DESC LIMIT 10;

Ключове слово DISTINCT

Розглянемо тепер, як вибрати і вивести записи таблиць MySQL за допомогою ключового слова DISTINCT (РІЗНИЙ), використовування якого виключає появу даних, що повторюються.

Щоб вивести всі посади бази даних компанії, можна виконати наступний оператор:

select title from employee_data;

На мал. 7.12. приведений результат запиту.

Мал. 7.12. Всі посади бази даних компанії

Можна бачити, що список містить дані, що повторюються. Пропозиція SQL DISTINCT виводить тільки унікальні дані. От як воно використовується.

select DISTINCT title from employee_data;

На мал. 7.13. приведений результат запиту.

Мал. 7.13. Всі посади бази даних компанії без повторів

З цього можна бачити, що в компанії є 11 унікальних посад.

Унікальні записи можна також відсортувати за допомогою ORDER.

select DISTINCT age from employee_data

ORDER age;

На мал. 7.14. приведений результат запиту.

Мал. 7.14. Значення віку співробітників компанії без повторів

DISTINCT часто використовується разом з функцією COUNT, яка буде розглянута далі.

Завдання

Скільки унікальних варіантів зарплати є в компанії? Відрекомендуйте їх в убуваючому порядку.

Скільки різних імен є в базі даних?

Зміна записів

Команда UPDATE виконує зміну даних в таблицях. Вона має дуже простий формат.

UPDATE ім’я_таблиці SET

ім’я_колонки_1 = значення_1

ім’я_колонки_2 = значення_2

ім’я_колонки_3 = значення_3 ...

[WHERE умови];

Як і всі інші команди SQL можна вводити її на одному рядку або на декількох рядках.

Розглянемо декілька прикладів.

Припустимо, директор збільшив свою зарплату на 20000 і надбавки на 5000. Його попередня зарплата була 200000, а надбавки були 50000.