I. Основи на субд 2



страница9/14
Дата23.02.2017
Размер1.28 Mb.
#15584
1   ...   6   7   8   9   10   11   12   13   14

7.Релационен език SQL

7.1.Въведение


SQL:

  • конкретна реализация на релационния модел;

  • стандарт за релационни езици;

  • поддържа се от повечето развойни системи, които са днес на пазара;

  • огромен език, стандартната му документация е над 600 страници.

Ще разгледаме едно ядро на езика, което съдържа основните му аспекти, като имаме предвид, че ще разгледаме съвременния стандарт на езика, познат като SQL/92. Официалното му име - International Standard Database Language SQL (1992).

  • никой продукт не поддържа пълния SQL/92;

  • в SQL се използват понятията:

    • таблица (за релация);

    • ред (за запис);

    • колона (за атрибут).

7.2.Дефиниране на данни


В този раздел ще се запознаем с DDL-операторите на езика SQL. DDL (Data Definition Language) - компонент на SQL за дефиниране на базовите обекти от данни. От гледна точка на потребителите основните DDL-оператори са следните:

  • CREATE TABLE

  • CREATE DOMAIN

  • ALTER DOMAIN

  • ALTER TABLE

  • DROP TABLE

  • DROP DOMAIN

7.2.1.Домейни


SQL домейните се различават значително от тези на релационния модел - единственото предназначение на домейните в SQL е да разрешават една проста спецификация на типовете данни, така че веднъж дефинирани да могат да се използват за различни колони в различни таблици.

Основни разлики между РМ-домейн и SQL-домейн:



  • SQL-домейн - синтактично съкращение;

  • не се изисква непременно да се използват SQL-домейни. Колоните могат да се дефинират директно;

  • в SQL не се поддържа домейн върху домейн - SQL-домейн съдържа само елементи от системните типове на данни;

  • SQL не поддържа възможност за дефиниране на операции, които се прилагат върху даден домейн;

  • SQL не поддържа концепцията за:

    • подтипове;

    • супертипове;

    • наследяване.

Синтаксис на оператора:

Обяснение:



  • SQL поддържа следните скаларни типове данни:

    • CHARACTER [VARYING]

    • BIT [VARYING]

    • NUMERIC

    • DECIMAL

    • INTEGER

    • SMALLINT

    • FLOAT

    • REAL

    • DOUBLE PRECISION

    • DATE

    • TIME

    • TIMESTAMP

    • INTERVAL

Типовете данни CHARACTER и CHARACTER VARYING са наричани типове данни за последователност от символи.

BIT и BIT VARYING са за последователност от битове.

NUMERIC, DECIMAL, INTEGER, и SMALLINT са типове за числа с определена точност.

FLOAT, REAL, и DOUBLE PRECISION са типове за числа с приблизителна точност (закръгление).

DATE, TIME, и TIMESTAMP са типове за дата и час.

INTERVAL е тип данни за интервал от време.



  • default-definition (опционална) - стойност по подразбиране, която се приема за всяка колона, дефинирана върху областта. Задава се като :

DEFAULT default

където default може да бъде:



    • литерал;

    • стандартна функция без аргументи - напр. CURRENT_TIME;

    • NULL.

  • domain constraint definitions - множества от ограничения за цялостност, които се прилагат върху всяка колона, дефинирана върху домейна. Обикновено е изброяване на стойности.


Във всеки ред:

  • стойност по подразбиране за атрибута COLOR - ‘Син’;

  • при въвеждане стойност, която не е елемент от VALID_COLORS ограничението, системата отчита грешка.

Един съществуващ домейн може да бъде променян по всяко време с помощта на оператора

ALTER DOMAIN

който добавя нови или изтрива стари стойности по подразбиране и/или ограничения.

Един съществуващ домейн може да бъде изтриван посредством



RESTRICT - операцията е грешна, ако домейнът се използва

