SQL
Algebra relacyjna
Szukaj…
Przegląd
Relacyjna algebra nie jest pełnoprawnym językiem SQL , ale raczej sposobem na uzyskanie teoretycznego zrozumienia przetwarzania relacyjnego. Jako taki nie powinien zawierać odniesień do bytów fizycznych, takich jak tabele, rekordy i pola; powinien zawierać odniesienia do abstrakcyjnych konstrukcji, takich jak relacje, krotki i atrybuty. Mówiąc to, nie będę używać terminów akademickich w tym dokumencie i będę trzymać się bardziej znanych terminów laickich - tabel, zapisów i pól.
Kilka zasad algebry relacyjnej zanim zaczniemy:
- Operatory używane w algebrze relacyjnej działają na całych tabelach, a nie na pojedynczych rekordach.
- Wynikiem wyrażenia relacyjnego zawsze będzie tabela (nazywa się to właściwością zamknięcia )
W całym tym dokumencie będę odnosić się do następujących dwóch tabel:
WYBIERZ
Operator select zwraca podzbiór głównej tabeli.
wybierz <tabela> gdzie <warunek>
Na przykład sprawdź wyrażenie:
wybierz Osoby, w których DepartmentID = 2
Spowoduje to powstanie tabeli, której rekordy obejmują wszystkie rekordy w tabeli Ludzie, w których wartość DepartmentID jest równa 2:
Można również dołączyć warunki, aby dodatkowo ograniczyć wyrażenie:
wybierz Osoby, w których StartRok> 2005 i DepartmentID = 2
PROJEKT
Operator projektu zwróci różne wartości pól z tabeli.
project <table> over <lista pól>
Na przykład sprawdź następujące wyrażenie:
projekt People over StartYear
Spowoduje to powstanie tabeli zawierającej różne wartości przechowywane w polu StartYear tabeli Ludzie .
Zduplikowane wartości są usuwane z tabeli wynikowej ze względu na właściwość zamknięcia tworzącą tabelę relacyjną: wszystkie rekordy w tabeli relacyjnej muszą być odrębne.
Jeśli lista pól zawiera więcej niż jedno pole, wynikowa tabela jest odrębną wersją tych pól.
Projekt People over StartYear, DepartmentID zwróci:
Jeden rekord został usunięty z powodu powielenia 2006 StartYear i 1 DepartmentID .
DAJĄCY
Wyrażenia relacyjne można łączyć ze sobą, nazywając poszczególne wyrażenia za pomocą podanego słowa kluczowego lub osadzając jedno wyrażenie w innym.
<wyrażenie algebry relacyjnej> podające <nazwa aliasu>
Weźmy na przykład następujące wyrażenia:
wybierz Osoby, w których DepartmentID = 2 daje A
projekt A nad PersonName daje B
Spowoduje to powstanie poniższej tabeli B, przy czym tabela A będzie wynikiem pierwszego wyrażenia.
Pierwsze wyrażenie jest oceniane, a wynikowa tabela otrzymuje alias A. Ta tabela jest następnie używana w drugim wyrażeniu, aby dać końcową tabelę z aliasem B.
Innym sposobem napisania tego wyrażenia jest zastąpienie aliasu tabeli w drugim wyrażeniu całym tekstem pierwszego wyrażenia zawartym w nawiasach:
projekt ( wybierz Osoby, gdzie DepartmentID = 2) nad PersonName, podając B
Jest to nazywane wyrażeniem zagnieżdżonym .
NATURALNE DOŁĄCZENIE
Naturalne łączenie scala dwie tabele razem, używając wspólnego pola dzielonego między tabelami.
połącz <tabela 1> i <tabela 2> gdzie <pole 1> = <pole 2>
zakładając, że <pole 1> znajduje się w <tabela 1>, a <pole 2> znajduje się w <tabela 2>.
Na przykład następujące wyrażenie łączenia połączy osoby i departamenty na podstawie kolumn DepartmentID i ID w odpowiednich tabelach:
dołącz do osób i działów, w których DepartmentID = ID
Zauważ, że pokazany jest tylko DepartmentID z tabeli People , a nie ID z tabeli Department . Musi zostać pokazane tylko jedno z porównywanych pól, które na ogół jest nazwą pola z pierwszej tabeli w operacji łączenia.
Chociaż nie pokazano w tym przykładzie, możliwe jest, że połączenie tabel może spowodować, że dwa pola będą miały ten sam nagłówek. Na przykład, jeśli użyłem nagłówka Nazwa do zidentyfikowania pól PersonName i Dept (tj. Do zidentyfikowania nazwiska osoby i nazwy działu). Kiedy pojawia się taka sytuacja, używamy nazwy tabeli, aby zakwalifikować nazwy pól za pomocą notacji kropkowej: People.Name and Departments.Name
join w połączeniu z select i project mogą być używane razem do pobierania informacji:
dołącz do osób i działów, w których DepartmentID = ID daje A
wybierz A, gdzie StartRok = 2005 i Dział = „Produkcja”, podając B
projekt B nad PersonName daje C
lub jako wyrażenie łączone:
projekt ( wybierz ( dołącz do osób i działów, gdzie DepartmentID = ID) gdzie StartYear = 2005 i Dept = 'Production') nad PersonName, dając C
Spowoduje to powstanie tej tabeli: