query SQL in accesso MS. Introduzione. Come inviare una query a un database nella sintassi di accesso VBA dell'istruzione SELECT

La lezione riguarderà il linguaggio di query: istruzione SELECT sql - per la selezione dei dati

Seleziona Interrogazione SQLè destinato al normale campionamento da un database. Quelli. se abbiamo solo bisogno di ricevere dati senza fare alcuna elaborazione con essi e senza apportare modifiche al database, allora possiamo tranquillamente utilizzare questo strumento.

Sintassi dell'istruzione SELECT

SELECT * FROM nome_tabella;

Questa è l'opzione più semplice per lavorare con l'operatore, quando selezioniamo tutti i record da una tabella del database.

Il simbolo * denota recuperare tutti i record da una tabella. Tuttavia, le colonne e le righe del set di risultati non sono ordinate.

Diamo un'occhiata agli esempi query SQL selezionare:

Esempio: Se hai creato un database locale e compilato le tabelle, come in quello discusso in precedenza (o hai utilizzato il servizio sqlFiddle), eseguiamo l'esempio seguente.
È necessario selezionare tutti i record dalla tabella degli insegnanti

SELECT * FROM nome_tabella LIMIT 2,3;

Nell'esempio vengono selezionati 3 record dalla tabella, iniziando dal record 2.
Questa query è particolarmente necessaria quando si crea un blocco di pagine di navigazione.

A ordinare i campi del set di risultati, devono essere elencati separati da virgole nell'ordine richiesto dopo la parola SELECT:

SELEZIONA nome, zarplata, premia DA insegnanti ORDINA PER nome;

Seleziona i valori dei campi nome, zarplata, premia e ordina in base al campo nome (in ordine alfabetico)


Esempio: DB "Negozio di computer". Seleziona le informazioni sulla velocità e la memoria dei computer. Si desidera ordinare il set di risultati in base alla velocità del processore in ordine crescente.

SELEZIONA "Velocità", "Memoria" DA "pc" ORDINA PER 1 ASC

Risultato:

Puoi ordinare in base a due campi:

SELEZIONA nome, zarplata, premia DA insegnanti ORDINA PER nome DESC;

Seleziona i valori dei campi nome, zarplata, premia e ordina in base al campo nome in ordine decrescente


Rimozione di valori duplicati in SQL

Nel caso in cui sia necessario ottenere stringhe univoche, è possibile utilizzare parola chiave DISTINTO.

