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

Cos'è SQL? Che cos'è un database? Sistemi di gestione di database relazionali (RDBMS) spiegati in un inglese semplice.

I database possono essere difficili da capire. Tuttavia, sono essenziali per la programmazione completa e la creazione di servizi back-end che archiviano i dati.

In questo post, demistificare SQL, database e sistemi di gestione di database relazionali. Userò anche alcune analogie con il mondo dei maghi, incluso lo stesso Harry Potter e alcuni dei corsi che frequenta a Hogwarts.

Prima di approfondire i Termini chiave, definiamo cos'è un database stesso:

Un database è un insieme strutturato di dati conservati in un computer, in particolare uno accessibile in vari modi. Si tratta essenzialmente di un insieme organizzato di dati su un computer, a cui è possibile accedere elettronicamente da un sistema informatico.

Termini chiave

Di seguito sono riportati alcuni termini chiave con cui inizieremo:

  • RDMS: Sistemi di gestione di database relazionali. Questo framework per database è la base di MySQL.
  • SQL: Linguaggio di query strutturato.
  • Tabelle: Oggetti di database che trasportano dati. Un esempio di nome di tabella è "Studenti" o "Insegnanti" o "Corsi".
  • Campi: I valori di una tabella sono noti come campi. Campi di esempio per Studenti sarebbero "Nome", "Cognome" e "GPA".
  • Registra/Riga: Una singola voce nella tabella.

Dopo aver aggiunto Docenti e Corsi al database, possiamo avere tabelle per Studenti, Insegnanti e Corsi.

Man mano che andiamo avanti nella guida, utilizzeremo solo gli Studenti esempio qui come riferimento. Se sei stato abbastanza fortunato da essere assunto come ingegnere del software a Hogwarts, il tuo database potrebbe fare buon uso di alcuni di questi comandi :D

Istruzioni SQL

Sintassi

Il punto e virgola è il modo standard per separare un'istruzione SQL da un'altra. Consente di eseguire più istruzioni SQL nella stessa chiamata. In questa guida avremo un punto e virgola alla fine di ogni istruzione.

I comandi SQL più importanti

Crea :crea una nuova tabella SQL.

Ad esempio, se stessimo creando il database degli studenti per la scuola di Hogwarts, utilizzeremmo CREA per fare un tavolo chiamato "Studenti".

  • Sintassi
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
  • Esempio
CREATE TABLE Students
                (first_name VARCHAR(255),
                last_name VARCHAR(255),
                login VARCHAR(255),
                age INTEGER,
                gpa REAL,
                house VARCHAR(255));

Lascia :Elimina una tabella. Fai molta attenzione quando usi questo comando poiché cancellerà tutti i dati nella tabella!

Se volessimo eliminare l'intero database degli studenti utilizzeremo DROP per eseguire quell'azione.

  • Sintassi
DROP TABLE table_name;
  • Esempio
DROP TABLE Students;

Inserisci :aggiunge nuove righe di dati a una tabella.

Useremmo INSERT per aggiungere nuovi studenti mentre si iscrivono a Hogwarts.

  • Sintassi
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
  • Esempio
INSERT 
INTO Students(first_name, last_name, login, age, gpa, house)
VALUES 
('Harry',     'Potter', 'theboywholived', 15, 4.0, 'Gryffindor'),
('Hermionie', 'Granger','granger2',       15, 4.5, 'Gryffindor'),
('Ron',       'Weasley','weasley7',       15, 3.7, 'Gryffindor'),
('Draco',     'Malfoy', 'malfoy999',      15, 4.0, 'Slytherin'),
('Cedric',    'Diggory','diggory123',     15, 4.0, 'Hufflepuff');

Seleziona :utilizzato per recuperare i dati in un database da restituire in formato tabella.

Se volessimo recuperare tutti i nomi degli studenti che si trovano nella casa di Grifondoro, useremmo il SELECT comando. L'esempio seguente interroga la tabella Studenti per il nome e il cognome di ogni studente nel database, che per noi sono solo le cinque righe sopra descritte.

  • Sintassi
SELECT column1, column2, ...
FROM table_name;
  • Esempio