CASCADE - изтрива се навсякъде

7.2.2.Базови таблици


Една базова таблица е един (важен) специален случай на по-общата концепция "таблица".

За създаване на таблици общият формат на оператора е следният:


CREATE TABLE base-table (base-table-element-commalist);
base-table-element ::= column-definition | base-table-constraint-definition
column-definition ::= column representation [default-definition]
column representation ::= тип данни или домейн
default-definition ::= препокрива, ако има такива за домейна
base-table-constraint-definition:

  • дефиниция на външен ключ;

FOREIGN KEY (column-commalist)

REFERENCES base-table [ (column-commalist) ]

[ ON DELETE option ]

[ ON UPDATE option ]
option ::= NO ACTION | CASCADE | SET NULL | SET DEFAULT

кореспондиращи съответно с режимите:

NO ACTION – RESTRICTED

CASCADE – CASCADES

SET NULL – NULLIFIES

SET DEFAULT - стойности по подразбиране



  • дефиниция на check constraints

CHECK (conditional-expression)

Съществуващите базови таблици могат да бъдат променяни по всяко време:



  • добавяне на нова колона;

  • нова стойност по подразбиране за съществуваща колона;

  • изтриване на съществуваща стойност по подразбиране;

  • изтриване на съществуваща колона;

  • специфициране на ново ограничение за цялостност;

  • изтриване на съществуващо ограничение.

Пример: ALTER TABLE LECTURER ADD COLUMN YEARS_WORD INTEGER DEFAULT 0;


Съществуваща базова таблица може да бъде изтрита:

DROP TABLE base-table option;


option ::= RESTRICT | CASCADE

RESTRICT – операцията не се извършва ако таблицата се реферира в дефиниции на VIEW или в ограничение;

CASCADE – изтрива се навсякъде.

7.3.Опериране с данните - операции за извличане


Вторият компонент на SQL е Data ManipulationManipulation Language (DML). SQL поддържа 4 DML-опрератора:

  • SELECT

  • UPDATE

  • DELETE

  • INSERT

Операциите за извличане на данни са релационни изрази с различна сложност.

Общата форма на оператора е:



Ще ги демонстрираме с помощта на различни примери, в които ще демонстрираме оператори за сравнение в SQL - { =, <>, <, >, <=, >= }.

Най-общо, в оператора SELECT могат да се използват изрази, включващи имена на полета, константи и основните аритметични оператори (+,-,*,/), при които могат да се използват и скоби.



SQL поддържа едно множество от агрегиращи функции:



  • COUNT;

  • SUM;

  • AVG;

  • MAX;

  • MIN.

Ограничения към тях:



  • аргументът на функциите може да бъде опционно предшестван от ключовата дума DISTINCT, за да се изиска дубликатите да бъдат елиминирани преди да се приложи функцията;

  • за функцията COUNT(*) - DUSTINCT не е разрешена;

  • нулевите стойности на аргументите винаги се елиминират преди да се приложат функциите, независимо от това дали е зададен DISTINCT.








7.4.Update оператори


Това са операторите:

  • INSERT;

  • UPDATE;

  • DELETE.

7.4.1.INSERT


INSERT

INTO table [ ( field [, field] ... ) ]

VALUES ( constant [, constant ] ... );

или


INSERT

INTO table [ ( field [, field ] .. ) ]

SELECT ... FROM ... WHERE ... ;




7.4.2.UPDATE


UPDATE table

SET field = expr

[, field = expr ] ...

[ WHERE predicate ];


Всички записи от "table", които удовлетворяват "predicate", се модифицират посредством присвояването "field = expr".




Забележка: не е възможно да се промени повече от една таблица в един оператор.

7.4.3.DELETE


DELETE

FROM table

[ WHERE predicate ];
Всички записи, които удовлетворяват "predicate" се изтриват.




7.5.Индекси


Аналогично на базовите таблици индексите могат да се създават и изтриват с помощта на SQL-оператори за дефиниране на данни.
CREATE [ UNIQUE ] INDEX index-name

ON base-table-name ( column-name [ order ]

[, column-name [order ]] ... )

[ CLUSTER ];

Опцията CLUSTER означава, че индексът е групов. Дадена базова таблица може да има в един момент максимално един групов индекс.

Всеки "order" специфицира ASC (ascending) или DESC (descending), по подразбиране се приема ASC.

Пример: CREATE INDEX X ON T (P, Q DESC, R) създава индекс (обикновено В-дърво) с име X върху комбинацията от колони (P,Q,R) на базовата таблица Т. Входните точки се подреждат в нарастващи R-стойности вътре в намаляващи Q-стойности вътре в нарастващи P-стойности. За колоните P,Q,R не се изисква да бъдат:


  • съседни;

  • от един и същ тип;

  • с еднаква дължина.

Индексите се актуализират автоматично при всяка промяна в базовата таблица.

Опцията UNIQUE специфицира, че не се разрешава в индексната таблица да се поддържат две еднакви стойности за два различни записа.

Както вече казахме, индексите могат да се създават и изтриват по всяко време. Въпреки това, желателно е в горния пример те да бъдат създадени заедно с базовите таблици.

За една базова таблица могат да се създадат повече от един индекс.

Операторът за изтриване на индекси е следният:

DROP INDEX index-name;


7.6.Вграден SQL (Embedded SQL)


SQL - операторите могат да се използват:

  • интерактивно;

  • като част от приложна програма – SQL - операторите физически се вграждат в първичния код на програмата.

До сега разгледахме интерактивното използване на езика.

Като език за програмиране SQL обикновено не съществува самостоятелно, а е вграден в друг език за програмиране (приемник). Напр., вграден SQL/PL1, SQL/FORTRAN, SQL/C,...

Основен принцип на SQL - изразните му средства в интерактивен режим могат да се използват без ограничения в програмния режим.

Интерпретация:



  • вградените SQL оператори се маркират така, че те могат да бъдат различени от езика-приемник (host-language);

  • изпълним SQL - оператор може да се запише там, където се допуска изпълним оператор на базовия език;

  • SQL - операторите могат да включват обръщения към host-променливи;

  • host-променливите трябва да имат съвместими типове със съответните им SQL-полета.

7.6.1.Операции, включващи CURSORS


Нека разгледаме случая, когато SELECT избира група записи, а не само един. Това поражда известни проблеми при вградените SQL езици - езици като C, PL/1, COBOL,... не поддържат средства за обработка на повече от един запис в даден момент. От това следва, че е необходим механизъм, който позволява достъп до единичните записи от избраното множество. CURSORS доставят такъв механизъм. Те представляват структури, които съхраняват резултатния набор и когато искаме да извлечем данни от определен запис трябва да позиционираме указателя им на желания запис, след което да извлечем стойностите от полетата му. Курсорите обикновено се обхождат в цикъл.

Каталог: sites -> default -> files
files -> Образец №3 справка-декларация
files -> Р е п у б л и к а б ъ л г а р и я
files -> Отчет за разкопките на праисторическото селище в района на вуз до Стара Загора. Аор през 1981 г. ХХVІІ нац конф по археология в Михайловград, 1982
files -> Медии и преход възникване и развитие на централните всекидневници в българия след 1989 година
files -> Окръжен съд – смолян помагало на съдебния заседател
files -> Семинар на тема „Техники за управление на делата" 18 19 юни 2010 г. Хисар, Хотел „Аугуста спа" Приложение
files -> Чинция Бруно Елица Ненчева Директор Изпълнителен директор иче софия бкдмп приложения: програма
files -> 1. По пътя към паметник „1300 години България


Сподели с приятели:
1   ...   6   7   8   9   10   11   12   13   14




©obuch.info 2024
отнасят до администрацията

    Начална страница