Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Operazioni CRUD di SQL Server

Nella programmazione di database, ci sono quattro operazioni fondamentali:crea , leggi , aggiornamento e elimina CRUD operazioni. Sono il primo passo nella programmazione del database.

Il termine CRUD è apparso per la prima volta nel libro di James Martin "Managing the Database Environment". Da allora, questo termine è diventato popolare. In questo articolo, esploreremo l'operazione CRUD in termini di SQL Server perché la sintassi dell'operazione può differire da altri database relazionali e NoSQL.

Preparativi

L'idea principale dei database relazionali è la memorizzazione dei dati nelle tabelle. I dati della tabella possono essere letti, inseriti, cancellati. In questo modo, le operazioni CRUD manipolano i dati della tabella.

C C REATE Inserisci riga/righe in una tabella
R R EAD Legge (seleziona) riga/righe da una tabella
U U PDATE Modifica riga/righe nella tabella
D D ELETE Elimina riga/righe dalla tabella

Per illustrare le operazioni CRUD, abbiamo bisogno di una tabella di dati. Creiamone uno. Conterrà solo tre colonne. La prima colonna memorizzerà i nomi dei paesi, la seconda memorizzerà il continente di questi paesi e l'ultima colonna memorizzerà la popolazione di questi paesi. Possiamo creare questa tabella con l'aiuto dell'istruzione T-SQL e intitolarla come TblCountry .

CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL 
)

Esaminiamo ora le operazioni CRUD eseguite su TblCountry tabella.

C – CREA

Per aggiungere nuove righe a una tabella, utilizziamo INSERT INTO comando. In questo comando, dobbiamo specificare il nome della tabella di destinazione ed elencheremo i nomi delle colonne tra parentesi. La struttura dell'istruzione dovrebbe terminare con VALUES:

INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   ('Germany','Europe',8279000 )

Per aggiungere più righe alla tabella, possiamo utilizzare il seguente tipo di istruzione INSERT:

INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

Nota che INTO la parola chiave è facoltativa e non è necessario utilizzarla nelle istruzioni di inserimento.

INSERT  TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

Inoltre, puoi utilizzare il seguente formato per inserire più righe nella tabella:

INSERT INTO TblCountry
SELECT 'Germany','Europe',8279000 
UNION ALL
SELECT 'Japan','Asia',126800000 
UNION ALL
SELECT 'Moroco','Africa',35740000

Ora copieremo i dati direttamente dalla tabella di origine alla tabella di destinazione. Questo metodo è noto come INSERT INTO … SELECT dichiarazione.

INSERT INTO … SELECT richiede la corrispondenza dei tipi di dati delle tabelle di origine e di destinazione. Nella seguente istruzione INSERT INTO … SELECT, inseriremo i dati del SourceCountryTbl tabella nel TblCountry tabella.

Inizialmente, inseriamo alcuni dati sintetici nel SourceCountryTbl tabella per questa dimostrazione.

DROP TABLE IF EXISTS [SourceCountryTbl]
CREATE TABLE [dbo].[SourceCountryTbl]
(
	[SourceCountryName]		VARCHAR(50), 
    [SourceContinentNames]	VARCHAR(50) NULL, 
    [SourceCountryPopulation]		BIGINT NULL 
	
)


INSERT INTO [SourceCountryTbl] 
VALUES 
('Ukraine','Europe',44009214  ) ,
('UK','Europe',66573504) ,
('France','Europe',65233271)

Ora eseguiremo l'istruzione INSERT INTO … SELECT.

INSERT INTO TblCountry
SELECT * FROM SourceCountryTbl

L'istruzione di inserimento sopra ha aggiunto tutti i SourceCountryTbl dati al TblCountry tavolo. Possiamo anche aggiungere il WHERE clausola per filtrare l'istruzione select.

INSERT INTO TblCountry
SELECT * FROM SourceCountryTbl WHERE TargetCountryName='UK'

