Основи SQL
Загальна характеристика, особливості та переваги мови SQL. Захист бази даних. Операції та агрегатні функції. Ідентифікатори користувачів і право володіння. Створення горизонтального представлення. Шифрування, копіювання, авторизація та аутентифікація.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | учебное пособие |
Язык | украинский |
Дата добавления | 16.11.2018 |
Размер файла | 96,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
ПРИКАРПАТСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
ІМЕНІ ВАСИЛЯ СТЕФАНИКА
Навчальний посібник
Основи sql
Б.М. Дрінь
О.В. Козич
Івано-Франківськ
Прикарпатський національний університет імені Василя Стефаника
2012
УДК 681.3.07
Д95
ББК 32.973.26
Рекомендовано до друку Вченою радою факультету математики та інформатики Прикарпатського національного університету імені Василя Стефаника, протокол №2 від 16.10.2012р.
Рецензенти:
Шарин С.В. доцент кафедри математичного та функціонального аналізу Прикарпатського національного університету імені Василя Стефаника
Шашкевич О.П. доцент кафедри комп'ютерної та програмної інженерії ПВНЗ “Галицька академія”
Дрінь Б.М.
Основи SQL: Навч.посібн. / Б.М. Дрінь, О.В. Козич - Івано-Франківськ, Прикарпатський національний університет, ВДВ ЦІТ “Плай”, 2012. - с.
В посібнику дано загальну характеристику і описано стандарт мови SQL.
Подано основні теоретичні викладки, які розкривають сутність мови, її функції та призначення. Основну увагу приділено таким можливостям мови як: вибірка та манипулюлання даними, робота з об'єктами, додаткові засоби визначення даних, представлення та захист даних.
Матеріал посібника успішно може бути використаний в навчальному процесі вищих навчальних закладів на спеціальностях які вивчають роботу з базами, а також вчителями спеціалізованих загальноосвітніх шкіл, коледжів, ліцеїв, гімназій тощо.
Передмова
Всі мови маніпулювання даними, створені до появи реляційних баз даних (БД) були орієнтовані на операції з даними, представленими у вигляді локальних інформаційних файлів лінійної структури. Це вимагало від користувачів детального знання організації збереження даних і значних зусиль для вказання не тільки того які дані потрібно, але де вони розміщені і як крок за кроком їх отримати. В той же час реляційні мови, це мови орієнтовані на операції з даними представленими у вигляді сукупності логічно взаємозв'язаних таблиць.
Будь-яка мова роботи з реляційними базами даних повинна надавати користувачеві наступні можливості:
с створювати бази даних у вигляді таблиць з повним описом їх структури;
с виконувати основні операції маніпулювання даними;
с виконувати різного виду запити для отримання потрібних даних.
Крім того, мова роботи з базами даних повинна вирішувати всі вказані вище завдання при мінімальних зусиллях з боку користувача та мати по можливості досить просту структуру і синтаксис. Вона має бути універсальною, тобто відповідати деякому визнаному стандарту, що дозволить використовувати один і той же синтаксис і структуру команд при переході від однієї системи управління базами даних (СУБД) до іншої. Мова яка задовольняє практично всім цим вимогам є мова SQL (Structured Query Language - мова структурованих запитів).
Даний посібник містить інформацію про основні положення мови SQL, синтаксис команд даної мови. Приклади і цілісність Матеріал даного посібника пройшов апробацію при вивченні навчального курсу “Бази даних та інформаційні системи“ студентами факультету математики та інформатики Прикарпатського національного університету імені Василя Стефаника.
1. Розвиток і загальна характеристика мови
Мова SQL є прикладом універсальної прикладної мови, яка застосовується як для створення так і для зміни даних, а також керування ними у реляційних БД. Вона включає тільки команди визначення та маніпулювання даними і не містить команд управління ходом обчислень. Мова SQL може використовуватися двома способами. Перший передбачає інтерактивну роботу, що полягає у введенні користувачем з клавіатури окремих SQL-операторів. Другий полягає у впровадженні SQL-операторів в клієнтські програми.
Мова SQL - перша і практично єдина стандартна мова для роботи з базами даних, яка набула достатньо широкого поширення. Створення мови сприяло не лише виробленню необхідних теоретичних основ, але і підготовці успішно реалізованих технічних рішень. Це особливо справедливо відносно оптимізації запитів, методів розподілу даних і реалізації засобів захисту. На початку 70-х років двадцятого століття працівниками компанії IBM була розроблена експериментальна СУБД «System R», основою якої була мова SEQUL (Structured English Query Language - структурована англійська мова запитів). Мова SEQUL з часом перейменована у SQL. У 1986 році був прийнятий перший ANSI (American National Standards Institute) стандарт мови SQL який називався «ANSI X3.115-1986». Метою розробки було створення простої, не процедурної мови, якою міг би скористатись будь-який користувач, що немає навиків програмування. Перша версія стандарту мови SQL-86 була прийнята ANSI і ISO (Міжнародна Організація Стандартів) і затверджена у 1987 році. У 1989 році вийшов стандарт SQL-89, де були внесені незначні зміни у порівнянні з попереднім. Із розвитком мови у 1992 році прийнято новий розширений стандарт із скороченою назвою SQL-92 або SQL-2. У 1999 році вийшов стандарт SQL-99 (SQL-3), де додані регулярні вирази, рекурсивні запити, тригери, деякі об'єктно-орієнтовані нововведення. У 2003 році в SQL-99 (SQL-3) додані XML - залежні нововведення.
На даний час мова SQL реалізована трьома способами:
с інтерактивний або прямий виклик. Набір операторів SQL передається безпосередньо програмі управління базами даних. Така програма відповідає на запит, відображаючи результат, якщо це можливо;
с пакетно-модульна обробка. Програмістом створюються пакетні файли, що складаються з операторів SQL, які можуть бути виконані додатком;
с вмонтований або вкладений SQL. Тут команди SQL генеруються прикладною програмою або вмонтовуються у програмний код, що робить ці програми більш ефективними. Такий варіант реалізації SQL використаний, зокрема, в СУБД ACCESS.
шифрування авторизація копіювання ідентифікатор
2. Особливості та переваги мови SQL
Мова SQL є основою багатьох СУБД, оскільки відповідає за фізичну структуризацію і запис даних на диск та їх зчитування з диску, дозволяє приймати SQL-запити від інших компонентів СУБД та додатків користувача.
SQL - потужний інструмент, який забезпечує користувачам, програмам і обчислювальним системам доступ до інформації, що міститься в реляційних базах даних.
Основні переваги мови SQL:
стандартність - використання мови SQL в програмах стандартизованих міжнародними організаціями;
незалежність від конкретних СУБД - всі поширені СУБД використовують SQL, оскільки реляційну базу даних можна перенести з однією СУБД на іншу з мінімальними доопрацюваннями;
можливість перенесення з однієї обчислювальної системи на іншу, оскільки додатки, створені за допомогою SQL, можуть використовуватись як для локальних БД, так і для багатокористувацьких систем;
реляційна основа мови - SQL є мовою реляційних БД;
можливість створення інтерактивних запитів - SQL забезпечує користувачам негайний доступ до даних, при цьому в інтерактивному режимі можна отримати результат запиту за дуже короткий час без написання складної програми;
можливість програмного доступу до БД - мову SQL легко інтегрується в програми, яким необхідно звертатися до баз даних. Одні і ті ж оператори SQL використовуються як для інтерактивного, так і програмного доступу, тому частини програм, що містять звернення до БД, можна спочатку перевірити в інтерактивному режимі, а потім вбудовувати в програму;
забезпечення різного представлення даних - за допомогою SQL можна задати таку структуру даних, що той або інший користувач бачитиме різні їх представлення. Крім того, дані з різних частин БД можуть бути скомбіновані і подані у вигляді однієї простої таблиці, а значить, представлення придатні для посилення захисту БД і її налаштування під конкретні вимоги окремих користувачів;
можливість динамічної зміни і розширення структури БД - мова SQL дозволяє маніпулювати структурою БД, тим самим забезпечуючи гнучкість з точки зору пристосованості БД до вимог предметної області, що змінюються;
підтримка архітектури клієнт-сервер - SQL - один з кращих засобів для реалізації програм на платформі клієнт-сервер. SQL служить сполучною ланкою між клієнтською системою, що взаємодіє із користувачем, і серверною системою, БД, що управляє, дозволяючи кожній з них зосередитися на виконанні своїх функцій.
3. Групи команд мови SQL
Команди мови SQL за функціями можна поділити на наступні групи:
DQL (Data Query Language) - мова запиту даних, яка використовується для пошуку та вибору даних із БД та їх відображення (SELECT);
DDL (Data Definition Language) - мова опису даних, яка включає оператори, що описують структуру таблиць і режим відображення даних, команди для зміни структури таблиць, створення та вилучення індексів (CREATE TABLE, CREATE VIEW, тощо);
DML (Data Manipulation Language) - мова маніпулювання даними, команди якої дозволяють додавати та вилучати рядки з таблиць, вносити зміни значень полів (INSERT, DELETE, UPDATE);
TPL (Transaction Processing Language) - мова обробки транзакцій, що включає команди, які об'єднують декілька команд DML;
CCL (Cursor Control Language) - мова управління курсором, яка містить команди, що дозволяють виділити для обробки фрагмент результатного набору записів;
DCL (Data Control Language) - мова управління даними, яка забезпечує виконання адміністративних функцій надання та відміни прав доступу до всієї бази, набору таблиць тощо.
4. Мова SQL -- типи даних та функції
4.1 Типи даних SQL
Дані - це сукупна інформація, що зберігається в базі даних у вигляді одного з декількох різних типів. За допомогою типів даних встановлюються основні правила для даних, що містяться в конкретному стовпці таблиці, у тому числі розмір пам'яті, що виділяється для них.
Основні типи даних -- символьні, числові, дата та час.
4.1.1 Символьні дані
Складаються з послідовності символів, що входять у визначений набір символів створеної БД. Найчастіше використовуються набори символів ASCII, UTF, тощо.
SQL визначає два первинних символьних типи: із строго заданою кількістю символів (character) та змінною кількістю символів (character varying).
Для визначення даних символьного типу використовується наступний синтаксис:
CHARACTER VARYING (<довжина>) | VARCHAR (<довжина>)
та
CHARACTER (<довжина>) | CHAR (<довжина>)
При визначенні стовпця із символьним типом даних параметр довжина застосовується для вказівки максимальної кількості символів, які можуть бути поміщені в даний стовпець (за замовчуванням набуває значення 1). Якщо рядок визначений із фіксованою довжиною значень, то при введенні в неї меншої кількості символів значення доповнюється до вказаної довжини пропусками, що додаються справа. Якщо рядок визначений із змінною довжиною значень, то при введенні в неї меншої кількості символів в базі даних будуть збережені тільки введені символи, що дозволить досягти певної економії зовнішньої пам'яті.
Крім цього, у конкретних реалізаціях SQL існують типи для збереження текстових даних “необмеженої” (визначається архітектурою ЕОМ та особливістю ОС) довжини, наприклад MEMO чи TEXT.
4.1.2 Бітовий тип даних
Використовується для визначення бітових рядків, тобто послідовності двійкових цифр (бітів), кожна з яких може мати значення 0 або 1. Дані бітового типу визначаються за допомогою наступного синтаксису:
BIT [VARYING] (<довжина>)
4.1.3 Числові типи даних
Дані числового типу визначаються точністю і довжиною дробової частини. Точність задає спільну кількість значущих десяткових цифр числа, в яку входить довжина як цілої частки, так і дробової, але без врахування самої десяткової крапки. Масштаб вказує кількість дробових десяткових розрядів числа.
Синтаксис:
SMALLINT{ INTEGER | INT }BIGINT { NUMERIC | DECIMAL | DEC } [(<точність>[,<масштаб>])]
Типи NUMERIC і DECIMAL призначені для зберігання чисел в десятковому синтаксисі. За замовчуванням довжина дробової частки дорівнює нулю, а точність, що приймається за умовчанням, залежить від версії SQL. Тип INTEGER (INT) використовується для зберігання великих додатних або від'ємних цілих чисел. Тип SMALLINT - для зберігання невеликих додатних або від'ємних цілих чисел. В цьому випадку використання зовнішньої пам'яті істотно зменшується.
Дійсні числа або числа з плаваючою крапкою представляються за допомогою мантиси, помноженої на певний степінь десятки (порядку), наприклад: 10Е3, +5.2Е6, -0.2Е-4. Для визначення даних дійсного типу використовується Синтаксис:
{ FLOAT | REAL } [(<точність>)]
DOUBLE PRECISION
Параметр точність задає кількість значущих цифр мантиси. Точність типів REAL і DOUBLE PRECISION залежить від конкретної реалізації.
4.1.4 Тип даних «дата/час»
Даний тип використовується для визначення часу з деякою встановленою точністю. Стандарт SQL підтримує наступний cинтаксис:
{ DATE | TIME | TIMESTAMP } [<точність>][WITH TIME ZONE]
Тип даних DATE використовується для зберігання календарних дат, що включають поля YEAR (рік), MONTH (місяць) і DAY (день). Тип даних TIME - для зберігання відміток часу, що включають поля HOUR (години), MINUTE (хвилини) і SECOND (секунди). Тип даних TIMESTAMP - для спільного зберігання дати і часу. Параметр <точність> задає кількість дробових десяткових знаків, що визначають точність збереження значення в полі SECOND. Якщо цей параметр опускається, то за замовчуванням його значення, для стовпців типу TIME, встановлюється рівним нулю (тобто зберігаються цілі секунди), тоді як для полів типу TIMESTAMP він встановлюється рівним 6-и (тобто відмітки часу зберігаються з точністю до мілісекунд). Наявність ключової фрази WITH TIME ZONE визначає використання полів TIMEZONE HOUR і TIMEZONE MINUTE, тим самим задаються година і хвилини зміщення зонального часу по відношенню до універсального координатного часу (час за Гринвічем). Дані типу INTERVAL використовуються для представлення періодів часу.
4.2 Операції та агрегатні функції.
При створенні запитів на мові SQL використовуються реляційні та булеві оператції, спеціальні операції умов, а також агрегатні функції.
4.2.1. Реляційні операції
Реляційні операції - це математичні символи, які вказують на певний тип порівняння двох значень. SQL використовує наступні операції:
= |
рівне; |
|
> |
більше ніж; |
|
< |
менше ніж; |
|
>= |
більше або рівне; |
|
<= |
менше або рівне; |
|
<> |
не дорівнює. |
Ці операції мають стандартні значення для числових значень. Для символьних значень їх визначення залежить від синтаксису перетворення ASCII або EBCDIC.
4.2.2 Булеві операції
Основні булеві операції (NOT, AND, OR) Булеві вирази набувають значення істина або хибність згідно таблиці
a |
b |
a AND b |
a OR b |
|
TRUE |
TRUE |
TRUE |
TRUE |
|
TRUE |
FALSE |
FALSE |
TRUE |
|
TRUE |
NULL |
NULL |
TRUE |
|
FALSE |
FALSE |
FALSE |
FALSE |
|
FALSE |
NULL |
FALSE |
NULL |
|
NULL |
NULL |
NULL |
NULL |
|
a |
NOT a |
|||
TRUE |
FALSE |
|||
FALSE |
TRUE |
|||
NULL |
NULL |
Мова SQL дозволяє використовувати також спеціальні операції, а саме:
IN - визначає набір значень, в який дане значення може бути включене або ні (A IN (1, 2, 3, 4, 5); B IN (`X', `Y', `Z'));
BETWEEN - визначає діапазон значень, куди дане значення може входити (A BETWEEN 1 AND 5; B BETWEEN `X' AND `Z'). Тут числа '1' і '5'та символи 'X' і 'Z' входять у діапазон;
LIKE - використовується тільки для даних символьних типів, де у значеннях шукає входження рядка; при використанні символ (_) він заміняє будь-який один символ, а символ (%) заміняє послідовність будь-яких символів. Наприклад вираз
Text LIKE `S_'
дасть значення істина, якщо значення текстового поля Text починається з літери S, а другий символ довільний.
Text LIKE `S%'
дасть значення істина, якщо значення поля Text починається з літери S,а решту - будь які символи;
IS NULL - вказує на невизначене значення.
4.2.3 Агрегатні функції
Агрегатні функції видають конкретне значення для всієї вибірки.
Такими функціями є:
COUNT - видає кількість вибраних значень;
SUM - видає арифметичну суму вибраних значень;
AVG - видає середнє значення вибраних значень;
MAX - видає найбільше значення серед вибраних значень;
MIN - видає найменше значення серед вибраних значень.
Математики
4.2.4 Додаткові функції і оператори
Оператори |
||||
Operator |
Description |
Example |
Result |
|
+ |
Addition |
2 + 3 |
5 |
|
- |
Subtraction |
2 - 3 |
-1 |
|
* |
Multiplication |
2 * 3 |
6 |
|
/ |
division (integer division truncates results) |
4 / 2 |
2 |
|
% |
modulo (remainder) |
5 % 4 |
1 |
|
^ |
Exponentiation |
2.0 ^ 3.0 |
8 |
|
|/ |
Square root |
|/ 25.0 |
5 |
|
||/ |
Cube root |
||/ 27.0 |
3 |
|
! |
Factorial |
5 ! |
120 |
|
@ |
Absolute value |
@ -5.0 |
5 |
|
& |
Побітне AND |
91 & 15 |
11 |
|
| |
Побітне OR |
32 | 3 |
35 |
|
# |
Побітне XOR |
17 # 5 |
20 |
|
~ |
Побітне NOT |
~1 |
-2 |
|
<< |
Побітний зсув вліво |
1 << 4 |
16 |
|
>> |
Побітний зсув вправо |
8 >> 2 |
2 |
Математичні функції |
|||||
Function |
Return Type |
Description |
Example |
Result |
|
abs(x) |
(same as x) |
absolute value |
abs(-17.4) |
17.4 |
|
cbrt(dp) |
dp |
cube root |
cbrt(27.0) |
3 |
|
ceil(dp or numeric) |
(same as input) |
smallest integer not less than argument |
ceil(-42.8) |
-42 |
|
ceiling(dp or numeric) |
(same as input) |
smallest integer not less than argument (alias for ceil) |
ceiling(-95.3) |
-95 |
|
degrees(dp) |
dp |
radians to degrees |
degrees(0.5) |
28.6478897565412 |
|
exp(dp or numeric) |
(same as input) |
exponential |
exp(1.0) |
2.71828182845905 |
|
floor(dp or numeric) |
(same as input) |
largest integer not greater than argument |
floor(-42.8) |
-43 |
|
Ln(dp or numeric) |
(same as input) |
natural logarithm |
ln(2.0) |
0.693147180559945 |
|
log(dp or numeric) |
(same as input) |
base 10 logarithm |
log(100.0) |
2 |
|
log(b numeric, x numeric) |
numeric |
logarithm to base b |
log(2.0,64.0) |
6.0000000000 |
|
mod(y, x) |
(same as argument types) |
remainder of y/x |
mod(9,4) |
1 |
|
Pi() |
dp |
"?" constant |
pi() |
3.14159265358979 |
|
power(a dp, b dp) |
dp |
a raised to the power of b |
power(9.0,3.0) |
729 |
|
power(a numeric, b numeric) |
numeric |
a raised to the power of b |
power(9.0,3.0) |
729 |
|
radians(dp) |
dp |
degrees to radians |
radians(45.0) |
0.785398163397448 |
|
random() |
dp |
random value between 0.0 and 1.0 |
random() |
||
round(dp or numeric) |
(same as input) |
round to nearest integer |
round(42.4) |
42 |
|
round(v numeric, s int) |
numeric |
round to s decimal places |
round(42.4382,2) |
42.44 |
|
sign(dp or numeric) |
(same as input) |
sign of the argument (-1, 0, +1) |
sign(-8.4) |
-1 |
|
sqrt(dp or numeric) |
(same as input) |
square root |
sqrt(2.0) |
1.4142135623731 |
|
trunc(dp or numeric) |
(same as input) |
truncate toward zero |
trunc(42.8) |
42 |
|
trunc(v numeric, s int) |
numeric |
truncate to s decimal places |
trunc(42.4382,2) |
42.43 |
Тригонометричні функції |
||
Function |
Description |
|
acos(x) |
inverse cosine |
|
asin(x) |
inverse sine |
|
atan(x) |
inverse tangent |
|
atan2(y, x) |
inverse tangent of y/x |
|
cos(x) |
cosine |
|
cot(x) |
cotangent |
|
sin(x) |
sine |
|
tan(x) |
tangent |
Рядкові функції та оператори |
|||||
Function |
Return Type |
Description |
Example |
Result |
|
string || string |
text |
String concatenation |
'Post' || 'greSQL' |
PostgreSQL |
|
string || non-string or non-string || string |
text |
String concatenation with one non-string input |
'Value: ' || 42 |
Value: 42 |
|
char_length(string) or character_length(string) |
int |
Number of characters in string |
char_length('jose') |
4 |
|
lower(string) |
text |
Convert string to lower case |
lower('TOM') |
tom |
|
overlay(string placing string from int [for int]) |
text |
Replace substring |
overlay('Txxxxas' placing 'hom' from 2 for 4) |
Thomas |
|
position(substring in string) |
int |
Location of specified substring |
position('om' in 'Thomas') |
3 |
|
substring(string [from int] [for int]) |
text |
Extract substring |
substring'(Thomas' from 2 for 3) |
hom |
|
trim([leading | trailing | both] [characters] from string) |
text |
Remove the longest string containing only the characters (a space by default) from the start/end/both ends of the string |
trim(both 'x' from 'xTomxx') |
Tom |
|
upper(string) |
text |
Convert string to uppercase |
upper('tom') |
TOM |
|
Додаткові рядкові функції |
|||||
Function |
Return Type |
Description |
Example |
Result |
|
ascii (string) |
int |
ASCII code of the first character of the argument. For UTF8 returns the Unicode code point of the character. For other multibyte encodings. the argument must be a strictly ASCII character. |
ascii('x') |
120 |
|
chr(int) |
text |
Character with the given code. For UTF8 the argument is treated as a Unicode code point. For other multibyte encodings the argument must designate a strictly ASCII character. The NULL (0) character is not allowed because text data types cannot store such bytes. |
chr(65) |
A |
|
initcap(string) |
text |
Convert the first letter of each word to uppercase and the rest to lowercase. Words are sequences of alphanumeric characters separated by non-alphanumeric characters. |
initcap('hi THOMAS') |
Hi Thomas |
|
length(string) |
int |
Number of characters in string |
length('jose') |
4 |
|
repeat(string text, number int) |
text |
Repeat string the specified number of times |
repeat('Pg', 4) |
PgPgPgPg |
|
replace(string text, from text, to text) |
text |
Replace all occurrences in string of substring from with substring to |
replace('abcdefabcdef', 'cd', 'XX') |
abXXefabXXef |
|
strpos(string, substring) |
int |
Location of specified substring (same as position(substring in string), but note the reversed argument order) |
strpos('high', 'ig') |
2 |
|
substr(string, from [, count]) |
text |
Extract substring (same as substring(string from from for count)) |
substr('alphabet', 3, 2) |
ph |
4.3 Пошук за шаблоном
4.3.1 Оператор LIKE
Здійснює пошук за шаблоном.
Синтаксис:
string LIKE pattern [ESCAPE escape-character]
string NOT LIKE pattern [ESCAPE escape-character]
Тут pattern - означає шаблон.
4.3.2 Оператор SIMILAR TO
Синтаксис:
string SIMILAR TO pattern [ESCAPE escape-character]
string NOT SIMILAR TO pattern [ESCAPE escape-character]
Аналогічний до LIKE за винятком того, що шаблон інтерпретується як SQL-стандартний регулярний вираз.
Теж можна використовувати метасимволи «_» і «%»
Крім цього підтримуються такі метасимволи:
| - задає альтернативу;
* - задає повторення нуль чи більше разів;
+ - задає повторення один чи більше разів;
() - можуть використовуватись для групування;
[...] - задають множину символів які можуть зустрічатись.
Як і у LIKE обернений слеш (\) відміняє дію метасимволу, який інтерпретується як символ.
'abc' SIMILAR TO 'abc' |
true |
|
'abc' SIMILAR TO 'a' |
false |
|
'abc' SIMILAR TO '%(b|d)%' |
true |
|
'abc' SIMILAR TO '(b|c)%' |
false |
4.3.3 POSIX - регулярні вирази
Регулярний вираз (шаблон) - це рядок, який заданий відповідно до набору спеціальних синтаксичних правил і, який описує або збігається з множиною рядків тексту.
Для співставлень з регулярними виразами використовуються такі оператори:
Operator |
Description |
Example |
|
~ |
Matches regular expression, case sensitive Співставлення з регулярним виразом (з врахуванням регістру символів) |
'thomas' ~ '.*thomas.*' |
|
~* |
Matches regular expression, case insensitive Співставлення з регулярним виразом (без врахування регістру символів) |
'thomas' ~* '.*Thomas.*' |
|
!~ |
Does not match regular expression, case sensitive Заперечення співставлення з регулярним виразом (з врахуванням регістру символів) |
'thomas' !~ '.*Thomas.*' |
|
!~* |
Does not match regular expression, case insensitive Заперечення співставлення з регулярним виразом (без врахування регістру символів) |
'thomas' !~* '.*vadim.*' |
5. Мова SQL - вибірка даних
Вибірка даних здійснюється за допомогою основного та найбільш функціонального оператора:
5.1 Оператор SELECT
Оператор SELECT - дозволяє проводити вибірки даних з однієї чи декількох таблиць і перетворювати до потрібного вигляду отримані результати які, як правило, представляються у вигляді таблиці.
Синтаксис оператора:
SELECT [ ALL | DISTINCT ] * |
<ім'я таблиці>.* |
[ <ім'я таблиці>.]<назва поля> [AS <псевдонім>] [, …] |
<вираз> [AS <псевдонім>] [, …]
[ FROM
<ім'я таблиці> [, …] ]
[WHERE …]
[GROUP BY …]
[HAVING …]
[ORDER BY …] ;
ALL | DISTINCT - предикати, які використовуються для обмеження числа записів, що повертаються. За замовчуванням використовується ALL (повертає усі значення), якщо предикати відсутні. DISTINCT - виключає записи, що містять значення, які повторюються у всіх вибраних полях. Впливає на результат тоді, коли у запиті аналізуються не всі поля з таблиці. Символ «*» означає, що вибрані всі поля заданої таблиці або таблиць. Параметр <ім'я таблиці> - назва таблиці, з якої потрібно вибрати записи, <назва поля> - назва поля, з якого вибирають дані; якщо ж задано декілька полів, то дані вибираються у визначеному порядку, AS - задає нову назву заголовка стовпця у запиті, <псевдонім> - назва, що буде заголовком стовпця замість початкового.
Даний оператор не змінює дані у БД, де відбувається вибір. У найпростішому випадку дію оператора SELECT можна сформулювати так: вибрати <елемент> із <джерела>.
5.1.1 Фраза FROM
Фраза FROM міститься у операторі SELECT і є обов'язковою у випадку вибірки даних хоча б з однієї чи кількох таблиць. Дана фраза може бути опущена у вибірках результатів із деяких виразів чи функцій, наприклад SELECT 2+3;
Порядок таблиць у виразі не важливий -- більшість сучасних СУБД проводять попередній аналіз та планування оптимізації виконання запиту.
Синтаксис:
FROM <ім'я таблиці> [, …];
Тут <ім'я таблиці> - назва таблиці, з якої потрібно вибрати записи.
Приклади.
Розглянемо таблицю Students (табл.1), яка складається з п'яти полів і п'яти записів: Num містить ідентифікаційні номери студентів; Surname - прізвища студентів; Name - імена студентів; Age - вік студентів; Speciality - спеціальність, на якій студент навчається.
Таблиця 1
Num |
Surname |
Name |
Age |
Speciality |
|
1 |
Крупик |
Віктор |
19 |
Інформатика |
|
2 |
Прапій |
Степан |
19 |
Інформатика |
|
3 |
Працків |
Оксана |
18 |
Інформатика |
|
4 |
Селань |
Віктор |
20 |
Математика |
|
5 |
Ятрів |
Олег |
17 |
Інформатика |
|
6 |
Петрів |
Назар |
20 |
Дана таблиця буде використовуватись при розгляді решти прикладів.
Приклад 1.
Вивести всі значення таблиці Students.
Запит матиме вигляд:
SELECT * FROM Students;
Результат - табл. 2
Таблиця 2
Num |
Surname |
Name |
Age |
Speciality |
|
1 |
Крупик |
Віктор |
19 |
Інформатика |
|
2 |
Прапій |
Степан |
19 |
Інформатика |
|
3 |
Працків |
Оксана |
18 |
Інформатика |
|
4 |
Селань |
Віктор |
20 |
Математика |
|
5 |
Ятрів |
Олег |
17 |
Інформатика |
|
6 |
Петрів |
Назар |
20 |
Приклад 2.
Інший варіант реалізації прикладу 1.
SELECT
Num, Surname, Name, Age, Speciality
FROM
Students;
Даний запит також виводить усі значення таблиці Students (табл.1).
Результат - табл. 2
Приклад 3.
Вивести тільки значення поля Age (вік студентів), з новою назвою заголовка стовпця s_age.
Запит матиме вигляд:
SELECT
Age AS s_age
FROM
Students;
Результат - табл. 3
Таблиця 3
s_age |
|
19 |
|
19 |
|
18 |
|
20 |
|
17 |
|
20 |
Для отримання переліку даних без повторень, використовують оператор DISTINCT.
Приклад 4.
Вивести якого віку є студенти у таблиці Students.
Запит матиме вигляд:
SELECT DISTINCT
Age
FROM
Students;
Результатом дії будуть унікальні дані (табл. 5).
Таблиця 5
Age |
|
17 |
|
18 |
|
19 |
|
20 |
В команді SELECT можуть міститись не тільки імена стовпців таблиці чи таблиць, але і обчислювальні вирази.
Приклад 5.
Вивести прізвища студентіві їх вік у місяцях вважаючи, що у таблиці вказаний повний рік (12 місяців).
Запит матиме вигляд:
SELECT
Surname, Age*12, ' місяців '
FROM
Students;
5.1.2 Фраза WHERE
Фраза WHERE є необов'язковою. Дана фраза визначає умову вибірки результуючих рядків. Якщо фраза WHERE не включена у запит, то результатом будуть усі результуючі рядки. Якщо в запиті використовуються декілька таблиць і фраза WHERE відсутня, то результатом буде скалярний добуток таблиць.
Синтаксис: [WHERE <умова>]
де <умова> - умова або умови вибору значень із поля чи полів які включають операції відношення, логічні операції, функції тощо.
Приклад 6.
Вибрати прізвища студентів, яким є дев'ятнадцять років. Для цього використаємо фразу WHERE.
Запит матиме вигляд:
SELECT
Surname, Age
ROM
Students
WHERE
Age=19;
Результат - табл. 6
Таблиця 6
Surname |
Age |
|
Крупик |
19 |
|
Прапій |
19 |
Приклад 7.
Вибрати студентів, що поступили на інформатику і яким менше 19 років.
Запит матиме вигляд:
SELECT
Surname, Age, Speciality
FROM
Students
WHERE
Speciality='Інформатика' AND Age<19;
Результат - табл. 7
Таблиця 7
Surname |
Age |
Speciality |
|
Працків |
18 |
Інформатика |
|
Ятрів |
17 |
Інформатика |
Приклад 8.
Вивести прізвища всіх студентів для яких не задана спеціальність.
Запит матиме вигляд:
SELECT
Surname, Age, Speciality
FROM
Students
WHERE
Speciality is null
Результат - табл.8
Таблиця 8
Surname |
Age |
Speciality |
|
Ціпій |
20 |
Якщо потрібно вивести прізвища студентів із визначеними спеціальностями, то запит матиме вигляд:
SELECT
Surname, Age, Speciality
FROM
Students
WHERE
Speciality is not null
Приклади використання функцій between і in у запитах.
Select * from Students where Age between 17 and 19;
Select * from Students where Age in (17,19);
5.1.3 Фраза GROUP BY
Фраза GROUP BY є необов'язковою. Використовується при формуванні підсумкових запитів і об'єднує записи з однаковими значеннями у вказаному списку полів в один запис. Дозволяє застосовувати агрегатні функції до кожної групи, яка визначається загальним значенням поля або полів, вказаних в цій фразі.
Синтаксис:
[GROUP BY
[<таблиця>.]<назва поля> [,…] ]
Параметр <таблиця> можна не використовувати у тих випадках, коли користувач працює з однією таблицею.
Параметр <назва поля> - поле, по якому відбувається групування. Йому може передувати ім'я таблиці, якщо вибір виконується більше ніж з однієї таблиці.
Приклад 9.
Підрахувати кількість студентів на кожній із спеціальностей і вивести назву спеціальності і кількість студентів на ній. Для зручності скористаємось реченням GROUP BY.
Запит матиме вигляд:
SELECT
Speciality, COUNT(Speciality)
FROM
Students
GROUP BY
Speciality;
Тут функція Count повертає кількість записів у групі.
Результат - табл. 9
Таблиця 9
Speciality |
COUNT(Speciality) |
|
Інформатика |
4 |
|
Математика |
1 |
5.1.4 Фраза HAVING
Фраза HAVING є необов'язковою. Після того, як записи будуть згруповані за допомогою GROUP BY, фраза HAVING відбере ті значення з отриманих записів, що задовольнять умовам вибірки, які вказані у HAVING.
Синтаксис:
[HAVING <умова>]
Параметр <умова> - умова або умови відбору значень із отриманих записів.
Приклад 10.
Видати назви спеціальностей на які поступило більше трьох людей та точну їх кількість. Для цього у GROUP BY застосуємо HAVING.
Запит матиме вигляд:
SELECT
Speciality, COUNT(Speciality)
FROM
Students
GROUP BY
Speciality
HAVING
COUNT(Speciality)>3;
Результат - табл. 10
Таблиця 10
Speciality |
COUNT(Speciality) |
|
Інформатика |
4 |
5.1.5 Фраза ORDER BY
Фраза ORDER BY є необов'язковою. Дана фраза сортує результуючі записи, що отримані після виконання запиту за зростанням або спаданням указаних полів чи поля. Його необхідно вказувати для сортування результату запиту. За замовчуванням задано порядок сортування за зростанням.
Синтаксис:
[ ORDER BY
{ <назва поля> [ ASC | DESC ] } [,…]]
<назва поля> - поле, за яким відбувається сортування. ASC (DESC) - зареєстровані слова для розташування елементів у зростаючому (спадному) порядку.
Приклад 11.
Вивести на екран всю інформацію про студентів, яка відсортована у спаданні за віком студентів, а потім у зростанні за їх прізвищами.
Запит матиме вигляд:
SELECT *
FROM
Students
ORDER BY
Age DESC, Surname ASC;
Результат - табл. 11
Таблиця 11
Num |
Surname |
Name |
Age |
Speciality |
|
6 |
Петрів |
Назар |
20 |
||
4 |
Селань |
Віктор |
20 |
Математика |
|
1 |
Крупик |
Віктор |
19 |
Інформатика |
|
2 |
Прапій |
Степан |
19 |
Інформатика |
|
3 |
Працків |
Оксана |
18 |
Інформатика |
|
5 |
Ятрів |
Олег |
17 |
Інформатика |
5.2 Операція JOIN -- об'єднання таблиць
Для задання об'єднання кількох таблиць у фразі FROM виконують операцію JOIN. Якщо в результат вибірки необхідно включити всі рядки з обох таблиць, що задовольняють умові вибірки, використовується операція INNER JOIN.
Синтаксис: FROM
<таблиця1> [AS <,псевдонім>]
[ INNER | LEFT | RIGHT | FULL ] JOIN
<таблиця2> [AS ,псевдонім>]
ON
{<таблиця1>.<поле1>} <операція> {<таблиця2>.<поле2>}
Тут <таблиця1>, <таблиця2> - імена таблиць, записи яких підлягають об'єднанню; <поле1>, <поле2> - імена полів, що об'єднуються; якщо поля не є числовими, то повинні мати однаковий тип даних і містити дані одного виду; поля можуть мати різні імена, <операція> - будь-яка операція порівняння. Нехай дано дві таблиці Т1 і Т2:
T1
F1 |
F2 |
|
A |
100 |
|
B |
101 |
|
C |
102 |
|
D |
103 |
T2
F3 |
F4 |
|
B |
200 |
|
C |
201 |
|
F |
202 |
|
G |
203 |
Задамо запит:
SELECT *
FROM
T1 join T2 on T1.F1=T2.F3 ;
Результатом такого запиту буде таблиця 12:
Таблиця 12
F1 |
F2 |
F3 |
F4 |
|
B |
101 |
B |
200 |
|
C |
102 |
C |
201 |
Операція LEFT JOIN використовується для створення лівого зовнішнього об'єднання, при якому всі записи з першої (лівої) таблиці включаються в динамічний набір, навіть якщо в другій (правій) таблиці немає відповідних до них записів. Якщо у лругій таблиці, з якою виконується з'єднання, не має відповідних рядків, то замість значень її полів додається значення Null.
Задамо запит:
SELECT *
FROM
T1 left join T2 on T1.F1=T2.F3
Результат - табл.13
Таблиця 13
F1 |
F2 |
F3 |
F4 |
|
A |
100 |
null |
null |
|
B |
101 |
B |
201 |
|
C |
102 |
C |
202 |
|
D |
103 |
null |
null |
Операція RIGHT JOIN використовується для створення правого зовнішнього об'єднання, при якому всі записи з другої (правої) таблиці включаються в динамічний набір, навіть якщо в першій (лівій) таблиці немає відповідних до них записів. Якщо у першій таблиці, з якою виконується з'єднання, не має відповідних рядків, то замість значень її полів додається значення Null.
Операції JOIN можуть бути вкладеними.
Синтаксис:
SELECT <поля>
FROM
<таблиця1> INNER JOIN ( <таблиця2> INNER JOIN
[ ( ] <таблиця3> [INNER JOIN
[ ( ] <таблицяX> [INNER JOIN…)]
[ ON <таблиця3>.<поле3> <операція> <таблицяХ>.<полеХ> ]
[ ON <таблиця2>.<поле2> <операція> <таблиця3>.<поле3>) ]
ON <таблиця1>.<поле1> <операція> <таблиця2>.<поле2>;
5.3 Вкладені підзапити
SQL дозволяє використовувати одні запити всередені інших запитів, тобто вкладати один запит у інший. При цьому верхнього рівня оператор SELECT використовує результат внутрішнього оператора SELECT для визначення отримання кінцевого результату всього запиту. Внутрішні оператори можуть бути розміщені у реченнях WHERE і HAVING і в такому разі отримують назву підзапитів, або вкладених запитів. Крім того, внутрішні оператори SELECT можуть використовуватись в операторах INSERT, UPDATE і DELETE.
Існує три типи підзапитів, а саме:
с скалярний підзапит який повертає значення вибране із перетину одного стовпця і одного запису чи результату виразу;
с рядковий підзапит який повертає значення декількох стовпців таблиці у вигляді одного рядка;
с табличний підзапит який повертає значення одного чи більше стовпців таблиці розміщених у більше ніж одному рядку.
При побудові підзапитів потрібно дотримуватись наступних правил і обмежень:
1. У підзапитах не повинна використовуватись фраза ORDER BY, хоча вона може бути присутня у зовнішньому запиті.
2. Список у визначенні SELECT підзапиту повинні складатись із імен окремих стовпців або складених із них виразів за виключенням того випадку, коли у підзапиті використовується ключове слово EXIST. Дане слово використовується тільки разом із підзапитом і результатом його дії є логічне значення True чи False. Істина буде в тому випадку коли у результуючій таблиці підзапиту присутній хоча би один рядок.
3. За замовчуванням імена стовпців у підзапиті відносяться до таблиці, ім'я якої вказано у фразі FROM.
4. Якщо підзапит є одним із двох операндів, які беруть участь в операції порівняння, то підзапит повинен бути вказаний у правій частині даної операції.
5. У вкладених підзапитах використовується предикат IN ( Select … From … Where … IN).
6. У підзапитах, які повертають один стовпець числових значень, можуть використовуватись ключові слова ALL і ANY.
Якщо підзапиту буде передувати ключове ключове слово ALL, то умова порівняння вважається виконаною тільки в тому випадку, якщо воно виконується для всіх значень у результуючому стовпці підзапиту.
Якщо запиту, підзапиту передує ключове слово ANY, то умова порівняння буде вважатись виконаною, якщо вона виконується хоча би для одного із значень у результуючому стовпці підзапиту. Якщо в результаті виконання підзапиту буде отримано порожнє значення, то для слова ALL умова порівняння буде вважатись виконаною, а для ANY ні.
Приклад 12.
Вибрати прізвища студентів, вік яких дорівнює мінімальному.
Запит матиме вигляд:
SELECT
Surname, Age
FROM
Students
WHERE
Age = ( SELECT MIN(Age) FROM Students );
У даному запиті спочатку вибереться мінімальний вік студентів, а тоді прізвища всіх студентів із мінімальним віком.
Вкладений підзапит працює наступним чином:
1. вибирається рядок з таблиці, назва якого вказана у зовнішньому запиті;
2. виконується підзапит і отримане значення застосовується для аналізу цього рядка в умові речення WHERE зовнішнього запиту;
3. за результатами оцінки умови приймається рішення про включення або не включення рядка у склад вихідних даних;
4. аналогічно процедура виконується для наступного рядка таблиці зовнішнього запиту.
У мові SQL можна використовувати стандартні операції над множинами, а саме: об'єднання, перетин і різниця, які дозволяють комбінувати результати виконання двох і більше запитів в одну результуючу таблицю.
На таблиці, які можуть комбінуватись з допомогою операцій над множинами накладаються певні обмеження, а саме:
- вони повинні мати одну і ту ж структуру, тобто одну і ту ж кількість стовпців;
- у відповідних стовпцях повинні міститись дані однакового типу і довжини.
5.4 Операція UNION
Дана операція створює запит на об'єднання, що поєднує результати кількох незалежних запитів.
Синтаксис:
<запит1> [ UNION [ALL] <запит2> […] ];
<запит1>, <запит2> - інструкція SELECT.
Всі запити, включені в операцію UNION, повинні відбирати однакове число полів.
Приклад 13. Об'єднати два запити, один з яких вибирає прізвище та ім'я із таблиці Students, а другий із відповідних двох полів P1і P2 із таблиці NTab:
SELECT
Surname, Name
FROM
Students
UNION
SELECT
P1, P2
FROM
Ntab;
5.5 Оператор SELECT…INTO
Даний оператор формує запит на створення нової таблиці. У новій таблиці можна визначити ключове поле. При створенні нової таблиці поля у ній успадковують типи даних і розміри тільки базових полів.
Синтаксис:
SELECT
<назва поля> [, …]
INTO <нова таблиця>
FROM
<ім'я таблиці> [, …];
<назва поля> - поле, що копіюється у нову таблицю, <нова таблиця> - ім'я таблиці, що створюється. Запит на створення нової таблиці можна використати наприклад для створення резервних копій.
Приклад 13.
Створити нову таблицю з назвою Informatics із даними про студентів, що вчаться на спеціальності 'Інформатика'.
Запит матиме вигляд:
SELECT
Num, Surname...
Подобные документы
Основи безпеки даних в комп'ютерних системах. Канали проникнення та принципи побудови систем захисту. Ідентифікація і аутентифікація користувачів. Захист даних від несанкціонованого доступу. Технічні можливості зловмисника і засоби знімання інформації.
курс лекций [555,1 K], добавлен 05.12.2010Використання баз даних та інформаційних систем. Поняття реляційної моделі даних. Ключові особливості мови SQL. Агрегатні функції і угрупування даних. Загальний опис бази даних. Застосування технології систем управління базами даних в мережі Інтернет.
курсовая работа [633,3 K], добавлен 11.07.2015Програми і мови програмування. Алфавіт мови програмування. Лексеми, зарезервовані слова мови Pascal. Ідентифікатори, типи даних. Арифметичні вирази, операції. Стандартні функції, структура програми. Процедури введення-виведення. Правила написання команд.
лекция [445,0 K], добавлен 24.07.2014Дослідження криптографічних методів захисту даних від небажаного доступу. Основи безпеки даних в комп'ютерних системах. Класифікаційні складові загроз безпеки інформації. Характеристика алгоритмів симетричного та асиметричного шифрування інформації.
курсовая работа [245,8 K], добавлен 01.06.2014Основи технології запису на оптичні диски. Довготривале зберігання інформації на оптичних носіях. Дослідження існуючих програмних і технічних засобів шифрування даних. Можливі рішення проблем і попередження злому. Програмні засоби шифрування даних.
дипломная работа [4,0 M], добавлен 27.01.2012Бізнес процеси й елементи даних. Специфікація елементів даних. Діаграма класів проектування. Створення та використання об'єктів бази даних. Таблиці, обмеження цілісності, тригери, типові вибірки, представлення, індекси. Типові оператори модифікації даних.
курсовая работа [255,3 K], добавлен 01.06.2019Поняття та переваги реляційної бази, автоматизація аналізу даних. Опис основних компонентів сховища даних AS/400. Процес перетворення оперативних даних в інформаційні. Багатовимірні бази даних (MDD). Опис даних і створення файлів в інтеграційних базах.
реферат [36,8 K], добавлен 14.01.2012Характеристика мови програмування VBA (Visual Basic for Application): можливості й засоби. Використання редактора Visual Basic. Створення та виконання VBA-програм. Типи даних, змінні й константи, операції й вирази. Керуючі оператори, процедури й функції.
реферат [29,9 K], добавлен 28.06.2011Форми вихідних документів. Перелік запитів до бази даних. Побудова інфологічної моделі, її структурні компоненти: сутності, зв’язки та відносини. Перелік таблиць, опис запитів. Загальна характеристика та головний зміст форм розроблюваної бази даних.
курсовая работа [414,5 K], добавлен 31.01.2014Проектування бази даних, що реалізує звіти про графік робіт на об’єктах впродовж місяця. Графічне зображення нагромаджувачів даних. Побудова діаграм потоків даних і переходів станів, таблиць у вигляді двовимірного масиву, запитів. Створення бази даних.
курсовая работа [1,2 M], добавлен 29.02.2012Архітектура Web-баз даних. Загальні відомості про мову SQL. Створення таблиць баз даних. Використання бібліотеки для пошуку інформації. Аутентифікація за допомогою РНР й MySQL. Зберігання паролів в окремому файлі на сервері, використання бази даних.
курсовая работа [913,8 K], добавлен 12.01.2010Схема взаємодії учасників платіжної системи з використанням пластикових карток. Вхідні та вихідні повідомлення для проектування бази даних для автоматизації аналізу користувачів пластикових карток. Проектування та реалізація бази даних у MS Access.
курсовая работа [3,0 M], добавлен 27.12.2013Засоби доступу до БД в середовищі Lazarus. Створення і робота з таблицями за допомогою DBase. Набір візуальних компонентів LCL в Lazarus. Основні переваги останньої версії InterBase. Основи створення нової таблиці бази даних програмного забезпечення.
курсовая работа [49,5 K], добавлен 23.11.2010Проектування бази даних та інтерфейсу програми. Розробка бази даних за допомогою Firebird 2.5. Контроль коректності вхідних та вихідних даних. Додавання та редагування інформації. Вплив електронно-обчислювальних машин на стан здоров'я користувачів.
дипломная работа [4,7 M], добавлен 12.10.2015Вивчення інтерфейсу, архітектури, функцій (генерування криптографічних послідовностей випадкових чисел, операції із електронним підписом) бібліотеки CryptoAPI. Розгляд способів ідентифікації та аутентифікації як захисту від несанкціонового доступу.
реферат [502,9 K], добавлен 06.04.2010Договірна діяльність організацій як предмет проекту створення бази даних. Основні етапи роботи з Microsoft Access зі створення бази даних. Мінімальний список характеристик, які потрібно врахувати в ході роботи. Ознайомлення з основними об'єктами СУБД.
лабораторная работа [1,7 M], добавлен 21.04.2011Основні відомості про реляційні бази даних, система управління ними. Основні директиви для роботи в середовищі MySQ. Визначення та опис предметної області. Створення таблиць та запитів бази даних автоматизованої бази даних реєстратури в поліклініці.
курсовая работа [2,9 M], добавлен 06.11.2011Опис основних кроків створення бази даних по автомобілям у програмі Microsoft Access, та запитів. Порядок формування таблиць, їх зміст і структура, встановлення зв'язків між таблицями. Операції, що проводяться над таблицями. Правила оформлення звіту.
практическая работа [1,1 M], добавлен 27.05.2010Методи використання предикатів Cut, Fail. Організація циклу (repeat), складання програми. Алгоритм роботи зі списками та рядками. Елементарні операції і базові функції мови програмування Лісп. Робота зі складними типами даних на прикладі бази даних АТС.
контрольная работа [219,3 K], добавлен 17.06.2011Основні поняття та особливості розробки баз даних в Microsoft Access. Побудова бази даних магазину побутової техніки: створення таблиць та встановлення зв’язків між ними, створення запитів, форм та звітів. Охорона праці і гігієна користувача комп'ютера.
курсовая работа [2,5 M], добавлен 19.01.2010