Upiti u sql odabiru upita. Transact-SQL - Promjena i brisanje podataka

Svaka tabela ima svoj logički početak i svoj logički kraj. Takođe, svaka tabela se sastoji od podataka koji su često, au slučaju baza podataka u većoj meri, rasuti. Kao što je navedeno u prvom unosu u vezi sa SQL-om i bazama podataka, podaci se mogu redovno dodavati tokom čitavog životnog ciklusa baza podataka. Za to vrijeme može se unijeti više od desetina podataka. U SQL-u, kao iu svemu ostalom iu svemu kompjuterski programi, možete sortirati podatke. Ovo se radi po komandi POREDAK PO. Postoje dva argumenta za ovu naredbu.

  • ASC postavlja redoslijed u rastućem redoslijedu (od najmanjeg do najvećeg)
  • DESC - silazno (od najvećeg prema najmanjem)
Općenito, zadani poredak u SQL-u je rastući (od najmanjeg do najvećeg).
Pokušajmo sortirati tabelu dužnika po prezimenu - kolona Prezime - u opadajućem redoslijedu

Dužnici

Num mjesec godine Sname grad adresa Penal Dug
0001 jula2012 IvanovStavropolStavropoljska, 14891.00 50000
0002 decembar2019 KononovTatarZagorodnaja, 25419565.00 684068
0003 maja2013 YamshinMikhailovskruralna, 489868.00 165840
0004 avgust2012 prenyStavropolCentralna, 164659.00 46580
... ... ... ... ... ... ... ...
9564 mart2015 UlievDeminoMeđunarodna, 1566846.00 435089
9565 oktobar2012 PavlovaStavropolStanica, 37685.00 68059
9566 Januar2012 UryupaMikhailovskFontannaya, 191235.00 51238
9567 novembar2017 ValetovTatarIzlaz, 6513698.00 789654

Izvršite zahtjev
ODABIR *
OD dužnika
ORDER BY Sname DESC ;

Dužnici

Num mjesec godine Sname grad adresa Penal Dug
0003 maja2013 YamshinMikhailovskruralna, 489868.00 165840
9566 Januar2012 UryupaMikhailovskFontannaya, 191235.00 51238
9564 mart2015 UlievDeminoMeđunarodna, 1566846.00 435089
0004 avgust2012 prenyStavropolCentralna, 164659.00 46580
9565 oktobar2012 PavlovaStavropolStanica, 37685.00 68059
0002 decembar2019 KononovTatarZagorodnaja, 25419565.00 684068
0001 jula2012 IvanovStavropolStavropoljska, 14891.00 50000
9567 novembar2017 ValetovTatarIzlaz, 6513698.00 789654

Poredak se može izvršiti i u grupisanim podacima pomoću naredbe . Ali u ovom slučaju, naredba ORDER BY u upitu bi trebala biti posljednja, tj
ODABIR *
OD dužnika
GRUPA PO Ime
ORDER BY Sname DESC ;

Ako u uređenim poljima postoje ćelije s praznim vrijednostima (NULL), tada, ovisno o programima koji rade s bazom podataka, takve ćelije se mogu nalaziti ili na kraju liste ili na početku.
Postoji još jedan trik za obavljanje redoslijeda podataka. Razmotrite upit
SELECT Broj, Godina, Prezime
OD dužnika
ORDER BY 2 DESC ;

Ovdje dva označava redni broj kolone iz niza "SELECT Num, Year, Sname" i to je ta kolona koja će se koristiti za rangiranje u opadajućem redoslijedu na kraju

Dužnici

Kao što vidite, vrijednosti su sortirane po koloni Godina, s najnovijim datumom na početku liste.
Dakle, naručivanje u SQL-u ima iste principe rangiranja kao i u bilo kom kompjuterskom programu. Sve zavisi od administratora baze podataka i njegovih potreba za ovim ili onim informacijama koje želi da primi.

SQL - SELECT izjava

Naziv SQL (Structured Query Language) odražava činjenicu da su upiti najčešće korišteni element SQL-a. Upit je izraz koji šalje naredbu sistemu za upravljanje bazom podataka (DBMS) za manipulaciju ili prikaz određenih informacija. Svi upiti za odabir podataka u SQL-u se konstruiraju pomoću SELECT izraza. Omogućava vam da izvršite prilično složene provjere i obradu podataka.

Upit može prikazati podatke iz određene kolone ili iz svih kolona u tabeli. Da biste kreirali najjednostavniji SELECT upit, morate navesti ime stupca i ime tablice.

SELECT sintaksa izraza

SELECT column_list FROM table_name

SELECT Ključna riječ koja govori bazi podataka da je izjava upit. Svi upiti počinju ovom riječju, nakon čega slijedi razmak.

Column_list Lista kolona tabele koje su odabrane upitom. Kolone koje nisu navedene u iskazu neće biti uključene u rezultat. Ako trebate prikazati podatke svih stupaca, možete koristiti skraćenu notaciju. Zvjezdica (*) označava kompletnu listu kolona.

FROM ime_tablice Ključna riječ koja mora biti prisutna u svakom zahtjevu. Nakon njega slijedi razmak odvojen imenom tablice koja je izvor podataka.

Kôd u zagradama nije obavezan u SELECT izrazu. Neophodno je za preciznije definisanje zahteva.

Također je potrebno reći da je SQL kod neosjetljiv na velika i mala slova. To znači da se SELECT unos može napisati kao odabir. DBMS neće praviti razliku između ova dva unosa, ali se savjetuje da sve SQL izraze napišete velikim slovima kako bi se mogli lako razlikovati od drugog koda.

Pogledajmo tabelu Salesspeople iz klasičnog SQL vodiča Martina Grabera za primjere.
Evo MySQL koda za kreiranje testne tabele:

