Casa / Browser / Funzioni di aggregazione SQL: SUM, MIN, MAX, AVG, COUNT. Funzioni SQL integrate Funzioni matematiche Esempi di query

Funzioni di aggregazione SQL: SUM, MIN, MAX, AVG, COUNT. Funzioni SQL integrate Funzioni matematiche Esempi di query

Ultimo aggiornamento: 29/07/2017

È possibile utilizzare le seguenti funzioni per lavorare con le stringhe in T-SQL:

    LEN : Restituisce il numero di caratteri in una stringa. Come parametro, alla funzione viene passata una stringa, per la quale è necessario trovare la lunghezza:

    SELEZIONA LENTE("Mela") -- 5

    LTRIM : rimuove gli spazi iniziali da una stringa. Prende una stringa come parametro:

    SELEZIONA LTRIM("Mela")

    RTRIM : rimuove gli spazi finali da una stringa. Prende una stringa come parametro:

    SELECT RTRIM("Mela")

    CHARINDEX : Restituisce l'indice in cui viene trovata la prima occorrenza di una sottostringa in una stringa. Il primo parametro è una sottostringa e il secondo parametro è una stringa in cui cercare:

    SELECT CHARINDEX("pl", "Mela") -- 3

    PATINDEX : restituisce l'indice in cui si trova la prima occorrenza di un particolare pattern in una stringa:

    SELECT PATINDEX("%p_e%", "Mela") -- 3

    SINISTRA: taglia un certo numero di caratteri dall'inizio della stringa. Il primo parametro della funzione è una stringa e il secondo è il numero di caratteri da tagliare per primi dalla stringa:

    SELEZIONA SINISTRA ("Mela", 3) -- App

    DESTRA : Taglia un numero specificato di caratteri dalla fine di una stringa. Il primo parametro della funzione è una stringa e il secondo è il numero di caratteri da tagliare per primi dalla stringa:

    SELECT RIGHT("Apple", 3) -- ple

    SUBSTRING : taglia una sottostringa di una certa lunghezza da una stringa, partendo da un certo indice. Il primo parametro della funzione è una stringa, il secondo è l'indice iniziale da tagliare e il terzo parametro è il numero di caratteri da tagliare:

    SELEZIONA SOTTOSTRINGA ("Galaxy S8 Plus", 8, 2) -- S8

    REPLACE : Sostituisce una sottostringa con un'altra all'interno di una stringa. Il primo parametro della funzione è una stringa, il secondo è la sottostringa da sostituire e il terzo è la sottostringa da sostituire con:

    SELEZIONA SOSTITUISCI ("Galaxy S8 Plus", "S8 Plus", "Nota 8") -- Galaxy Note 8

    REVERSE : inverte la stringa:

    SELEZIONA INVERSO("123456789") -- 987654321

    CONCAT : concatena due stringhe in una. Come parametro, occorrono da 2 o più linee per essere collegate:

    SELECT CONCAT("Tom", " ", "Smith") -- Tom Smith

    LOWER : converte una stringa in minuscolo:

    SELEZIONA INFERIORE ("Mela") -- mela

    UPPER : converte una stringa in maiuscolo

    SELECT UPPER("Mela") -- APPLE

    SPAZIO: restituisce una stringa che contiene un certo numero di spazi

Prendiamo ad esempio una tabella:

CREATE TABLE Prodotti (ID INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL);

E durante l'estrazione dei dati, utilizziamo le funzioni di stringa:

SELECT UPPER(LEFT(Manufacturer,2)) AS Abbreviazione, CONCAT(ProductName, " - ", Manufacturer) AS FullProdName DA Prodotti ORDINA PER Abbreviazione

Funzioni integrate SQL progettato per facilitare e velocizzare l'elaborazione dei dati. La particolarità è che possono essere specificati direttamente nell'espressione. Tutte le funzioni integrate possono essere suddivise condizionatamente in gruppi.

Funzioni matematiche:

    addominali(significato) - restituisce il valore assoluto del numero;

    Girare(valore, precisione) - restituisce un valore numerico arrotondato per eccesso all'argomento specificato precisione il numero di cifre decimali;

    CARTELLO(significato) - restituisce un meno se il numero è negativo e un più in caso contrario;

    POTENZA(valore, grado) – eleva un numero a potenza;

    SQRT(significato) - estrae la radice quadrata di un numero;

    SOFFITTO(significato)- restituisce l'intero più vicino maggiore o uguale al valore;

    - PAVIMENTO(significato) Restituisce l'intero più vicino minore o uguale al valore.

Funzioni di stringa:

    ASCII(linea) - ritorna ASCII codice del primo carattere della stringa;

    CHUNR(numero) – restituisce un carattere da ASCII codice;

    LEN (linea) – restituisce la lunghezza della stringa in caratteri, esclusi gli spazi finali;

    lORDINARE(linea)/ RTRIM(linea)- rimuove gli spazi all'inizio/alla fine di una stringa;

    SINISTRA(stringa, numero)/ RNOTTE(stringa, numero)- restituisce l'argomento specificato numero il numero di caratteri nella stringa, a partire dal bordo sinistro/destro;

    SOTTOSTRINGA(linea, posizione, lunghezza) - restituisce una sottostringa della lunghezza specificata dalla stringa, a partire dalla posizione specificata;

    MINORE(linea) /SUPERIORE(linea) - restituisce una stringa convertita in minuscolo/maiuscolo, ecc.

Funzioni per lavorare con le date:

    GETDATE() - Restituisce un valore che contiene la data e l'ora del computer su cui è in esecuzione l'istanza di SQL Server;

    GIORNO(data_valore)– restituisce un numero dalla data specificata;

    MESE(data_valore)- restituisce il numero del mese dalla data specificata;

    ANNO(data_valore)- restituisce il valore dell'anno dalla data specificata;

    DATENANA( parte, data_valore) - restituisce una stringa di caratteri che rappresenta la parte specificata ( giorno, mese, Oraeccetera.) dalla data indicata;

    DATAPART( parte, data_valore) - restituisce un numero intero che rappresenta la parte specificata ( giorno, mese, Oraeccetera.) dalla data indicata.

Funzioni di conversione del tipo di dati

    LANCIO (significato COME tipo di dati)

    CONVERTIRE(tipo di dati, significato)

Discussione significato in functions, specifica il valore da convertire.

7.3. Comandi del linguaggio di definizione dei dati

Il linguaggio di definizione dei dati contiene comandi per creare, modificare ed eliminare un database e i suoi oggetti.

Crea una tabella

La creazione di una nuova tabella viene eseguita dal comando CREA TABELLA. Il comando descrive la struttura della tabella, ciascuna colonna della tabella e i vincoli di integrità che devono essere impostati per la tabella.

Sintassi del comando:

CREA TABELLA nome_tabella (( descrizione_colonna |nome_colonna_calcolato COME espressione | table_level_integrity_constraints) [, ...])

Il nome della tabella è un identificatore con una lunghezza massima di 128 caratteri.

Una tabella può contenere una colonna calcolata, nel qual caso il valore della colonna è determinato da un'espressione memorizzata nella struttura della tabella. Una colonna calcolata non può essere modificata, quindi non può essere NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY o DEFAULT.

La sintassi per descrivere una colonna della tabella è:

nome_colonna tipo di dati[(la dimensione)]

[(DEFAULT valore_predefinito | IDENTITÀ [(valore, passo)]}]

[column_level_integrity_constraints]

DEFAULT - consente di specificare il valore assegnato alla colonna nel record appena aggiunto.

IDENTITY Indica che è in corso la creazione di una colonna abilitata alla numerazione automatica (colonna contatore). È possibile definire una sola colonna contatore in una tabella. Il parametro value specifica il valore iniziale del contatore e il parametro step specifica il passo di incremento. Se questi parametri non sono impostati, hanno il valore 1. IDENTITY può essere impostato solo per colonne che hanno tipi interi o decimali. Non è consentito inserire valori in una colonna IDENTITY.

Esistono due gruppi di vincoli di integrità gestiti dal DBMS:

Vincoli di integrità dichiarativa che vengono dichiarati quando viene creata o modificata una tabella;

Vincoli di integrità procedurale gestiti dai trigger.