DISTINTO(tradotto dall'inglese DIFFERENZA) - un argomento che elimina i valori doppi:

Esempio del database “Istituto”: ho bisogno di sapere possibili opzioni dimensione dei premi. Se non usi Distinct , il risultato sarà due valori identici. Puoi rimuovere i valori duplicati in SQL inserendo Distinto: di conseguenza, i valori duplicati non vengono ripetuti.

    SELEZIONA Velocità, Memoria DAL PC;

    Risultato:

    Nella tabella PC la chiave primaria è il campo codice. Poiché questo campo non è presente nella query, sono presenti righe duplicate nel set di risultati sopra.

    Quando è necessario ottenere stringhe univoche (ad esempio, siamo interessati solo a diverse combinazioni di velocità del processore e memoria e non alle caratteristiche di tutti i computer disponibili), è necessario utilizzare Distinct:

    SELEZIONA Velocità e Memoria DISTINTE DAL PC;

    SELEZIONA Velocità e Memoria DISTINTE DAL PC;

    Risultato:

    sql seleziona attività 1_1. DB "Istituto" Esegui una query per selezionare ID e nome dalla tabella degli insegnanti. Ordina i nomi degli insegnanti in ordine decrescente

    Linguaggio SQL: condizione dove

    La condizione è soddisfatta dalla sentenza
    DOVE
    che è scritto dopo la clausola FROM.

    In questo caso, solo i record per i quali il valore del predicato è TRUE verranno inclusi nel set di risultati.

    Esempio del database “Istituto”: Emetti i dati di un insegnante dalla tabella insegnanti, il cui cognome è Ivanov

    Condizioni multiple in SQL

    I predicati (condizioni) possono essere costituiti da un'espressione o da qualsiasi combinazione di espressioni costruite utilizzando operatori booleani:

  1. E
  2. o no
  3. Esempio del database “Istituto”: visualizzare il codice di un insegnante il cui stipendio è 10000 e il bonus 500

    Operatori relazionali presenti nelle condizioni:
    = Uguale
    >Più di
    >= Maggiore o uguale a
    Non uguali

    Tra in SQL (tra)

    Il predicato BETWEEN controlla se i valori dell'espressione da testare rientrano nell'intervallo specificato dalle espressioni di confine unite dalla parola funzione AND.

    Sintassi:

    <Проверяемое выражение>FRA<Начальное выражение>E<Конечное выражение>

    Esempio banca dati "Istituto": Stampa il nome e lo stipendio di un insegnante il cui stipendio è compreso tra 5000 e 10000.

    Esempio banca dati "Istituto": Visualizza il nome e lo stipendio di un insegnante il cui stipendio non è compreso tra 5000 e 10000.

    Predicato IN

    Il predicato IN determina se il valore dell'espressione da testare verrà trovato in un insieme di valori esplicitamente definiti.

    Sintassi:

    < Проверяемое выражение>[ NON ] IN (< набор значений> )

    <Проверяемое выражение>IN (<набор значений>)

    Esempio banca dati "Istituto": visualizzare i nomi degli insegnanti il ​​cui stipendio è 5000, 10000 o 11000

    Esempio banca dati "Istituto": visualizzare i nomi dei docenti il ​​cui stipendio non rientra nei valori: 5000, 10000 o 11000

    sql seleziona attività 1_3. DB "Istituto" Visualizza il nome, lo stipendio e il bonus degli insegnanti il ​​cui bonus è compreso tra 2000 e 5000 rubli.

SQL - Lezione 4. Recupero dei dati - istruzione SELECT

Quindi, nel nostro database del forum ci sono tre tabelle: utenti (utenti), argomenti (argomenti) e post (messaggi). E vogliamo vedere quali dati contengono. C'è un operatore per questo in SQL SELEZIONARE. La sintassi per utilizzarlo è la seguente:

SELEZIONA cosa_seleziona DA dove_seleziona;


Invece di "what_select" dobbiamo specificare il nome della colonna di cui vogliamo vedere i valori, o i nomi di più colonne separate da virgole, o il simbolo asterisco (*), che significa la selezione di tutte le colonne della tabella . Invece di "where_select" dovresti specificare il nome della tabella.

Diamo prima un'occhiata a tutte le colonne della tabella utenti:

SELEZIONA *DAgli utenti;

Questi sono tutti i dati che abbiamo inserito in questa tabella. Ma supponiamo di voler guardare solo la colonna id_user (ad esempio, nell'ultima lezione, per popolare la tabella degli argomenti, dovevamo sapere quali id_users si trovano nella tabella users). Per fare ciò, specificheremo il nome di questa colonna nella query:

SELEZIONA id_user DAgli utenti;

Ebbene, se vogliamo vedere, ad esempio, i nomi e le email dei nostri utenti, allora elencheremo le colonne di interesse separate da virgole:

SELEZIONA nome, email DA utenti;

Allo stesso modo, puoi vedere quali dati contengono le nostre altre tabelle. Vediamo quali argomenti abbiamo:

SELEZIONA * DA argomenti;

Ora abbiamo solo 4 argomenti, ma cosa succede se ce ne sono 100? Vorrei che fossero visualizzati, ad esempio, in ordine alfabetico. C'è una parola chiave per questo in SQL ORDINA PER seguito dal nome della colonna in base alla quale avverrà l'ordinamento. La sintassi è la seguente:

SELEZIONA nome_colonna DA nome_tabella ORDER BY sort_column_name;



Per impostazione predefinita l'ordinamento è crescente, ma è possibile modificarlo aggiungendo una parola chiave DESC

Ora i nostri dati sono ordinati in ordine decrescente.

L'ordinamento può essere effettuato per più colonne contemporaneamente. Ad esempio, la seguente query ordinerà i dati in base alla colonna topic_name e, se in questa colonna sono presenti più righe identiche, la colonna id_author verrà ordinata in ordine decrescente:

Confronta il risultato con il risultato della query precedente.

Molto spesso non abbiamo bisogno di tutte le informazioni della tabella. Ad esempio, vogliamo scoprire quali argomenti sono stati creati dall'utente sveta (id=4). C'è una parola chiave per questo in SQL DOVE, la sintassi per tale richiesta è la seguente:

Nel nostro esempio, la condizione è l'ID utente, ad es. Abbiamo bisogno solo di quelle righe la cui colonna id_author contiene 4 (ID utente sveta):

Oppure vogliamo sapere chi ha creato il tema "biciclette":

Naturalmente sarebbe più comodo se al posto dell’ID dell’autore fosse visualizzato il suo nome, ma i nomi sono memorizzati in un’altra tabella. Nelle lezioni successive impareremo come selezionare i dati da più tabelle. Nel frattempo scopriamo quali condizioni è possibile impostare utilizzando la parola chiave WHERE.

Operatore Descrizione
= (uguale) Vengono selezionati valori uguali al valore specificato

Esempio:

SELECT * FROM argomenti WHERE id_author=4;

Risultato:

> (altro) Vengono selezionati valori maggiori di quelli specificati

Esempio:

SELECT * FROM argomenti WHERE id_author>2;

Risultato:

< (меньше) Vengono selezionati valori inferiori a quelli specificati

Esempio:

SELEZIONA * DA argomenti DOVE id_author
Risultato:

>= (maggiore o uguale a) Vengono selezionati i valori maggiori e uguali al valore specificato

Esempio:

SELECT * FROM argomenti WHERE id_author>=2;

Risultato:

<= (меньше или равно) Vengono selezionati i valori inferiori e uguali al valore specificato

Esempio:

SELEZIONA * DA argomenti DOVE id_author
Risultato:

!= (non uguale) Vengono selezionati valori non uguali al valore specificato

Esempio:

SELECT * FROM argomenti WHERE id_author!=1;

Risultato:

NON È NULLO Seleziona le righe che contengono valori nel campo specificato

Esempio:

SELEZIONA * DA argomenti DOVE id_author NON È NULL;

Risultato:

È NULLO Seleziona le righe che non hanno alcun valore nel campo specificato

Esempio:

SELECT * FROM argomenti DOVE id_author È NULL;

Risultato:

Insieme vuoto: non esistono righe di questo tipo.

TRA (tra) Vengono selezionati i valori compresi tra i valori specificati

Esempio:

SELEZIONA * DA argomenti DOVE id_autore TRA 1 E 3;

Risultato:

IN (valore contenuto) Vengono selezionati i valori corrispondenti ai valori specificati

Esempio:

SELECT * FROM argomenti DOVE id_author IN (1, 4);

Risultato:

NOT IN (valore non contenuto) Vengono selezionati valori diversi da quelli specificati

Esempio:

SELECT * FROM argomenti DOVE id_author NON IN (1, 4);

Risultato:

MI PIACE (corrispondenza) Vengono selezionati i valori che corrispondono al modello

Esempio:

SELECT * FROM argomenti DOVE nome_argomento LIKE "led%";

Risultato:

I possibili metacaratteri per l'operatore LIKE verranno discussi di seguito.

NON MI PIACE (non corrispondente) Vengono selezionati i valori che non corrispondono al modello

Esempio:

SELEZIONA * FROM argomenti DOVE nome_argomento NON COME "led%";

Risultato:

Metacaratteri dell'operatore LIKE

Le ricerche tramite metacaratteri possono essere eseguite solo nei campi di testo.

Il metacarattere più comune è % . Significa qualsiasi simbolo. Ad esempio, se vogliamo trovare parole che iniziano con le lettere "vel", allora scriveremo LIKE "vel%", mentre se vogliamo trovare parole che contengono i caratteri "club", allora scriveremo LIKE "% club%". Per esempio:

Un altro metacarattere comunemente usato è _ . A differenza di %, che denota pochi o nessun carattere, il carattere di sottolineatura denota esattamente un carattere. Per esempio:

Fai attenzione allo spazio tra il metacarattere e il “pesce” se lo salti la richiesta non funzionerà, perché metacarattere _ sta per esattamente un carattere e anche uno spazio è un carattere.

Per oggi basta così. Nella prossima lezione impareremo come scrivere query su due o più tabelle. Nel frattempo, prova a creare le tue domande sulla tabella dei post.

Questa lezione è dedicata a query SQL al database su Accesso VBA. Vedremo come vengono eseguite le query INSERT, UPDATE, DELETE nel database in VBA e impareremo anche come ottenere un valore specifico da una query SELECT.

Coloro che programmano Accesso VBA e mentre lavorano con un database SQL Server, molto spesso si trovano ad affrontare un compito così semplice e necessario come inviare una query SQL al database, sia essa INSERT, UPDATE o una semplice query SQL SELECT. E poiché siamo programmatori alle prime armi, dovremmo essere in grado di farlo, quindi oggi faremo proprio questo.

Abbiamo già toccato l'argomento come ottenere dati da un server SQL, dove abbiamo scritto codice in VBA per ottenere questi dati, ad esempio, nell'articolo sul caricamento dei dati in un file di testo da MSSql 2008, oppure ne abbiamo parlato anche in poco nel materiale Caricamento di dati da Access a un modello Word ed Excel ma in un modo o nell'altro lo abbiamo esaminato superficialmente e oggi propongo di parlarne un po' più in dettaglio.

Nota! Tutti gli esempi seguenti vengono considerati utilizzando il progetto ADP di Access 2003 e il database MSSql 2008. Se non sai cos'è un progetto ADP, lo abbiamo esaminato nel materiale Come creare e configurare un progetto ADP di Access.

Dati di origine per esempi

Diciamo di avere una tabella test_table, che conterrà i numeri e i nomi dei mesi dell'anno (query eseguite utilizzando Studio Direzionale)

CREA TABELLA. (NON NULL, (50) NULL) IN VIAGGIO

Come ho già detto, utilizzeremo un progetto ADP configurato per funzionare con MS SQL 2008, in cui ho creato un modulo di prova e aggiunto un pulsante di avvio con una firma "Correre", di cui avremo bisogno per testare il nostro codice, ovvero Scriveremo tutto il codice nel gestore eventi " Premendo un pulsante».

Interrogazioni al database INSERT, UPDATE, DELETE in VBA

Per non ritardare troppo, iniziamo subito, diciamo che dobbiamo aggiungere una riga alla nostra tabella di test ( codice commentato)/

Private Sub start_Click() "Dichiara una variabile per memorizzare la stringa della query Dim sql_query As String "Scrivi la query di cui abbiamo bisogno sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "June")" "Execute it DoCmd. EseguiSQL sql_query End Sub

In questo caso, la query viene eseguita utilizzando i parametri di connessione al database correnti. Possiamo verificare se i dati sono stati aggiunti o meno.

Come puoi vedere i dati sono stati inseriti.

Per eliminare una riga scriviamo il seguente codice.

Private Sub start_Click() "Dichiara una variabile per memorizzare la stringa di query Dim sql_query As String "Scrivi una query di eliminazione al suo interno sql_query = "DELETE test_table WHERE id = 6" "Esegui DoCmd.RunSQL sql_query End Sub

Se controlliamo, vedremo che la riga desiderata è stata cancellata.

Per aggiornare i dati scrivere la richiesta di aggiornamento alla variabile sql_query, spero che il significato sia chiaro.

SELECT query su un database in VBA

Qui le cose sono un po' più interessanti che con altri costrutti SQL.

Innanzitutto, diciamo che dobbiamo ottenere tutti i dati dalla tabella e, ad esempio, li elaboreremo e li visualizzeremo in un messaggio e tu, ovviamente, puoi usarli per altri scopi, per questo scriviamo quanto segue codice

Private Sub start_Click() "Dichiara variabili "Per un insieme di record dal database Dim RS As ADODB.Recordset "Stringa di query Dim sql_query As String "Stringa per visualizzare i dati di riepilogo in un messaggio Dim str As String "Crea un nuovo oggetto per i record set RS = New ADODB .Recordset "Query line sql_query = "SELECT id, name_mon FROM test_table" "Esegui la query utilizzando le impostazioni di connessione del progetto corrente RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Esegui il ciclo dei record While Not ( RS.EOF) "Compila la variabile per visualizzare il messaggio str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "vai al record successivo RS.MoveNext Wend " Visualizza il messaggio msgbox str End Sub

Qui stiamo già utilizzando i loop VBA Access per scorrere tutti i valori nel nostro recordset.

Ma molto spesso è necessario ottenere non tutti i valori da una serie di record, ma solo uno, ad esempio il nome del mese tramite il suo codice. E per fare questo, è piuttosto costoso usare un ciclo, quindi possiamo semplicemente scrivere una query che restituirà solo un valore e accedervi, ad esempio, otterremo il nome del mese usando il codice 5

Private Sub start_Click() "Dichiara variabili" Per un insieme di record dal database Dim RS As ADODB.Recordset "Stringa di query Dim sql_query As String "Stringa per visualizzare il valore finale Dim str As String "Crea un nuovo oggetto per il set di record RS = Nuovo ADODB.Recordset "Query line sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Esegui la query utilizzando le impostazioni di connessione del progetto corrente RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Ottieni il nostro valore str = RS. Campi(0) msgbox str End Sub

Per universalità, qui abbiamo già affrontato non il nome della cella, ma il suo indice, ad es. 0, e questo è il primo valore in Set di record, alla fine abbiamo ottenuto il valore "Maggio".

Come puoi vedere, tutto è abbastanza semplice. Se hai spesso bisogno di ottenere un valore specifico dal database ( come nell'ultimo esempio), quindi consiglio di inviare tutto il codice in una funzione separata (Come scrivere una funzione in VBA Access 2003) con un parametro di input, ad esempio il codice del mese ( se consideriamo il nostro esempio) e semplicemente, dove è necessario visualizzare questo valore, chiamiamo la funzione che ci serve con il parametro necessario e il gioco è fatto, così facendo ridurremo notevolmente il codice VBA e miglioreremo la percezione del nostro programma.

Per oggi è tutto. Buona fortuna!

Regole: le parentesi quadre indicano [parte facoltativa] della costruzione. Una barra verticale indica una scelta tra le opzioni (var1|var2). I puntini di sospensione indicano la possibile ripetizione più volte: 1 volta, 2 volte [, …]

Istruzione SELEZIONATA

Indica al motore di database di Microsoft Access di restituire le informazioni dal database come recordset.

Sintassi

SELEZIONA [ predicato] { * | tavolo.* | [tavolo.]campo1

[, [tavolo.]campo2 [, ...]]}
DA espressione_tabella [, ...]




L'istruzione SELECT include i seguenti elementi.

Elemento

Descrizione

Predicato

Uno dei seguenti predicati: ALL, DISTINCT, DISTINCTROW o TOP. I predicati vengono utilizzati per limitare il numero di record restituiti. Se non viene fornito alcun predicato, il valore predefinito è ALL.

Indica che tutti i campi sono selezionati dalla tabella o dalle tabelle specificate

Tavolo

Il nome della tabella dai cui campi vengono selezionati i record

campo1, campo2

I nomi dei campi contenenti i dati da recuperare. Se vengono specificati più campi, i dati verranno recuperati nell'ordine in cui sono elencati i nomi

soprannome1, soprannome2

Nomi utilizzati come intestazioni di colonna anziché nomi di colonna originali tavoli

espressione_tabella

Uno o più nomi di tabella contenenti i dati da recuperare.

database_esterno

Il nome del database contenente le tabelle specificate nel componente espressione_tabella se non sono nel database corrente

Note

Per eseguire questa operazione, il motore di database di Microsoft Access esegue la ricerca nelle tabelle specificate, recupera le colonne desiderate, seleziona le righe che soddisfano le condizioni specificate e ordina o raggruppa le righe risultanti nell'ordine specificato.

Le istruzioni SELECT non modificano i dati del database.

Un'istruzione SELECT è in genere la prima parola di un'istruzione SQL (istruzione SQL (stringa). Un'espressione che definisce un comando SQL, come SELECT, UPDATE o DELETE, e include clausole, come WHERE o ORDER BY. Istruzioni SQL/ le stringhe sono comunemente utilizzate nelle query e nelle funzioni statistiche.). La maggior parte delle istruzioni SQL sono istruzioni SELECT o istruzioni SELECT...INTO.

La sintassi minima per un'istruzione SELECT è la seguente:

SELEZIONARE campi DA tavolo

È possibile utilizzare un asterisco (*) per selezionare tutti i campi in una tabella. Nell'esempio seguente vengono selezionati tutti i campi nella tabella Employees.

SELEZIONA * DA Dipendenti;

Se il nome del campo è incluso in più tabelle nella clausola FROM, anteporlo con il nome della tabella e l'istruzione «.» (punto). Nell'esempio seguente il campo "Reparto" è presente nelle tabelle "Dipendenti" e "Supervisori". L'istruzione SQL seleziona i reparti dalla tabella Dipendenti e i nomi dei supervisori dalla tabella Supervisori.

SELEZIONA Dipendenti. Dipartimento, capi. Nome del dirigente DA Dipendenti INNER JOIN Dirigenti DOVE Dipendenti. Dipartimento = Dirigenti. Dipartimento;

Quando si crea un oggetto RecordSet, il nome del campo della tabella viene utilizzato dal motore di database di Microsoft Access come nome dell'oggetto "Campo" nell'oggetto Set di record. Se il nome del campo deve essere modificato o non è fornito dall'espressione che genera il campo, utilizzare una parola riservata (Parola riservata. Una parola che è un elemento di un linguaggio, come Visual Basic. Le parole riservate includono nomi di istruzioni, funzioni integrate e tipi di dati, metodi, operatori e oggetti.) AS. L'esempio seguente mostra come viene utilizzata l'intestazione "Day" per denominare l'oggetto restituito Campo nell'oggetto ricevuto Set di record.

SELEZIONA Compleanno COME Giorno DA Dipendenti;

Quando si lavora con funzioni o query aggregate che restituiscono nomi di oggetti ambigui o identici Campo, dovresti utilizzare la clausola AS per creare un nome oggetto diverso Campo. Nell'esempio seguente, l'oggetto restituito Campo nell'oggetto ricevuto Set di record prende il nome di "Censimento".

SELECT COUNT(EmployeeCode) AS Censimento FROM Dipendenti;

Quando si lavora con un'istruzione SELECT, è possibile utilizzare clausole aggiuntive per limitare e organizzare ulteriormente i dati recuperati. Per ulteriori informazioni, consulta l'argomento della guida relativo all'offerta che stai utilizzando.

clausola FROM

Specifica le tabelle e le query che contengono i campi elencati nell'istruzione SELECT.

Sintassi

SELEZIONARE field_list
DA espressione_tabella

Un'istruzione SELECT contenente una clausola FROM include i seguenti elementi:

Elemento

Descrizione

field_list

espressione_tabella

Un'espressione che definisce una o più tabelle: origini dati. L'espressione può essere un nome di tabella, un nome di query memorizzata o un'espressione di risultato costruita utilizzando un operatore INNER JOIN, LEFT JOIN o RIGHT JOIN

database_esterno

Il percorso completo del database esterno contenente tutte le tabelle specificate in espressione_tabella

Note


È richiesta la presenza di una clausola FROM dopo un'istruzione SELECT.

L'ordine in cui sono elencate le tabelle espressione_tabella non importa.

Utilizzo di tabelle collegate (Tabella collegata. Una tabella salvata in un file che non fa parte del database aperto ma è accessibile da Microsoft Access. L'utente può aggiungere, eliminare e modificare i record nella tabella collegata, ma non può modificarne la struttura .) invece della clausola IN, è possibile rendere più semplice ed efficiente il processo di recupero dei dati da un database esterno.

L'esempio seguente mostra come recuperare i dati dalla tabella Employees.

SELEZIONARE Cognome, Nome

DA Dipendenti;

Indica i record selezionati per le query SQL (SQL (Structured Query Language). Un linguaggio di programmazione di database e query strutturate ampiamente utilizzato per l'accesso, l'interrogazione, l'aggiornamento e la manipolazione dei dati nei DBMS relazionali.)

Sintassi

SELEZIONA ]]
DA tavolo

Un'istruzione SELECT contenente questi predicati include i seguenti componenti:

Componente

Descrizione

Implicito se non sono inclusi predicati. Il motore di database di Microsoft Access seleziona tutti i record che soddisfano le condizioni di un'istruzione SQL (istruzione SQL (stringa). Un'espressione che definisce un comando SQL, come SELECT, UPDATE o DELETE, e include clausole, come WHERE o ORDER BY Le istruzioni/stringhe SQL vengono generalmente utilizzate nelle query e nelle funzioni statistiche). I due esempi identici seguenti mostrano come restituire tutti i record dalla tabella Employees.

DA Dipendenti

ORDINA PER CodiceImpiegato;

DA Dipendenti

ORDINA PER CodiceImpiegato;

Esclude i record che contengono dati duplicati nei campi selezionati. Nei risultati della query vengono inclusi solo i valori univoci di ciascuno dei campi elencati nell'istruzione SELECT. Ad esempio, alcuni dipendenti elencati nella tabella Dipendenti potrebbero avere lo stesso cognome. Se due record contengono il cognome "Ivanov" nel campo Cognome, la seguente istruzione SQL restituisce solo un record contenente il cognome "Ivanov".

SELEZIONA Cognome DISTINTO

Se il componente DISTINCT viene omesso, la query restituisce entrambi i record con il cognome "Ivanov".

Se la clausola SELECT contiene più campi, la combinazione di tutti i valori dei campi viene inclusa nei risultati della query solo se sono univoci per quel record.

I risultati di una query che utilizza il componente DISTINCT non vengono aggiornati per riflettere le modifiche successive apportate da altri utenti.

Esclude i dati dai record che si ripetono nella loro interezza e che non contengono singoli campi con gli stessi dati. Supponiamo che sia stata creata una query che collega le tabelle “Clienti” e “Ordini” utilizzando il campo “Codice Cliente”. La tabella Clienti non contiene campi ID cliente duplicati, ma esistono nella tabella Ordini perché ogni cliente può avere più ordini. La seguente istruzione SQL mostra come utilizzare il componente DISTINCTROW per elencare le organizzazioni che hanno effettuato almeno un ordine, senza menzionare i dettagli di tali ordini.

SELEZIONA DISTINCTROW Titolo DA Clienti INNER JOIN Ordini

ON Clienti. CustomerId = Ordini. Codice cliente

ORDINA PER Titolo;

Se il componente DISTINCTROW viene omesso, la query restituisce più righe per ciascuna organizzazione che ha effettuato più ordini.

Il componente DISTINCTROW ha effetto solo quando si selezionano i campi da alcune delle tabelle utilizzate nella query. Il componente DISTINCTROW viene ignorato se la query include solo una tabella o se i campi vengono recuperati da tutte le tabelle.

SUPERIORE N

Restituisce il numero specificato di record compresi tra i primi o gli ultimi record nell'intervallo specificato dalla clausola ORDER BY. Supponiamo che tu voglia visualizzare i nomi dei 25 migliori studenti della classe del 1994.

Nome, Cognome

DOVE Anno di Laurea = 2003

ORDINA PER GradoPuntoMedia DESC;

Se non includi la clausola ORDER BY, la query restituirà un set casuale di 25 record dalla tabella Studenti che soddisfa la clausola WHERE.

Il predicato TOP non implica una scelta tra valori uguali. Se il 25° e il 26° record dell'esempio precedente avessero lo stesso GPA, la query restituirebbe 26 record.

È inoltre possibile utilizzare la parola riservata PERCENT per recuperare una percentuale del primo o dell'ultimo record nell'intervallo specificato dalla clausola ORDER BY. Supponiamo che invece dei primi 25, si voglia visualizzare il 10% degli studenti più poveri della classe di laurea.

SELEZIONA I PRIMI 10 PERCENTO

Nome, Cognome

DOVE Anno di Laurea = 2003

ORDINA PER GradoPuntoMedia ASC;

Il predicato ASC specifica l'output dei valori dalla parte inferiore dell'intervallo. Il valore che segue il predicato TOP deve essere un tipo di dati Integer. Il tipo di dati di base utilizzato per memorizzare valori interi viene archiviato come un numero a 64 bit (8 byte) nell'intervallo da -32768 a 32767. ) senza segno. .

Il predicato TOP non influisce sulla possibilità di aggiornamento della query.

tavolo

Il nome della tabella da cui vengono recuperati i record.

Vedi anche

Istruzione SELEZIONATA

clausola FROM

clausola DOVE

Determina quali record delle tabelle elencate nella clausola FROM vengono elaborati dalle istruzioni SELECT, UPDATE o DELETE.

Sintassi

SELEZIONARE field_list
DA espressione_tabella
DOVE condizioni_selezione

Un'istruzione SELECT contenente una clausola WHERE include le seguenti parti.

Parte

Descrizione

field_list

Il nome del campo o dei campi recuperati insieme a eventuali alias (Alias ​​​​(SQL). Un nome alternativo per una tabella o un campo in un'espressione. Gli alias vengono generalmente utilizzati come nomi di tabelle o campi più brevi per facilitare il riferimento successivo in programmi, per evitare riferimenti ambigui e per ottenere nomi più descrittivi durante la visualizzazione dei risultati delle query.), predicati (ALL, DISTINCT, DISTINCTROW o TOP) o con qualsiasi altro parametro dell'istruzione SELECT.

espressione_tabella

Il nome della tabella o delle tabelle da cui vengono recuperati i dati.

condizioni_selezione

Espressione (Espressione. Una combinazione di operatori matematici e logici, costanti, funzioni, nomi di campi, controlli e proprietà che genera un singolo valore. L'espressione può eseguire calcoli, elaborare testo o convalidare dati.) che deve corrispondere ai record inclusi nei risultati della query.

Note

Il motore di database di Microsoft Access seleziona i record che soddisfano le condizioni elencate nella clausola WHERE. Se la clausola WHERE non è specificata, la query restituisce tutte le righe della tabella. Se una query specifica più tabelle ma non specifica una clausola WHERE o JOIN, la query produce un prodotto cartesiano (prodotto cartesiano. È il risultato dell'esecuzione di un'istruzione SQL SELECT che ha una clausola FROM che fa riferimento a due o più tabelle e nessuna clausola WHERE o Clausola JOIN che specifica il metodo di unione.) tabelle.

La clausola WHERE non è obbligatoria ma, se utilizzata, deve seguire la clausola FROM. È possibile selezionare ad esempio tutti i dipendenti del reparto vendite (WHERE Dipartimento = "Vendite") oppure tutti i clienti di età compresa tra 18 e 30 anni (WHERE Age Between 18 And 30).

Se una clausola JOIN non viene utilizzata per un'operazione di join SQL su più tabelle, l'oggetto risultante Set di record sarà impossibile aggiornare.

La clausola WHERE è simile alla clausola HAVING e specifica i record selezionati. Dopo che i record sono stati raggruppati in base alla clausola GROUP BY, anche la clausola HAVING determina il record da visualizzare.

La clausola WHERE viene utilizzata per escludere i record che non devono essere raggruppati utilizzando la clausola GROUP BY.

Utilizzare varie espressioni per determinare quali record vengono restituiti dall'istruzione SQL. Ad esempio, la seguente istruzione SQL seleziona tutti i dipendenti il ​​cui stipendio supera RUR.

SELECT Cognome, Stipendio FROM Dipendenti WHERE Stipendio > 21000;

La clausola WHERE può contenere fino a 40 espressioni collegate da operatori logici (ad esempio, E E O).

Se inserisci un nome di campo che contiene spazi o segni di punteggiatura, devi racchiuderlo tra parentesi quadre (). Ad esempio, una tabella dei dettagli del cliente potrebbe contenere informazioni su clienti specifici.

SELEZIONA [Ristorante preferito dal cliente]

Specificare un argomento condizioni_selezione, i valori letterali della data (Data letterale. Qualsiasi sequenza di caratteri in un formato valido, racchiusa tra segni numerici (#). I formati validi sono il formato della data specificato nelle impostazioni Lingua e standard e il formato data universale.) devono essere rappresentati nel formato statunitense , anche se viene utilizzata una versione della data non statunitense del motore di database di Microsoft Access. Ad esempio, la data "10 maggio 1996" viene scritta come 5/10/96 nel Regno Unito e 05/10/1996 in Russia. Ricordarsi di racchiudere i valori letterali della data tra segni numerici (#), come mostrato negli esempi seguenti.

Per trovare i record relativi al 10 maggio 1996 nel database del Regno Unito, utilizzare la seguente istruzione SQL:

SELEZIONA * FROM Ordini DOVE Data di spedizione = #10.05.1996#;

Puoi anche usare la funzione DataValore, che riconosce le impostazioni internazionali impostate da Microsoft Windows®. Ad esempio, per la Russia usa questo codice:

SELECT * FROM Ordini WHERE Data di spedizione = DateValue("05/10/1996");

E il seguente codice è per il Regno Unito:

SELECT * FROM Ordini WHERE Data di spedizione = DateValue("10/5/96");

Nota. Se la colonna specificata nella riga dei criteri di selezione è di tipo GUID (ID replica (GUID). Un campo da 16 byte in un database Microsoft Access utilizzato per identificare in modo univoco la replica. I GUID vengono utilizzati per identificare repliche, set di repliche, tabelle, record e altri oggetti. Nei database di Microsoft Access, i codici GUID sono chiamati codici di replica), le condizioni di selezione utilizzano una sintassi leggermente diversa.

DOVE ID replica = (GUID (AB-CDEF0ABCDEF))

Assicurati che le parentesi e i trattini nidificati siano posizionati correttamente.

Pagina di origine: http://office. /ru-ru/access/HA.aspx? pid=CH

Clausola GRUPPO BY

Combina i record con gli stessi valori presenti nell'elenco di campi specificato in un unico record. Viene creato un valore di riepilogo per ciascun record se nell'istruzione SELECT è inclusa una funzione di aggregazione SQL, ad esempio Somma O Contare.

Sintassi

SELEZIONARE field_list
DA tavolo
DOVE condizione_selezione

Un'istruzione SELECT contenente una clausola GROUP BY include i seguenti elementi:

Elemento

Descrizione

field_list

I nomi dei campi recuperati insieme a eventuali alias (Alias ​​(SQL). Un nome alternativo per una tabella o un campo in un'espressione. Gli alias vengono generalmente utilizzati come nomi di tabelle o campi più brevi per facilitare il riferimento successivo nei programmi, per evitare riferimenti ambigui e per ottenere nomi più informativi durante la visualizzazione dei risultati della query.) e funzioni statistiche SQL, predicati (ALL, DISTINCT, DISTINCTROW o TOP) o altri parametri dell'istruzione SELECT

tavolo

condizioni_selezione

Condizione di selezione. Se l'istruzione contiene una clausola WHERE, dopo averla applicata ai record, i valori verranno raggruppati dal motore di database di Microsoft Access.

group_field_list

group_field_list

Note

La clausola GROUP BY è facoltativa.

Se le funzioni statistiche SQL non sono incluse nell'istruzione SELECT, i valori di riepilogo non vengono calcolati.

Valori del campo GROUP BY che sono Null (Null. Un valore che può essere immesso in un campo o utilizzato in espressioni e query per indicare dati mancanti o sconosciuti. In Visual Basic, la parola chiave Null specifica un valore Null. Alcuni campi, come come campi chiave primaria, non possono contenere valori Null.), sono raggruppati e non vengono omessi. Tuttavia, i valori Nullo non vengono valutati da nessuna delle funzioni statistiche SQL.

La clausola WHERE viene utilizzata per escludere le righe che non devono essere raggruppate. La clausola HAVING viene utilizzata per filtrare i record dopo il raggruppamento.

Campi dell'elenco di campi GROUP BY che non contengono il tipo di dati Memo (tipo di dati campo MEMO. Un tipo di dati di campo in un database Microsoft Access. Un campo MEMO può contenere fino a 65535 caratteri.) o oggetto OLE (tipo di dati Campo oggetto OLE ). Un tipo di dati di campo utilizzato per salvare oggetti da altre applicazioni collegate o incorporate in un database Microsoft Access.) può fare riferimento a qualsiasi campo in qualsiasi tabella specificata nella clausola FROM, anche se il campo non è incluso nell'istruzione SELECT. Per fare ciò è sufficiente che l'istruzione SELECT contenga almeno una funzione statistica SQL. Il motore di database di Microsoft Access non consente il raggruppamento in base ai campi contenenti dati di campi MEMO o oggetti OLE.

Tutti i campi nell'elenco dei campi SELECT devono essere contenuti in una clausola GROUP BY o essere argomenti di una funzione di aggregazione SQL.

Vedi anche

Istruzione SELEZIONATA

Istruzione SELECT...INTO

Predica TUTTO, DISTINTO, DISTINTO, TOP

clausola FROM

AVERE offerta

Clausola ORDER BY

clausola DOVE

Funzioni statistiche SQL

Pagina di origine: http://office. /ru-ru/access/HA.aspx? pid=CH

AVERE offerta

Definisce i record raggruppati che dovrebbero apparire in un'istruzione SELECT con una clausola GROUP BY. Dopo che i record sono stati raggruppati dalla clausola GROUP BY, la clausola HAVING mostrerà quelli che soddisfano le sue condizioni.

Sintassi

SELEZIONARE field_list
DA tavolo
DOVE condizioni_selezione
GRUPPO PER group_field_list

Un'istruzione SELECT contenente una clausola HAVING include i seguenti elementi:

Elemento

Descrizione

field_list

I nomi dei campi caricati insieme agli eventuali alias (Alias ​​​​(SQL). Un nome alternativo per una tabella o un campo in un'espressione. Gli alias vengono generalmente utilizzati come nomi di tabelle o campi più brevi per facilitare il riferimento successivo nei programmi, per evitare riferimenti ambigui e per ottenere nomi più informativi durante la visualizzazione dei risultati della query.) e funzioni statistiche SQL, predicati (ALL, DISTINCT, DISTINCTROW o TOP) o con altri parametri dell'istruzione SELECT.

tavolo

Nome della tabella da cui vengono caricati i record

condizione_selezione

Condizione di selezione. Se l'istruzione contiene una clausola WHERE, il motore di database di Microsoft Access raggrupperà i valori dopo averla applicata ai record.

group_field_list

Nomi dei campi (fino a 10) utilizzati per raggruppare i record. L'ordine dei nomi in group_field_list determina il livello di raggruppamento, dal più alto al più basso

condizione_gruppo

Un'espressione che specifica i record da visualizzare

Note

La clausola HAVING è facoltativa.

La clausola HAVING è simile alla clausola WHERE che determina la selezione dei record. Dopo aver raggruppato i record con una clausola GROUP BY, la clausola HAVING determina quali record vengono visualizzati.

SELEZIONA CodiceTipo,

Somma(InStock)

DA Prodotti

GRUPPO PER CodiceTipo

HAVING Sum(InStock) > 100 E Like "TEL*";

La clausola HAVING può contenere fino a 40 espressioni collegate da operatori logici come E E O.

Pagina di origine: http://office. /ru-ru/access/HA.aspx? pid=CH

Clausola ORDER BY

Ordina i record restituiti dalla query in ordine crescente o decrescente dei campi specificati.

Sintassi

SELEZIONARE field_list
DA tavolo
DOVE condizione_selezione
[, campo2 ][, ...]]]

Un'istruzione SELECT che contiene una clausola ORDER BY include i seguenti elementi.

Elemento

Descrizione

field_list

I nomi dei campi recuperati insieme a eventuali alias (Alias ​​(SQL). Un nome alternativo per una tabella o un campo in un'espressione. Gli alias vengono generalmente utilizzati come nomi di tabelle o campi più brevi per facilitare il riferimento successivo nei programmi, per evitare riferimenti ambigui e per ottenere nomi più informativi durante la visualizzazione dei risultati della query.) e funzioni statistiche SQL, predicati (ALL, DISTINCT, DISTINCTROW o TOP) o con altri parametri dell'istruzione SELECT.

tavolo

Nome della tabella da cui vengono recuperati i record

condizioni_selezione

Condizioni di selezione. Se l'istruzione contiene una clausola WHERE, dopo averla applicata ai record, il motore di database di Microsoft Access ordinerà i valori dei record

campo1, campo2

Nomi dei campi in base ai quali vengono ordinati i record.

Note

La clausola ORDER BY è facoltativa. Dovrebbe essere utilizzato quando è necessario visualizzare i dati in forma ordinata.

L'ordinamento predefinito è (Ordinamento. Un modo per organizzare i dati in base ai valori e al tipo. I dati possono essere ordinati in ordine alfabetico, per valori numerici o per data. L'ordinamento può essere crescente (da 0 a 100, da A a Z) oppure discendente (da 100 a 0, da Z ad A).) ascendente (da A a Z, da 0 a 9). Gli esempi seguenti mostrano l'ordinamento dei nomi dei dipendenti in base al cognome.

SELEZIONARE Cognome, Nome

DA Dipendenti

ORDINA PER Cognome;

SELEZIONARE Cognome, Nome

DA Dipendenti

ORDINA PER Cognome ASC;

Per ordinare i campi in ordine decrescente (dalla Z alla A, da 9 a 0), aggiungere la parola riservata DESC al nome di ciascun campo. Nell'esempio seguente viene illustrato l'ordinamento in ordine decrescente in base agli stipendi dei dipendenti.

SELEZIONA Cognome, Stipendio

DA Dipendenti

ORDINA PER Stipendio DESC, Cognome;

Se si specificano i campi nella clausola ORDER BY che contengono dati di tipo campo MEMO (tipo di dati campo Memo. Un tipo di dati di campo in un database Microsoft Access. Un campo MEMO può contenere fino a 65.535 caratteri.) o campo oggetto OLE (campo oggetto OLE Tipo di dati di campo "tipo di dati di campo utilizzato per salvare oggetti da altre applicazioni collegate o incorporate in un database di Microsoft Access.), ciò genererà un errore. Il motore di database di Microsoft Access non può ordinare questi tipi di campo.

La clausola ORDER BY è in genere l'ultima clausola in un'istruzione SQL (istruzione SQL (stringa). Un'espressione che definisce un comando SQL, come SELECT, UPDATE o DELETE, e include clausole, come WHERE o ORDER BY. Istruzioni SQL /string sono comunemente usate nelle query e nelle funzioni statistiche.).

È possibile includere campi aggiuntivi nella clausola ORDER BY. I record vengono prima ordinati in base al campo specificato per primo nella clausola ORDER BY. I record con gli stessi valori nel primo campo vengono quindi ordinati in base al campo specificato dal secondo e così via.
Vedi anche

Istruzione SELEZIONATA

Istruzione SELECT...INTO

Predica TUTTO, DISTINTO, DISTINTO, TOP

clausola FROM

Clausola GRUPPO BY

AVERE offerta

clausola DOVE

Funzioni statistiche SQL

Pagina di origine: http://office. /ru-ru/access/HA.aspx? pid=CH

Operazione INNER JOIN

Unisce i record di due tabelle se i campi di connessione di queste tabelle contengono gli stessi valori.

Sintassi

DA tabella1 UNIONE INTERNA tabella2 SU tabella1.campo1 confronto_operatore tabella2.campo2

L'operazione INNER JOIN è composta dai seguenti elementi:

Elemento

Descrizione

tabella1, tabella2

Nomi delle tabelle contenenti i record da unire

campo1, campo2

Nomi dei campi da collegare. I campi non numerici devono essere dello stesso tipo di dati (Tipo di dati. Una caratteristica del campo che definisce il tipo di dati che il campo può contenere. I tipi di dati includono: Booleano, Intero, Lungo, Valuta, Singolo, Doppio, Data, Stringa, e Variant (impostazione predefinita).) e contengono dati dello stesso tipo. Tuttavia, i nomi di questi campi potrebbero essere diversi

confronto_operatore

Qualsiasi operatore di confronto: (=,<, >, <=, >= o<>)

È possibile utilizzare query SQL di esempio per apprendere ed esercitarsi nella scrittura di query SQL in MS Access.

Una query SQL può essere annidata all'interno di un'altra. Una sottoquery non è altro che una query all'interno di un'altra query. In genere, nella clausola WHERE viene utilizzata una sottoquery. Ma esistono altri modi per utilizzare le sottoquery.

Domanda Q011. Vengono visualizzate le informazioni sui prodotti dalla tabella m_product, i cui codici si trovano anche nella tabella m_income:

SELEZIONA *
DA m_prodotto
DOVE id IN (SELECT product_id FROM m_income);

Richiedi Q012. Viene visualizzato un elenco di prodotti dalla tabella m_product, i cui codici non sono presenti nella tabella m_outcome:

SELEZIONA *
DA m_prodotto
DOVE id NOT IN (SELECT product_id FROM m_outcome);

Richiedi Q013. Questa query SQL visualizza un elenco univoco di codici e nomi di prodotto presenti nella tabella m_income ma non nella tabella m_outcome:

SELEZIONA ID_prodotto DISTINTO, titolo
FROM m_reddito INNER JOIN m_prodotto
ON m_reddito.prodotto_id=m_prodotto.id
DOVE product_id NOT IN (SELECT product_id FROM m_outcome);

Domanda Q014. Un elenco univoco di categorie i cui nomi iniziano con la lettera M viene visualizzato dalla tabella m_category:

SELEZIONA titolo DISTINTO
DA m_prodotto
DOVE titolo COME "M*";

Domanda Q015. Un esempio di esecuzione di operazioni aritmetiche sui campi in una query e di ridenominazione dei campi in una query (alias). In questo esempio viene calcolata la spesa = quantità*prezzo e il profitto per ogni voce di spesa di un articolo, presupponendo che il profitto sia pari al 7% delle vendite:


importo*prezzo/100*7 profitto AS
DA m_esito;

Domanda Q016. Analizzando e semplificando le operazioni aritmetiche, puoi aumentare la velocità di esecuzione delle query:

SELECT dt, product_id, importo, prezzo, importo*prezzo AS somma_esito,
somma_risultato*0,07 Profitto AS
DA m_esito;

Domanda Q017.È possibile utilizzare l'istruzione INNER JOIN per unire dati da più tabelle. Nell'esempio seguente, a seconda del valore ctgry_id, ogni voce nella tabella m_income viene abbinata al nome della categoria della tabella m_category a cui appartiene il prodotto:

SELECT c.titolo, b.titolo, dt, importo, prezzo, importo*prezzo AS somma_reddito
FROM (m_reddito AS a INNER JOIN m_prodotto AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
ORDINA PER c.titolo, b.titolo;

Richiedi Q018. Funzioni come SUM - somma, COUNT - quantità, AVG - valore medio aritmetico, MAX - valore massimo, MIN - valore minimo sono chiamate funzioni aggregate. Accettano molti valori e dopo averli elaborati restituiscono un unico valore. Un esempio di calcolo della somma del prodotto dei campi importo e prezzo utilizzando la funzione aggregata SUM.