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

Tabella di riferimento SQL:come creare e scrivere query di base

Questo articolo si concentrerà sulla scrittura di query SQL sulla tabella di riferimento del database con una struttura abbastanza semplice da comprendere e implementare.

Inoltre, chiariremo i concetti alla base della scrittura di query SQL efficaci insieme ad alcuni suggerimenti per la vita professionale.

Prima di interrogare le tabelle del database

Poiché questo articolo riguarda l'esecuzione di query sulle tabelle di database con l'aiuto di script SQL, i lettori dovrebbero avere un certo background per comprendere appieno i concetti e gli esempi. Dobbiamo avere l'impressione di come fare riferimento a una tabella. Inoltre, deve essere presente l'attrezzatura necessaria:

Hai bisogno di:

  1. La conoscenza di base di database relazionali e SQL.
  2. Un server di database SQL installato localmente o in remoto.
  3. Strumenti di gestione del database come SQL Server Management Studio o dbForge Studio per SQL Server.

Dovresti essere in grado di creare un database di esempio (con l'aiuto degli script forniti), connetterti a SQL Server ed eseguirlo su quel database di esempio.

Prima di procedere con l'esecuzione di query su un database vuoto, potrebbe essere necessario fare riferimento al precedente articolo dedicato all'argomento per aggiornare le conoscenze:

Come scrivere semplici query SQL da un database vuoto

Scrittura di query SQL a partire da tabelle di riferimento

È necessario scrivere query SQL su un database di esempio che contiene due tabelle. Il piano consiste nel visualizzare i dati da una delle tabelle note come tabella di riferimento SQL. Nota:la tabella di riferimento può essere qualsiasi tabella che non richiede dati da un'altra tabella.

Innanzitutto, dobbiamo comprendere la struttura del database di esempio per interrogarlo in modo accurato.

Esempio di tabella di riferimento del database

Utilizziamo un esempio BookSimple2 database composto da due tabelle, BookType e Prenota .

Il Tipo di Libro tabella contiene i tipi di libri da assegnare a un libro. Il Libro la tabella contiene nomi, tipi e stock (numero di copie disponibili) di libri.

È facile intuire che entrambe le tabelle sono collegate tramite chiavi. Il tipo di libro archiviato nel Libro La tabella è originariamente definita in BookType tavolo. Consente di mantenere i dati coerenti e affidabili.

Pertanto, il BookType table è una tabella di riferimento:fornisce il suo riferimento (tipo di libro) al Libro principale tabella.

Dai un'occhiata all'illustrazione qui sotto:

Se non colleghiamo il Libro tabella con BookType per ottenere il tipo del libro, dobbiamo definire il tipo necessario ogni volta che viene memorizzato un nuovo libro. Di conseguenza, gli errori si verificheranno presto perché memorizziamo lo stesso tipo ancora e ancora. Inoltre, potremmo finire per creare molti più tipi a causa di errori di ortografia.

Diciamo che se ignoriamo l'uso delle tabelle di riferimento e creiamo solo una tabella principale, potremmo usare modi diversi per rappresentare un tipo, come Design , Progettazione e Design . Confonde, soprattutto durante l'interrogazione e la comprensione dei dati.

Puoi anche fare riferimento all'articolo precedente per ulteriori informazioni su come le tabelle si relazionano tra loro in SQL:

Impara la progettazione di database con SQL Server Management Studio (SSMS) – Parte 2

Ora che vedi lo sfondo dell'utilizzo delle tabelle di riferimento e delle tabelle principali, possiamo procedere con gli esempi.

Come creare una tabella di riferimento in SQL

Apri lo strumento di sviluppo del database (potrebbe essere SQL Server Management Studio o dbForge Studio per SQL Server) e connettiti all'istanza del server SQL installata.

Scrivi lo script seguente sul database master per configurare un database di esempio BookSimple2 con due tabelle:

-- Create sample database BookSimple2
USE MASTER
GO

CREATE DATABASE BookSimple2
GO

USE BookSimple2

-- Creating a reference table BookType
CREATE TABLE dbo.BookType
(
	BookTypeId INT IDENTITY(1,1),
	Name VARCHAR(50)NOT NULL,
	Detail VARCHAR(200)NULL 
	CONSTRAINT PK_BookType_BookTypeId PRIMARY KEY (BookTypeId)
)
GO

-- Populating (adding rows to the) table BookType
SET IDENTITY_INSERT dbo.BookType ON
GO
INSERT INTO dbo.BookType
(
  BookTypeId
 ,Name
 ,Detail
)
VALUES
(
  1  -- ID - INT Primary Key
 ,'Designing' -- Name - varchar(50) NOT NULL
 ,'This is Designing' -- Detail - varchar(200)
),
(
  2  -- ID - INT Primary Key
 ,'Testing' -- Name - varchar(50) NOT NULL
 ,'This is Testing' -- Detail - varchar(200)
),
(
  3  -- ID - INT Primary Key
 ,'Coding' -- Name - varchar(50) NOT NULL
 ,'This is Coding' -- Detail - varchar(200)
);
GO
SET IDENTITY_INSERT dbo.BookType OFF
GO

-- Creating a table Book
CREATE TABLE dbo.Book
(
	BookId INT IDENTITY(1,1),
	Name VARCHAR(50),
	BookTypeId INT,
	Stock INT,
	CONSTRAINT PK_Book_BookId PRIMARY KEY (BookId)
)
GO

Dopo aver eseguito lo script, è possibile visualizzare il database appena creato in SSMS Object Explorer o nella sezione Database Explorer di dbForge Studio per SQL Server:

Come fare riferimento a due tabelle con chiave esterna SQL

Ho deliberatamente escluso la parte dello script che crea la relazione tra la tabella di riferimento (BookType ) e la tabella principale (Prenota ) sotto forma di chiavi.

Eseguire lo script seguente sul database di esempio per collegare la tabella di riferimento con la tabella principale:

-- Creating foreign key constraint on Book table to get BookTypeId values from BookType table
ALTER TABLE dbo.Book
    ADD CONSTRAINT [FK_Book_BookType_BookTypeId] 
FOREIGN KEY ([BookTypeId]) REFERENCES dbo.[BookType] ([BookTypeId]);

Espandi BookSimple2 database> Prenota tabella> Chiavi cartella:

Possiamo vedere che le due tabelle sono collegate correttamente.

Quanto sopra è lo screenshot di SQL Server Management Studio. Tuttavia, la visualizzazione è esattamente la stessa se si visualizza il database in Esplora database di dbForge Studio per SQL Server.

Un suggerimento importante sulla selezione del database desiderato: È necessario assicurarsi di eseguire query sul database corretto, il database di esempio. Quindi, selezionalo dall'elenco dei database disponibili o esegui il seguente script:

-- Select the sample SQL database to query it
USE BookSimple2

Importante! L'uso di uno script per selezionare il database non è applicabile se si lavora con una versione cloud del database SQL noto come database SQL di Azure.

Scrittura della prima query

Per interrogare le tabelle del database, dobbiamo solo tenere presente l'istruzione SELECT nella forma seguente:

SELECT * FROM <TableName>

Sostituisci con il nome di una tabella esistente e lo script ti restituirà tutti i record (righe) di quella tabella.

L'istruzione SELECT è molto più flessibile, ma per ora ci concentreremo solo sulla visualizzazione di tutti i record (righe) di una tabella.

Un suggerimento importante su SQL :Ricorda che SQL (in particolare riferito a T-SQL) non fa distinzione tra maiuscole e minuscole . Si riferisce sia alla parola riservata SQL (SELECT è uguale a Seleziona ) o nomi definiti dall'utente (BookType è uguale a tipo di libro ) .

Visualizza tutte le righe dalla tabella di riferimento BookType

Scrivi il seguente script sul database di esempio:

-- View all data from the BookType table
SELECT * FROM dbo.BookType

L'output è:

Possiamo vedere tutte le colonne e le righe della tabella. È di gran lunga il metodo più rapido per ottenere tutti i dati da una tabella.

Suggerimento importante su SELECT *: Dovresti usare SELECT * per ottenere tutte le righe e le colonne da una tabella solo quando si controlla una tabella piccola (come una tabella di riferimento). In caso contrario, potrebbe richiedere molto tempo, mentre potremmo aver bisogno dei dati su alcune colonne e righe da una tabella più grande.

Trova tutte le righe dalla tabella BookType utilizzando il nome della tabella

C'è un modo migliore per interrogare la tabella. Diamo un nome a una tabella e la leghiamo a tutte le colonne come mostrato di seguito:

-- View all data from the BookType table using bt alias
SELECT bt.* FROM dbo.BookType bt

Visualizza colonne selezionate dalla tabella di riferimento

L'uso dei nomi delle tabelle porta più vantaggi. Innanzitutto, possiamo selezionare rapidamente la colonna desiderata dalla tabella. Quindi, rende più chiaro l'utilizzo di tabelle e colonne limitate perché nella maggior parte dei casi sono necessarie solo alcune colonne.

Ecco un esempio di come ottenere ID e nomi solo da BookType tabella:

-- View book type id and name columns from the reference table
SELECT bt.BookTypeId,bt.Name FROM dbo.BookType bt

Il risultato è:

Miglioramento della sintassi SELECT

Pertanto, sulla base delle informazioni sopra menzionate, possiamo migliorare la sintassi SELECT come segue:

SELECT t.<column1>,t.<column2> FROM <TableName> t

Ordina i dati per nome colonna utilizzando la clausola Ordina per

È possibile ordinare il set di risultati in base a una colonna o a un set di colonne specifico. L'ordinamento dei dati offre un punto di vista diverso.

L'utilizzo di Ordina per la clausola in questo caso è:

SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1>

Ad esempio, vogliamo vedere i tipi di libri ordinati in base al nome del tipo (ordine alfabetico). In questo caso, utilizziamo la clausola Order By nello script dell'istruzione SELECT come segue:

-- View book types (name) sorted by type name 
SELECT bt.Name FROM dbo.BookType bt ORDER BY bt.Name

L'output è:

Ordina i dati per nome colonna in ordine decrescente

Possiamo anche ordinare i dati in ordine decrescente secondo il requisito. Ad esempio, vogliamo vedere l'elenco di tutti i tipi di libri in base alla colonna Nome in ordine decrescente (dalla Z alla A). La sintassi sarà:

SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1> desc

Lo script T-SQL è il seguente:

-- View book types (name) sorted by a type name in descending order (from Z to A)
SELECT bt.Name FROM dbo.BookType bt ORDER BY bt.Name desc

Il set di risultati è il seguente:

Visualizza i PRIMI N record da una tabella

Infine, possiamo selezionare il numero desiderato di righe da estrarre da un database utilizzando la clausola TOP. Dopo tale clausola, dobbiamo fornire il numero richiesto:

SELECT Top N t.<column1>,t.<column2> FROM <TableName> t 

Tuttavia, la clausola TOP senza alcun ordine non è l'opzione migliore. Dobbiamo specificare l'ordine delle colonne da considerare quando si selezionano le prime n righe.

Qui possiamo migliorare la sintassi di cui sopra come segue:

SELECT Top N t.<column1>,t.<column2> FROM <TableName> t order by <column> Desc/Asc

Ricorda che dobbiamo menzionare l'ordine decrescente utilizzando DESC alla fine. Tuttavia, l'ordine crescente non è obbligatorio da menzionare:è l'opzione predefinita.

Vediamo i primi 2 tipi di libri ordinati per nome in ordine decrescente:

--View Top 2 types of the books ordered by name in descending order (from Z to A)
SELECT TOP 2 bt.Name FROM dbo.BookType bt 
ORDER BY bt.Name DESC

L'output è:

Suggerimento importante sulla TOP N: utilizzare la clausola TOP N (con un ordine per) per visualizzare una tabella anziché visualizzare tutte le righe della tabella se si desidera controllare rapidamente i dati noti come anteprima.

Negli scenari di vita professionale, la clausola Top N serve per aggiornare in fasi grandi quantità di dati da una grande tabella.

Ora, abbiamo interrogato con successo la tabella di un database SQL. Inoltre, abbiamo acquisito familiarità con alcuni suggerimenti per eseguire query come un professionista e appreso alcune best practice per la scrittura di query SQL.

Pratica sulla tabella di riferimento DB

Ora puoi scrivere, eseguire e aumentare l'efficacia delle query SQL su qualsiasi tabella. Prova i seguenti esercizi per migliorare le nuove abilità:

  1. Prova a scrivere uno script per visualizzare l'ID del tipo di libro (BookTypeId ) con i dettagli (Dettagli ) solo colonne.
  2. Prova a ordinare il riferimento BookType tabella per ID (BookTypeId ) in ordine decrescente (da 3 a 1).
  3. Prova a recuperare le prime 2 righe da BookType tabella che include solo id (BookTypeId ) e dettagli (Dettagli ) del tipo di libro ordinato per Dettaglio colonna.