I vincoli di integrità dichiarativa possono essere vincoli a livello di tabella e vincoli a livello di tabella. Un vincolo a livello di colonna si applica a una sola colonna. A ogni vincolo di integrità dichiarativa può essere assegnato un nome.

La descrizione dei vincoli a livello di colonna ha la seguente sintassi:

((CHIAVE PRIMARIA | UNICO | NON NULL ) |RIFERIMENTI CHIAVE ESTERA nome_tabella( nome_colonna)

|CONTROLLA espressione_booleana)

Il nome del vincolo di integrità dei dati deve essere univoco all'interno del database. Considera i vincoli che possono essere definiti a livello di colonna:

vincolo CHIAVE PRIMARIA. Tutti i valori delle chiavi primarie della tabella devono essere univoci e non nulli. Una tabella può avere solo una chiave primaria. Se è composto, i vincoli di integrità sulla chiave primaria vengono impostati a livello di tabella;

Vincoli di univocità del valore della colonna UNIQUE. Ciò significa che una tabella non può avere due record che hanno lo stesso valore in quella colonna;

Un vincolo NOT NULL che impedisce alla colonna di memorizzare un valore NULL;

Vincolo di chiave esterna FOREIGN KEY (vincolo di integrità referenziale). Per una colonna che è una chiave esterna, utilizzare REFERENCES per specificare il nome della tabella a cui viene stabilito il collegamento e il nome della colonna di questa tabella a cui verrà collegato. Tale tabella è la tabella principale (principale) in relazione alla tabella creata. La colonna della tabella principale i cui valori vengono collegati deve avere un vincolo PRIMARY KEY.

Se la chiave della tabella esterna è composta da più campi, è necessario specificare il vincolo FOREIGN KEY a livello di tabella. In questo caso è necessario elencare tutte le colonne incluse nella chiave esterna, specificare il nome della tabella principale ei nomi delle colonne della tabella principale a cui la chiave esterna fa riferimento.

L'integrità referenziale stabilisce le regole per l'aggiunta e la modifica dei dati in una tabella utilizzando una chiave esterna e il corrispondente vincolo di chiave primaria. Le clausole ON UPDATE e ON DELETE per una chiave esterna definiscono le seguenti regole per la modifica dei dati correlati:

NESSUNA AZIONE - consente di modificare (eliminare) solo quei valori nella tabella principale che non hanno valori di chiave esterna corrispondenti nella tabella figlio. Questa regola è in vigore per impostazione predefinita;

CASCADE significa che ogni valore della chiave esterna della tabella figlia verrà automaticamente modificato (cancellato) quando viene modificato il valore della chiave primaria della tabella padre;

SET NULL significa che in caso di modifica (cancellazione) della chiave primaria della tabella genitore, in tutte le righe di riferimento della tabella figlia, ai valori della chiave esterna verranno automaticamente assegnati valori NULL;

SET DEFAULT significa che se la chiave primaria della tabella padre viene modificata (cancellata), in tutte le righe di riferimento della tabella figlio, ai valori della chiave esterna verranno automaticamente assegnati valori di default.

Completiamo l'esempio della banca dati formativa "Università", la cui progettazione è stata considerata nel Cap. 4.3 tabelle DISCIPLINA e DICHIARAZIONE GENERALE. Le tabelle 6 e 7 descrivono la struttura logica delle tabelle.

Tabella 6

Struttura logica dell'oggetto informazione DISCIPLINE

Tabella 7

La struttura logica dell'oggetto di informazione GENERAL STATEMENT

Segno chiave

Formato campo

Nome

Precisione

Registra il numero del libro

Numero di registro dello studente iscritto

testo

Codice disciplinare

Codice disciplinare

Numerico

intero lungo

numerico

Diamo richieste per la creazione di tabelle secondo quella mostrata in fig. 35 modello di database infologico.

Riso. 35. Schema database "Università"

Come puoi vedere dallo schema del database, la tabella FACOLTY è una tabella indipendente, quindi viene creata per prima. Una richiesta per creare una tabella, tenendo conto della descrizione della struttura logica in Tabella. 4 (p. 61) sarà simile a:

CREA TABELLA facoltà

([numero reparto] tinyint CHIAVE PRIMARIA , [nome reparto] char(50))

Il tavolo SPECIALTY è anche indipendente, lo creiamo secondo. Durante la creazione di una query, utilizza la descrizione della struttura logica in Table. 5 (pag. 62).

