SQL заявки; през няколко таблици

Свързване на таблици - присъединете се

Релационните бази данни обикновено се състоят от голям брой таблици. В SQL заявка често искате данни, които идват от различни таблици. За да направите това, таблиците трябва да бъдат свързани. Такива връзки се наричат Присъединява се.

няколко

Таблиците са свързани чрез посочване на таблиците, включени в клаузата FROM. Атрибутите, които идват от различни таблици, често имат идентични имена. Ако такъв атрибут се използва в SQL заявката, името на таблицата също трябва да бъде посочено. Единият пише: име на таблица.име на атрибут.

Името на атрибута Name е двусмислено. Той описва имената на учителите, от една страна, и класа от друга. В нашия пример името на класа трябва да бъде адресирано с Class.Name, а името на учителя с Teacher.Name.

коментар Ако името на колоната е уникално, няма нужда да поставяте името на таблицата отпред.

Следващата заявка показва принципа. Значението на клаузата WHERE е обяснено по-подробно по-долу.

Имената на таблиците могат да бъдат преименувани в рамките на клаузата FROM. За това SQL предоставя ключовата дума КАТО налични, но не непременно използвани. Възможна е например следната формулировка на горното искане:

ИЗБЕРЕТЕ l.name, k.name
ОТ Учител КАТО л, клас КАТО к
КЪДЕТО l.PersNr = k.клас управление;

ИЗБЕРЕТЕ l.name, k.name
ОТ Учител l, клас k
КЪДЕТО l.PersNr = k.клас управление;

Тъй като PersNr и управлението на класове са уникални имена на атрибути, клаузата WHERE може да бъде и:

КЪДЕ PersNr = ръководител на класа

Имената на таблиците могат да бъдат преименувани в рамките на клаузата FROM. За това SQL предоставя ключовата дума КАТО налични, но не непременно използвани. Възможна е например следната формулировка на горното искане:

ИЗБЕРЕТЕ стр. Име, на стая №
ОТ професор КАТО п, дежурна стая КАТО д
КЪДЕТО p.PersNr = d.PersNr;

ИЗБЕРЕТЕ стр. Име, т.е. стая №
ОТ професор п, кабинет d
КЪДЕТО p.PersNr = d.PersNr;

Тъй като name и RaumNr са уникални имена на атрибути, клаузата SELECT също може да бъде:

ИЗБЕРЕТЕ име, номер на стая

Значение на клаузата WHERE

Пропускането на клаузата WHERE в горния пример води до следния резултат:

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

С помощта на клаузата WHERE могат да бъдат посочени условия за равенство, които изключват безсмислени или безсмислени комбинации.

Самоприсъединяване

Понякога таблица е свързана със себе си. Това конкретно присъединяване се нарича Самоприсъединяване.

ИЗБЕРЕТЕ Име, предмет
ОТ Учител, има_учителска квалификация
КЪДЕТО PersNr = учител;
База данни за упражнения

ИЗБЕРЕТЕ Фамилия
ОТ Учител, има специализиран надзор
КЪДЕТО PersNr = учител И Тема = 'немски';
База данни за упражнения

ИЗБЕРЕТЕ л. име
ОТ Учител l, студент, is_Fachlehrkraft_von i
КЪДЕТО в клас = s.gehoert_zu И и.учител = 1-во лице бр И s.Name = 'Falbala';
База данни за упражнения

ИЗБЕРЕТЕ учител
ОТ ist_fachlehrkraft_von a, ist_fachlehrkraft_von b
КЪДЕТО а.учител = б.учител И a.class = b.class И НЕ (a.Fach = b.Fach);
База данни за упражнения


Това е самостоятелно присъединяване, защото таблицата is_teacher_of е присъединена към себе си.

Крия