sql >> Databáze >  >> RDS >> Database

Relační algebra

Při práci s relačním modelem máme 2 skupiny operací, které můžeme použít.

První se nazývá relační algebra a je to procedurální jazyk .

Na tom je založen SQL a jako takový je velmi důležité se naučit – protože SQL je de-facto standardem pro práci s relačními databázemi.

Druhý se nazývá relační kalkul a místo toho, aby to bylo procedurální, je to deklarativní jazyk . Je to zásadní rozdíl v tom, jak komunikujeme s databázemi, protože neříkáte databázovému softwaru, co má dělat , stačí mu říct co chcete , a nechte ho vyřešit podrobnosti, jak to udělat.

Toto je běžný rozdíl mezi programovacími jazyky. V moderním frontendu říkáme, že interakce s DOM v Reactu je deklarativní. Použití vanilkového JavaScriptu k úpravě DOM je procedurální.

Jazyky jako Datalog, QBE a QUEL mají jako základ relační kalkul. Nebudu o tom mluvit, protože si myslím, že je to mnohem specializovanější způsob, jak dělat věci ve srovnání s praktičtějším přístupem, který následuje SQL, ale můžete se na to podívat, pokud chcete.

Po tomto úvodu pojďme pokračovat s relační algebrou .

Máme 2 typy operací:

  • primární operace
  • připojit se k operacím

Primární operace v relační algebře

Primární operace jsou:

  • spojení získat data ze dvou tabulek a vygenerovat součet n-tic, pokud tyto dvě tabulky mají stejné sloupce a typy atributů (doména).
  • rozdíl získat data obsažená v první tabulce, ale ne ve druhé tabulce, čímž se vygeneruje rozdíl n-tic, pokud mají dvě tabulky stejné sloupce a typy atributů (doména).
  • kartézský součin získat data ze dvou tabulek a vygenerovat jednu jedinou tabulku, která kombinuje data z nich na základě hodnoty atributu.
  • vyberte extrahovat pouze některé n-tice (řádky) obsažené v tabulce na základě určitých kritérií.
  • projekt vygenerovat novou tabulku obsahující pouze jeden nebo více atributů (sloupců) existující tabulky
  • přejmenovat používá se k přejmenování atributu, používá se k zabránění konfliktům, když má více tabulek stejný název pro různá data

Sloučení operací v relační algebře

Spojení jsou pravděpodobně nejvýkonnější operace, které můžete s relační algebrou provádět. Staví na primárních operacích a umožňují vám korelovat data obsažená v různých relacích (tabulkách).

Poznámka:Brzy budu mluvit o spojení v praxi v DBMS, to je většinou teorie.

Máme 2 hlavní verze připojení:přirozené připojení a připojení theta . Všechny ostatní verze jsou extrahovány z těchto 2.

Přirozené připojení

Přirozené připojení koreluje dva vztahy (tabulky) a vytvoří novou tabulku založenou na stejných hodnotách atributu.

Nejprve potřebujeme dva vztahy se stejným názvem atributu (sloupec). Pokud se pak hodnoty v atributech v relaci A neshodují v atributech v relaci B, řádek není součástí výsledku a je ignorován.

Příklad:

Vztah A

ID zaměstnance Jméno
1 Označit
2 Tony
3 Rick

Vztah B

Jméno správce ID zaměstnance
Todd 1
Albert 2

Můžeme provést přirozené spojení, abychom získali jméno šéfa pro každého zaměstnance:

ID zaměstnance Jméno Jméno správce
1 Označit Todd
2 Tony Albert

Vzhledem k tomu, že vztahy mají společný atribut ID zaměstnance, je ve výsledku přítomen pouze jednou, nikoli dvakrát.

Zaměstnanec č. 3 přítomný ve vztahu A, Rick, není zahrnut v této tabulce, protože neexistuje žádná odpovídající položka ve vztahu B.

Theta-join

Theta-spojení umožňuje provést spojení na základě libovolných kritérií pro porovnání dvou sloupců ve dvou různých vztazích, nejen rovnost jako přirozené spojení.

Provádí kartézský součin dvou tabulek a filtruje výsledky na základě výběru, který chceme provést.

Equi-join

Equi-join je theta spojení, kde je výběr založen na rovnosti mezi hodnotami atributů ve dvou různých tabulkách.

Rozdíl oproti přirozenému spojení je v tom, že si můžeme vybrat, které názvy atributů (sloupce) chceme porovnávat.

O spojeních si povíme mnohem více později, až bude SQL představeno, abychom je mohli použít v praxi.


  1. Hromadný sběr PL/SQL s doložkou LIMIT v databázi Oracle

  2. Základní správa Srovnání mezi Oracle, MSSQL, MySQL, PostgreSQL

  3. Jak mohu (nebo mohu) SELECT DISTINCT na více sloupcích?

  4. Jak vytvořit a používat dočasnou tabulku v uložené proceduře Oracle?