CREA TAVOLA [specialità] (

[numero specialità] int CHIAVE PRIMARIA,

[nome della specialità] char (60),

[costo dell'istruzione])

La tabella GROUP dipende dalla tabella FACOLTY e SPECIALTY. Usiamo la tabella 3 (p. 61) durante la creazione di una query e teniamo conto che le colonne numero di facoltà e numero di specialità sono chiavi esterne:

CREA TABELLA [gruppo] (

[numero gruppo] smallint CHIAVE PRIMARIA,

[numero specialità] int RIFERIMENTI CHIAVE STRANIERE specialità( camera speciale- notizia)SU CANCELLAZIONE CASCATA SU AGGIORNAMENTO CASCATA,

[faculty number] tinyint RIFERIMENTI CHIAVE STRANIERA faculty( camera facoltà) ON DELETE CASCADE ON UPDADE CASCADE, [numero del corso] tinyint)

La tabella STUDENT è una tabella dipendente da GROUP. Sulla base dei dati nella Tabella 2 (p. 60), faremo una query. Notiamo anche che la colonna numero del gruppo sono chiavi esterne:

CREA TAVOLA [studente] (

[numero gruppo] smallint NOT NULL RIFERIMENTI CHIAVE STRANIERA group( camera gruppi) ,

[cognome] char(15) NOT NULL ,

[data di nascita] datetime NOT NULL ,

bit [commerciale] NON NULL ,

[nome registrazione] char(9))

I dati della tabella RECORD GENERALE dipendono dalle tabelle STUDENTE e DISCIPLINA. In questa tabella, la chiave primaria è composta e ciascuna delle colonne della chiave primaria è una chiave esterna (vedere Tabella 7 e Figura 35).

Usiamo la descrizione della struttura logica della tabella delle discipline fornita in Tabella 6 e facciamo una query:

CREA TABELLA [disciplina] (

[codice disciplina] int CHIAVE PRIMARIA,

[nome disciplina] char(50))

Ora puoi creare una query per creare una tabella di istruzioni generali. Poiché la chiave primaria della tabella è una chiave composita, il vincolo PRIMARY KEY deve essere impostato a livello di tabella. Ad esempio, impostiamo i vincoli FOREIGN KEY anche a livello di tabella. La richiesta sarà simile a:

CREA TABELLA [scheda generale] (

[codice disciplina] int,

[numero registro] char(8),

[voto] NON NULLO , CHIAVE PRIMARIA ([codice disciplina],[numero libro di classe]), CHIAVE STRANIERA ([codice disciplina]) RIFERIMENTI [disciplina] ([codice disciplina]), CHIAVE ESTERA ([numero libro di classe]) RIFERIMENTI [studente ] ([numero di registro]))

Modifica della struttura di una tabella

La modifica della struttura di una tabella viene eseguita con il comando ALTER TABLE. Utilizzando il comando è possibile modificare le proprietà delle colonne esistenti, eliminarle o aggiungere nuove colonne alla tabella, gestire le restrizioni di integrità, sia a livello di colonna che a livello di tabella. L'assegnazione di molti parametri e parole chiave è simile all'assegnazione dei parametri e delle parole chiave corrispondenti del comando CREATE TABLE.

Eliminazione di una tabella

L'eliminazione di una tabella viene eseguita utilizzando il comando DROP TABLE. Sintassi del comando:

TAVOLA A GOCCIA tavolo

Ad esempio, una query per eliminare la tabella STUDENT è simile alla seguente:

DROP TABLE Studente

L'eliminazione di una tabella DOVREBBE tenere conto delle relazioni stabilite nel database tra le tabelle. Se un'altra tabella fa riferimento alla tabella che viene eliminata utilizzando il vincolo di integrità FOREIGN KEY, il DBMS non ne consentirà l'eliminazione.

Crea un indice

Gli indici vengono utilizzati per velocizzare l'accesso a dati specifici in una tabella del database. Un indice è una struttura che ordina i valori in una o più colonne di una tabella del database, come la colonna Cognome della tabella STUDENT. Se stai cercando uno studente specifico per cognome, l'indice ti aiuta a ottenere le informazioni di cui hai bisogno più velocemente rispetto alla ricerca in tutte le righe della tabella.

Un indice fornisce puntatori ai valori dei dati archiviati in colonne specifiche di una tabella e dispone tali puntatori in base all'ordinamento specificato. La ricerca di dati in una tabella utilizzando un indice è simile alla ricerca di un indice in un libro. Innanzitutto, viene effettuata una ricerca per un valore specifico nell'indice, quindi viene eseguito il salto corrispondente tramite il puntatore alla riga contenente questo valore.

Viene creato un indice utilizzando il comando CREATE INDEX:

CREA INDICE

nome_ indice ON nome _tabelle(colonna [,…])

dove UNIQUE indica che l'indice deve memorizzare solo valori univoci.

È possibile creare un indice su una o più colonne (indice composito). Gli indici compositi consentono di distinguere tra record che hanno lo stesso valore nella stessa colonna.

Esempio: creare un indice composito sulla tabella STUDENT per i campi Cognome e Data di nascita

CREA INDICE Ind_Fam ATTIVO

Studente(Cognome, [Data di Nascita] DESC)

Dovresti creare un indice su una tabella solo se intendi interrogare frequentemente i dati nelle colonne indicizzate. Gli indici occupano spazio su disco e rallentano le aggiunte, le eliminazioni e gli aggiornamenti di righe.

Eliminazione di un indice di tabella

Il comando DROP rimuove un indice da una tabella. La sintassi per il comando DROP per eliminare un indice è:

INDICE DI CADUTA indice SU tavolo

Prima che un indice possa essere eliminato da una tabella o dalla tabella stessa, deve essere chiuso.

Esempio: Elimina l'indice Ind_Fam dalla tabella STUDENT

DROP INDEX Ind_Fam ON Studente

Le funzioni Transact-SQL possono essere aggregate o scalari. Questi tipi di funzioni sono trattati in questo articolo.

Funzioni aggregate

Le funzioni di aggregazione eseguono calcoli su un gruppo di valori di colonna e restituiscono sempre un singolo valore dal risultato di tali calcoli. Il linguaggio Transact-SQL supporta diverse funzioni di aggregazione comuni:

AVG

Calcola la media aritmetica dei dati contenuti in una colonna. I valori su cui viene eseguito il calcolo devono essere numerici.

MIN e MAX

Determina il valore massimo e minimo di tutti i valori di dati contenuti nella colonna. I valori possono essere numerici, stringa o temporanei (data/ora).

SOMMA

Calcola la somma totale dei valori in una colonna. I valori su cui viene eseguito il calcolo devono essere numerici.

CONTARE

Conta il numero di valori non nulli in una colonna. La funzione count(*) è l'unica funzione aggregata che non esegue calcoli sulle colonne. Questa funzione restituisce il numero di righe (indipendentemente dal fatto che le singole colonne contengano valori null).

COUNT_GRANDE

Simile alla funzione di conteggio, con la differenza che restituisce un valore di dati BIGINT.

L'uso delle normali funzioni aggregate in un'istruzione SELECT sarà trattato in uno dei seguenti articoli.

Funzioni scalari

Le funzioni scalari Transact-SQL vengono utilizzate nella creazione di espressioni scalari. (Una funzione scalare esegue calcoli su un singolo valore o elenco di valori, mentre una funzione aggregata esegue calcoli su un gruppo di valori da più righe.) Le funzioni scalari possono essere suddivise nelle seguenti categorie:

    funzioni numeriche;

    funzioni di data;

    funzioni di stringa;

    funzioni di sistema;

    funzioni di metadati.

Questi tipi di funzioni sono discussi nelle sezioni seguenti.

Funzioni numeriche

Le funzioni numeriche Transact-SQL sono funzioni matematiche per la modifica di valori numerici. L'elenco delle funzioni numeriche e la loro breve descrizione è riportato nella tabella seguente:

Funzioni numeriche Transact-SQL
Funzione Sintassi Descrizione Esempio di utilizzo
addominali ABS(n)

Restituisce il valore assoluto (ovvero i valori negativi vengono restituiti come positivi) dell'espressione numerica n.

SELEZIONA ABS(-5.320) -- Resi 5.320 SELEZIONA ABS(8.90) -- Resi 8.90

ACOS, ASIN, ATAN, ATN2 ACOS(n), ASIN(n), ATAN(n), ATN2(n,m)

Funzioni trigonometriche inverse che calcolano il coseno inverso, seno inverso, arcotangente del valore di n (per ATN2 si calcola l'arcotangente di n/m). I valori di input n, m e il risultato sono del tipo di dati FLOAT.

COS, SIN, TAN, COT COS(n), SIN(n), TAN(n), COT(n)

Funzioni trigonometriche che calcolano coseno, seno, tangente, cotangente del valore n. Il risultato è di tipo dati FLOAT.

GRADI, RADIANTI GRADI(n), RADIANTI(n)

La funzione GRADI converte i radianti in gradi, rispettivamente in RADIANTI e viceversa.

SELEZIONA GRADI(PI()/4) -- Restituisce 45 SELEZIONA COS(RADIANTI(60.0)) --Restituisce 0,5

SOFFITTO SOFFITTO(n)

Arrotonda un numero per eccesso a un valore intero maggiore.

SELEZIONA SOFFITTO(-5.320) -- Resi -5 SELEZIONA SOFFITTO(8.90) -- Resi 9

IL GIRO ROUND(n, p, [t])

Arrotonda il valore di n al p più vicino. Quando p è un numero positivo, la parte frazionaria di n viene arrotondata e quando è negativo, la parte intera viene arrotondata. Quando si utilizza l'argomento facoltativo t, il numero n non viene arrotondato, ma troncato (ovvero arrotondato per difetto).

SELECT ROUND(5.3208, 3) -- Restituisce 5.3210 SELEZIONA ROUND(125.384, -1) -- Restituisce 130.000 SELEZIONA ROUND(125.384, -1, 1) -- Restituisce 120.000

PAVIMENTO PIANO(n)

Arrotonda per difetto al numero intero più vicino.

SELEZIONA PIANO(5.88) -- Restituisce 5

SCAD EXP(n)

Calcola il valore di e n .

LOG, LOG10 LOG(n), LOG10(n)

LOG(n) - calcola il logaritmo naturale (ovvero in base e) del numero n, LOG10(n) - calcola il logaritmo decimale (in base 10) del numero n.

PI PI()

Restituisce il valore di π (3.1415).

POTENZA POTENZA(x, y)

Calcola il valore x y.

RAND RAND()

Restituisce un numero FLOAT arbitrario compreso tra 0 e 1.

ROWCOUNT_BIG ROWCOUNT_BIG()

Restituisce il numero di righe di tabella elaborate dall'ultima istruzione Transact-SQL eseguita dal sistema. Il valore restituito è di tipo BIGINT.

CARTELLO SEGNO(n)

Restituisce il segno del valore n come numero: +1 se positivo, -1 se negativo.

SQRT, QUADRATO SQRT(n), QUADRATO(n)

SQRT(n) - calcola la radice quadrata del numero n, SQUARE(n) - restituisce il quadrato dell'argomento n.

Funzioni di data

Le funzioni di data valutano le parti corrispondenti della data o dell'ora di un'espressione o restituiscono il valore di un intervallo di tempo. Le funzioni di data supportate da Transact-SQL e una loro breve descrizione sono elencate nella tabella seguente:

Funzioni di data Transact-SQL
Funzione Sintassi Descrizione Esempio di utilizzo
GETDATE GETDATE()

Restituisce la data e l'ora correnti del sistema.

SELEZIONA GETDATE()

DATAPART DATEPART(elemento, data)

Restituisce la parte della data specificata nel parametro item come numero intero.

Restituisce 1 (gennaio) SELECT DATEPART(mese, "01/01/2012") -- Restituisce 4 (mercoledì) SELECT DATEPART(giorno della settimana, "01/02/2012")

NOMEDATA DATENAME (oggetto, data)

Restituisce la parte della data specificata nel parametro item come stringa di caratteri.

Resi gennaio SELECT DATENAME(mese, "01/01/2012") -- Resi mercoledì SELECT DATENAME(giorno della settimana, "01/02/2012")

DATEDIFF DATEDIFF (elemento, dat1, dat2)

Calcola la differenza tra le due parti delle date dat1 e dat2 e restituisce un risultato intero nelle unità specificate nell'argomento item.

Resi 19 (19 anni tra le date) SELECT DATEDIFF(anno, "01/01/1990", "01/01/2010") -- Resi 7305 (7305 giorni tra le date) SELECT DATEDIFF(giorno, "01/01/1990 ", "01/01/2010") .2010")

DATAADD DATEADD (elemento, n, data)

Aggiunge l'ennesimo numero di unità specificate nell'argomento item alla data data specificata. (Il valore dell'argomento n può anche essere negativo.)

Aggiungi 3 giorni alla data corrente SELECT DATEADD(day, 3, GETDATE())

Funzioni di stringa

Le funzioni stringa manipolano i valori delle colonne, che di solito hanno un tipo di dati carattere. Le funzioni di stringa supportate da Transact-SQL e una loro breve descrizione sono elencate nella tabella seguente:

Funzioni di stringa Transact-SQL
Funzione Sintassi Descrizione Esempio di utilizzo
ASCII, UNICODE ASCII(carattere), UNICODE(carattere)

Converte il carattere specificato nell'intero ASCII corrispondente.

SELEZIONA ASCII("W") -- 87 SELEZIONA UNICODE("W") -- 1102

CAR, NCHAR CHAR(int), NCHAR(int)

Converte un codice ASCII (o Unicode se NCHAR) nel carattere corrispondente.

SELECT CHAR(87) -- "W" SELECT NCHAR(1102) -- "w"

CARINDICE CARINDICE (str1, str2)

Restituisce la posizione iniziale dell'occorrenza della sottostringa str1 nella stringa str2. Se la stringa str2 non contiene la sottostringa str1, viene restituito il valore 0.

Restituisce 5 SELECT CHARINDEX ("morph", "polimorfismo")

DIFFERENZA DIFFERENZA(str1, str2)

Restituisce un numero intero da 0 a 4 che è la differenza tra i valori SOUNDEX delle due stringhe str1 e str2. Il metodo SOUNDEX restituisce un numero che caratterizza il suono della corda. Con questo metodo è possibile identificare stringhe dal suono simile. Funziona solo con caratteri ASCII.

Restituisce 2 SELEZIONA DIFFERENZA ("ortografia", "racconto")

SINISTRA DESTRA LEFT(str, lunghezza), RIGHT(str, lunghezza)

Restituisce il numero dei primi caratteri della stringa str, dato dal parametro di lunghezza per SINISTRA, e gli ultimi caratteri di lunghezza di str per la funzione DESTRA.

DICHIARA @str nvarchar(30) = "Sincronizza"; -- Restituisce "sync" SELEZIONA SINISTRA(@str, 4) -- Restituisce "zation" SELEZIONA DESTRA(@str, 5)

LEN LEN(str)

Restituisce il numero di caratteri (non il numero di byte) della stringa specificata nell'argomento, inclusi gli spazi finali.

INFERIORE SUPERIORE LOWER(str), UPPER(str)

La funzione LOWER converte tutte le lettere maiuscole di str1 in minuscole. Le lettere minuscole e gli altri caratteri inclusi nella stringa non sono interessati. La funzione UPPER converte tutte le lettere minuscole della stringa str in maiuscole.

DICHIARA @str nvarchar(30) = "Sincronizza"; -- Restituisce "SYNC" SELEZIONA SUPERIORE(@str) -- Restituisce "sync" SELEZIONA INFERIORE(@str)

LTRIM, RTRIM LTRIM(str), RTRIM(str)

La funzione LTRIM rimuove gli spazi iniziali nella stringa str, RTRIM rimuove di conseguenza gli spazi alla fine della stringa.

CITAZIONE QUOTENAME(char_string)

Restituisce una stringa Unicode delimitata per convertire la stringa di input in un identificatore delimitato valido.

DICHIARA @str nvarchar(30) = "Sincronizza"; -- Restituisce "[Sync]" SELECT QUOTENAME(@str)

PATINDICE PATIINDICE(%p%,espr)

Restituisce la posizione iniziale della prima occorrenza del modello p nella data expr, o zero se il modello specificato non viene trovato.

Restituisce 4 SELECT PATINDEX("%xro%", "Sync")

SOSTITUIRE SOSTITUISCI(str1, str2, str3)

Sostituisce tutte le occorrenze della sottostringa str2 nella stringa str1 con la sottostringa str3.

Restituisce "Desync" SELECT REPLACE("Sync", "Sync", "DeSync")

REPLICARE REPLICA(str, i)

Ripete la stringa str i volte.

Restituisce "aBaBaBaBaB" SELEZIONA REPLICA("aB", 5)

INVERSIONE RETROMARCIA(str)

Stampa la stringa str in ordine inverso.

Restituisce "yaicazinorchnis" SELECT REVERSE("Sincronizza")

SOUNDEX SOUNDEX (str)

Restituisce un codice soundex di quattro caratteri utilizzato per determinare la somiglianza di due stringhe. Funziona solo con caratteri ASCII.

SPAZIO SPAZIO (lunghezza)

Restituisce una stringa di spazi della lunghezza specificata dal parametro length. Simile a REPLICA(" ", lunghezza).

STR STR (f[, len[, d]])

Converte l'espressione a virgola mobile specificata f in una stringa, dove len è la lunghezza della stringa, inclusi punto decimale, segno, cifre e spazi (il valore predefinito è 10) e d è il numero di cifre frazionarie da restituire.

Restituisce "3.14" SELEZIONA STR (3.1415, 4, 2)

ROBA STUFF (str1, a, lunghezza, str2)

Rimuove i caratteri di lunghezza dalla stringa str1, a partire dalla posizione a, e inserisce la stringa str2 al loro posto.

Nota in un libro SELECT STUFF("Notebook", 5, 0," in a ") -- Manuale SELECT STUFF("Notebook", 1, 4, "Hand")

SOTTOSTRINGA SOTTOSTRINGA (str1, a, lunghezza)

Estrae dalla stringa str, a partire dalla posizione a, una sottostringa di lunghezza lunghezza.

Funzioni di sistema

Le funzioni di sistema Transact-SQL forniscono una vasta gamma di informazioni sugli oggetti di database. La maggior parte delle funzioni di sistema utilizza un identificatore numerico (ID) interno che viene assegnato a ciascun oggetto di database al momento della creazione. Con questo identificatore, il sistema può identificare in modo univoco ogni oggetto del database.

La tabella seguente elenca alcune delle funzioni di sistema più importanti insieme a una breve descrizione:

Funzioni di sistema Transact-SQL
Funzione Sintassi Descrizione Esempio di utilizzo
LANCIO CAST (w tipo AS [(lunghezza)]

Converte l'espressione w nel tipo di tipo di dati specificato (se possibile). L'argomento w può essere qualsiasi espressione valida.

Restituisce 3 SELECT CAST (3.1258 AS INT)

COALESCE COALESCE (a1, a2)

Restituisce il primo valore di espressione nell'elenco di espressioni a1, a2, ... che non è nullo.

COL_LENGTH COL_LENGTH (obj, col)

Restituisce la lunghezza della colonna col dell'oggetto database (tabella o vista) obj.

Restituisce 4 SELECT COL_LENGTH ("Impiegato", "Id")

CONVERTIRE CONVERTI (tipo[(lunghezza)], w)

Equivalente alla funzione CAST, ma gli argomenti sono specificati in modo diverso. Può essere utilizzato con qualsiasi tipo di dati.

CURRENT_TIMESTAMP CURRENT_TIMESTAMP

Restituisce la data e l'ora correnti.

UTENTE CORRENTE UTENTE CORRENTE

Restituisce il nome dell'utente corrente.

DATAENGTH LUNGHEZZA DATI (z)

Restituisce il numero di byte occupati dall'espressione z.

Questa query restituisce la lunghezza di ciascun campo SELECT DATALENGTH(FirstName) FROM Employee

GETANSINULL GETANSINULL("dbname")

Restituisce 1 se l'uso di valori null nel database dbname è conforme allo standard ANSI SQL.

È ZERO ISNULL (espr, valore)

Restituisce il valore di expr se non è NULL; in caso contrario, viene restituito il valore.

ISNUMERICO ISNUMERICO (espr)

Determina se expr ha un tipo numerico valido.

NUOVOID NUOVOID()

Crea un ID univoco costituito da una stringa binaria di 16 byte che viene utilizzata per memorizzare i valori del tipo di dati UNIQUEIDENTIFIER.

NEWSEQUENZIALID NEWSEQUENZIALID()

Crea un GUID maggiore di qualsiasi altro GUID precedentemente generato da questa funzione nel computer specificato. (Questa funzione può essere utilizzata solo come valore predefinito per una colonna.)

NULLIF NULLIF(espr1,espr2)

Restituisce null se i valori di expr1 ed expr2 sono gli stessi.

La query restituisce NULL per un progetto il cui -- ha Numero = "p1" SELECT NULLIF(Number, "p1") FROM Project

PROPRIETÀ DEL SERVER PROPRIETÀ SERVER (nome proprietà)

Restituisce informazioni sulle proprietà del server di database.

SYSTEM_USER SYSTEM_USER

Restituisce l'ID dell'utente corrente.

ID UTENTE ID UTENTE()

Restituisce il nome utente dell'ID utente. Se non viene specificato alcun utente, viene restituito l'ID utente corrente.

NOME UTENTE NOME UTENTE()

Restituisce il nome utente con l'ID specificato. Se l'ID non è specificato, viene restituito il nome dell'utente corrente.

Funzioni di metadati

Fondamentalmente, le funzioni di metadati restituiscono informazioni su un database e oggetti di database specificati. La tabella seguente elenca alcune delle più importanti funzioni dei metadati insieme a una breve descrizione:

Funzioni di metadati Transact-SQL
Funzione Sintassi Descrizione Esempio di utilizzo
COL_NAME COL_NAME (tab_id, col_id)

Restituisce il nome della colonna con il col_id specificato della tabella con l'id tab_id.

Restituisce il nome della colonna "LastName" SELECT COL_NAME (OBJECT_ID("Employee"), 3)

PROPRIETA' DELLA COLONNA COLUMNPROPERTY (id, col, proprietà)

Restituisce informazioni sulla colonna specificata.

Restituisce il valore della proprietà PRECISION -- per la colonna Id della tabella Employee SELECT COLUMNPROPERTY (OBJECT_ID("Employee"), "Id", "precision")

PROPRIETA' DEL DATABASE DATABASEPROPERTY (database, proprietà)

Restituisce il valore della proprietà della proprietà del database del database.

Restituisce il valore della proprietà IsNullConcat -- per il database SampleDb SELECT DATABASEPROPERTY ("SampleDb", "IsNullConcat")

DB_ID db_id()

Restituisce l'identificatore del database db_name. Se non viene specificato alcun nome di database, viene restituito l'ID del database corrente.

DB_NAME DB_NAME()

Restituisce il nome del database che ha l'id db_id. Se l'identificatore non è specificato, viene restituito il nome del database corrente.

INDEX_COL INDEX_COL (tabella, i, no)

Restituisce il nome della colonna indicizzata della tabella tabella. La colonna è indicata dall'ID indice i e dalla posizione n della colonna in quell'indice.

INDICEPROPRIETA' INDEXPROPERTY (obj_id, index_name, proprietà)

Restituisce l'indice denominato o le proprietà della statistica per l'ID tabella, il nome dell'indice o della statistica e il nome della proprietà specificati.

NOME_OGGETTO OBJECT_NAME (obj_id)

Restituisce il nome dell'oggetto database con obj_id.

SELEZIONA NOME_OGGETTO(245575913);

OGGETTO_ID OBJECT_ID (nome_oggetto)

Restituisce l'ID oggetto obj_name del database.

Restituisce 245575913 - ID tabella dipendente SELECT OBJECT_ID ("Employee")

PROPRIETA' DELL'OGGETTO OBJECTPROPERTY (obj_id, proprietà)

Restituisce informazioni sugli oggetti dal database corrente.

Di seguito sono riportate le principali funzionalità del linguaggio SQL.

Definizione dei dati. Questa funzione SQL è una descrizione della struttura dati supportata e dell'organizzazione delle relazioni relazionali (tabelle). Per la sua implementazione sono previsti gli operatori per la creazione di un database, la creazione di tabelle e l'accesso ai dati.

Creazione database. L'istruzione CREATE DATABASE viene utilizzata per creare un nuovo database. La struttura dell'istruzione specifica il nome del database da creare.

Creazione di tabelle. La tabella di base viene creata utilizzando l'istruzione CREATE TABLE. Questo operatore specifica i nomi dei campi, i relativi tipi di dati, la lunghezza (per alcuni tipi di dati). SQL utilizza i seguenti tipi di dati:

INTEGER è un numero intero;

CHAR - valore del carattere;

VARCHAR - valore del carattere, vengono memorizzati solo i caratteri non vuoti;

DECIMALE - numero decimale;

FLOAT - numero in virgola mobile;

DOPPIA PRECISIONE - virgola mobile a doppia precisione;

DATETIME - data e ora;

BOOL è un valore booleano.

L'istruzione di creazione della tabella specifica le restrizioni sui valori delle colonne e sulla tabella. Eventuali restrizioni sono mostrate nella tabella. 4.8

Tabella 4.8 Restrizioni sui dati definiti

Per un modello di dati relazionale, è essenziale specificare una chiave esterna (FOREIGNKEY). Quando si dichiarano chiavi esterne, è necessario imporre vincoli appropriati alla colonna, ad esempio NOT NULL.

In un'istruzione SQL, CHECK denota vincoli semantici che garantiscono l'integrità dei dati, come limitare l'insieme di valori validi per una determinata colonna.

Non è possibile utilizzare l'istruzione create table più di una volta sulla stessa tabella. Se, dopo la sua creazione, sono state rilevate imprecisioni nella sua definizione, è possibile apportare modifiche utilizzando l'istruzione ALTER TABLE. Questa istruzione ha lo scopo di modificare la struttura di una tabella esistente: puoi eliminare o aggiungere un campo a una tabella esistente.

Manipolazione di dati. SQL consente a un utente o un'applicazione di modificare il contenuto di un database inserendo nuovi dati, eliminando o modificando i dati esistenti.

Inserimento di nuovi datiè una procedura per aggiungere righe a un database e viene eseguita utilizzando l'istruzione INSERT.

Modifica dei dati comporta modifiche ai valori in una o più colonne di una tabella e viene eseguita utilizzando l'istruzione UPDATE. Esempio:

IMPOSTA importo=importo+1000,00

DOVE somma>0

Rimozione di righe dalla tabella viene eseguita utilizzando l'istruzione DELETE. La sintassi dell'operatore è:

DA tavolo

La clausola WHERE è facoltativa, tuttavia, se non è inclusa, tutti i record nella tabella verranno eliminati. È utile utilizzare l'istruzione SELECT con la stessa sintassi dell'istruzione DELETE per verificare in anticipo quali record verranno eliminati.

Garantire l'integrità dei dati. Il linguaggio SQL consente di definire vincoli di integrità abbastanza complessi, la cui soddisfazione verrà verificata per tutte le modifiche al database. Il controllo sui risultati delle transazioni, la gestione degli errori e il coordinamento del lavoro parallelo con il database di più applicazioni o utenti è fornito dalle istruzioni COMMIT (corregge la fine della transazione corrente e l'inizio di una nuova) e ROLLBACK (la necessità di un rollback - ripristino automatico dello stato del database all'inizio della transazione)

Campionamento dei dati- una delle funzioni più importanti del database, che corrisponde all'istruzione SELECT. Un esempio di utilizzo dell'operatore è stato discusso nella sezione precedente.

In SQL è possibile creare sequenze nidificate di query (sottoquery). Esistono alcuni tipi di query che possono essere implementate al meglio utilizzando le sottoquery. Queste query includono i cosiddetti controlli di esistenza. Supponiamo di voler ottenere dati sugli studenti che non hanno un punteggio di "sette". Se viene restituito un set vuoto, significa solo una cosa: ogni studente ha almeno una valutazione di questo tipo.

Tabelle di collegamento. Le istruzioni SQL consentono di recuperare dati da più tabelle. Un modo per farlo è collegare le tabelle su un unico campo comune.

L'istruzione SELECT deve contenere una restrizione sulla coincidenza dei valori di una determinata colonna (campo). Quindi solo quelle righe in cui i valori della colonna specificata corrispondono verranno recuperati dalle tabelle correlate. Il nome della colonna è indicato solo insieme al nome della tabella; in caso contrario, l'operatore sarà ambiguo.

È possibile utilizzare altri tipi di collegamento di tabelle: l'operatore INTER JOIN (inner join) fornisce la presenza nel set di record risultante, facendo corrispondere i valori nei relativi campi. I join esterni (OUTER JOIN) consentono di includere nel risultato della query tutte le righe di una tabella e le righe corrispondenti di un'altra

Controllo di accesso. SQL fornisce la sincronizzazione dell'elaborazione del database da parte di vari programmi applicativi, la protezione dei dati da accessi non autorizzati.

L'accesso ai dati in un ambiente multiutente è regolato dalle istruzioni GRANT e REVOKE. In ogni istruzione è necessario specificare l'utente, l'oggetto (tabella, vista), in relazione al quale sono impostate le autorizzazioni e le autorizzazioni stesse. Ad esempio, l'istruzione GRANT offre all'utente X la possibilità di recuperare i dati dalla tabella PRODUCT:

CONCEDERE SELEZIONA SUL PRODOTTO A X

L'istruzione REVOKE revoca tutte le autorizzazioni concesse in precedenza.

Incorporamento di SQL nei programmi applicativi. Le applicazioni reali sono solitamente scritte in altri linguaggi che generano codice SQL e lo passano al DBMS come testo ASCII.

I prodotti IBM Standard for SQL specificano l'uso dell'SQL incorporato. Quando si scrive un programma applicativo, il suo testo è una combinazione di comandi del linguaggio di programmazione principale (ad esempio C, Pascal, Cobol, Fortran, Assembler) e comandi SQL con un prefisso speciale, ad esempio. ExecSQL. La struttura delle istruzioni SQL è stata estesa per accogliere le variabili del linguaggio host nei costrutti SQL.

Il processore SQL modifica la forma del programma in base ai requisiti del compilatore del linguaggio di programmazione principale. La funzione di un compilatore è tradurre (tradurre) un programma da un linguaggio di programmazione sorgente in un linguaggio vicino a un linguaggio macchina. Dopo la compilazione, il programma applicato (applicazione) è un modulo indipendente.

Dialetti SQL

Nei moderni DBMS relazionali, i dialetti del linguaggio SQL vengono utilizzati per descrivere e manipolare i dati. Un sottoinsieme del linguaggio SQL che permette di creare e descrivere un database è chiamato DDL (Data Definition Language).

SQL era originariamente chiamato SEQUEL (Structured English Query Language), quindi SEQUEL/2 e quindi solo SQL. Oggi, SQL è lo standard de facto per i sistemi di gestione di database relazionali.

Il primo standard di linguaggio è apparso nel 1989 - SQL-89 ed è stato supportato da quasi tutti i DBMS relazionali commerciali. Era di natura generale e consentiva un'interpretazione ampia. I vantaggi di SQL-89 possono essere considerati la standardizzazione della sintassi e della semantica degli operatori di selezione e manipolazione dei dati, nonché la fissazione dei mezzi per limitare l'integrità del database. Tuttavia, mancava una sezione così importante come la manipolazione dello schema del database. L'incompletezza dello standard SQL-89 ha portato alla comparsa nel 1992 di la prossima versione del linguaggio SQL.

SQL2 (o SQL-92) copre praticamente tutto ciò di cui hai bisogno: manipolazione dello schema del database, gestione di transazioni e sessioni, architetture client-server o strumenti di sviluppo di applicazioni.

Il passo successivo nello sviluppo del linguaggio è la variante SQL 3. Questa versione del linguaggio è integrata da un meccanismo di trigger, la definizione di un tipo di dati arbitrario e un'estensione dell'oggetto.

Attualmente ci sono tre livelli linguistici: Principiante, Intermedio e Completo. Molti fornitori di database utilizzano le proprie implementazioni di SQL, basate almeno sul livello iniziale dello standard ANSI pertinente e contenenti alcune estensioni specifiche per un particolare DBMS. In tavola. 4.9 mostra esempi di dialetti SQL.

Tabella 4.9 Dialetti SQL

DBMS Linguaggio di interrogazione
Sistema DBMS R SQL
DB2 SQL
Accesso SQL
SYBASE SQL ovunque wacom-sql
SYBASE SQL Server Transact_SQL
MySQL SQL
Oracolo PL/SQL

I database orientati agli oggetti utilizzano il linguaggio di query degli oggetti OQL (Object Query Language). Il linguaggio OQL era basato sul comando SQL2 SELECT e aggiungeva la possibilità di indirizzare una query a un oggetto o a una raccolta di oggetti, nonché la possibilità di chiamare metodi all'interno di una singola query.

La compatibilità di molti dialetti SQL utilizzati determina la compatibilità del DBMS. Pertanto, il DBMS SYBASE SQL Anywhere è il più compatibile possibile per un DBMS di questa classe con il DBMS SYBASE SQL Server. Uno dei lati di questa compatibilità è il supporto in SYBASE SQL Anywhere di un tale dialetto del linguaggio SQL come Transazioni SQL. Questo dialetto viene utilizzato in SYBASE SQL Server e può essere utilizzato in SYBASE SQL Anywhere insieme al proprio dialetto del linguaggio SQL - wacom-sql.

domande di prova

1. Come si classifica un DBMS?

2. Quali modelli di database esistono?

3. Quali sono gli elementi principali dei modelli infologici?

4. Quali tipi di relazioni esistono tra le entità?

5. Cosa sono i diagrammi ER ea cosa servono?

6. Cosa ti permette di fare la procedura di normalizzazione delle tabelle?

7. Quali sono i linguaggi e gli strumenti software del DBMS?

8. Che tipo di DBMS è MS Access?

9. Quali sono gli oggetti principali di MS Access DBMS?

10. A cosa servono le istruzioni SQL di base?

Lo standard del linguaggio SQL è stato adottato nel 1992 ed è ancora in uso oggi. È stato lui a diventare lo standard per molti.Certamente, alcuni produttori usano le proprie interpretazioni dello standard. Ma in qualsiasi sistema ci sono ancora componenti principali: istruzioni SQL.

introduzione

Con l'aiuto di istruzioni SQL, i valori, le tabelle vengono gestiti e ricevuti per un'ulteriore analisi e visualizzazione. Sono un insieme di parole chiave attraverso le quali il sistema comprende cosa fare con i dati.

Sono definite diverse categorie di istruzioni SQL:

  • definizione di oggetti di database;
  • manipolazione del valore;
  • protezione e gestione;
  • parametri di sessione;
  • informazioni di base;
  • SQL statico;
  • SQL dinamico.

Istruzioni SQL per la manipolazione dei dati

INSERIRE. Inserisce le righe in una tabella esistente. Può essere utilizzato sia per un valore che per più, determinati da qualche condizione. Per esempio:

nome tabella (nome colonna 1, nome colonna 2)

VALORI (valore 1, valore 2).

Per utilizzare l'istruzione INSERT su più valori, la sintassi è:

nome tabella 1 (nome colonna 1, nome colonna 2)

SELEZIONA nome colonna 1, nome colonna 2

DA nome tabella 2

WHERE nome tabella 2.nome colonna 1>2

Questa query selezionerà tutti i dati dalla tabella 2 che è maggiore di 2 nella colonna 1 e li inserirà nella prima.

AGGIORNARE. Come suggerisce il nome, questa istruzione di query SQL aggiorna i dati in una tabella esistente in base a un determinato attributo.

AGGIORNAMENTO nome tabella 1

SET nome colonna 2 = "Basilico"

WHERE nome tabella 1.nome colonna 1 = 1

Questa costruzione riempirà con il valore Vasily tutte le righe in cui incontra il numero 1 nella prima colonna.

Dati dalla tabella. È possibile specificare qualsiasi condizione o rimuovere tutte le righe.

CANCELLA DA nome tabella

WHERE nome tabella.nome colonna 1 = 1

La query precedente rimuoverà dal database tutti i dati con un valore di uno nella prima colonna. Ed ecco come cancellare l'intera tabella:

Istruzione SELEZIONA

Lo scopo principale di SELECT è selezionare i dati in base a determinate condizioni. Il risultato del suo lavoro è sempre una nuova tabella con dati selezionati. L'operatore MS può essere utilizzato in molte query diverse. Pertanto, insieme ad esso, puoi considerare altre parole chiave correlate.

Per selezionare tutti i dati da una tabella particolare, utilizzare il segno "*".

DA nome tabella 1

Il risultato di questa query sarà una copia esatta della tabella 1.

E qui c'è una selezione in base alla condizione WHERE, che ottiene dalla tabella 1 tutti i valori maggiori di 2 nella colonna 1.

DA nome tabella 1

WHERE nome tabella 1.nome colonna 1 > 2

Puoi anche specificare nella selezione che sono necessarie solo determinate colonne.

SELECT nome tabella 1.nome colonna 1

DA nome tabella 1

Il risultato di questa query saranno tutte le righe con valori dalla colonna 1. Utilizzando le istruzioni MS SQL, puoi creare la tua tabella sostituendo, calcolando e sostituendo determinati valori in movimento.

nome tabella 1.nome colonna 1

nome tabella 1.nome colonna 2

nome tabella 1.nome colonna 3

nome tabella 1.nome colonna 2 * nome tabella 1.nome colonna 3 AS SUMMA

DA nome tabella 1

Questa query apparentemente complessa recupera tutti i valori dalla tabella 1, quindi crea nuove colonne EQ e SUMMA. Inserisce nel primo il segno "+" e nella seconda il prodotto dei dati delle colonne 2 e 3. Il risultato può essere presentato sotto forma di tabella, per capire come funziona:

Quando si utilizza l'istruzione SELECT, è possibile ordinare immediatamente i dati in base a un attributo. Per questo viene utilizzata la parola ORDER BY.

nome tabella 1.nome colonna 1

nome tabella 1.nome colonna 2

nome tabella 1.nome colonna 3

DA nome tabella 1

ORDINA PER nome colonna 2

La tabella risultante sarà simile a questa:

Cioè, tutte le righe sono state impostate in un ordine tale che i valori nella colonna 2 fossero in ordine crescente.

I dati possono anche essere recuperati da più tabelle. Per chiarezza, devi prima immaginare che ce ne siano due nel database, qualcosa del genere:

Tabella "Dipendenti"

Tabella "Stipendio"

Ora devi collegare in qualche modo queste due tabelle per ottenere valori comuni. Usando le istruzioni SQL di base, puoi farlo in questo modo:

Numero.personale

Nome dell'impiegato

Stipendio Tariffa

Stipendio maturato

DA Dipendenti, Stipendio

DOVE Dipendenti.Numero = Stipendio.Numero

Qui c'è una selezione da due diverse tabelle di valori, unite da un numero. Il risultato sarà il seguente set di dati:

Un po' di più su SELECT. Utilizzo di funzioni aggregate

Uno degli operatori principali può eseguire alcuni calcoli durante il recupero. Per fare ciò, usa determinate funzioni e formule.

Ad esempio, per ottenere il numero di record dalla tabella "Dipendenti", è necessario utilizzare la query:

SELEZIONA CONTEGGIO (*) COME N

DA Dipendenti

Il risultato è una tabella con un valore e una colonna.

Puoi usare questa query e vedere cosa succede:

SUM(Stipendio. Maturato) COME SUMMA

MAX(Stipendio.Maturato) COME MAX

MIN(Stipendio. Maturato) AS MIN

AVG(Stipendio.Maturato) COME SRED

DA Stipendio

Il tavolo finale sarà così:

In questo modo è possibile selezionare dal database i valori desiderati eseguendo al volo il calcolo delle varie funzioni.

Unione, intersezione e differenze

Combina più query in SQL

SELEZIONA Dipendenti.Nome

DA Dipendenti

DOVE Dipendenti.Numero = 1

SELEZIONA Dipendenti.Nome

DA Dipendenti, Stipendio

DOVE Stipendio.Numero = 1

Va tenuto presente che con tale join, le tabelle devono essere compatibili. Cioè avere lo stesso numero di colonne.

Sintassi dell'istruzione SELECT e ordine di elaborazione

Prima di tutto, SELECT definisce l'area da cui prenderà i dati. La parola chiave FROM viene utilizzata per questo. Se non viene specificato cosa scegliere esattamente.

Quindi potrebbe esserci una clausola SQL WHERE. Con il suo aiuto, SELECT esegue tutte le righe della tabella e verifica la conformità dei dati alla condizione.

Se nella query è presente un GROUP BY, i valori vengono raggruppati in base ai parametri specificati.

Operatori di confronto dati

Ce ne sono di diversi tipi. In SQL, gli operatori di confronto possono testare diversi tipi di valori.

    "=". Denota, come puoi immaginare, l'uguaglianza di due espressioni. Ad esempio, è già stato utilizzato negli esempi precedenti - WHERE Salary.Number = 1.

    ">". Più segno. Se il valore del lato sinistro dell'espressione è maggiore, viene restituito il valore logico TRUE e la condizione è considerata soddisfatta.

    «<». Знак меньше. Обратный предыдущему оператор.

    Segni "<=» и «>=". Differisce dai semplici operatori more e less in quanto se gli operandi sono uguali, anche la condizione sarà vera.

PIACE

Questa parola chiave può essere tradotta come "simile". L'operatore LIKE in SQL viene utilizzato all'incirca allo stesso modo: esegue una query in base a un modello. Cioè, consente di espandere la selezione di dati dal database utilizzando espressioni regolari.

Ad esempio, è stato impostato il seguente compito: dalla base già nota "Impiegati" per ottenere tutte le persone il cui nome termina con "I". Quindi la query può essere scritta in questo modo:

DA Dipendenti

WHERE Nome LIKE `%i`

Il segno di percentuale in questo caso indica una maschera, ovvero qualsiasi carattere e il loro numero. E con la lettera "i" SQL determinerà che l'ultimo carattere dovrebbe essere proprio quello.

ASTUCCIO

Questa istruzione di SQL Server è un'implementazione della selezione multipla. Assomiglia al costrutto switch in molti linguaggi di programmazione. L'istruzione CASE in SQL esegue un'azione su più condizioni.

Ad esempio, è necessario selezionare i valori massimo e minimo dalla tabella Stipendio.

Quindi la query può essere scritta in questo modo:

DA Stipendio

WHERE CASE QUANDO SELEZIONARE MAX(Maturato) POI Massimo

QUANDO SELEZIONARE MIN(Maturato) POI Minimo

In questo contesto, il sistema ricerca il valore massimo e minimo nella colonna Maturato. Quindi, tramite FINE, viene creato un campo "totale", in cui verrà inserito "Massimo" o "Minimo", a seconda del risultato della condizione.

A proposito, SQL ha anche una forma più compatta di CASE - COALESCE.

Operatori di definizione dei dati

Questa visualizzazione consente di apportare una serie di modifiche alle tabelle: creazione, eliminazione, modifica e utilizzo degli indici.

Il primo che vale la pena considerare è CREATE TABLE. Non fa altro che creare una tabella. Se si digita semplicemente la query CREATE TABLE, non accadrà nulla, poiché è comunque necessario specificare alcuni parametri.

Ad esempio, per creare la già familiare tabella Dipendenti, è necessario utilizzare i comandi:

CREA TABELLA Dipendenti

(Numero numero(10) NON NULL

Nome varchar(50) NON NULL

Cognome varchar(50) NOT NULL)

In questa query, i nomi dei campi e dei loro tipi vengono immediatamente determinati tra parentesi, nonché se può essere uguale a NULL.

TAVOLA A GOCCIA

Esegue una semplice attività, eliminando la tabella specificata. Ha un parametro IF EXISTS aggiuntivo. Assorbe un errore durante l'eliminazione se la tabella cercata non esiste. Esempio di utilizzo:

DROP TABLE Dipendenti SE ESISTE.

CREA INDICE

SQL ha un sistema di indicizzazione che consente di velocizzare l'accesso ai dati. In generale, è un collegamento che punta a una determinata colonna. Puoi creare un indice con una semplice query:

CREATE INDEX nome_indice

ON nome_tabella(nome_colonna)

Questo operatore è utilizzato in T-SQL, Oracle, PL SQL e molte altre tecnologie di interpretazione.

ALTER TABELLA

Un operatore molto funzionale con numerose opzioni. In generale, cambia la struttura, la definizione e il posizionamento delle tabelle. L'operatore è utilizzato in Oracle SQL, Postgres e molti altri.

    INSERISCI. Aggiunge una colonna a una tabella. La sua sintassi è: ALTER TABLE nome_tabella ADD nome_colonna tipo_dati_memorizzato. Può avere un'opzione SE NON ESISTE per eliminare l'errore se la colonna creata esiste già;

    FAR CADERE. Elimina una colonna. Ha anche una chiave IF EXISTS, senza la quale verrà generato un errore che dice che manca la colonna richiesta;

    MODIFICARE. Serve per rinominare il nome del campo in quello specificato. Esempio di utilizzo: ALTER TABLE nome_tabella CHANGE nome_vecchio nome_nuovo;

    MODIFICARE. Questo comando ti aiuterà a modificare il tipo e gli attributi aggiuntivi di una colonna specifica. Ed è usato in questo modo: ALTER TABLE nome_tabella MODIFY nome_colonna tipo_dati attributi;

CREA VISTA

In SQL, esiste una cosa come una vista. In breve, questa è una specie di tabella virtuale con i dati. Viene formato come risultato di una selezione mediante l'istruzione SQL SELECT. Le viste possono limitare l'accesso al database, nasconderlo, sostituire i nomi delle colonne reali.

Il processo di creazione avviene con una semplice richiesta:

CREA VISUALIZZA il nome della vista COME SELEZIONA DA * nome della tabella

Il campionamento può avvenire nell'intero database nel suo insieme e in base ad alcune condizioni.

Un po' di funzioni

Le query SQL utilizzano molto spesso varie funzioni integrate che consentono di interagire con i dati e trasformarli al volo. Vale la pena prenderli in considerazione, in quanto sono parte integrante di un linguaggio strutturato.

    CONTARE. Conta i record o le righe in una tabella particolare. Come parametro, puoi specificare il nome della colonna, quindi i dati verranno presi da essa. SELEZIONA CONTEGGIO * DA Dipendenti;

    A.V.G. si applica solo alle colonne con dati numerici. Il suo risultato è la determinazione della media aritmetica di tutti i valori;

    MIN e MAX. Queste funzioni sono già state utilizzate in questo articolo. Determinano i valori massimo e minimo dalla colonna specificata;

    SOMMA. È semplice: la funzione calcola la somma dei valori delle colonne. Viene utilizzato esclusivamente per il tipo di dati numerico. Aggiungendo il parametro DISTINCT alla query, verranno sommati solo i valori univoci;

    IL GIRO. La funzione di arrotondamento dei numeri decimali frazionari. La sintassi utilizza il nome della colonna e il numero di cifre decimali;

    len. Una semplice funzione che calcola la lunghezza dei valori di una colonna. Il risultato sarà una nuova tabella con l'indicazione del numero di caratteri;

    ADESSO. Questa parola chiave viene utilizzata per calcolare la data e l'ora correnti.

Operatori aggiuntivi

Molti degli esempi di istruzioni SQL hanno parole chiave che eseguono piccole attività ma semplificano notevolmente le selezioni o le operazioni del database.

    COME. Viene utilizzato quando è necessario visualizzare il risultato assegnando il nome specificato alla tabella risultante.

    FRA. Uno strumento di selezione molto utile. Specifica l'intervallo di valori da cui ottenere i dati. L'input accetta un parametro da e per quale numero viene utilizzato l'intervallo;.

    NON. Un operatore fornisce l'opposto di un'espressione.

    TRONCARE. Rimuove i dati dall'area specificata del database. Si differenzia da operatori simili in quanto è impossibile recuperare i dati dopo il loro utilizzo. Vale la pena considerare che l'implementazione di questa parola chiave in diverse interpretazioni di SQL può differire. Pertanto, prima di provare a utilizzare TRUNCATE, è meglio leggere le informazioni della guida.

    LIMITE. Imposta il numero di righe da visualizzare. La particolarità dell'operatore è che si trova sempre all'estremità. Richiede un parametro obbligatorio e uno facoltativo. Il primo specifica quante righe con i dati selezionati mostrare. E se viene utilizzato il secondo, l'operatore funziona come per un intervallo di valori.

    UNIONE. Un operatore molto utile per combinare più query. Ha già incontrato tra gli esempi di questo in questo articolo. È possibile visualizzare le righe desiderate da più tabelle unendole con UNION per un uso più conveniente. La sintassi è: SELECT nome_colonna DA nome_tabella UNION SELECT altro_nome_colonna FROM altro_nome_tabella. Il risultato è una tabella pivot con query combinate.

    CHIAVE PRIMARIA. Tradotto come "chiave primaria". In realtà, è questa terminologia che viene utilizzata nei materiali di riferimento. Sta per l'identificatore di riga univoco. Viene utilizzato, di regola, durante la creazione di una tabella per specificare il campo che la conterrà.

    PREDEFINITO. Proprio come l'operatore precedente, viene utilizzato nel processo di esecuzione della query di creazione. Definisce il valore predefinito che verrà compilato nel campo al momento della creazione.

    NULLO. I principianti e non solo i programmatori, quando compilano le query, molto spesso dimenticano la possibilità di ottenere un valore NULL. Di conseguenza, un errore si insinua nel codice, che è difficile da rintracciare durante il debug. Pertanto, durante la creazione di tabelle, la selezione o il ricalcolo dei valori, è necessario fermarsi e pensare se viene presa in considerazione l'occorrenza di NULL in questa sezione della query.

    Memoria. Questo articolo ha mostrato diverse funzioni che possono eseguire determinate attività. Quando si sviluppa una shell per lavorare con il database, è possibile "superare" il calcolo di semplici espressioni sul sistema di gestione del database. In alcuni casi, questo dà un aumento significativo delle prestazioni.

    Restrizioni. Se hai bisogno di ottenerne solo due da un database con migliaia di righe, dovresti usare operatori come LIMIT o TOP. Non è necessario estrarre i dati utilizzando il linguaggio di sviluppo della shell.

    Composto. Dopo aver ricevuto dati da diverse tabelle, molti programmatori iniziano a riunirli usando la memoria della shell. Ma perché? Dopotutto, puoi fare una richiesta in cui tutto questo sarà presente. Non è necessario scrivere codice aggiuntivo e riservare memoria aggiuntiva nel sistema.

    Ordinamento. Se è possibile applicare l'ordinamento nella query, ovvero tramite il DBMS, è necessario utilizzarlo. Ciò consentirà di risparmiare notevolmente sulle risorse durante l'esecuzione di un programma o servizio.

    Molte richieste. Se devi inserire molti record in sequenza, per l'ottimizzazione dovresti pensare all'inserimento batch di dati in una query. Ciò aumenterà anche le prestazioni dell'intero sistema nel suo insieme.

    Posizionamento ponderato dei dati. Prima di compilare la struttura del database, è necessario pensare se è necessario un tale numero di tabelle e campi. Forse c'è un modo per unirli o scartarne alcuni. Molto spesso, i programmatori utilizzano una quantità eccessiva di dati che non verranno mai utilizzati da nessuna parte.

    Tipi. Per risparmiare spazio e risorse, devi essere sensibile ai tipi di dati che utilizzi. Se è possibile utilizzare un tipo meno "pesante" per la memoria, è necessario utilizzarlo. Ad esempio, se è noto che in un determinato campo il valore numerico non supererà 255, perché utilizzare un INT a 4 byte se è presente un TINYINT di 1 byte.

Conclusione

In conclusione, va notato che il linguaggio di query strutturato SQL è ormai utilizzato un po' ovunque: siti, servizi web, programmi per PC, applicazioni per dispositivi mobili. Pertanto, la conoscenza di SQL aiuterà tutti i rami dello sviluppo.

Allo stesso tempo, le modifiche allo standard della lingua originale a volte differiscono l'una dall'altra. Ad esempio, le istruzioni PL SQL possono avere una sintassi diversa rispetto a SQL Server. Pertanto, prima di iniziare a sviluppare con questa tecnologia, dovresti leggere i relativi manuali.

In futuro è improbabile che appaiano analoghi che potrebbero superare SQL in termini di funzionalità e prestazioni, quindi quest'area è una nicchia piuttosto promettente per qualsiasi programmatore.