SELECT first_name, last_name FROM Students;
nome cognome
Harry Vasaio
Hermioni Granger
Ron Weasley
Draco Malfoy
Cedric Diggory

In alternativa, se vogliamo selezionare tutti i campi della tabella, il nostro comando utilizzerà la sintassi "*", che significa selezionare tutti i campi:

SELECT * FROM Students;
nome cognome accesso età gpa casa
Harry Vasaio il ragazzo che è sopravvissuto 15 4 Grifondoro
Hermioni Granger granger2 15 4.5 Grifondoro
Ron Weasley weasley7 15 3.7 Grifondoro
Draco Malfoy malfoy999 15 4 Serpeverde
Cedric Diggory diggory123 15 4 Tassorosso

Clausole

Una clausola è un pezzo logico di un'istruzione SQL ed è (in teoria) un campo opzionale.

Nella dichiarazione sopra, abbiamo semplicemente restituito tutti i campi nel database degli studenti. Non è stata specificata una condizione sui valori restituiti.

E se volessimo interrogare non tutti gli studenti, ma solo quelli la cui casa è Grifondoro? Che ne dici di interrogare studenti il ​​cui nome inizia con "H" o studenti in Tassorosso e Serpeverde? Questi casi più complessi sono risolti da clausole SQL.

Di seguito è riportata una panoramica delle clausole più comuni, ma ci sono molte altre clausole nel linguaggio SQL. Se vuoi qualche informazione in più, ecco una buona panoramica generale.

Esempi di clausole

Dove: Utilizzato per indicare una condizione durante il recupero dei dati da un database. Tornando all'esempio con Seleziona, dovremmo usare WHERE per specificare la casa come Grifondoro.

  • Sintassi
SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • Esempio
SELECT * FROM Students
WHERE house='Gryffindor';
nome cognome accesso età gpa casa
Harry Vasaio il ragazzo che è sopravvissuto 15 4 Grifondoro
Hermioni Granger granger2 15 4.5 Grifondoro
Ron Weasley weasley7 15 3.7 Grifondoro

E Utilizzato per combinare più clausole in un'istruzione SQL, in cui tutte le condizioni separate da AND sono vere. Useremmo AND per ottenere studenti di Grifondoro che hanno un GPA superiore a 3,8.

  • Sintassi
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
  • Esempio
SELECT * FROM Students
WHERE house='Gryffindor' AND gpa>3.8;
nome cognome accesso età gpa casa
Harry Vasaio il ragazzo che è sopravvissuto 15 4 Grifondoro
Hermioni Granger granger2 15 4.5 Grifondoro

Oppure :simile a AND, ma restituisce solo dati in cui solo UNA delle condizioni separate da OR è vera. Se volessimo recuperare studenti in Tassorosso e Serpeverde, ma non in entrambi, useremmo il comando OR.

  • Sintassi
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
  • Esempio
SELECT * FROM Students
WHERE house='Slytherin' OR house='Hufflepuff';
nome cognome accesso età gpa casa
Draco Malfoy malfoy999 15 4 Serpeverde
Cedric Diggory diggory123 15 4 Tassorosso

Come: Usato con WHERE per cercare un pattern specifico. Se volessimo solo il nome e il cognome di maghi/streghe con nomi che iniziano con "H", potremmo utilizzare il comando Mi piace.

  • Sintassi
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
  • Esempio
SELECT first_name, last_name FROM Students
WHERE first_name LIKE 'H%';
nome cognome
Harry Vasaio
Hermioni Granger

Conteggio: Utilizzato per trovare il conteggio di una o più colonne in una tabella.

  • Sintassi
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
  • Esempio
SELECT COUNT(first_name) FROM Students;
COUNT(first_name)
5

Altri due comandi che utilizzano la stessa sintassi sono AVG e SUM. AVG calcolerà la media di tutti i valori e sum calcolerà la somma di tutti i valori.

Seleziona limite: Utilizzato per tagliare le risposte solo a un importo specifico. Il modo in cui vengono scelte le prime risposte è in ordine di inserimento cronologico per la prima volta nel database.

  • Sintassi
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
  • Esempio
SELECT * FROM Students LIMIT 3;
nome cognome accesso età gpa casa
Harry Vasaio il ragazzo che è sopravvissuto 15 4 Grifondoro
Hermioni Granger granger2 15 4.5 Grifondoro
Ron Weasley weasley7 15 3.7 Grifondoro

Altri comandi utili

Ordina per: Ordina i risultati in ordine crescente o decrescente.

  • Sintassi
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
  • Esempio
SELECT * FROM Students ORDER BY first_name;
nome cognome accesso età gpa casa
Cedric Diggory diggory123 15 4 Tassorosso
Draco Malfoy malfoy999 15 4 Serpeverde
Harry Vasaio il ragazzo che è sopravvissuto 15 4 Grifondoro
Hermioni Granger granger2 15 4.5 Grifondoro
Ron Weasley weasley7 15 3.7 Grifondoro

Raggruppa per: Raggruppa le categorie che hanno gli stessi valori in righe. Se vuoi conoscere il numero di studenti in ogni casa (3 in Grifondoro per esempio), puoi utilizzare il comando Raggruppa per.

  • Sintassi
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
  • Esempio
SELECT COUNT(first_name), house FROM Students GROUP BY house;
COUNT(first_name) casa
3 Grifondoro
1 Tassorosso
1 Serpeverde

Infine, ecco un DB Fiddle che mostra tutti i comandi precedenti in azione!

Database normalizzati e denormalizzati

Quando si progetta un database, è possibile seguire due modelli di progettazione principali, ciascuno con i propri compromessi.

Normalizzato: Ottimizza per ridurre al minimo la ridondanza non per il tempo di lettura.

Supponiamo di avere una tabella dei corsi che ha un ID insegnante per l'insegnante che insegna quel corso. Abbiamo anche un database dell'insegnante che ha il nome dell'insegnante.

Quando vogliamo ottenere i nomi degli insegnanti che insegnano un determinato corso, dovremo interrogare sia la tabella Corsi che quella Insegnanti perché la tabella del corso non ha il nome dell'insegnante (efficiente ma ridondante).

Denormalizzato: Ottimizza per il tempo di lettura , non per ridurre al minimo la ridondanza.

Supponiamo di avere una tabella dei corsi che ha un ID insegnante E un nome insegnante. Abbiamo un database dell'insegnante che ha anche il nome dell'insegnante. Quando vogliamo ottenere i nomi degli insegnanti nel corso, possiamo semplicemente utilizzare la tabella del corso (ridondante ma efficiente).

Integrità dei dati

È fondamentale per gli utenti che i dati con cui interagiscono siano sicuri, corretti e sensati. Ad esempio, assicurarsi che l'età non sia un numero negativo o che non ci siano due studenti con le stesse informazioni. Ci riferiamo a questo come integrità dei dati.

L'integrità dei dati assume diverse forme e può essere suddivisa in quattro categorie:

  • Integrità dell'entità :non esistono righe duplicate in una tabella. Ad esempio, non possiamo inserire Ron Weasley due volte nel database.
  • Integrità del dominio :Limitare il tipo di valori che è possibile inserire per imporre valori corretti. Ad esempio, una Casata può essere solo Grifondoro, Corvonero, Serpeverde o Tassorosso.
  • Integrità referenziale :i record utilizzati da altri record non possono essere eliminati. Non è possibile eliminare un insegnante se sta attualmente insegnando un corso.
  • Integrità definita dall'utente: Una categoria "altra" costituita da regole e logiche di business relative al database.

Database SQL comuni

  • Oracolo :Molto stabile e maturo ma può essere costoso
  • MySQL :Leggero e veloce da configurare ma non maturo come Oracle
  • PostgreSQL :Buono per alcuni casi d'uso ma non super veloce

Risorse

  • SWEPrep - Domande per il colloquio direttamente nella tua casella di posta
  • SQL e database di freeCodeCamp
  • Codice pulito
  • Java efficace
  • Documentazione Oracle
  • Documentazione MySql
  • Documentazione PostgreSQL

Rimani aggiornato

  • Thread Reddit :Grandi discussioni su database, SQL e nuove tecnologie
  • Notizie sugli hacker: Davvero un'ottima risorsa per rimanere al corrente degli ultimi sviluppi nel settore tecnologico
  • CodePen: Un'ottima risorsa per scoprire buone pratiche SQL.