SQL Server ci consente di utilizzare variabili di tabella (oggetti che aiutano a memorizzare i dati di tabelle temporanee nell'ambito locale) con le istruzioni INSERT INTO … SELECT. Nella seguente dimostrazione, useremo la variabile table come tabella di origine:

  DECLARE @SourceVarTable AS TABLE
  ([TargetCountryName]		VARCHAR(50), 
    [TargetContinentNames]	VARCHAR(50) NULL, 
    [TargetCountryPopulation]		BIGINT NULL 
   )


    INSERT INTO @SourceVarTable 
     VALUES 
     ('Ukraine','Europe',44009214  ) ,
     ('UK','Europe',66573504) ,
     ('France','Europe',65233271)


INSERT INTO TblCountry
SELECT * FROM @SourceVarTable

Suggerimento :Microsoft ha annunciato una funzionalità in SQL Server 2016 che è l'inserimento parallelo . Questa funzione ci consente di eseguire operazioni di INSERT in thread paralleli.

Se aggiungi il TABLOCK suggerimento alla fine dell'istruzione di inserimento, SQL Server può scegliere un parallelo con il piano di esecuzione dell'elaborazione in base al grado massimo di parallelismo del server o alla soglia di costo per i parametri di parallelismo.

L'elaborazione di inserimento parallelo ridurrà anche il tempo di esecuzione dell'istruzione di inserimento. Tuttavia, il TABLOCK hint acquisirà il blocco della tabella inserita durante l'operazione di inserimento. Per ulteriori informazioni sull'inserimento parallelo, è possibile fare riferimento a INSERT Parallelo Real World...SELECT.

Un'altra pratica istruzione è SELECT INTO. Questo metodo ci consente di copiare i dati da una tabella in una tabella appena creata. Nella seguente dichiarazione, NewCountryTable non esisteva prima dell'esecuzione della query. La query crea la tabella e inserisce tutti i dati da TblCountry tabella.

SELECT * INTO NewCountryTable 
FROM TblCountry

Allo stesso tempo, possiamo creare una nuova tabella per particolari colonne della tabella di origine.

In alcuni casi, è necessario restituire e utilizzare i valori inseriti dall'istruzione INSERT. Da SQL Server 2005, l'istruzione INSERT ci consente di recuperare i valori in questione dall'istruzione INSERT.

Ora rilasceremo e creeremo la nostra tabella di test e aggiungeremo una nuova colonna di identità. Inoltre, aggiungeremo un vincolo predefinito a questa colonna. Pertanto, se non inseriamo alcun valore esplicito in questa colonna, creerà automaticamente un nuovo valore.

Nell'esempio seguente dichiareremo una tabella con una colonna e inseriremo l'output del SeqID valore della colonna in questa tabella con l'aiuto della colonna OUTPUT:

DROP TABLE IF EXISTS TblCountry
CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL ,
	SeqID uniqueidentifier  default(newid())
)	



DECLARE @OutputID AS TABLE(LogID uniqueidentifier) 
 
INSERT  TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
OUTPUT INSERTED.SeqId INTO @OutputID
VALUES   
('Germany','Europe',8279000 )

SELECT * FROM @OutPutId

R – Leggi

Il Leggi l'operazione recupera i dati da una tabella e restituisce un set di risultati con i record della tabella. Nel caso in cui desideriamo recuperare dati da più tabelle, possiamo utilizzare l'operatore JOIN e creare una relazione logica tra le tabelle.

L'istruzione SELECT svolge un unico ruolo principale nella lettura operazione. Si basa su tre componenti:

  • Colonna – definiamo le colonne da cui vogliamo recuperare i dati
  • Tabella – noi specificare la tabella da cui vogliamo ottenere i dati
  • Filtra – noi può filtrare i dati che vogliamo leggere. Questa parte è facoltativa.

La forma più semplice dell'istruzione select è la seguente:

SELECT column1, column2,...,columnN
FROM table_name

Ora, esamineremo gli esempi. All'inizio, abbiamo bisogno di una tabella di esempio da leggere. Creiamolo:

DROP TABLE  IF EXISTS TblCountry
 GO
CREATE TABLE [dbo].[TblCountry]
(
	[CountryName]		VARCHAR(50), 
    [ContinentNames]	VARCHAR(50) NULL, 
    [CountryPopulation]		BIGINT NULL 
)

GO
INSERT INTO TblCountry  
(CountryName,ContinentNames,CountryPopulation) 
VALUES   
('Germany','Europe',8279000 ), 
('Japan','Asia',126800000 ),
('Moroco','Africa',35740000)

Lettura di tutte le colonne della tabella

L'operatore asterisco (*) viene utilizzato nelle istruzioni SELECT perché restituisce tutte le colonne della tabella:

SELECT * FROM TblCountry

Suggerimento :L'operatore asterisco (*) può influenzare negativamente le prestazioni perché provoca più traffico di rete e consuma più risorse. Pertanto, se non è necessario ottenere tutti i dati da tutte le colonne restituite, evitare di utilizzare l'asterisco (*) nell'istruzione SELECT.

Lettura di colonne particolari della tabella

Possiamo leggere anche colonne particolari della tabella. Esaminiamo l'esempio che restituirà solo il CountryName e Paese Popolazione colonne:

SELECT CountryName,CountryPopulation FROM TblCountry

Utilizzo di alias nelle istruzioni SELECT

Nelle istruzioni SELECT, possiamo assegnare nomi temporanei alla tabella o alle colonne. Questi nomi temporanei sono alias. Riscriviamo le due query precedenti con alias di tabella e colonna.

Nella query seguente, il TblC alias specificherà il nome della tabella:

SELECT TblC.* FROM TblCountry TblC

Nell'esempio seguente forniremo alias per i nomi delle colonne. Cambieremo CountryName a CName e Paese Popolazione – a CPop .

SELECT TblC.CountryName AS [CName], CountryPopulation AS [CPop] FROM TblCountry TblC

Gli scopi dell'alias sono:

  • Rendi la query più leggibile se i nomi delle tabelle o delle colonne sono complessi.
  • Assicurati di utilizzare una query per la tabella più di una volta.
  • Semplifica la scrittura delle query se il nome della tabella o della colonna è lungo.

Filtraggio delle istruzioni SELECT

Le istruzioni SELECT ci consentono di filtrare i set di risultati tramite la clausola WHERE. Ad esempio, vogliamo filtrare l'istruzione SELECT in base a CountryName colonna e restituire solo i dati della Germania nel set di risultati. La seguente query eseguirà l'operazione di lettura con un filtro:

SELECT TblC.* FROM TblCountry TblC
WHERE TblC.CountryName='Germany'

Ordinamento dei risultati delle istruzioni SELECT

La clausola ORDER BY ci aiuta a ordinare il set di risultati dell'istruzione SELECT in base alla colonna o alle colonne specificate. Possiamo eseguire l'ordinamento ascendente o discendente con l'aiuto della clausola ORDER BY.

Ordineremo il TblCountry tabella in base alla popolazione dei paesi in ordine crescente:

SELECT TblC.* FROM TblCountry TblC
ORDER BY TblC.CountryPopulation ASC

Suggerimento :puoi utilizzare l'indice di colonna nella clausola ORDER BY e i numeri di indice delle colonne iniziano con 1.

Possiamo anche scrivere la query precedente. Il numero tre (3) indica la CounrtyPopulation colonna:

SELECT TblC.* FROM TblCountry TblC
ORDER BY 3 ASC

U – Aggiornamento

L'istruzione UPDATE modifica i dati esistenti nella tabella. Questa istruzione deve includere la clausola SET in modo da poter definire la colonna di destinazione per modificare i dati.

La seguente query cambierà tutte le righe di CounrtyPopulation valore della colonna su 1.

UPDATE TblCountry SET CountryPopulation=1
GO
SELECT TblC.* FROM TblCountry TblC

Nelle istruzioni UPDATE, possiamo utilizzare la clausola WHERE per modificare una o più righe particolari nella tabella.

Cambiamo il Giappone riga di CountryPopulation a 245000:

UPDATE TblCountry SET CountryPopulation=245000
WHERE CountryName = 'Japan'
GO
SELECT TblC.* FROM TblCountry TblC

L'istruzione UPDATE è un'unione delle istruzioni delete e insert. Quindi, possiamo restituire i valori inseriti ed eliminati tramite la clausola OUTPUT.

Facciamo un esempio:

UPDATE TblCountry SET CountryPopulation=22
OUTPUT inserted.CountryPopulation AS [Insertedvalue],
deleted.CountryPopulation AS [Deletedvalue]
WHERE CountryName = 'Germany'

Come puoi vedere, abbiamo modificato la CountryPopulation valore da 1 a 22. Quindi possiamo scoprire i valori inseriti ed eliminati. Inoltre, possiamo inserire questi valori in una variabile di tabella (un tipo di variabile speciale che può essere utilizzato come tabella).

Inseriamo i valori inseriti ed eliminati nella variabile della tabella:

DECLARE @LogTable TABLE(InsertValLog INT , DelValLog INT) 


UPDATE TblCountry SET CountryPopulation=45
OUTPUT inserted.CountryPopulation ,
deleted.CountryPopulation INTO @LogTable
WHERE CountryName = 'Germany'


SELECT * FROM @LogTable

@@ROWCOUNT è una variabile di sistema che restituisce il numero di righe interessate nell'ultima istruzione. Pertanto, possiamo utilizzare questa variabile per esporre alcune righe modificate nell'istruzione di aggiornamento.

Nell'esempio seguente, la query di aggiornamento cambierà 3 righe e la variabile di sistema @@ROWCOUNT restituirà 3.

UPDATE TblCountry SET CountryPopulation=1
SELECT @@ROWCOUNT AS [AffectedRowNumber]

D – Elimina

L'istruzione Delete rimuove le righe o le righe esistenti dalla tabella.

Per prima cosa, vediamo come utilizzare la clausola WHERE nelle istruzioni DELETE. La maggior parte delle volte vogliamo filtrare le righe eliminate.

L'esempio seguente illustra come rimuovere una riga particolare:

SELECT TblC.* FROM TblCountry TblC
DELETE FROM TblCountry WHERE CountryName='Japan'
SELECT TblC.* FROM TblCountry TblC

Sebbene con l'istruzione DELETE, possiamo rimuovere tutti i record dalla tabella. Tuttavia, l'istruzione DELETE è molto semplice e non utilizziamo la condizione WHERE.

SELECT TblC.* FROM TblCountry TblC
DELETE FROM TblCountry
SELECT TblC.* FROM TblCountry TblC

Tuttavia, in alcune circostanze della progettazione del database, l'istruzione DELETE non elimina la riga o le righe se viola chiavi esterne o altri vincoli.

Ad esempio, in AdventureWorks database, non possiamo eliminare righe della ProductCategory tabella perché ProductCategoryID è specificato come chiave esterna in quella tabella.

Proviamo a eliminare una riga dalla ProductCategory tabella – senza dubbio, dovremo affrontare il seguente errore:

DELETE FROM [Production].[ProductCategory]
WHERE ProductCategoryID=1

Conclusione

Pertanto, abbiamo esplorato le operazioni CRUD in SQL. Le istruzioni INSERT, SELECT, UPDATE e DELETE sono le funzioni di base del database SQL e devi padroneggiarle se vuoi imparare la programmazione del database SQL. La teoria CRUD potrebbe essere un buon punto di partenza e molta pratica ti aiuterà a diventare un esperto.