Fiecare dezvoltator web trebuie să cunoască SQL pentru a scrie interogări de baze de date. Și, deși phpMyAdmin nu a fost anulat, este adesea necesar să vă murdărești mâinile pentru a scrie SQL de nivel scăzut.
De aceea am pregătit un scurt tur al elementelor de bază ale SQL. Să începem!
1. Creați un tabel
Instrucțiunea CREATE TABLE este folosită pentru a crea tabele. Argumentele trebuie să fie numele coloanelor, precum și tipurile de date ale acestora.
Să creăm un tabel simplu numit lună. Este format din 3 coloane:
- id– Numărul lunii din anul calendaristic (întreg).
- Nume– Numele lunii (șir, maximum 10 caractere).
- zile– Numărul de zile din această lună (întreg).
Iată cum ar arăta interogarea SQL corespunzătoare:
CREATE TABLE luni (id int, nume varchar(10), zile int);
De asemenea, la crearea tabelelor, este recomandabil să adăugați o cheie primară pentru una dintre coloane. Acest lucru va păstra înregistrările unice și va accelera interogările selectate. Fie ca în cazul nostru numele lunii să fie unic (coloana Nume)
CREATE TABLE luni (id int, name varchar(10), days int, PRIMARY KEY (nume));
Tip de date | Descriere |
---|---|
DATA | Valori date |
DATETIME | Valori date și ore cu precizie minute |
TIMP | Valori de timp |
2. Introduceți rânduri
Acum să completăm tabelul nostru luni Informatii utile. Adăugarea înregistrărilor la un tabel se face prin instrucțiunea INSERT. Există două moduri de a scrie această instrucțiune.
Prima modalitate nu este de a specifica numele coloanelor în care vor fi inserate datele, ci de a specifica doar valorile.
Această notație este simplă, dar nesigură, deoarece nu există nicio garanție că, pe măsură ce proiectul se extinde și tabelul este editat, coloanele vor fi în aceeași ordine ca înainte. O modalitate mai sigură (și în același timp mai greoaie) de a scrie o instrucțiune INSERT necesită specificarea atât a valorilor, cât și a ordinii coloanelor:
Iată prima valoare din listă VALORI se potrivește cu primul nume de coloană specificat și așa mai departe.
3. Extragerea datelor din tabele
Instrucțiunea SELECT este cel mai bun prieten al nostru atunci când dorim să extragem date dintr-o bază de date. Este folosit foarte des, așa că vă rugăm să citiți cu atenție această secțiune.
Cea mai simplă utilizare a instrucțiunii SELECT este o interogare care returnează toate coloanele și rândurile dintr-un tabel (de exemplu, un tabel numit personaje):
SELECTAȚI * DIN „personaje”
Caracterul asterisc (*) înseamnă că dorim să obținem date din toate coloanele. Deoarece bazele de date SQL constau de obicei din mai mult de un tabel, este necesar cuvântul cheie FROM, urmat de un spațiu urmat de numele tabelului.
Uneori nu dorim să obținem date de la toate coloanele dintr-un tabel. Pentru a face acest lucru, în loc de asterisc (*), trebuie să scriem numele coloanelor dorite separate prin virgule.
SELECT ID, numele FROM luna
De asemenea, în multe cazuri dorim ca rezultatele să fie sortate într-o anumită ordine. În SQL, facem acest lucru cu ORDER BY. Poate fi nevoie de un modificator opțional - ASC (implicit) pentru a sorta în ordine crescătoare sau DESC pentru a sorta în ordine descrescătoare:
SELECT ID, nume FROM luna ORDENARE DUPA nume DESC
Când utilizați ORDER BY, asigurați-vă că este ultimul în instrucțiunea SELECT. În caz contrar, va fi emis un mesaj de eroare.
4. Filtrarea datelor
Ați învățat cum să selectați anumite coloane dintr-o bază de date folosind o interogare SQL, dar ce se întâmplă dacă vrem să recuperăm și anumite rânduri? Clauza WHERE vine în ajutor aici, permițându-ne să filtram datele în funcție de o condiție.
În această interogare, selectăm doar acele luni din tabel lună care sunt mai mari de 30 de zile folosind operatorul mai mare decât (>).
SELECT ID, nume FROM luna WHERE zile > 30
5. Filtrare avansată a datelor. operatori AND și SAU
Anterior, filtram datele folosind un singur criteriu. Pentru o filtrare mai complexă a datelor, puteți utiliza operatorii AND și SAU și operatorii de comparație (=,<,>,<=,>=,<>).
Aici avem un tabel care conține cele mai bine vândute patru albume din toate timpurile. Să le alegem pe cele care sunt clasificate ca rock și au mai puțin de 50 de milioane de exemplare vândute. Acest lucru se poate face cu ușurință prin plasarea unui operator AND între aceste două condiții.
SELECT * FROM albume WHERE gen = „rock” AND sales_in_millions<= 50 ORDER BY released
6. În/Între/Like
WHERE acceptă, de asemenea, mai multe comenzi speciale, permițându-vă să verificați rapid interogările cele mai frecvent utilizate. Aici sunt ei:
- IN - folosit pentru a specifica o serie de condiții, oricare dintre acestea poate fi îndeplinită
- BETWEEN - Verifică dacă valoarea se află în intervalul specificat
- LIKE - caută anumite modele
De exemplu, dacă vrem să selectăm albume cu popși suflet muzica, putem folosi IN("value1","value2") .
SELECTAȚI * DIN albumele WHERE genre IN ("pop","soul");
Dacă vrem să obținem toate albumele lansate între 1975 și 1985, am scrie:
SELECTAȚI * DIN albumele WHERE lansate ÎNTRE 1975 ȘI 1985;
7. Funcții
SQL este plin de funcții care fac tot felul de lucruri utile. Iată câteva dintre cele mai frecvent utilizate:
- COUNT() - returnează numărul de rânduri
- SUM() - returnează suma totală a unei coloane numerice
- AVG() - returnează valoarea medie dintr-un set de valori
- MIN() / MAX() - Obține valoarea minimă / maximă dintr-o coloană
Pentru a obține cel mai recent an în tabelul nostru, trebuie să scriem următoarea interogare SQL:
SELECT MAX (lansat) FROM albume;
8. Subinterogări
În paragraful anterior, am învățat cum să facem calcule simple cu date. Dacă dorim să folosim rezultatul din aceste calcule, nu ne putem lipsi de interogări imbricate. Să presupunem că vrem să ieșim artist, albumși anul lansării pentru cel mai vechi album din tabel.
Știm cum să obținem aceste coloane specifice:
SELECT artist, album, lansat DIN albume;
De asemenea, știm cum să obținem cel mai devreme an:
SELECT MIN (lansat) FROM album;
Tot ce trebuie acum este să combinați cele două interogări cu un WHERE:
SELECT artist,album,released FROM albums WHERE lansat = (SELECT MIN(released) FROM albums);
9. Îmbinarea tabelelor
În bazele de date mai complexe, există mai multe tabele care sunt legate între ele. De exemplu, mai jos sunt două tabele despre jocuri video ( jocuri video) și dezvoltatori de jocuri video ( game_developers).
Masa jocuri video există o coloană pentru dezvoltatori ( developer_id), dar conține un număr întreg, nu numele dezvoltatorului. Acest număr este un identificator ( id) al dezvoltatorului corespunzător din tabelul dezvoltatorilor de jocuri ( game_developers) legând cele două liste în mod logic, permițându-ne să folosim informațiile stocate în ambele în același timp.
Dacă vrem să creăm o interogare care să returneze tot ce trebuie să știm despre jocuri, putem folosi un INNER JOIN pentru a lega coloanele din ambele tabele.
SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;
Acesta este cel mai simplu și mai comun tip JOIN. Există mai multe alte opțiuni, dar se aplică cazurilor mai puțin frecvente.
10. Aliasuri
Dacă te uiți la exemplul anterior, vei observa că există două coloane numite Nume. Acest lucru este confuz, așa că să setăm un alias la una dintre coloanele repetate, de exemplu, Nume de la masă game_developers va fi chemat dezvoltator.
De asemenea, putem scurta interogarea prin aliasarea numelor tabelelor: jocuri video Hai sa sunăm jocuri, game_developers - dezvoltatori:
SELECT games.name, games.genre, devs.name AS dezvoltator, devs.country FROM video_games AS jocuri INNER JOIN game_developers AS devs ON games.developer_id = devs.id;
11. Actualizarea datelor
Adesea trebuie să schimbăm datele pe unele rânduri. În SQL, acest lucru se face cu instrucțiunea UPDATE. Declarația UPDATE constă în:
- Tabelul care conține valoarea de înlocuire;
- Numele coloanelor și noile lor valori;
- Rândurile selectate cu WHERE pe care dorim să le actualizăm. Dacă acest lucru nu se face, atunci toate rândurile din tabel se vor schimba.
Mai jos este tabelul seriale TV cu serii cu ratingul lor. Cu toate acestea, o mică eroare s-a strecurat în tabel: deși seria Urzeala tronurilorși este descrisă ca o comedie, chiar nu este. Să reparăm asta!
tv_series date table UPDATE tv_series SET gen = "drama" WHERE id = 2;12. Ștergerea datelor
Ștergerea unui rând de tabel cu SQL este un proces foarte simplu. Tot ce trebuie să faceți este să selectați tabelul și rândul pe care doriți să le ștergeți. Să eliminăm ultimul rând din tabel din exemplul anterior seriale TV. Acest lucru se face folosind instrucțiunea >DELETE.
DELETE FROM tv_series WHERE id = 4
Aveți grijă când scrieți instrucțiunea DELETE și asigurați-vă că este prezentă clauza WHERE, altfel toate rândurile tabelului vor fi șterse!
13. Ștergerea unui tabel
Dacă vrem să eliminăm toate rândurile, dar să părăsim tabelul în sine, atunci folosiți comanda TRUNCATE:
TRUNCATE TABLE nume_tabel;
În cazul în care dorim cu adevărat să ștergem atât datele, cât și tabelul în sine, atunci comanda DROP va fi utilă:
DROP TABLE nume_tabel;
Fii foarte atent cu aceste comenzi. Nu pot fi anulate!/p>
Aceasta încheie tutorialul nostru SQL! Nu am acoperit multe, dar ceea ce știți deja ar trebui să fie suficient pentru a vă oferi niște abilități practice în cariera dvs. web.
Cum pot afla numărul de modele de PC produse de un anumit furnizor? Cum se determină valoarea medie a prețului computerelor cu aceleași caracteristici tehnice? Acestea și multe alte întrebări legate de unele informații statistice se poate răspunde cu ajutorul lui funcții rezumative (agregate).. Standardul oferă următoarele funcții agregate:
Toate aceste funcții returnează o singură valoare. În același timp, funcțiile COUNT, MINși MAX se aplică oricărui tip de date, în timp ce SUMĂși AVG folosit numai pentru câmpurile numerice. Diferența între funcție NUMARA(*)și NUMARA(<имя поля>) este că al doilea nu ia în considerare valorile NULL la calcul.
Exemplu. Găsiți prețul minim și maxim pentru computerele personale:
Exemplu. Găsiți numărul disponibil de computere produse de producătorul A:
Exemplu. Dacă ne interesează numărul de modele diferite produse de producătorul A, atunci interogarea poate fi formulată după cum urmează (folosind faptul că fiecare model este înregistrat o dată în tabelul Produs):
Exemplu. Găsiți numărul de modele diferite disponibile produse de producătorul A. Interogarea este similară cu cea anterioară, în care era necesar să se determine numărul total de modele produse de producătorul A. Aici este necesar să găsiți numărul de modele diferite. în tabelul PC (adică, disponibil pentru vânzare).
Pentru a ne asigura că la obținerea indicatorilor statistici, când sunt utilizate numai valori unice argumentul funcției agregate poate fi utilizat parametru DISTINCT. O alta parametrul ALL este implicit și se așteaptă să numere toate valorile returnate în coloană. Operator,
Dacă trebuie să obținem numărul de modele de PC produse de fiecare producător, va trebui să utilizați GROUP BY oferta, urmând sintactic după clauze WHERE.
GROUP BY oferta
GROUP BY oferta este folosit pentru a defini grupuri de linii de ieșire cărora li se pot aplica funcții agregate (COUNT, MIN, MAX, AVG și SUM). Dacă această clauză lipsește și sunt utilizate funcții de agregare, atunci toate coloanele cu numele menționate în SELECTAȚI, ar trebui incluse în funcții agregate, iar aceste funcții se vor aplica întregului set de rânduri care satisfac predicatul de interogare. În caz contrar, toate coloanele din lista SELECT, nu este inclusîn funcții agregate, trebuie specificate în clauza GROUP BY. Ca rezultat, toate rândurile de ieșire ale interogării sunt împărțite în grupuri caracterizate prin aceleași combinații de valori în aceste coloane. După aceea, se vor aplica funcții agregate fiecărui grup. Rețineți că pentru GROUP BY, toate valorile NULL sunt tratate ca egale, adică. la gruparea după un câmp care conține valori NULL, toate aceste rânduri se vor încadra într-un singur grup.În cazul în care un dacă există o clauză GROUP BY, în clauza SELECT fără funcții agregate, atunci interogarea va returna pur și simplu un rând din fiecare grup. Această caracteristică, împreună cu cuvântul cheie DISTINCT, poate fi utilizată pentru a elimina rândurile duplicate dintr-un set de rezultate.
Luați în considerare un exemplu simplu:
SELECT model, COUNT(model) AS Cantitate_model, AVG(preț) AS Avg_price DE LA PC GROUP BY model; |
În această interogare, pentru fiecare model de PC, sunt determinate numărul și costul mediu al acestora. Toate rândurile cu aceeași valoare de model (număr de model) formează un grup, iar ieșirea SELECT calculează numărul de valori și valorile medii ale prețului pentru fiecare grup. Rezultatul interogării va fi următorul tabel:
model | Cantitate_model | Avg_price |
1121 | 3 | 850.0 |
1232 | 4 | 425.0 |
1233 | 3 | 843.33333333333337 |
1260 | 1 | 350.0 |
Dacă ar exista o coloană cu o dată în SELECT, atunci ar fi posibil să se calculeze acești indicatori pentru fiecare dată specifică. Pentru a face acest lucru, trebuie să adăugați data ca coloană de grupare, iar apoi funcțiile agregate vor fi calculate pentru fiecare combinație de valori (model-data).
Sunt mai multe specifice reguli pentru executarea funcţiilor agregate:
- Dacă în urma cererii nici un rând primit(sau mai mult de un rând pentru acest grup), atunci nu există date inițiale pentru calcularea vreuneia dintre funcțiile agregate. În acest caz, rezultatul execuției funcțiilor COUNT va fi zero, iar rezultatul tuturor celorlalte funcții va fi NULL.
- Argument functie de agregat nu poate conține în sine funcții agregate(funcție din funcție). Acestea. într-o singură solicitare este imposibil, să zicem, să primim un maxim de valori medii.
- Rezultatul executării funcției COUNT este întreg(ÎNTREG). Alte funcții agregate moștenesc tipurile de date ale valorilor procesate.
- Dacă la executarea funcției SUM s-a obținut un rezultat care a depășit valoarea maximă a tipului de date utilizat, a greşeală.
Deci, dacă cererea nu conține Oferte GROUP BY, apoi funcții agregate inclus în clauza SELECT, sunt executate pe toate șirurile de interogare rezultate. Dacă cererea conţine GROUP BY oferta, fiecare set de rânduri care are aceleași valori ale coloanei sau grupului de coloane specificat în oferta GROUP BY, constituie un grup, și funcții agregate efectuate pentru fiecare grupă separat.
AVÂND oferta
În cazul în care un clauza WHERE definește un predicat pentru filtrarea șirurilor, atunci clauza HAVING aplicat după grupare pentru a defini un predicat similar filtrarea grupurilor după valori funcții agregate. Această clauză este necesară pentru a valida valorile cu care se obțin functie de agregat nu din rânduri separate ale sursei de înregistrare definită în clauza FROM, și de la grupuri de astfel de linii. Prin urmare, un astfel de control nu poate fi inclus în clauza WHERE.
Sintaxă:
* Unde câmpuri 1- câmpuri pentru selecție separate prin virgule, puteți specifica și toate câmpurile cu *; masa- numele tabelului din care scoatem datele; conditii— condiții de prelevare; câmpuri 2— câmp sau câmpuri, separate prin virgule, după care să sortați; numara— numărul de rânduri de descărcat.
* interogarea între paranteze drepte este opțională pentru preluarea datelor.
Cazuri de utilizare simple pentru selectare
1. Eșantionarea normală a datelor:
> SELECTAȚI * FROM utilizatori
2. Selectarea datelor cu unirea a două tabele (JOIN):
SELECTAȚI u.name, r.* FROM users u JOIN users_rights r ON r.user_id=u.id
* în acest exemplu, datele sunt selectate cu tabele de unire utilizatoriiși drepturile_utilizatorilor. Sunt grupate pe câmpuri. ID-ul de utilizator(în tabelul user_rights) și id(utilizatori). Câmpul de nume este preluat din primul tabel și toate câmpurile din al doilea.
3. Eșantionarea cu un interval de timp și/sau dată
a) se cunosc punctul de plecare și un anumit interval de timp:
* vor fi selectate datele pentru ultima oră (câmp Data).
b) se cunosc data de început și data de încheiere:
25.10.2017 și 25.11.2017 .
c) se cunosc datele de început și de sfârșit + ora:
* selectați datele între 25.03.2018 0 ore 15 minuteși 25.04.2018 15 ore 33 minute și 9 secunde.
d) extrageți date pentru o anumită lună și an:
* extrageți datele unde se află în câmp Data există valori pentru aprilie 2018 al anului.
4. Eșantionarea valorii maxime, minime și medii:
> SELECTAȚI max(zonă), min(zonă), medie(zonă) FROM țară
* max- valoare maximă; min- minim; medie- media.
5. Folosind lungimea șirului:
* această interogare ar trebui să arate toți utilizatorii al căror nume este format din 5 caractere.
Exemple de interogări mai complexe sau utilizate rar
1. Îmbinarea cu gruparea datelor selectate într-o singură linie (GROUP_CONCAT):
* de la masă utilizatorii preluarea datelor după câmp id, toate se încadrează pe o singură linie, valorile sunt separate virgule.
2. Gruparea datelor după două sau mai multe câmpuri:
> SELECTAȚI * FROM utilizatori GROUP BY CONCAT(titlu, „::”, naștere)
* total, în acest exemplu, vom descărca datele din tabelul utilizatori și le vom grupa pe câmpuri titluși naștere. Înainte de grupare, îmbinăm câmpurile într-o singură linie cu un separator :: .
3. Combinarea rezultatelor din două tabele (UNION):
> (SELECT ID, fio, adresa, „Utilizatori” ca tip FROM utilizatori)
UNIUNE
(SELECT ID, fio, adresa, „Clienți” ca tip FROM clienți)
* în acest exemplu, datele sunt preluate din tabele utilizatoriiși Clienți.
4. Un eșantion de medii grupate pentru fiecare oră:
SELECTAȚI avg(temperature), DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H") ca hour_datetime DIN arhiva GROUP BY DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H")
* aici extragem valoarea medie a câmpului temperatura de la masă Arhivași grupați după domeniu actualizare datetime(cu împărțire în timp pentru fiecare oră).
Inserare (INSERT)
Sintaxa 1:
> INSERT INTO