SQL
Algebra relazionale
Ricerca…
Panoramica
Algebra relazionale non è un linguaggio SQL in piena regola , ma piuttosto un modo per acquisire una comprensione teorica dell'elaborazione relazionale. In quanto tale, non dovrebbe fare riferimento a entità fisiche come tabelle, record e campi; dovrebbe fare riferimenti a costrutti astratti come relazioni, tuple e attributi. Detto questo, non userò i termini accademici in questo documento e rimarrò fedele ai più noti termini laici - tabelle, record e campi.
Un paio di regole dell'algebra relazionale prima di iniziare:
- Gli operatori utilizzati nell'algebra relazionale funzionano su intere tabelle anziché su singoli record.
- Il risultato di un'espressione relazionale sarà sempre una tabella (questa è chiamata la proprietà closure )
In questo documento mi riferirò alle seguenti due tabelle:
SELEZIONARE
L'operatore select restituisce un sottoinsieme della tabella principale.
seleziona <table> dove <condizione>
Ad esempio, esamina l'espressione:
seleziona Persone dove DepartmentID = 2
Questo può essere scritto come:
Ciò comporterà una tabella i cui record comprendono tutti i record nella tabella Persone in cui il valore DepartmentID è uguale a 2:
Le condizioni possono anche essere unite per limitare ulteriormente l'espressione:
selezionare Persone dove StartYear> 2005 e DepartmentID = 2
risulterà nella seguente tabella:
PROGETTO
L'operatore di progetto restituirà valori di campo distinti da una tabella.
progetto <table> su <field list>
Ad esempio, esaminare la seguente espressione:
progetto People over StartYear
Questo può essere scritto come:
Ciò comporterà una tabella che comprende i valori distinti contenuti nel campo StartYear della tabella People .
I valori duplicati vengono rimossi dalla tabella risultante a causa della proprietà di chiusura che crea una tabella relazionale: tutti i record in una tabella relazionale devono essere distinti.
Se l' elenco dei campi comprende più di un singolo campo, la tabella risultante è una versione distinta di questi campi.
progetto People over StartYear, DepartmentID restituirà:
Un record viene rimosso a causa della duplicazione di StartYear 2006 e 1 DepartmentID .
DANDO
Le espressioni relazionali possono essere concatenate assegnando un nome alle singole espressioni utilizzando la parola chiave giving o incorporando un'espressione in un'altra.
<espressione algebra relazionale> che fornisce <nome alias>
Ad esempio, considera le seguenti espressioni:
seleziona Persone dove DepartmentID = 2 che dà A
progetto A su PersonName che dà B
Questo risulterà nella tabella B sottostante, con la tabella A che è il risultato della prima espressione.
La prima espressione viene valutata e alla tabella risultante viene fornito l'alias A. Questa tabella viene quindi utilizzata all'interno della seconda espressione per fornire alla tabella finale un alias di B.
Un altro modo di scrivere questa espressione è di sostituire il nome alias della tabella nella seconda espressione con l'intero testo della prima espressione racchiuso tra parentesi:
progetto ( selezionare People where DepartmentID = 2) su PersonName che fornisce B
Questa è chiamata espressione annidata .
JOIN NATURALE
Un join naturale attacca due tabelle usando un campo comune condiviso tra le tabelle.
unisciti a <table 1> e <table 2> dove <field 1> = <field 2>
supponendo che <campo 1> sia in <tabella 1> e <campo 2> sia in <tabella 2>.
Ad esempio, la seguente espressione di join si unirà a People and Departments in base alle colonne DepartmentID e ID nelle rispettive tabelle:
unisciti a Persone e dipartimenti dove DepartmentID = ID
Si noti che viene visualizzato solo DepartmentID dalla tabella People e non l' ID dalla tabella Department . È necessario mostrare solo uno dei campi confrontati, che generalmente è il nome del campo della prima tabella dell'operazione di join.
Sebbene non mostrato in questo esempio, è possibile che le tabelle di unione possano generare due campi con la stessa intestazione. Ad esempio, se avessi usato il nome dell'intestazione per identificare i campi PersonName e Dept (ad es. Per identificare il nome della persona e il nome del dipartimento). Quando si verifica questa situazione, utilizziamo il nome della tabella per qualificare i nomi dei campi usando la notazione dot: People.Name e Departments.Name
join combinato con select e project possono essere usati insieme per ottenere informazioni:
unisciti a Persone e dipartimenti dove DepartmentID = ID che dà A
selezionare A dove StartYear = 2005 e Dept = 'Produzione' dando B
progetto B su PersonName che dà C
o come espressione combinata:
progetto ( selezionare ( unire People and Departments dove DepartmentID = ID) dove StartYear = 2005 e Dept = 'Production') su PersonName che fornisce C
Ciò comporterà questa tabella: