Lo sviluppo di qualsiasi database non implicasolo la creazione e il riempimento di tabelle con una varietà di informazioni, ma anche un ulteriore lavoro con i dati. Per eseguire correttamente varie attività di selezione dei dati dalle tabelle e di generazione di report, viene utilizzato il costrutto Select standard.
Se consideriamo il problema della selezione dei dati ocostruendo qualche report, è possibile determinare il livello di complessità di questa operazione. Di norma, quando si lavora con database seri (in termini di volume di informazioni), che si formano, ad esempio, nei negozi online o nelle grandi aziende, la selezione dei dati non sarà limitata a una sola tabella. Di norma, le selezioni possono provenire da un numero abbastanza elevato non solo di tabelle interconnesse, ma anche di query / sottoquery nidificate, che vengono eseguite dal programmatore stesso, a seconda dell'attività assegnatagli. Per selezionare da una tabella, puoi utilizzare la costruzione più semplice:
Seleziona * da Persona |
dove Persona è il nome della tabella da cui si desidera recuperare i dati.
Se è necessario selezionare dati da più tabelle, è possibile utilizzare uno dei costrutti standard per unire più tabelle.
Se consideriamo l'uso di questo tipo di costruzioni a livello iniziale, possiamo distinguere i seguenti meccanismi per collegare il numero richiesto di tabelle per la selezione, vale a dire:
È possibile apprendere come utilizzare in pratica gli operatori di join di tabella esaminando l'uso dell'operatore SQL - Inner Join. Un esempio del suo utilizzo sarà simile a questo:
Seleziona * da Persona Sottodivisione join interna su Su_Person = Pe_ID |
Il linguaggio SQL e l'operatore Join Inner Join possono essereutilizzare non solo per unire due o più tabelle, ma anche per connettere altre sottoquery, il che facilita notevolmente il lavoro degli amministratori di database e, di norma, può accelerare notevolmente l'esecuzione di determinate query complesse.
Se si considera la possibilità di collegare un numero elevato di sottoquery e di raccogliere dati in un'unica tabella riga per riga, è possibile utilizzare anche gli operatori Union e Union All.
L'uso di queste strutture dipenderà dall'attività posta davanti allo sviluppatore e dal risultato che vuole ottenere alla fine.
Nella maggior parte dei casi, per combinare diversiLe tabelle SQL utilizzano l'operatore Inner Join. La descrizione di Inner Join in SQL è abbastanza facile da capire per il programmatore medio che ha appena iniziato con i database. Se consideriamo la descrizione del meccanismo di funzionamento di questa struttura, otteniamo la seguente immagine. La logica dell'operatore nel suo insieme si basa sulla possibilità di intersezione e selezione dei soli dati che si trovano in ciascuna delle tabelle incluse nella query.
Se consideriamo questo lavoro dal punto di vista dell'interpretazione grafica, otteniamo la struttura dell'operatore SQL Inner Join, un esempio del quale può essere mostrato utilizzando il seguente diagramma:
Ad esempio, abbiamo due tabelle, il cui schema èmostrato in figura. A loro volta, hanno un numero diverso di record. Ciascuna delle tabelle ha campi correlati tra loro. Se proviamo a spiegare il funzionamento dell'operatore in base alla figura, il risultato restituito sarà sotto forma di un insieme di record di due tabelle, in cui i numeri dei relativi campi coincidono. In poche parole, la query restituirà solo quei record (dalla tabella numero due), i cui dati si trovano nella tabella numero uno.
Come accennato in precedenza, l'operatore Inner Join eè la sua sintassi che è insolitamente semplice. Per organizzare i collegamenti tra le tabelle all'interno di un campione, sarà sufficiente ricordare e utilizzare il seguente diagramma schematico per la costruzione di un operatore, che è scritto in una riga di codice SQL del programma, ovvero:
Per la comunicazione in questo operatore, il principalechiavi della tabella. Di norma, in un gruppo di tabelle che memorizzano informazioni sui dipendenti, la Persona e la Sottodivisione precedentemente descritte hanno almeno un record simile. Quindi, diamo un'occhiata più da vicino all'istruzione SQL Inner Join, un esempio del quale è stato mostrato un po' prima.
Abbiamo una tabella Persona che memorizzainformazioni su tutti i dipendenti che lavorano in azienda. Immediatamente, notiamo che la chiave principale di questa tabella è il campo - Pe_ID. È su di esso che andrà il gruppo.
La seconda tabella di suddivisione memorizzeràinformazioni sui reparti in cui lavorano i dipendenti. A sua volta, è collegato tramite il campo Su_Person alla tabella Person. Cosa significa questo? Sulla base dello schema dei dati, possiamo dire che la tabella del dipartimento per ogni record della tabella "Dipendenti" conterrà informazioni sul dipartimento in cui lavorano. È su questa connessione che funzionerà l'operatore Inner Join.
Per un utilizzo più chiaro, si consideri l'operatore SQL Inner Join (esempi del suo utilizzo per una e due tabelle). Se consideriamo un esempio per una tabella, allora tutto è abbastanza semplice:
Seleziona * da Persona Sottodivisione join interna su Su_Person = Pe_ID |
Esempi di utilizzo dell'operatore SQL Inner Joinche per prelevare dati da più tabelle può essere organizzato nel modo sopra descritto, funziona secondo un principio un po' complicato. Complichiamo il compito per due tabelle. Supponiamo di avere una tabella Depart che memorizza le informazioni su tutti i reparti in ciascuno dei reparti. Questa tabella contiene il numero del reparto e il numero del dipendente ed è necessario integrare il campione di dati con il nome di ciascun reparto. Guardando al futuro, vale la pena dire che si possono usare due metodi per risolvere questo problema.
Il primo modo è collegare la tabella del reparto alla selezione. In questo caso, puoi organizzare la tua richiesta come segue:
Seleziona Pe_ID, Pe_Name, Su_Id, Su_Name, Dep_ID, Dep_Name da Persona Sottodivisione join interna su Su_Person = Pe_ID Inner join Partenza su Su_Depart = Dep_ID e Pe_Depart = Dep_ID |
Il secondo metodo per risolvere il problema è usareuna sottoquery in cui non verranno selezionati tutti i dati dalla tabella del reparto, ma solo quelli necessari. Questo, a differenza del primo metodo, ridurrà il tempo di elaborazione della query.
Seleziona Pe_ID, Pe_Name, Su_Id, Su_Name, Dep_ID, Dep_Name da Persona Sottodivisione join interna su Su_Person = Pe_ID Inner join (seleziona Dep_ID, Dep_Name, Pe_Depart from Depart) come T su Su_Depart = Dep_ID e Pe_Depart = Dep_ID |
Va notato che questo design non è semprepuò velocizzare la query. A volte ci sono casi in cui è necessario utilizzare un'ulteriore selezione di dati in una tabella temporanea (se la loro dimensione è troppo grande) e quindi combinarla con la selezione principale.
La creazione di query complesse implical'uso di un numero significativo di tabelle e sottoquery correlate tra loro per la selezione dei dati. La sintassi SQL Inner Join può soddisfare questi requisiti. Esempi di utilizzo dell'operatore in questo caso possono essere complicati non solo da selezioni da molte posizioni di memorizzazione dei dati, ma anche da un gran numero di sottoquery nidificate. Per un esempio specifico, puoi prendere una selezione di dati dalle tabelle di sistema (operatore Inner Join SQL). Un esempio - 3 tabelle - in questo caso avrà una struttura piuttosto complessa.
In questo caso, vengono collegate altre tre condizioni aggiuntive (alla tabella principale) e vengono introdotte diverse condizioni per la selezione dei dati.
Quando si utilizza l'operatore Inner Join, costaricorda che più complessa è la richiesta, più tempo ci vorrà per implementarla, quindi vale la pena cercare modi per eseguire e risolvere più rapidamente l'attività.
Alla fine vorrei dire una cosa:lavorare con i database non è la cosa più difficile nella programmazione, quindi, se lo si desidera, tutti possono padroneggiare la conoscenza della costruzione di database e nel tempo, avendo acquisito esperienza, sarà possibile lavorare con loro a livello professionale.