CREATE TABLE `salespeople` (`snum` INTEGER(11) NOT NULL AUTO_INCREMENT, `ime` VARCHAR(20) COLLATE cp1251_general_ci DEFAULT NULL, `city` VARCHAR(20) COLLATE cp1251 DEFAULT` DEFAULT NULL, PRIMARNI KLJUČ (`snum`))ENGINE=InnoDB SET KARAKTERA "cp1251" COLLATE "cp1251_general_ci" COMMENT="InnoDB besplatno: 5120 kB"; UMETNI U `prodavače` (`snum`, `ime`, `grad`, `comm`) VRIJEDNOSTI (1001,"Peel","London",0.120), (1002,"Serres","San Jose",0.130 ), (1003,"Axelrod","New York",0.100), (1004,"Motika","London",0.110), (1007,"Rifkin","Barcelona",0.150); COMMIT;

Tabela izgleda ovako:

Primjer naredbe SELECT

1. Potrebno je prikazati listu prodavaca, te prikazati njihova imena (ime)

ODABERITE ime od prodavača

rezultat:

Ovdje, nakon naredbe SELECT, prikazane su kolone koje treba prikazati. Nazivi kolona su odvojeni zarezima.

3. Potrebno je prikazati cijelu tabelu

Da biste to učinili, možete koristiti različitu sintaksu za pisanje upita. Navodimo svaku kolonu nakon naredbe SELECT:

SELECT snum , sname , city , comm OD prodavača

Ili možete postići isti rezultat koristeći stenografsku notaciju:

ODABIR * IZ rezultata prodavača:

snumimegradcomm
1001 PeelLondon0,12
1002 SerresSan Jose0,13
1003 AxelrodNjujork0,1
1004 MotikaLondon0,11
1007 RifkinBarcelona0,15
Takođe želim da vam dam mali savet. Radi praktičnosti upita za otklanjanje grešaka, neki ljudi pišu listu kolona koje treba da budu prikazane u posebnom redu. Ovo olakšava komentiranje koda. Sintaksa za komentiranje koda u SQL-u je /* komentirani kod */ Primjer: SELECT snum ,sname , city , comm FROM Salespeople

Ovo će prikazati 4 kolone, međutim, s takvim zapisom, možete lako komentirati nepotrebnu kolonu. Na primjer ovako:

SELECT /* snum , */ ime , grad , comm OD prodavača

Sada se snum kolona neće prikazati jer je komentarisana. Vrlo brzo i povoljno. Naravno, na vama je kako napisati SQL kod, ali poznavanje takvih stvari je ponekad korisno.

Korištenje izraza u SELECT naredbi

Mnogi DBMS pružaju posebne karakteristike za rukovanje rezultatima upita. Skup takvih objekata u različitim DBMS-ima je različit, ali postoje neke standardne karakteristike, kao što su izrazi. Na primjer, možda ćete htjeti izvršiti jednostavne matematičke operacije nad podacima kako biste ih predstavili na pogodniji način ili umetnuti dodatni tekst u rezultat upita. SQL vam omogućava da postavite skalarne izraze i konstante među odabrane stupce koji mogu nadopuniti ili zamijeniti stupce u SELECT klauzulama. Razmotrimo primjer.

4. Provizije (comm) prodavaca je potrebno prikazati u procentima, a ne decimalnim brojevima

SELECT snum, sname, city, comm * 100 FROM Salesspeople

rezultat:

snumimegradcomm
1001 PeelLondon12
1002 SerresSan Jose13
1003 AxelrodNjujork10
1004 MotikaLondon11
1007 RifkinBarcelona15
U posljednjoj koloni svi primljeni podaci se množe sa 100 i prikazuju kao postotak.

Ova kolona nema ime, jer ne sadrži izmijenjene podatke i stoga je imenovana prema diskreciji DBMS-a (na primjer, MySQL kolonu imenuje comm * 100, u primjerima M. Grabbera kolona ima ime 4, odnosno njen broj).

U takvim slučajevima, pogodan je za upotrebu imenovanje stupaca. Na primjer, možete imenovati postotak posljednje kolone. Da biste to učinili, nakon naziva kolone morate navesti ključnu riječ AS, a zatim i naziv kolone na rezultirajućoj stranici.

ODABIR snum, ime, grad, comm * 100 KAO "posto" OD Prodavača Rezultat:

snumimegradposto
1001 PeelLondon12
1002 SerresSan Jose13
1003 AxelrodNjujork10
1004 MotikaLondon11
1007 RifkinBarcelona15

Kao rezultat upita, posljednja kolona je nazvana nizom "percent", što ga čini lakšim za razumijevanje.

S obzirom da se broj prikazuje u postocima, bilo bi lijepo to naznačiti u rezultatu. SQL sposobnost dolazi u pomoć dodajte tekst u rezultat. izgleda ovako:

ODABIR snum, ime, grad, comm * 100 AS posto , "%" IZ rezultata prodavača:

snumimegradposto%
1001 PeelLondon12 %
1002 SerresSan Jose13 %
1003 AxelrodNjujork10 %
1004 MotikaLondon11 %
1007 RifkinBarcelona15 %

Vidi se da se nakon izlaza reda iz baze pojavila nova kolona ispunjena predznakom procenta (%).

Ako niste zadovoljni izlazom podataka i komplementarnog teksta u različitim stupcima, tada možete koristiti posebne funkcije vašeg DBMS-a za spajanje u jednu kolonu.

MySQL koristi ovu funkciju CONCAT . Evo njegove definicije iz priručnika:

CONCAT(str1,str2,...)
Vraća niz koji je rezultat spajanja argumenata. Ako je barem jedan od argumenata NULL, vraća se NULL. Može uzeti više od 2 argumenta. Numerički argument se pretvara u njegov ekvivalentni oblik stringa.

Primjer: SELECT snum, sname, city , CONCAT(comm * 100, "%") KAO "persent" OD prodavača Rezultat:

snumimegradpersent
1001 PeelLondon12.000%
1002 SerresSan Jose13.000%
1003 AxelrodNjujork10.000%
1004 MotikaLondon11.000%
1007 RifkinBarcelona15.000%

U ovom upitu, funkcija CONCAT uzima 2 argumenta, to su comm * 100 i znak postotka ("%"). Zatim imenujemo kolonu sa AS.

Važno je znati da korištenje funkcija smanjuje performanse. Ovo nije jedina negativna, ali vrlo važna. Stoga, ako se možete izvući sa standardnim SQL kodom, bolje je ne koristiti funkcije. Njih treba zapamtiti samo u ekstremnim slučajevima.

Isključivanje suvišnih podataka

Često je potrebno isključiti duple vrijednosti iz rezultata upita. Za ovo se koristi ključna riječ DISTINCT. Suprotan efekat se dobija korišćenjem reči SVE, koja se podrazumevano koristi (odnosno, ne treba je specificirati).

5. Potrebno je prikazati gradove (grad) u kojima se nalaze prodavci

Zahtjev bez izuzetka:

IZABERITE grad OD prodavača Rezultat:

Duplicirane vrijednosti Londona su isključene iz rezultata, prema potrebi.

Sortiraj rezultat po vrijednostima po koloni

SELECT izraz daje podatke u proizvoljnom nizu. Za sortiranje rezultata prema određenoj koloni, SQL koristi operator ORDER BY (tj. poredak po...). Ova izjava vam omogućava da promijenite redoslijed u kojem se podaci izlaze. ORDER BY naređuje rezultat upita prema vrijednostima jedne ili više kolona odabranih u klauzuli SELECT. U ovom slučaju, za svaku kolonu možete postaviti sortiranje po rastućem redoslijedu - rastućem (ASC) (ovaj parametar se koristi po defaultu) ili opadajućem redoslijedu - opadajućem (DESC).

Sortirajte rezultat prema stupcu imena. Nakon operatora ORDER BY, označavamo po kojoj koloni treba sortirati, zatim morate odrediti metodu sortiranja

Primjer - sortiranje uzlaznim redoslijedom:

SELECT * FROM Salesspeople ORDER BY Sname ASC

rezultat:


Primjer - sortiranje po više kolona:

ODABERITE prezime, ime, grad OD prodavača ORDER BY DES, grad DESC Rezultat:

snumimegrad
1002 SerresSan Jose
1007 RifkinBarcelona
1001 PeelLondon
1004 MotikaLondon
1003 AxelrodNjujork

Nekoliko važnih napomena:
- kolona po kojoj se vrši sortiranje mora biti navedena u SELECT (možete koristiti *)
- operator ORDER BY je uvijek napisan na kraju upita

Dobrodošli na moj blog stranicu. Danas ćemo govoriti o sql upitima za početnike. Neki webmasteri mogu imati pitanje. Zašto naučiti sql? Ne možete proći?

Ispostavilo se da to neće biti dovoljno za stvaranje profesionalnog internet projekta. Sql se koristi za rad sa bazom podataka i kreiranje aplikacija za WordPress. Pogledajmo detaljnije kako koristiti upite.

Šta je to

Sql je jezik strukturiranih upita. Kreiran da odredi vrstu podataka, omogući im pristup i obradu informacija u kratkim vremenskim periodima. Opisuje komponente ili neke rezultate koje želite da vidite na Internet projektu.

Jednostavno rečeno, ovaj programski jezik vam omogućava da dodajete, mijenjate, pretražujete i prikazujete informacije u bazi podataka. Popularnost mysql-a je zbog činjenice da se koristi za kreiranje dinamičkih Internet projekata, koji se zasnivaju na bazi podataka. Stoga, da biste razvili funkcionalan blog, morate naučiti ovaj jezik.

Šta se može

sql jezik dozvoljava:

  • kreirati tabele;
  • promijeniti primanje i pohranjivanje različitih podataka;
  • kombinirati informacije u blokove;
  • zaštititi podatke;
  • kreirajte zahtjeve u pristupu.

Bitan! Nakon što ste se pozabavili sql-om, možete pisati aplikacije za WordPress bilo koje složenosti.

Kakva struktura

Baza podataka se sastoji od tabela koje se mogu predstaviti kao Excel fajl.

Ona ima ime, kolone i red sa nekim informacijama. Takve tabele možete kreirati koristeći sql upite.

Šta treba da znate


Ključne tačke prilikom učenja sql

Kao što je gore navedeno, upiti se koriste za obradu i unos novih informacija u bazu podataka koja se sastoji od tabela. Svaki red je zaseban unos. Pa hajde da napravimo bazu podataka. Da biste to učinili, napišite naredbu:

Kreirajte bazu podataka 'bazaname'

Pod navodnicima pišemo naziv baze podataka latinicom. Pokušajte smisliti neko smisleno ime za nju. Nemojte kreirati bazu podataka poput "111", "www" i slično.

Nakon kreiranja baze podataka, instalirajte:

NAZIVA SETOVA 'utf-8'

Ovo je neophodno kako bi se sadržaj na stranici ispravno prikazao.

Sada kreiramo tabelu:

CREATE TABLE 'bazaname' . 'stol' (

id INT(8) NIJE NULL AUTO_INCREMENT PRIMARNI KLJUČ,

log VARCHAR(10),

proći VARCHAR(10),

datum DATE

U drugom redu napisali smo tri atributa. Hajde da vidimo šta oni znače:

  • Atribut NOT NULL znači da ćelija neće biti prazna (polje je obavezno);
  • Vrijednost AUTO_INCREMENT je autocomplete;
  • PRIMARY KEY je primarni ključ.

Kako dodati informacije

Za popunjavanje polja kreirane tablice vrijednostima koristi se INSERT izraz. Pišemo sljedeće linije koda:

INSERT IN TO 'table'

(login , pass , datum) VRIJEDNOSTI

('Vasa', '87654321', '2017-06-21 18:38:44');

U zagradama navodimo naziv kolona, ​​au sljedećem - vrijednosti.

Bitan! Pratite redoslijed imena i vrijednosti stupaca.

Kako ažurirati informacije

Za to se koristi naredba UPDATE. Pogledajmo kako promijeniti lozinku za određenog korisnika. Pišemo sljedeće linije koda:

UPDATE 'table' SET pass = '12345678' WHERE id = '1'

Sada promijenite lozinku u '12345678'. Promjene se dešavaju u redu sa "id"=1. Ako ne napišete naredbu WHERE, promijenit će se svi redovi, a ne određeni.

Preporučujem da kupite knjigu SQL za lutke ". Uz njegovu pomoć moći ćete profesionalno raditi s bazom podataka korak po korak. Sve informacije su izgrađene po principu od jednostavnog do složenog i biće dobro prihvaćene.

Kako izbrisati unos

Ako ste nešto pogrešno napisali, ispravite to naredbom DELETE. Radi isto kao UPDATE. Pišemo sljedeći kod:

IZBRIŠI IZ 'tabele' GDJE id = '1'

Uzorkovanje informacija

Naredba SELECT se koristi za preuzimanje vrijednosti iz baze podataka. Pišemo sljedeći kod:

SELECT * FROM 'table' WHERE id = '1'

IN ovaj primjer izaberite sva dostupna polja u tabeli. Ovo se dešava ako u naredbu upišete zvjezdicu "*". Ako trebate odabrati vrijednost uzorka, napišite ovako:

SELECT log , pass FROM table WHERE id = '1'

Treba napomenuti da sposobnost rada sa bazama podataka neće biti dovoljna. Da biste kreirali profesionalni internet projekat, moraćete da naučite kako da dodate podatke iz baze podataka na stranice. Da biste to učinili, upoznajte se sa php web programskim jezikom. Ovo će vam pomoći Kul kurs Mihaila Rusakova .


Brisanje tabele

Javlja se sa zahtjevom DROP. Da biste to učinili, napišite sljedeće redove:

DROP TABLE sto;

Izlaz zapisa iz tabele prema određenom uslovu

Uzmite u obzir ovaj kod:

SELECT ID, countri, city IZ tabele GDJE ljudi>150000000

Prikazaće evidenciju zemalja u kojima živi više od sto pedeset miliona stanovnika.

Udruženje

Povezivanje više tabela zajedno je moguće pomoću Join. Pogledajte kako to radi u ovom videu:

PHP i MySQL

Još jednom želim da naglasim da su zahtjevi prilikom kreiranja internet projekta uobičajena stvar. Da biste ih koristili u php dokumentima, slijedite sljedeći algoritam radnji:

  • Povežite se na bazu podataka pomoću naredbe mysql_connect();
  • Koristeći mysql_select_db() odaberite željenu bazu podataka;
  • Obrada upita sa mysql_fetch_array();
  • Zatvaramo vezu sa naredbom mysql_close().

Bitan! Rad sa bazom podataka nije težak. Glavna stvar je da pravilno napišete zahtjev.

Webmasteri početnici će razmisliti. I šta čitati na ovu temu? Želio bih preporučiti knjigu Martina Grabera " SQL za obične smrtnike ". Napisano je tako da će početnici sve razumjeti. Koristite ga kao referentnu knjigu.

Ali ovo je teorija. Kako to funkcionira u praksi? U stvari, internet projekat ne samo da se mora kreirati, već i dovesti na TOP Google-a i Yandex-a. Video kurs će vam pomoći u tome " Kreiranje i promocija sajta ».


Video uputstvo

Imate još pitanja? Pogledajte još online video.

Zaključak

Dakle, bavljenje pisanjem sql upita nije tako teško kao što se čini, ali svaki webmaster to mora učiniti. Gore opisani video kursevi pomoći će u tome. Pretplatite se na moja VKontakte grupa da prvi sazna za nove zanimljive informacije.

Upiti se pišu bez izlaznih navodnika, jer MySQL, MS SQL I PostGree oni su različiti.

SQL upit: dobivanje specificiranih (obaveznih) polja iz tablice

SELECT id, country_title, count_people FROM table_name

Dobijamo listu zapisa: SVE zemlje i njihovo stanovništvo. Nazivi obaveznih polja su odvojeni zarezima.

SELECT * FROM table_name

* označava sva polja. Odnosno, postojaće displeji SVE polja podataka.

SQL upit: prikaz zapisa iz tablice isključujući duplikate

SELECT DISTINCT country_title IZ table_name

Dobijamo listu zapisa: zemlje u kojima se nalaze naši korisnici. Može biti mnogo korisnika iz jedne zemlje. U ovom slučaju, ovo je vaš zahtjev.

SQL upit: prikazivanje zapisa iz tablice prema datom uvjetu

SELECT id, country_title, city_title FROM table_name WHERE count_people>100000000

Dobijamo listu zapisa: zemlje u kojima je broj ljudi veći od 100.000.000.

SQL upit: prikaz zapisa iz tablice s redoslijedom

SELECT id, city_title IZ table_name ORDER BY city_title

Dobijamo listu zapisa: gradovi po abecednom redu. A na početku, Z na kraju.

SELECT id, city_title IZ table_name ORDER BY city_title DESC

Dobijamo listu zapisa: gradovi u obrnutom smjeru ( DESC) je u redu. Na početku I, na kraju A.

SQL upit: brojanje broja zapisa

SELECT COUNT(*) FROM table_name

Dobijamo broj (broj) zapisa u tabeli. U ovom slučaju NEMA liste unosa.

SQL upit: prikazuje željeni raspon zapisa

SELECT * FROM table_name LIMIT 2, 3

Dobijamo 2 (drugi) i 3 (treći) zapisa iz tabele. Upit je koristan kada kreirate navigaciju na WEB stranicama.

SQL upiti s uvjetima

Prikaz zapisa iz tabele prema datom uslovu pomoću logičkih operatora.

SQL upit: I konstrukcija (I)

SELECT id, city_title IZ table_name WHERE country="Rusija" AND oil=1

Dobivanje liste rekorda: gradovi iz Rusije I imaju pristup ulju. Kada se koristi operater? I, tada se oba uslova moraju podudarati.

SQL upit: ILI konstrukcija (ILI)

SELECT id, city_title FROM table_name WHERE country="Rusija" OR country="SAD"

Dobijte listu zapisa: svi gradovi iz Rusije ILI SAD. Kada se koristi operater? ILI, tada se NAJMANJE jedan uvjet mora podudarati.

SQL upit: I NE konstruiraj (I NE)

SELECT id, user_login IZ table_name WHERE country="Rusija" I NE count_comments<7

Dobijte listu zapisa: svi korisnici iz Rusije I napravljeno NE MANJE 7 komentara.

SQL upit: IN konstrukcija (B)

SELECT id, user_login FROM table_name WHERE country IN ("Rusija", "Bugarska", "Kina")

Dobijamo listu zapisa: svi korisnici koji žive u ( IN) (Rusija, ili Bugarska, ili Kina)

SQL upit: NOT IN konstrukcija (NOT IN)

SELECT id, user_login FROM table_name GDJE zemlja NIJE U ("Rusija","Kina")

Dobijamo listu zapisa: svi korisnici koji ne žive u ( NOT IN) (Rusija ili Kina).

SQL upit: IS NULL konstrukcija (prazne ili NE prazne vrijednosti)

SELECT id, user_login FROM table_name WHERE status JE NULL

Dobijamo listu zapisa: svi korisnici kod kojih status nije definisan. NULL je posebna tema i stoga se provjerava zasebno.

SELECT id, user_login FROM table_name WHERE stanje NIJE NULL

Dobijamo listu zapisa: svi korisnici kod kojih je definiran status (NE NULA).

SQL upit: LIKE konstrukcija

SELECT id, user_login FROM table_name GDJE prezime LIKE "Jovan%"

Dobijamo listu zapisa: korisnika čije prezime počinje kombinacijom "Ivan". Znak % znači BILO KOJI broj BILO KOJI znakova. Da biste pronašli znak %, trebate koristiti izlazni "Ivan\%".

SQL upit: BETWEEN konstrukcija

SELECT id, user_login IZ table_name GDJE plata IZMEĐU 25000 I 50000

Dobijamo spisak evidencije: korisnici koji primaju platu od 25.000 do 50.000 uključujući.

Postoji JAKO mnogo logičkih operatora, stoga detaljno proučite dokumentaciju SQL servera.

Složeni SQL upiti

SQL upit: spajanje više upita

(SELECT id, user_login IZ table_name1) UNION (SELECT id, user_login FROM table_name2)

Dobijamo listu unosa: korisnika koji su registrovani u sistemu, kao i onih korisnika koji su posebno registrovani na forumu. UNION operator može kombinovati više upita. UNION se ponaša kao SELECT DISTINCT, to jest, odbacuje duple vrijednosti. Da biste dobili apsolutno sve zapise, morate koristiti operator UNION ALL.

SQL upit: izračunavanje vrijednosti polja MAX, MIN, SUM, AVG, COUNT

Izlaz jedan, maksimalna vrijednost brojača u tabeli:

SELECT MAX(counter) FROM table_name

Izlaz jedan, minimalna vrijednost brojača u tabeli:

SELECT MIN(counter) FROM table_name

Prikaz zbira svih vrijednosti brojača u tabeli:

SELECT SUM(counter) FROM table_name

Prikaz prosječne vrijednosti brojača u tabeli:

SELECT AVG(counter) FROM table_name

Prikaz broja brojača u tabeli:

SELECT COUNT(counter) FROM table_name

Zaključak broja brojila u radnji br. 1, u tabeli:

SELECT COUNT(counter) FROM table_name WHERE office="Radionica #1"

Ovo su najpopularnije komande. Preporučljivo je, gdje je to moguće, koristiti SQL upite ove vrste za proračun, jer se nijedno programsko okruženje ne može porediti u brzini obrade podataka sa samim SQL serverom prilikom obrade vlastitih podataka.

SQL upit: grupiranje zapisa

SELECT kontinent, SUM(country_area) IZ zemlje GRUPA PO kontinentu

Dobijamo listu rekorda: sa imenom kontinenta i sa zbirom površina svih njihovih zemalja. Odnosno, ako postoji imenik zemalja u kojima svaka zemlja ima svoju površinu, onda pomoću konstrukcije GROUP BY možete saznati veličinu svakog kontinenta (na osnovu grupiranja po kontinentima).

SQL upit: korištenje više tablica preko pseudonima (alias)

ODABERITE o.order_no, o.amount_paid, c.company IZ narudžbi KAO o, kupac KAO sa GDJE o.custno=c.custno I c.city="Tyumen"

Dobijamo listu zapisa: narudžbine kupaca koji žive samo u Tjumenu.

Zapravo, kod pravilno dizajnirane baze podataka ovog tipa, upit je najčešći, pa je MySQL uveo poseban operator koji radi mnogo puta brže od koda koji je gore napisan.

ODABERITE o.order_no, o.amount_paid, z.company IZ narudžbi KAO o LIJEVI PRIDRUŽITE se kupcu KAO z ON (z.custno=o.custno)

Ugniježđeni podupiti

SELECT * FROM table_name GDJE plata=(IZABIR MAX(plata) FROM zaposlenog)

Dobijamo jedan zapis: podatke o korisniku sa maksimalnom platom.

Pažnja! Ugniježđeni potupiti su jedno od uskih grla u SQL serverima. Zajedno sa svojom fleksibilnošću i snagom, oni također značajno povećavaju opterećenje servera. Što dovodi do katastrofalnog usporavanja za druge korisnike. Vrlo su česti slučajevi rekurzivnih poziva sa ugniježđenim upitima. Stoga, toplo preporučujem da NE koristite ugniježđene upite, već da ih razbijete na manje. Ili koristite LEFT JOIN kombinaciju opisanu gore. Pored ove vrste zahtjeva, oni su povećan fokus kršenja sigurnosti. Ako odlučite koristiti ugniježđene potupite, onda ih morate vrlo pažljivo dizajnirati i izvršiti početna izvođenja na kopijama baze podataka (testne baze podataka).

SQL upiti mijenjaju podatke

SQL upit: INSERT

Uputstvo INSERT omogućavaju umetanje zapisa u tabelu. Jednostavnim rečima, kreirajte liniju sa podacima u tabeli.

Opcija broj 1. Često korišteno uputstvo:

INSERT INTO table_name (id, user_login) VRIJEDNOSTI (1, "ivanov"), (2, "petrov")

U tabeli" table_name» će umetnuti 2 (dva) korisnika odjednom.

Opcija broj 2. Pogodnije je koristiti stil:

INSERT table_name SET id=1, user_login="ivanov"; INSERT table_name SET id=2, user_login="petrov";

Ovo ima svoje prednosti i nedostatke.

Glavni nedostaci:

  • Mnogi mali SQL upiti su nešto sporiji od jednog velikog SQL upita, ali drugi upiti će biti stavljeni u red za uslugu. Odnosno, ako veliki SQL upit traje 30 minuta, onda će za sve to vrijeme ostali upiti pušiti bambus i čekati svoj red.
  • Zahtjev je masivniji od prethodne verzije.

Glavne prednosti:

  • Tokom malih SQL upita, drugi SQL upiti nisu blokirani.
  • Lakoća čitanja.
  • Fleksibilnost. U ovoj opciji ne možete pratiti strukturu, već dodati samo potrebne podatke.
  • Kada kreirate arhive na ovaj način, možete jednostavno kopirati jednu liniju i pokrenuti je kroz komandnu liniju (konzolu), čime se ne vraća čitava ARHIVA.
  • Stil pisanja je sličan naredbi UPDATE, koju je lakše zapamtiti.

SQL upit: UPDATE

UPDATE table_name SET user_login="ivanov", user_surname="Ivanov" GDJE id=1

U tabeli" table_name» u zapisu s brojem id=1, vrijednosti polja user_login i user_surname će biti promijenjene na navedene vrijednosti.

SQL upit: DELETE

DELETE FROM table_name WHERE id=3

Zapis sa ID brojem 3 će biti obrisan u tabeli table_name.

  1. Sva imena polja se preporučuju da budu napisana malim slovima i, ako je potrebno, odvojena razmakom "_" radi kompatibilnosti sa različitim programskim jezicima kao što su Delphi, Perl, Python i Ruby.
  2. SQL naredbe su napisane VELIKIM slovima radi čitljivosti. Uvijek zapamtite da drugi ljudi mogu pročitati kod nakon vas, ali najvjerovatnije vi sami nakon N vremena.
  3. Imenujte polja prvo imenicom, a zatim radnjom. Na primjer: city_status, user_login, user_name.
  4. Pokušajte izbjeći rezervne riječi na različitim jezicima koje mogu uzrokovati probleme u SQL-u, PHP-u ili Perlu, kao što su (ime, broj, veza). Na primjer: veza se može koristiti u MS SQL-u, ali je rezervirana u MySQL-u.

Ovaj materijal je kratka referenca za svakodnevni rad i ne pretenduje da bude super mega autoritativni izvor, koji je primarni izvor SQL upita određene baze podataka.

  • Prevod
  • tutorial
Da li bi trebalo da bude “ SELECT * WHERE a=b FROM c” ili “SELECT WHERE a=b FROM c ON *”?

Ako ste poput mene, složit ćete se: SQL je jedna od onih stvari koje na prvi pogled izgledaju lako (čita se kao engleski!), ali nekako morate proguglati svaki jednostavan upit da biste pronašli ispravnu sintaksu.


A onda počinju spajanja, agregacija, potupiti, i ispada da je to potpuno smeće. Volim ovo:


SELECT members.firstname || " " || members.prezime KAO "Puno ime" IZ posudbi INNER JOIN članovi NA members.memberid=borrowings.memberid INNER JOIN knjige ON books.bookid=borrowings.bookid WHERE borrowings.bookid IN (ODABIR bookid IZ knjiga GDJE zaliha>(IZABIR prosj.(zaliha ) IZ knjiga)) GROUP BY članovi.ime, članovi.prezime;

Bue! Ovo će uplašiti svakog početnika, pa čak i prosječnog programera ako prvi put vidi SQL. Ali nije sve tako loše.


Lako je zapamtiti ono što je intuitivno, a nadam se da ću ovim vodičem smanjiti barijeru za ulazak u SQL za početnike, a istovremeno ponuditi novi pogled na SQL za iskusnije.


Iako je sintaksa SQL-a skoro ista u različitim bazama podataka, ovaj članak koristi PostgreSQL za upite. Neki primjeri će raditi u MySQL i drugim bazama podataka.

1. Tri magične riječi

U SQL-u postoji mnogo ključnih riječi, ali SELECT, FROM i WHERE su prisutni u gotovo svakom upitu. Malo kasnije, shvatit ćete da ove tri riječi predstavljaju najosnovnije aspekte izgradnje upita prema bazi podataka, a drugi, složeniji upiti, samo su dodaci uz njih.

2. Naša baza

Pogledajmo bazu podataka koju ćemo koristiti kao primjer u ovom članku:







Imamo knjižnicu i ljude. Postoji i posebna tabela za obračun izdatih knjiga.

  • Tabela "knjige" pohranjuje informacije o naslovu, autoru, datumu objavljivanja i dostupnosti knjige. Sve je jednostavno.
  • U tabeli "članovi" - imena i prezimena svih ljudi koji su se upisali u biblioteku.
  • Tabela "posuđenosti" čuva informacije o knjigama posuđenim iz biblioteke. Kolona bookid se odnosi na id posuđene knjige u tabeli "knjige", a kolona memberid se odnosi na odgovarajuću osobu u tabeli "članovi". Također imamo datum izdavanja i datum kada knjiga mora biti vraćena.

3. Jednostavan zahtjev

Počnimo s jednostavnim zahtjevom: trebamo imena I identifikatori(id) sve knjige koje je napisao autor “Dan Brown”


Zahtjev će biti ovakav:


SELECT bookid AS "id", naslov IZ knjiga WHERE autor="Dan Brown";

A rezultat je ovakav:


id naslov
2 Izgubljeni simbol
4 Inferno

Prilično jednostavno. Hajde da raskinemo zahtev da razumemo šta se dešava.

3.1 OD - odakle dobijamo podatke

Ovo sada može izgledati očigledno, ali FROM će biti veoma važno kasnije kada dođemo do spajanja i podupita.


FROM pokazuje na tablicu za upit. To može biti već postojeća tabela (kao u gornjem primjeru) ili tablica kreirana u hodu putem spajanja ili podupita.

3.2 GDJE - koje podatke prikazati

WHERE se jednostavno ponaša kao filter linije koje želimo da prikažemo. U našem slučaju želimo vidjeti samo redove u kojima je vrijednost u koloni autora "Dan Brown".

3.3 SELECT - kako prikazati podatke

Sada kada imamo sve kolone koje su nam potrebne iz tabele koja nam je potrebna, moramo odlučiti kako tačno prikazati ove podatke. U našem slučaju, trebaju nam samo naslovi i ID knjige, tako da to radimo. izabrati sa SELECT . Istovremeno, možete preimenovati kolonu koristeći AS.


Cijeli upit se može vizualizirati jednostavnim dijagramom:


4. Veze (spoji)

Sada želimo vidjeti naslove (ne nužno jedinstvene) svih knjiga Dana Browna koje su posuđene iz biblioteke i kada te knjige treba vratiti:


SELECT books.title AS "Title", borrowings.returndate AS "Return Date" FROM borrowings PRIDRUŽITE knjige NA borrowings.bookid=books.bookid WHERE books.author="Dan Brown";

rezultat:


Naslov datum povratka
Izgubljeni simbol 2016-03-23 00:00:00
Inferno 2016-04-13 00:00:00
Izgubljeni simbol 2016-04-19 00:00:00

Zahtjev je uglavnom sličan prethodnom. sa izuzetkom IZ odjeljka. To znači da mi tražimo podatke iz druge tabele. Ne pristupamo ni tabeli "knjige" ni tabeli "pozajmice". Umjesto toga, okrećemo se novi sto, koja je nastala spajanjem ove dvije tabele.


borrowings JOIN books NA borrowings.bookid=books.bookid je nova tabela koja je formirana kombinovanjem svih zapisa iz tabela "knjige" i "posudbe" u kojima se poklapaju vrednosti bookid-a. Rezultat takvog spajanja bit će:



I onda pravimo upit ovoj tabeli na isti način kao u gornjem primjeru. To znači da kada spajate tablice, trebate samo da brinete o tome kako ćete provesti ovo spajanje. I tada zahtjev postaje jasan kao u slučaju „jednostavnog zahtjeva“ iz tačke 3.


Pokušajmo malo složenije spajanje s dvije tablice.


Sada želimo da dobijemo imena i prezimena ljudi koji su iz biblioteke uzeli knjige autora “Dan Brown”.


Ovaj put idemo odozdo prema gore:


Korak 1- odakle dobijamo podatke? Da bismo dobili željeni rezultat, moramo spojiti tabele "član" i "knjige" sa tabelom "posuđenosti". Odjeljak JOIN će izgledati ovako:


borrowings PRIDRUŽITE se knjigama NA borrowings.bookid=books.bookid PRIDRUŽITE se članovima NA members.memberid=borrowings.memberid

Rezultat povezivanja možete vidjeti na linku.


Korak 2 Koje podatke prikazujemo? Nas zanimaju samo podaci gdje je autor knjige “Dan Brown”


WHERE books.author="Dan Brown"

Korak 3 Kako prikazujemo podatke? Sada kada su podaci primljeni, potrebno je samo prikazati imena i prezimena onih koji su uzeli knjige:


SELECT members.firstname AS "Ime", members.prezime AS "Prezime"

Super! Ostaje samo spojiti tri komponente i napraviti zahtjev koji nam je potreban:


SELECT members.firstname AS "Ime", members.prezime AS "Prezime" FROM borrowings PRIDRUŽITE knjige NA borrowings.bookid=books.bookid PRIDRUŽITE članove NA members.memberid=borrowings.memberid WHERE books.author="Dan Brown";

Šta će nam dati:


ime prezime
Mike Willis
Ellen Horton
Ellen Horton

Odlično! Ali imena se ponavljaju (nisu jedinstvena). Uskoro ćemo ovo popraviti.

5. Agregacija

grubo govoreći, agregacije su potrebne za pretvaranje više stringova u jedan. U isto vrijeme, tokom agregacije, različita logika se koristi za različite stupce.


Nastavimo s našim primjerom gdje se pojavljuju dupli nazivi. Vidi se da je Ellen Horton uzela više od jedne knjige, ali ovo nije najviše Najbolji način pokazati ove informacije. Možete postaviti drugi zahtjev:


SELECT members.firstname AS "Ime", members.prezime AS "Prezime", count(*) AS "Broj posuđenih knjiga" IZ posudbi PRIDRUŽITE knjige NA borrowings.bookid=books.bookid PRIDRUŽITE se članovima NA members.memberid=posuđenjima .memberid WHERE books.author="Dan Brown" GROUP BY members.firstname, members.prezime;

Što će nam dati željeni rezultat:


ime prezime Broj posuđenih knjiga
Mike Willis 1
Ellen Horton 2

Gotovo sve agregacije dolaze s GROUP BY klauzulom. Ova stvar pretvara tabelu koja se može dobiti upitom u grupe tabela. Svaka grupa odgovara jedinstvenoj vrijednosti (ili grupi vrijednosti) stupca koji smo naveli u GROUP BY . U našem primjeru, rezultat iz prethodne vježbe pretvaramo u grupu nizova. Također radimo agregaciju sa count, koja pretvara više redova u cjelobrojnu vrijednost (u našem slučaju, broj redova). Ova vrijednost se zatim dodjeljuje svakoj grupi.


Svaki red u rezultatu rezultat je agregacije svake grupe.



Možete doći do logičnog zaključka da sva polja u rezultatu moraju ili biti navedena u GROUP BY ili se na njima mora izvršiti agregacija. Budući da se sva ostala polja mogu razlikovati jedno od drugog u različitim redovima, a ako ih odaberete sa SELECT "th, onda nije jasno koje od mogućih vrijednosti treba uzeti.


U gornjem primjeru, funkcija count je obrađivala sve redove (pošto smo brojali broj redova). Druge funkcije poput zbroja ili max obrađuju samo navedene redove. Na primjer, ako želimo znati broj knjiga koje je napisao svaki autor, onda nam je potreban ovaj upit:


SELECT autora, suma (zaliha) IZ knjiga GROUP BY autora;

rezultat:


autor suma
Robin Sharma 4
Dan Brown 6
John Green 3
Amish Tripathi 2

Ovdje funkcija zbroja obrađuje samo kolonu zaliha i izračunava zbir svih vrijednosti u svakoj grupi.

6. Potupiti


Potupiti su normalni SQL upiti ugrađeni u veće upite. Podijeljeni su u tri tipa prema vrsti vraćenog rezultata.

6.1 Dvodimenzionalna tabela

Postoje upiti koji vraćaju više kolona. Dobar primjer je upit iz prethodne vježbe agregacije. Budući da je podupit, jednostavno će vratiti drugu tabelu na kojoj se mogu napraviti novi upiti. Nastavljajući prethodnu vježbu, ako želimo saznati broj knjiga koje je napisao autor “Robin Sharma”, onda je jedan od mogućih načina korištenje potupita:


SELECT * FROM (IZABIR autora, suma (zaliha) IZ knjiga GRUPA PO autora) AS rezultati WHERE autor="Robin Sharma";

rezultat:



Može se napisati kao: ["Robin Sharma", "Dan Brown"]


2. Sada koristite ovaj rezultat u novom upitu:


SELECT naslov, bookid FROM knjiga GDJE autora IN (ODABIR autora IZ (ODABIR autora, suma(zaliha) IZ knjiga GRUPA PO autoru) AS rezultati WHERE zbroj > 3);

rezultat:


naslov bookid
Izgubljeni simbol 2
Ko će plakati kad umreš? 3
Inferno 4

To je isto kao:


SELECT naslov, bookid FROM knjiga WHERE autor IN ("Robin Sharma", "Dan Brown");

6.3 Individualne vrijednosti

Postoje upiti koji rezultiraju samo jednim redom i jednom kolonom. Mogu se tretirati kao konstantne vrijednosti i mogu se koristiti bilo gdje gdje se koriste vrijednosti, kao što je u operatorima poređenja. Mogu se koristiti i kao dvodimenzionalne tabele ili nizovi sa jednim elementom.


Hajde, na primer, da se informišemo o svim knjigama čiji broj u biblioteci premašuje trenutnu prosečnu vrednost.


Prosjek se može dobiti na ovaj način:


odaberite prosječno (zalihe) iz knjiga;

Šta nam daje:


7. Operacije pisanja

Većina operacija pisanja baze podataka je prilično jednostavna u poređenju sa složenijim operacijama čitanja.

7.1 Ažuriranje

Sintaksa UPDATE zahtjeva je semantički ista kao i zahtjev za čitanje. Jedina razlika je u tome što umjesto odabira stupaca sa SELECT "th, postavljamo znanje sa SET "th.


Ako su sve knjige Dana Browna izgubljene, tada morate resetirati vrijednost količine. Upit za ovo bi bio:


UPDATE knjige SET stock=0 WHERE author="Dan Brown";

WHERE radi istu stvar kao i prije: bira redove. Umjesto SELECT, koji se koristio prilikom čitanja, sada koristimo SET. Međutim, sada morate navesti ne samo ime kolone, već i novu vrijednost za ovu kolonu u odabranim redovima.


7.2 Izbrisati

DELETE upit je samo SELECT ili UPDATE upit bez naziva stupaca. Ozbiljno. Kao i kod SELECT i UPDATE, klauzula WHERE ostaje ista: ona bira redove koji će se izbrisati. Operacija brisanja uništava cijeli red, tako da nema smisla specificirati pojedinačne stupce. Dakle, ako odlučimo da ne resetujemo broj knjiga Dana Browna, već da izbrišemo sve unose općenito, onda možemo uputiti ovakav zahtjev:


IZBRIŠI IZ knjiga WHERE author="Dan Brown";

7.3 Umetak

Možda jedina stvar koja se razlikuje od drugih tipova upita je INSERT. Format je:


INSERT INTO x(a,b,c) VALUES(x, y, z);

Gdje su a, b, c nazivi stupaca, a x, y i z vrijednosti koje treba umetnuti u te stupce, tim redoslijedom. To je u osnovi to.


Pogledajmo konkretan primjer. Evo INSERT upita koji popunjava cijelu tabelu "knjige":


UMETNI U knjige (id knjige, naslov, autor, objavljeno, dionica) VRIJEDNOSTI (1,"Potomak Ikšvaku","Amiš Tripati","06-22-2015",2), (2,"Izgubljeni simbol"," Dan Brown","07-22-2010",3), (3,"Ko će plakati kad umreš?","Robin Sharma","06-15-2006",4), (4,"Inferno" ,"Dan Brown","05-05-2014",3), (5,"The Fault in our Stars","John Green","01-03-2015",3);

8. Verifikacija

Došli smo do kraja, predlažem mali test. Pogledajte taj zahtjev na samom početku članka. Možete li to shvatiti? Pokušajte ga rastaviti na SELECT , FROM , WHERE , GROUP BY sekcije i pogledajte pojedinačne komponente potupita.


Evo ga u čitljivijem obliku:


SELECT members.firstname || " " || members.prezime KAO "Puno ime" IZ posudbi INNER JOIN članovi NA members.memberid=borrowings.memberid INNER JOIN knjige ON books.bookid=borrowings.bookid WHERE borrowings.bookid IN (ODABIR bookid IZ knjiga GDJE zaliha> (ODABIR prosj.(zaliha ) IZ knjiga)) GROUP BY članovi.ime, članovi.prezime;

Ovaj upit vraća listu ljudi koji su posudili knjigu iz biblioteke koja ima natprosječan ukupni iznos.


rezultat:


Puno ime
Linda Tyler

Nadam se da ste uspjeli to shvatiti bez problema. Ali ako ne, pozdravljam vaše komentare i povratne informacije kako bih mogao poboljšati ovaj post.

Oznake: Dodajte oznake

mob_info