SQL
Relationsalgebra
Sök…
Översikt
Relational Algebra är inte ett fullständigt SQL- språk, utan snarare ett sätt att få teoretisk förståelse för relationell behandling. Som sådan bör det inte hänvisa till fysiska enheter som tabeller, poster och fält; det bör göra referenser till abstrakta konstruktioner som förhållanden, tuples och attribut. Jag säger det, jag kommer inte att använda de akademiska termerna i det här dokumentet och kommer att hålla mig till de mer kända lekman termerna - tabeller, poster och fält.
Ett par regler för relationalgebra innan vi börjar:
- Operatörerna som används i relationellt algebra arbetar på hela tabeller snarare än enskilda poster.
- Resultatet av ett relationellt uttryck kommer alltid att vara en tabell (detta kallas stängningsegenskapen )
I hela detta dokument kommer jag att hänvisa till följande två tabeller:
VÄLJ
Den valda operatören returnerar en delmängd från huvudtabellen.
välj <tabell> där <villkor>
Exempelvis undersöka uttrycket:
välj personer där DepartmentID = 2
Detta resulterar i en tabell vars poster består av alla poster i People- tabellen där DepartmentID- värdet är lika med 2:
Villkor kan också förenas för att ytterligare begränsa uttrycket:
välj personer där StartYear> 2005 och DepartmentID = 2
PROJEKT
Projektoperatören kommer att returnera distinkta fältvärden från en tabell.
projekt <tabell> över <fältlista>
Undersök till exempel följande uttryck:
projekt People over StartYear
Detta resulterar i en tabell som består av de distinkta värdena som finns i StartYear- fältet i People- tabellen.
Duplikatvärden tas bort från den resulterande tabellen på grund av att stängningsegenskapen skapar en relationstabell: alla poster i en relationstabell måste vara åtskilda.
Om fältlistan innehåller mer än ett enda fält är den resulterande tabellen en distinkt version av dessa fält.
projektet People over StartYear, DepartmentID kommer tillbaka:
En post tas bort på grund av dubblering av 2006 StartYear och 1 DepartmentID .
GER
Relations uttryck kan kedjas ihop genom att namnge de enskilda uttryck med hjälp av att ge sökord eller genom att bädda in ett uttryck i en annan.
<relationellt algebrauttryck> ger <aliasnamn>
Tänk till exempel på följande uttryck:
välj personer där DepartmentID = 2 ger A
projekt A över Personnamn som ger B
Detta resulterar i tabell B nedan, med tabell A som är resultatet av det första uttrycket.
Det första uttrycket utvärderas och den resulterande tabellen ges alias A. Denna tabell används sedan inom det andra uttrycket för att ge den slutliga tabellen med ett alias av B.
Ett annat sätt att skriva detta uttryck är att ersätta namnet på tabellaliaset i det andra uttrycket med hela texten för det första uttrycket som är inneslutet inom parentes:
projekt ( välj personer där DepartmentID = 2) över Personnamn som ger B
Detta kallas ett kapslat uttryck .
NATURLIGT GÅ MED
En naturlig koppling fäster två tabeller tillsammans med ett gemensamt fält som delas mellan tabellerna.
gå med <tabell 1> och <tabell 2> där <fält 1> = <fält 2>
förutsatt att <fält 1> är i <tabell 1> och <fält 2> är i <tabell 2>.
Till exempel kommer följande sammanfogningsuttryck att gå med personer och avdelningar baserat på kolumnerna DepartmentID och ID i respektive tabeller:
gå med i människor och avdelningar där DepartmentID = ID
Observera att endast DepartmentID från People- tabellen visas och inte ID från Department- tabellen. Endast ett av fälten som jämförs behöver visas, vilket i allmänhet är fältnamnet från den första tabellen i kopplingsoperationen.
Även om det inte visas i detta exempel är det möjligt att sammanfogning av tabeller kan resultera i två fält med samma rubrik. Om jag till exempel hade använt rubriken Namn för att identifiera fältet Personnamn och avd. (Dvs. för att identifiera personens namn och avdelningsnamn). När denna situation uppstår använder vi tabellnamnet för att kvalificera fältnamnen med punktnotationen : People.Name och Departments.Name
gå i kombination med välj och projekt kan användas tillsammans för att få information:
gå med i människor och avdelningar där DepartmentID = ID ger A
välj A där StartYear = 2005 och Dept = 'Production' som ger B
projekt B över Personnamn som ger C
eller som ett kombinerat uttryck:
projekt ( välj ( gå med i People and Departements där DepartmentID = ID) där StartYear = 2005 och Dept = 'Production') över Personnamn som ger C
Detta kommer att resultera i denna tabell: