SQLite Upit: Odaberite, Gdje, LIMIT, OFFSET, Broj, Grupiraj po

โšก Pametni saลพetak

SQLite Upiti dohvaฤ‡aju i filtriraju podatke pomoฤ‡u klauzula SELECT, FROM, WHERE, GROUP BY, ORDER BY i LIMIT. Kombiniranje ovih klauzula s operatorima, agregatima, podupitima i operacijama skupova omoguฤ‡uje vam ฤitanje, oblikovanje i saลพimanje zapisa iz bilo kojeg SQLite baza podataka.

  • ๐Ÿ” ODABERI i IZ: Klauzula SELECT odabire stupce, literale ili aliase; klauzula FROM imenuje tablice ili podupite koji daju podatke.
  • ๐Ÿงฎ GDJE i Operatorovi: Klauzula WHERE filtrira retke pomoฤ‡u operatora spajanja, CAST, aritmetike, usporedbe, LIKE, GLOB, BETWEEN, IN i EXISTS.
  • ๐Ÿ“Š Agregati i gruping: AVG, COUNT, GROUP_CONCAT, MAX, MIN, SUM i TOTAL kombiniraju se s GROUP BY i HAVING za saลพimanje grupiranih redaka.
  • ๐Ÿ”— Podupiti i skupovi: Podupiti, uobiฤajeni tabliฤni izrazi te UNION, INTERSECT i EXCEPT kombiniraju rezultate iz nekoliko SELECT naredbi.
  • ๐Ÿงฉ Redoslijed i NULL vrijednosti: ORDER BY, LIMIT, OFFSET, DISTINCT, CASE i IS NULL kontroliraju redoslijed redaka, veliฤinu izlaza i nedostajuฤ‡e vrijednosti.
  • ๐Ÿค– AI pomoฤ‡: AI tekstualni asistenti u SQL i GitHub Copilot generiraju SQLite Upiti SELECT, JOIN i GROUP BY iz jednostavnih engleskih promptova.

SQLite Pitanje

U donjim odjeljcima opisano je ฤitanje podataka pomoฤ‡u SELECT i FROM, filtriranje redaka pomoฤ‡u WHERE i njegovih operatora, sortiranje i ograniฤavanje rezultata, agregacijske funkcije, GROUP BY i HAVING, podupiti, operacije s skupovima, rukovanje NULL vrijednostima, CASE izrazi i uobiฤajeni tabliฤni izrazi.

Napisati SQL upita u SQLite baze podataka, morate znati kako rade klauzule SELECT, FROM, WHERE, GROUP BY, ORDER BY i LIMIT i kako ih koristiti.

Tijekom ovog tutorijala nauฤit ฤ‡ete kako koristiti te reฤenice i kako pisati SQLite klauzule.

ฤŒitanje podataka s odabirom

Klauzula SELECT glavna je izjava koju koristite za postavljanje upita SQLite baza podataka. U klauzuli SELECT navodite ลกto odabrati. Ali prije klauzule odabira, da vidimo odakle moลพemo odabrati podatke pomoฤ‡u klauzule FROM.

Klauzula FROM koristi se za odreฤ‘ivanje gdje ลพelite odabrati podatke. U klauzuli from moลพete navesti jednu ili viลกe tablica ili podupita iz kojih ฤ‡ete odabrati podatke, kao ลกto ฤ‡emo vidjeti kasnije u vodiฤima.

Imajte na umu da za sve sljedeฤ‡e primjere morate pokrenuti sqlite3.exe i otvoriti vezu s oglednom bazom podataka kao protoฤnu:

Korak 1) U ovom koraku

Otvorite Moje raฤunalo i idite do sljedeฤ‡eg direktorija "C:\sqlite", a zatim otvorite "sqlite3.exe":

ฤŒitanje podataka s odabirom u SQLite

Korak 2) Otvorite bazu podataka โ€žTutorialsSampleDB.dbโ€œ sljedeฤ‡om naredbom:

ฤŒitanje podataka s odabirom u SQLite

Sada ste spremni pokrenuti bilo koju vrstu upita u bazi podataka.

U klauzuli SELECT moลพete odabrati ne samo naziv stupca, veฤ‡ imate i puno drugih opcija za odreฤ‘ivanje ลกto odabrati. Kao ลกto slijedi:

IZABERI *

Ova naredba ฤ‡e odabrati sve stupce iz svih referentnih tablica (ili podupita) u klauzuli FROM. Na primjer:

SELECT *
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Ovo ฤ‡e odabrati sve stupce iz tablica studenti i tablica odjela:

ฤŒitanje podataka s odabirom u SQLite

SELECT naziv tablice.*

Ovo ฤ‡e odabrati sve stupce samo iz tablice "tablename". Na primjer:

SELECT Students.*
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Ovo ฤ‡e odabrati sve stupce samo iz tablice uฤenika:

ฤŒitanje podataka s odabirom u SQLite

Doslovna vrijednost

Literalna vrijednost je konstantna vrijednost koja se moลพe specificirati u naredbi select. Literalne vrijednosti moลพete normalno koristiti na isti naฤin na koji koristite nazive stupaca u klauzuli SELECT. Ove literalne vrijednosti bit ฤ‡e prikazane za svaki red iz redaka koje je vratio SQL upit.

Evo nekoliko primjera razliฤitih literalnih vrijednosti koje moลพete odabrati:

  • Numeriฤki literal โ€“ brojevi u bilo kojem formatu poput 1, 2.55, โ€ฆ itd.
  • String literali โ€“ Bilo koji niz 'USA', 'ovo je ogledni tekst', โ€ฆ itd.
  • NULL โ€“ vrijednost NULL.
  • Current_TIME โ€“ Dat ฤ‡e vam trenutno vrijeme.
  • CURRENT_DATE โ€“ ovo ฤ‡e vam dati trenutni datum.

Ovo moลพe biti zgodno u nekim situacijama kada morate odabrati konstantnu vrijednost za sve vraฤ‡ene retke. Na primjer, ako ลพelite odabrati sve studente iz tablice Studenti, s novim stupcem pod nazivom zemlja koji sadrลพi vrijednost "SAD", moลพete uฤiniti sljedeฤ‡e:

SELECT *, 'USA' AS Country FROM Students;

Ovo ฤ‡e vam dati sve stupce uฤenika, plus novi stupac "Drลพava" poput ovog:

ฤŒitanje podataka s odabirom u SQLite

Imajte na umu da ovaj novi stupac Drลพava zapravo nije novi stupac dodan u tablicu. To je virtualni stupac, kreiran u upitu za prikaz rezultata i neฤ‡e se kreirati na tablici.

Imena i aliasi

Alias โ€‹โ€‹je novi naziv za stupac koji vam omoguฤ‡uje odabir stupca s novim nazivom. Zamjenska imena stupaca navedena su pomoฤ‡u kljuฤne rijeฤi "AS".

Na primjer, ako ลพelite odabrati da se stupac StudentName vrati s "Student Name" umjesto "StudentName", moลพete mu dati pseudonim poput ovog:

SELECT StudentName AS 'Student Name' FROM Students;

Ovo ฤ‡e vam dati imena uฤenika s imenom โ€œStudent Nameโ€ umjesto โ€œStudentNameโ€ ovako:

SQLite Imena i aliasi

Imajte na umu da je naziv stupca i dalje โ€žImeStudentaโ€œ; stupac ImeStudenta je i dalje isti, ne mijenja se zbog aliasa.

Alias โ€‹โ€‹neฤ‡e promijeniti naziv stupca; samo ฤ‡e promijeniti ime za prikaz u klauzuli SELECT.

Takoฤ‘er, imajte na umu da je kljuฤna rijeฤ "AS" izborna, moลพete staviti alias ime bez nje, otprilike ovako:

SELECT StudentName 'Student Name' FROM Students;

I dat ฤ‡e vam toฤno isti rezultat kao prethodni upit:

SQLite Imena i aliasi

Takoฤ‘er moลพete dati pseudonime tablicama, ne samo stupcima. S istom kljuฤnom rijeฤi "AS". Na primjer, moลพete uฤiniti sljedeฤ‡e:

SELECT s.* FROM Students AS s;

Ovo ฤ‡e vam dati sve stupce u tablici Uฤenici:

SQLite Imena i aliasi

Ovo moลพe biti vrlo korisno ako se pridruลพujete viลกe od jedne tablice; umjesto ponavljanja punog naziva tablice u upitu, svakoj tablici moลพete dati kratko zamjensko ime. Na primjer, u sljedeฤ‡em upitu:

SELECT Students.StudentName, Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Ovaj ฤ‡e upit odabrati ime svakog studenta iz tablice "Studenti" s nazivom odjela iz tablice "Odjeli":

SQLite Imena i aliasi

Meฤ‘utim, isti se upit moลพe napisati ovako:

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Tablici Studenti dali smo alias "s", a tablici odjela alias "d". Zatim smo umjesto koriลกtenja punog naziva tablice koristili njihove aliase za pozivanje na njih. INNER JOIN spaja dvije ili viลกe tablica pomoฤ‡u uvjeta. U naลกem primjeru, spojili smo tablicu Studenti s tablicom Odjela sa stupcem DepartmentId. Takoฤ‘er postoji detaljno objaลกnjenje za INNER JOIN u "SQLite Pridruลพuje"tutorial".

Ovo ฤ‡e vam dati toฤan rezultat kao prethodni upit:

SQLite Imena i aliasi

GDJE

Pisanje SQL upita samo pomoฤ‡u klauzule SELECT s klauzulom FROM, kao ลกto smo vidjeli u prethodnom odjeljku, dat ฤ‡e vam sve retke iz tablica. Meฤ‘utim, ako ลพelite filtrirati vraฤ‡ene podatke, morate dodati klauzulu "WHERE".

Klauzula WHERE se koristi za filtriranje skupa rezultata koje vraฤ‡a SQL upit. Ovako funkcionira klauzula WHERE:

  • U klauzuli WHERE moลพete navesti "izraz".
  • Taj ฤ‡e izraz biti procijenjen za svaki redak vraฤ‡en iz tablica(a) navedenih u klauzuli FROM.
  • Izraz ฤ‡e se procijeniti kao Boolean izraz, s rezultatom istinitim, laลพnim ili null.
  • Tada ฤ‡e se vratiti samo redovi za koje je izraz procijenjen s toฤnom vrijednoลกฤ‡u, a oni s laลพnim ili nultim rezultatima bit ฤ‡e zanemareni i neฤ‡e biti ukljuฤeni u skup rezultata.

Za filtriranje skupa rezultata koriลกtenjem WHERE klauzule, morate koristiti izraze i operatore.

Popis operatera u SQLite i kako ih koristiti

U sljedeฤ‡em odjeljku objasnit ฤ‡emo kako moลพete filtrirati pomoฤ‡u izraza i operatora.

Izraz je jedna ili viลกe literalnih vrijednosti ili stupaca meฤ‘usobno kombiniranih s operatorom.

Imajte na umu da izraze moลพete koristiti i u klauzuli SELECT i u klauzuli WHERE.

U sljedeฤ‡im primjerima isprobat ฤ‡emo izraze i operatore u klauzuli odabira i klauzuli WHERE. Kako bismo vam pokazali kako rade.

Postoje razliฤite vrste izraza i operatora koje moลพete navesti na sljedeฤ‡i naฤin:

SQLite operator ulanฤavanja โ€œ||โ€

Ovaj se operator koristi za meฤ‘usobno spajanje jedne ili viลกe literalnih vrijednosti ili stupaca. Proizvodit ฤ‡e jedan niz rezultata iz svih spojenih literalnih vrijednosti ili stupaca. Na primjer:

SELECT 'Id with Name: '|| StudentId || StudentName AS StudentIdWithName
FROM Students;

Ovo ฤ‡e se spojiti u novi alias โ€žStudentIdWithNameโ€œ:

  • Doslovna vrijednost niza znakova โ€žId s nazivom: โ€œ
  • s vrijednoลกฤ‡u stupca โ€žStudentIdโ€œ i
  • s vrijednoลกฤ‡u iz stupca "ImeStudenta"

SQLite Klauzula i operatori WHERE

SQLite CAST operator:

CAST operator se koristi za pretvaranje vrijednosti iz tip podataka na drugi tip podataka.

Na primjer, ako imate numeriฤku vrijednost pohranjenu kao niz znakova poput ovog โ€ž'12.5'โ€ i ลพelite je pretvoriti u numeriฤku vrijednost, moลพete upotrijebiti operator CAST da biste to uฤinili ovako โ€žCAST('12.5' โ€‹โ€‹AS REAL)โ€œ. Ili ako imate decimalnu vrijednost poput 12.5 i trebate dobiti samo cjelobrojni dio, moลพete je pretvoriti u cijeli broj poput ovog โ€žCAST(12.5 AS INTEGER)โ€.

Primjer

U sljedeฤ‡oj naredbi pokuลกat ฤ‡emo pretvoriti razliฤite vrijednosti u druge tipove podataka:

SELECT CAST('12.5' AS REAL) ToReal, CAST(12.5 AS INTEGER) AS ToInteger;

Ovo ฤ‡e vam dati:

SQLite Klauzula i operatori WHERE

Rezultat je sljedeฤ‡i:

  • CAST('12.5' โ€‹โ€‹AS REAL) โ€“ vrijednost '12.5' โ€‹โ€‹je vrijednost niza, bit ฤ‡e pretvorena u REAL vrijednost.
  • CAST(12.5 AS INTEGER) โ€“ vrijednost 12.5 je decimalna vrijednost, pretvorit ฤ‡e se u cjelobrojnu vrijednost. Decimalni dio bit ฤ‡e skraฤ‡en i postaje 12.

SQLite Aritmetika Operatorovi:

Uzmite dvije ili viลกe numeriฤkih literalnih vrijednosti ili numeriฤkih stupaca i vratite jednu numeriฤku vrijednost. Aritmetiฤki operatori podrลพani u SQLite je:

  • Zbrajanje "+" โ€“ daje zbroj dvaju operanda.
  • ispodtraccija โ€œโ€“โ€ โ€“ podnaslovtracts dva operanda i rezultira razlikom.
  • Mnoลพenje "*" โ€“ produkt dvaju operanda.
  • Podsjetnik (modulo) "%" โ€“ daje ostatak koji se dobije dijeljenjem jednog operanda s drugim operandom.
  • Dijeljenje "/" โ€“ vraฤ‡a koliฤnik dijeljenja lijevog operanda desnim operandom.

Primjer:

U sljedeฤ‡em primjeru isprobat ฤ‡emo pet aritmetiฤkih operatora s doslovnim numeriฤkim vrijednostima u istoj select klauzuli:

SELECT 25+6, 25-6, 25*6, 25%6, 25/6;

Ovo ฤ‡e vam dati:

SQLite Klauzula i operatori WHERE

Primijetite kako smo ovdje koristili naredbu SELECT bez klauzule FROM. I ovo je dozvoljeno unutra SQLite sve dok odabiremo doslovne vrijednosti.

SQLite Operatori usporedbe

Usporedite dva operanda jedan s drugim i vratite true ili false na sljedeฤ‡i naฤin:

  • โ€ž<โ€œ โ€“ vraฤ‡a vrijednost true ako je lijevi operand manji od desnog operanda.
  • โ€ž<=โ€œ โ€“ vraฤ‡a vrijednost true ako je lijevi operand manji ili jednak desnom operandu.
  • โ€ž>โ€œ โ€“ vraฤ‡a vrijednost true ako je lijevi operand veฤ‡i od desnog operanda.
  • โ€ž>=" โ€“ vraฤ‡a vrijednost true ako je lijevi operand veฤ‡i ili jednak desnom operandu.
  • โ€ž=โ€œ i โ€ž==โ€œ โ€“ vraฤ‡a vrijednost true ako su dva operanda jednaka. Imajte na umu da su oba operatora ista i da nema razlike meฤ‘u njima.
  • โ€ž!=" i โ€ž<>" โ€“ vraฤ‡a vrijednost true ako dva operanda nisu jednaka. Imajte na umu da su oba operatora ista i da nema razlike meฤ‘u njima.

Imajte na umu da, SQLite izraลพava pravu vrijednost s 1, a laลพnu s 0.

Primjer:

SELECT
  10<6 AS '<', 10<=6 AS '<=',
  10>6 AS '>', 10>=6 AS '>=',
  10=6 AS '=', 10==6 AS '==',
  10!=6 AS '!=', 10<>6 AS '<>';

Ovo ฤ‡e dati neลกto poput ovoga:

SQLite Klauzula i operatori WHERE

SQLite Operatori podudaranja uzorka

โ€žLIKEโ€œ โ€“ koristi se za usklaฤ‘ivanje uzoraka. Pomoฤ‡u โ€žLikeโ€œ moลพete pretraลพivati โ€‹โ€‹vrijednosti koje odgovaraju uzorku odreฤ‘enom pomoฤ‡u zamjenskog znaka.

Operand s lijeve strane moลพe biti ili literalna vrijednost niza ili stupac niza. Uzorak se moลพe odrediti na sljedeฤ‡i naฤin:

  • Sadrลพi uzorak. Na primjer, ImeStudenta LIKE '%a%' โ€“ ovo ฤ‡e traลพiti imena studenata koja sadrลพe slovo "a" na bilo kojoj poziciji u stupcu ImeStudenta.
  • Poฤinje s uzorkom. Na primjer, โ€žImeUฤenika KAO 'a%'โ€œ โ€“ traลพi imena uฤenika koja poฤinju slovom โ€žaโ€œ.
  • Zavrลกava uzorkom. Na primjer, โ€žImeUฤenika KAO '%a'โ€ โ€“ Pretraลพite imena uฤenika koja zavrลกavaju slovom โ€žaโ€œ.
  • Pronalaลพenje bilo kojeg pojedinaฤnog znaka u nizu pomoฤ‡u podcrte "_". Na primjer, "ImeStudenta KAO 'J___'" - Traลพi imena studenata duljine 4 znaka. Mora zapoฤeti slovom "J" i moลพe imati bilo koja tri dodatna znaka nakon slova "J".

Primjeri podudaranja uzoraka:

Dobijte imena uฤenika koja poฤinju slovom 'j':

SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';

Rezultat:

SQLite Klauzula i operatori WHERE

Neka imena uฤenika zavrลกavaju slovom 'y':

SELECT StudentName FROM Students WHERE StudentName LIKE '%y';

Rezultat:

SQLite Klauzula i operatori WHERE

Dobijte imena uฤenika koja sadrลพe slovo 'n':

SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';

Rezultat:

SQLite Klauzula i operatori WHERE

โ€žGLOBโ€œ โ€“ ekvivalentno je operatoru LIKE, ali GLOB razlikuje velika i mala slova, za razliku od operatora LIKE. Na primjer, sljedeฤ‡e dvije naredbe vratit ฤ‡e razliฤite rezultate:

SELECT 'Jack' GLOB 'j%';
SELECT 'Jack' LIKE 'j%';

Ovo ฤ‡e vam dati:

SQLite Klauzula i operatori WHERE

Prva izjava vraฤ‡a 0(false) jer operator GLOB razlikuje velika i mala slova, pa 'j' nije jednako 'J'. Meฤ‘utim, druga izjava vratit ฤ‡e 1 (true) jer operator LIKE ne razlikuje velika i mala slova, pa je 'j' jednako 'J'.

Ostali operateri:

SQLite I

Logiฤki operator koji kombinira jedan ili viลกe izraza. Vratit ฤ‡e true samo ako svi izrazi daju vrijednost "true". Meฤ‘utim, vratit ฤ‡e false samo ako svi izrazi daju "false" vrijednost.

Primjer:

Sljedeฤ‡i upit traลพit ฤ‡e studente koji imaju StudentId > 5 i StudentName poฤinje slovom N, vraฤ‡eni studenti moraju ispunjavati dva uvjeta:

SELECT *
FROM Students
WHERE (StudentId > 5) AND (StudentName LIKE 'N%');

Kao rezultat, na gornjoj snimci zaslona, โ€‹โ€‹to ฤ‡e vam dati samo "Nancy". Nancy je jedina studentica koja ispunjava oba uvjeta.

SQLite Klauzula i operatori WHERE

SQLite OR

Logiฤki operator koji kombinira jedan ili viลกe izraza, tako da ako jedan od kombiniranih operatora daje true, onda ฤ‡e vratiti true. Meฤ‘utim, ako svi izrazi daju false, vratit ฤ‡e false.

Primjer:

Sljedeฤ‡i upit traลพit ฤ‡e studente koji imaju StudentId > 5 ili StudentName poฤinje slovom N, vraฤ‡eni studenti moraju ispunjavati barem jedan od uvjeta:

SELECT *
FROM Students
WHERE (StudentId > 5) OR (StudentName LIKE 'N%');

Ovo ฤ‡e vam dati:

SQLite Klauzula i operatori WHERE

Kao rezultat, na gornjoj snimci zaslona, โ€‹โ€‹ovo ฤ‡e vam dati ime uฤenika sa slovom "n" u imenu plus ID uฤenika koji ima vrijednost>5.

Kao ลกto vidite, rezultat se razlikuje od upita s operatorom AND.

SQLite IZMEฤU

BETWEEN se koristi za odabir vrijednosti koje su unutar raspona od dvije vrijednosti. Na primjer, โ€žX BETWEEN Y AND Zโ€œ vratit ฤ‡e true (1) ako je vrijednost X izmeฤ‘u dvije vrijednosti Y i Z. U suprotnom, vratit ฤ‡e false (0). โ€žX BETWEEN Y AND Zโ€œ je ekvivalentno โ€žX >= Y AND X <= Zโ€œ, X mora biti veฤ‡i ili jednak Y, a X je manji ili jednak Z.

Primjer:

U sljedeฤ‡em primjeru upita, napisat ฤ‡emo upit za dobivanje uฤenika s Id vrijednoลกฤ‡u izmeฤ‘u 5 i 8:

SELECT *
FROM Students
WHERE StudentId BETWEEN 5 AND 8;

Ovo ฤ‡e dati samo studentima s ID-ovima 5, 6, 7 i 8:

SQLite Klauzula i operatori WHERE

SQLite IN

Uzima jedan operand i popis operanda. Vratit ฤ‡e true ako je vrijednost prvog operanda jednaka jednoj od vrijednosti operanda s popisa. Operator IN vraฤ‡a true (1) ako popis operanda sadrลพi prvu vrijednost operanda unutar svojih vrijednosti. U suprotnom ฤ‡e vratiti false (0).

Ovako: โ€žcol IN(x, y, z)โ€œ. Ovo je ekvivalentno sa โ€ž(col=x) ili (col=y) ili (col=z)โ€œ.

Primjer:

Sljedeฤ‡i upit ฤ‡e odabrati samo studente s ID-ovima 2, 4, 6, 8:

SELECT *
FROM Students
WHERE StudentId IN(2, 4, 6, 8);

Kao ovo:

SQLite Klauzula i operatori WHERE

Prethodni upit ฤ‡e dati toฤan rezultat kao sljedeฤ‡i upit jer su ekvivalentni:

SELECT *
FROM Students
WHERE (StudentId = 2) OR (StudentId =  4) OR (StudentId =  6) OR (StudentId = 8);

Oba upita daju toฤan rezultat. Meฤ‘utim, razlika izmeฤ‘u ova dva upita je ลกto smo prvi upit koristili operatorom "IN". U drugom upitu koristili smo viลกe operatora "ILI".

Operator IN ekvivalentan je koriลกtenju viลกe operatora OR. Operator "WHERE StudentId IN(2, 4, 6, 8)" ekvivalentan je operatoru "WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);"

Kao ovo:

SQLite Klauzula i operatori WHERE

SQLite NE U

Operand โ€žNOT INโ€œ je suprotan operatoru IN. Ali s istom sintaksom; uzima jedan operand i popis operanada. Vratit ฤ‡e vrijednost true ako vrijednost prvog operanda nije jednaka vrijednosti jedne od operanada s popisa, tj. vratit ฤ‡e vrijednost true (0) ako popis operanada ne sadrลพi prvi operand. Ovako: โ€žcol NOT IN(x, y, z)โ€œ. Ovo je ekvivalentno operatoru โ€ž(col<>x) AND (col<>y) AND (col<>z)โ€œ.

Primjer:

Sljedeฤ‡i upit ฤ‡e odabrati studente s ID-ovima koji nisu jednaki jednom od ovih ID-ova 2, 4, 6, 8:

SELECT *
FROM Students
WHERE StudentId NOT IN(2, 4, 6, 8);

Ovako

SQLite Klauzula i operatori WHERE

Prethodnom upitu dajemo toฤan rezultat kao sljedeฤ‡i upit jer su ekvivalentni:

SELECT *
FROM Students
WHERE (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);

Kao ovo:

SQLite Klauzula i operatori WHERE

Na gornjoj snimci zaslona,

Koristili smo viลกe nejednakih operatora โ€œ<>โ€ da dobijemo popis uฤenika koji nisu jednaki nijednom od sljedeฤ‡ih ID-ova 2, 4, 6 ili 8. Ovaj upit ฤ‡e vratiti sve ostale studente osim ovih popisa ID-ova.

SQLite POSTOJI

Operatori EXISTS ne uzimaju nikakve operande; potrebna je samo SELECT klauzula nakon njega. Operator EXISTS ฤ‡e vratiti true (1) ako ima redaka vraฤ‡enih iz klauzule SELECT, i vratit ฤ‡e false (0) ako uopฤ‡e nema redaka vraฤ‡enih iz klauzule SELECT.

Primjer:

U sljedeฤ‡em primjeru odabrat ฤ‡emo naziv odjela, ako ID odjela postoji u tablici studenata:

SELECT DepartmentName
FROM Departments AS d
WHERE EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);

Ovo ฤ‡e vam dati:

SQLite Klauzula i operatori WHERE

Vratit ฤ‡e se samo tri odjela: โ€žIT, Fizika i Umjetnostโ€œ. Naziv odjela โ€žMatematikaโ€œ neฤ‡e se vratiti jer u tom odjelu nema studenata, pa ID odjela ne postoji u tablici studenata. Zato je operator EXISTS ignorirao odjel โ€žMatematikaโ€œ.

SQLite NE

Reverses je rezultat prethodnog operatora koji dolazi nakon njega. Na primjer:

  • NOT BETWEEN โ€“ Vratit ฤ‡e true ako BETWEEN vrati false i obrnuto.
  • NOT LIKE โ€“ Vratit ฤ‡e true ako LIKE vrati false i obrnuto.
  • NIJE GLOB โ€“ Vratit ฤ‡e true ako GLOB vrati false i obrnuto.
  • NOT EXISTS โ€“ Vratit ฤ‡e true ako EXISTS vrati false i obrnuto.

Primjer:

U sljedeฤ‡em primjeru koristit ฤ‡emo operator NOT s operatorom EXISTS kako bismo dobili nazive odjela koji ne postoje u tablici Studenti, ลกto je obrnuti rezultat operatora EXISTS. Dakle, pretraga ฤ‡e se vrลกiti kroz DepartmentId koji ne postoji u tablici odjela.

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId
                  FROM Students AS s
                  WHERE d.DepartmentId = s.DepartmentId);

Izlaz:

SQLite Klauzula i operatori WHERE

Vratit ฤ‡e se samo odjel "Matematika". Buduฤ‡i da je odjel "Matematika" jedini odjel, on ne postoji u tablici studenata.

Ograniฤenje i naruฤivanje

SQLite Narudลพba

SQLite Redoslijed je sortiranje rezultata prema jednom ili viลกe izraza. Da biste poredali skup rezultata, morate koristiti klauzulu ORDER BY na sljedeฤ‡i naฤin:

  • Prvo, morate navesti klauzulu ORDER BY.
  • Klauzula ORDER BY mora biti navedena na kraju upita; samo klauzula LIMIT moลพe biti specificirana nakon njega.
  • Odredite izraz po kojem ฤ‡ete poredati podatke, ovaj izraz moลพe biti naziv stupca ili izraz.
  • Nakon izraza moลพete navesti izborni smjer sortiranja. Ili DESC, za redoslijed podataka silazno ili ASC za poredak podataka uzlazno. Ako niste naveli nijedan od njih, podaci bi bili poredani uzlazno.
  • Moลพete navesti viลกe izraza koristeฤ‡i "," izmeฤ‘u sebe.

Primjer

U sljedeฤ‡em primjeru odabrat ฤ‡emo sve studente poredane prema njihovim imenima, ali silaznim redoslijedom, zatim prema nazivu odjela u rastuฤ‡em redoslijedu:

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
ORDER BY d.DepartmentName ASC , s.StudentName DESC;

Ovo ฤ‡e vam dati:

SQLite Ograniฤenje i naruฤivanje

  • SQLite prvo ฤ‡e poredati sve uฤenike prema nazivu odjela uzlaznim redoslijedom
  • Tada ฤ‡e za svaki naziv odjela biti prikazani svi studenti pod tim nazivom odjela prema njihovim imenima silaznim redoslijedom

SQLite Ograniฤiti:

Moลพete ograniฤiti broj redaka koje vraฤ‡a vaลก SQL upit pomoฤ‡u klauzule LIMIT. Na primjer, LIMIT 10 ฤ‡e vam dati samo 10 redaka i zanemariti sve ostale retke.

U klauzuli LIMIT moลพete odabrati odreฤ‘eni broj redaka poฤevลกi od odreฤ‘ene pozicije pomoฤ‡u klauzule OFFSET. Na primjer, โ€žLIMIT 4 OFFSET 4โ€œ ฤ‡e zanemariti prva 4 retka i vratiti 4 retka poฤevลกi od petog retka, pa ฤ‡ete dobiti retke 5, 6, 7 i 8.

Imajte na umu da je klauzula OFFSET opcionalna, moลพete je napisati poput โ€žLIMIT 4, 4โ€œ i dat ฤ‡e vam toฤne rezultate.

Primjer:

U sljedeฤ‡em primjeru vratit ฤ‡emo samo 3 uฤenika poฤevลกi od ID-a uฤenika 5 pomoฤ‡u upita:

SELECT * FROM Students LIMIT 4,3;

Ovo ฤ‡e vam dati samo tri uฤenika poฤevลกi od retka 5. Dakle, to ฤ‡e vam dati retke s StudentId 5, 6 i 7:

SQLite Ograniฤenje i naruฤivanje

Uklanjanje duplikata

Ako vaลก SQL upit vraฤ‡a duplicirane vrijednosti, moลพete upotrijebiti kljuฤnu rijeฤ "DISTINCT" za uklanjanje tih duplikata i vraฤ‡anje razliฤitih vrijednosti. Moลพete navesti viลกe od jednog stupca nakon ลกto kljuฤ DISTINCT funkcionira.

Primjer:

Sljedeฤ‡i upit vratit ฤ‡e duple "vrijednosti naziva odjela": Ovdje imamo duple vrijednosti s nazivima IT, Physics i Arts.

SELECT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Ovo ฤ‡e vam dati duplicirane vrijednosti za naziv odjela:

Uklanjanje duplikata u SQLite

Primijetite kako postoje dvostruke vrijednosti za naziv odjela. Sada ฤ‡emo koristiti kljuฤnu rijeฤ DISTINCT s istim upitom kako bismo uklonili te duplikate i dobili samo jedinstvene vrijednosti. Kao ovo:

SELECT DISTINCT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

To ฤ‡e vam dati samo tri jedinstvene vrijednosti za stupac naziva odjela:

Uklanjanje duplikata u SQLite

skupina

SQLite Agregati su ugraฤ‘ene funkcije definirane u SQLite koji ฤ‡e grupirati viลกe vrijednosti viลกe redaka u jednu vrijednost.

Ovdje su podrลพani agregati SQLite:

SQLite AVG()

Vraฤ‡en je prosjek za sve x vrijednosti.

Primjer:

U sljedeฤ‡em primjeru dobit ฤ‡emo prosjeฤnu ocjenu koju ฤ‡e studenti dobiti na svim ispitima:

SELECT AVG(Mark) FROM Marks;

To ฤ‡e vam dati vrijednost "18.375":

SQLite Agregatne funkcije

Ovi rezultati dolaze iz zbroja svih vrijednosti ocjena podijeljenog njihovim brojem.

COUNT() โ€“ COUNT(X) ili COUNT(*)

Vraฤ‡a ukupan broj pojavljivanja x vrijednosti. Evo nekoliko opcija koje moลพete koristiti s COUNT:

  • COUNT(x): Broji samo x vrijednosti, gdje je x naziv stupca. Ignorirat ฤ‡e NULL vrijednosti.
  • COUNT(*): Broji sve retke iz svih stupaca.
  • BROJ (DISTINCT x): moลพete navesti kljuฤnu rijeฤ DISTINCT prije x koja ฤ‡e dobiti broj razliฤitih vrijednosti x.

Primjer

U sljedeฤ‡em primjeru dobit ฤ‡emo ukupan broj odjela s COUNT(DepartmentId), COUNT(*) i COUNT(DISTINCT DepartmentId) i po ฤemu se oni razlikuju:

SELECT COUNT(DepartmentId), COUNT(DISTINCT DepartmentId), COUNT(*) FROM Students;

Ovo ฤ‡e vam dati:

SQLite Agregatne funkcije

Kao ลกto slijedi:

  • COUNT(DepartmentId) ฤ‡e vam dati broj svih ID-ova odjela, a zanemarit ฤ‡e nulte vrijednosti.
  • COUNT(DISTINCT DepartmentId) daje vam razliฤite vrijednosti DepartmentId-a, koje su samo 3. To su tri razliฤite vrijednosti naziva odjela. Primijetite da postoji 8 vrijednosti naziva odjela u imenu uฤenika. Ali samo razliฤite tri vrijednosti koje su matematika, informatika i fizika.
  • COUNT(*) broji broj redaka u tablici uฤenika koji su 10 redaka za 10 uฤenika.

GROUP_CONCAT() โ€“ GROUP_CONCAT(X) ili GROUP_CONCAT(X,Y)

Skupna funkcija GROUP_CONCAT spaja viลกestruke vrijednosti u jednu vrijednost sa zarezom koji ih razdvaja. Ima sljedeฤ‡e moguฤ‡nosti:

  • GROUP_CONCAT(X): Ovo ฤ‡e ulanฤati sve vrijednosti x u jedan niz, sa zarezom โ€œ,โ€ koji se koristi kao razdjelnik izmeฤ‘u vrijednosti. NULL vrijednosti ฤ‡e se zanemariti.
  • GROUP_CONCAT(X, Y): Ovo ฤ‡e ulanฤati vrijednosti x u jedan niz, s vrijednoลกฤ‡u y koja se koristi kao razdjelnik izmeฤ‘u svake vrijednosti umjesto zadanog razdjelnika ','. NULL vrijednosti takoฤ‘er ฤ‡e biti zanemarene.
  • GROUP_CONCAT(DISTINCT X): ovo ฤ‡e spojiti sve razliฤite vrijednosti x u jedan niz, sa zarezom โ€œ,โ€ koji se koristi kao razdjelnik izmeฤ‘u vrijednosti. NULL vrijednosti ฤ‡e se zanemariti.

GROUP_CONCAT(DepartmentName) Primjer

Sljedeฤ‡i upit spojit ฤ‡e sve vrijednosti naziva odjela iz tablice studenata i odjela u jedan niz odvojen zarezom. Dakle, umjesto vraฤ‡anja popisa vrijednosti, jedna vrijednost u svakom retku. Vratit ฤ‡e samo jednu vrijednost u jednom retku, sa svim vrijednostima odvojenim zarezom:

SELECT GROUP_CONCAT(d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Ovo ฤ‡e vam dati:

SQLite Agregatne funkcije

Ovo ฤ‡e vam dati popis od 8 vrijednosti naziva odjela spojenih u jedan niz odvojenih zarezima.

GROUP_CONCAT(DISTINCT DepartmentName) Primjer

Sljedeฤ‡i upit spojit ฤ‡e razliฤite vrijednosti naziva odjela iz tablice studenata i odjela u jedan niz odvojen zarezima:

SELECT GROUP_CONCAT(DISTINCT d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Ovo ฤ‡e vam dati:

SQLite Agregatne funkcije

Primijetite kako se rezultat razlikuje od prethodnog rezultata; vraฤ‡ene su samo tri vrijednosti koje su razliฤita imena odjela, a duplicirane vrijednosti su uklonjene.

GROUP_CONCAT(DepartmentName ,'&') Primjer

Sljedeฤ‡i upit spojit ฤ‡e sve vrijednosti stupca naziva odjela iz tablice studenata i odjela u jedan niz, ali sa znakom '&' umjesto zarezom kao razdjelnikom:

SELECT GROUP_CONCAT(d.DepartmentName, '&')
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Ovo ฤ‡e vam dati:

SQLite Agregatne funkcije

Primijetite kako se znak "&" koristi umjesto zadanog znaka "," za razdvajanje izmeฤ‘u vrijednosti.

SQLite MAX() & MIN()

MAX(X) vraฤ‡a najveฤ‡u vrijednost od X vrijednosti. MAX ฤ‡e vratiti NULL vrijednost ako su sve vrijednosti x null. Dok MIN(X) vraฤ‡a najmanju vrijednost od X vrijednosti. MIN ฤ‡e vratiti NULL vrijednost ako su sve vrijednosti X null.

Primjer

U sljedeฤ‡em upitu koristit ฤ‡emo funkcije MIN i MAX kako bismo dobili najviลกu i najniลพu ocjenu iz tablice โ€žOcjeneโ€:

SELECT MAX(Mark), MIN(Mark) FROM Marks;

Ovo ฤ‡e vam dati:

SQLite Agregatne funkcije

SQLite SUM(x), Ukupno(x)

Obje ฤ‡e vratiti zbroj svih x vrijednosti. Ali razlikuju se u sljedeฤ‡em:

  • SUM ฤ‡e vratiti null ako su sve vrijednosti null, ali Total ฤ‡e vratiti 0.
  • TOTAL uvijek vraฤ‡a vrijednosti s pomiฤnim zarezom. SUM vraฤ‡a vrijednost cijelog broja ako su sve vrijednosti x cijeli broj. Meฤ‘utim, ako vrijednosti nisu cijeli broj, vratit ฤ‡e vrijednost s pomiฤnim zarezom.

Primjer

U sljedeฤ‡em upitu koristit ฤ‡emo SUM i total kako bismo dobili zbroj svih bodova u tablicama โ€žBodoviโ€œ:

SELECT SUM(Mark), TOTAL(Mark) FROM Marks;

Ovo ฤ‡e vam dati:

SQLite Agregatne funkcije

Kao ลกto vidite, TOTAL uvijek vraฤ‡a pokretni zarez. Ali SUM vraฤ‡a vrijednost cijelog broja jer vrijednosti u stupcu "Oznaฤi" mogu biti u cijelim brojevima.

Primjer razlike izmeฤ‘u SUM i TOTAL:

U sljedeฤ‡em upitu pokazat ฤ‡emo razliku izmeฤ‘u SUM i TOTAL kada dobiju SUM vrijednosti NULL:

SELECT SUM(Mark), TOTAL(Mark) FROM Marks WHERE TestId = 4;

Ovo ฤ‡e vam dati:

SQLite Agregatne funkcije

Imajte na umu da nema ocjena za TestId = 4, tako da postoje nulte vrijednosti za taj test. SUM vraฤ‡a nultu vrijednost kao prazno mjesto, dok TOTAL vraฤ‡a 0.

Grupiraj BY

Klauzula GROUP BY koristi se za odreฤ‘ivanje jednog ili viลกe stupaca koji ฤ‡e se koristiti za grupiranje redaka u grupe. Redovi s istim vrijednostima bit ฤ‡e skupljeni (rasporeฤ‘eni) u grupe.

Za bilo koji drugi stupac koji nije ukljuฤen u grupu po stupcima, moลพete koristiti agregatnu funkciju za njega.

Primjer:

Sljedeฤ‡i upit ฤ‡e vam dati ukupan broj uฤenika prisutnih u svakom odjelu.

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName;

Ovo ฤ‡e vam dati:

SQLite Grupiraj po i imajuฤ‡i

Klauzula GROUPBY DepartmentName ฤ‡e grupirati sve uฤenike u grupe po jednu za svaki naziv odjela. Za svaku grupu โ€œodjelaโ€ raฤunat ฤ‡e studente na njoj.

HAVING klauzula

Ako ลพelite filtrirati grupe koje vraฤ‡a klauzula GROUP BY, tada moลพete navesti klauzulu "HAVING" s izrazom nakon GROUP BY. Izraz ฤ‡e se koristiti za filtriranje ovih grupa.

Primjer

U sljedeฤ‡em upitu ฤ‡emo odabrati one odjele koji imaju samo dva studenta:

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName
HAVING COUNT(s.StudentId) = 2;

Ovo ฤ‡e vam dati:

SQLite Grupiraj po i imajuฤ‡i

Klauzula HAVING COUNT(S.StudentId) = 2 ฤ‡e filtrirati vraฤ‡ene grupe i vratiti samo one grupe koje sadrลพe toฤno dva uฤenika. U naลกem sluฤaju, umjetniฤki odjel ima 2 studenta, tako da je prikazan u ispisu.

SQLite Upit i podupit

Unutar bilo kojeg upita, moลพete koristiti drugi upit bilo u SELECT, INSERT, DELETE, UPDATE ili unutar drugog podupita.

Ovaj ugnijeลพฤ‘eni upit naziva se podupit. Sada ฤ‡emo vidjeti neke primjere koriลกtenja podupita u klauzuli SELECT. Meฤ‘utim, u vodiฤu za modificiranje podataka vidjet ฤ‡emo kako moลพemo koristiti podupit s naredbom INSERT, DELETE i UPDATE.

Koriลกtenje podupita u primjeru FROM klauzule

U sljedeฤ‡i upit ukljuฤit ฤ‡emo podupit unutar klauzule FROM:

SELECT
  s.StudentName, t.Mark
FROM Students AS s
INNER JOIN
(
   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId
)  ON s.StudentId = t.StudentId;

Upit:

   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId

Gore navedeni upit ovdje se naziva podupit jer je ugnijeลพฤ‘en unutar klauzule FROM. Primijetite da smo mu dali pseudonim "t" kako bismo se mogli pozvati na stupce koje je vratio u upitu.

Ovaj upit ฤ‡e vam dati:

SQLite Upit i podupit

Dakle, u naลกem sluฤaju,

  • s.StudentName odabire se iz glavnog upita koji daje imena studenata i
  • t.Mark je odabran iz podupita; koji daje ocjene koje je postigao svaki od ovih uฤenika

Koriลกtenje podupita u primjeru WHERE klauzule

U sljedeฤ‡i upit ฤ‡emo ukljuฤiti podupit u klauzulu WHERE:

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId
                  FROM Students AS s
                  WHERE d.DepartmentId = s.DepartmentId);

Upit:

SELECT DepartmentId
FROM Students AS s
WHERE d.DepartmentId = s.DepartmentId

Gore navedeni upit ovdje se naziva podupit jer je ugnijeลพฤ‘en u klauzulu WHERE. Podupit ฤ‡e vratiti vrijednosti DepartmentId koje ฤ‡e koristiti operator NOT EXISTS.

Ovaj upit ฤ‡e vam dati:

SQLite Upit i podupit

U gornjem upitu odabrali smo odjel na kojem nema upisanog studenta. ล to je ovdje odjel za matematiku.

Postaviti Operacije โ€“ UNION, Intersect

SQLite podrลพava sljedeฤ‡e SET operacije:

UNIJA & UNION SVI

Kombinira jedan ili viลกe skupova rezultata (grupa redaka) vraฤ‡enih iz viลกe naredbi SELECT u jedan skup rezultata.

UNION ฤ‡e vratiti razliฤite vrijednosti. Meฤ‘utim, UNION ALL neฤ‡e i ukljuฤivat ฤ‡e duplikate.

Imajte na umu da ฤ‡e naziv stupca biti naziv stupca naveden u prvoj izjavi SELECT.

Primjer UNIJE

U sljedeฤ‡em primjeru dobit ฤ‡emo popis DepartmentId iz tablice studenata i popis DepartmentId iz tablice odjela u istom stupcu:

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION
SELECT DepartmentId FROM Departments;

Ovo ฤ‡e vam dati:

SQLite Postaviti Operama

Upit vraฤ‡a samo 5 redaka koji su razliฤite vrijednosti ID-a odjela. Primijetite prvu vrijednost koja je nulta vrijednost.

SQLite UNIJA SVE Primjer

U sljedeฤ‡em primjeru dobit ฤ‡emo popis DepartmentId iz tablice studenata i popis DepartmentId iz tablice odjela u istom stupcu:

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION ALL
SELECT DepartmentId FROM Departments;

Ovo ฤ‡e vam dati:

SQLite Postaviti Operama

Upit ฤ‡e vratiti 14 redaka, 10 redaka iz tablice uฤenika i 4 iz tablice odjela. Imajte na umu da postoje duplikati u vraฤ‡enim vrijednostima. Takoฤ‘er imajte na umu da je naziv stupca bio onaj naveden u prvoj izjavi SELECT.

Sada, da vidimo kako ฤ‡e UNION all dati razliฤite rezultate ako zamijenimo UNION ALL s UNION:

SQLite PRESJEKATI

Vraฤ‡a vrijednosti koje postoje u oba kombinirana skupa rezultata. Vrijednosti koje postoje u jednom od kombiniranih skupova rezultata bit ฤ‡e zanemarene.

Primjer

U sljedeฤ‡em upitu odabrat ฤ‡emo vrijednosti DepartmentId koje postoje u tablicama Studenti i Odjeli u stupcu DepartmentId:

SELECT DepartmentId FROM Students
Intersect
SELECT DepartmentId FROM Departments;

Ovo ฤ‡e vam dati:

SQLite Postaviti Operama

Upit vraฤ‡a samo tri vrijednosti 1, 2 i 3. To su vrijednosti koje postoje u objema tablicama.

Meฤ‘utim, vrijednosti null i 4 nisu ukljuฤene jer vrijednost null postoji samo u tablici uฤenika, a ne u tablici odjela. A vrijednost 4 postoji u tablici odjela, a ne u tablici uฤenika.

Zbog toga su obje vrijednosti NULL i 4 zanemarene i nisu ukljuฤene u vraฤ‡ene vrijednosti.

OSIM

Pretpostavimo da imate dva popisa redaka, popis1 i popis2, i ลพelite retke samo s popisa1 koji ne postoji na popisu2, moลพete koristiti klauzulu โ€œEXCEPTโ€. Klauzula EXCEPT usporeฤ‘uje dva popisa i vraฤ‡a one retke koji postoje u popisu1, a ne postoje u popisu2.

Primjer

U sljedeฤ‡em upitu odabrat ฤ‡emo vrijednosti DepartmentId koje postoje u tablici odjela i ne postoje u tablici studenata:

SELECT DepartmentId FROM Departments
EXCEPT
SELECT DepartmentId FROM Students;

Ovo ฤ‡e vam dati:

SQLite Postaviti Operama

Upit vraฤ‡a samo vrijednost 4. To je jedina vrijednost koja postoji u tablici odjela, a ne postoji u tablici uฤenika.

NULL rukovanje

Vrijednost "NULL" je posebna vrijednost u SQLiteKoristi se za predstavljanje vrijednosti koja je nepoznata ili nedostaje. Imajte na umu da je null vrijednost potpuno drugaฤija od "0" ili prazne vrijednosti "". Buduฤ‡i da su 0 i prazna vrijednost poznate vrijednosti, null vrijednost je nepoznata.

NULL vrijednosti zahtijevaju posebno rukovanje SQLite, sada ฤ‡emo vidjeti kako postupati s NULL vrijednostima.

Traลพi NULL vrijednosti

Ne moลพete koristiti normalni operator jednakosti (=) za pretraลพivanje nultih vrijednosti. Na primjer, sljedeฤ‡i upit traลพi studente koji imaju vrijednost null DepartmentId:

SELECT * FROM Students WHERE DepartmentId = NULL;

Ovaj upit neฤ‡e dati nikakav rezultat:

SQLite NULL rukovanje

Buduฤ‡i da NULL vrijednost nije jednaka nijednoj drugoj vrijednosti koja ukljuฤuje samu null vrijednost, to je razlog zaลกto nije vratio nikakav rezultat.

Meฤ‘utim, da bi upit radio, morate koristiti operator "IS NULL" za pretraลพivanje null vrijednosti na sljedeฤ‡i naฤin:

SELECT * FROM Students WHERE DepartmentId IS NULL;

Ovo ฤ‡e vam dati:

SQLite NULL rukovanje

Upit ฤ‡e vratiti one studente koji imaju nultu vrijednost DepartmentId.

Ako ลพelite dobiti vrijednosti koje nisu null, morate koristiti operator "IS NOT NULL" ovako:

SELECT * FROM Students WHERE DepartmentId IS NOT NULL;

Ovo ฤ‡e vam dati:

SQLite NULL rukovanje

Upit ฤ‡e vratiti one studente koji nemaju vrijednost NULL DepartmentId.

Uvjetni rezultati

Ako imate popis vrijednosti i ลพelite odabrati bilo koju od njih na temelju nekih uvjeta. Za to bi uvjet za tu odreฤ‘enu vrijednost trebao biti istinit kako bi bio odabran.

CASE izraz ฤ‡e procijeniti ovaj popis uvjeta za sve vrijednosti. Ako je uvjet istinit, vratit ฤ‡e tu vrijednost.

Na primjer, ako imate stupac "Ocjena" i ลพelite odabrati tekstualnu vrijednost na temelju vrijednosti ocjene na sljedeฤ‡i naฤin:

โ€“ โ€œOdliฤanโ€ ako je ocjena veฤ‡a od 85.

โ€“ โ€œVrlo dobarโ€ ako je ocjena izmeฤ‘u 70 i 85.

โ€“ โ€œDobarโ€ ako je ocjena izmeฤ‘u 60 i 70.

Tada moลพete koristiti izraz CASE da to uฤinite.

Ovo se moลพe koristiti za definiranje neke logike u SELECT klauzuli tako da moลพete odabrati odreฤ‘ene rezultate ovisno o odreฤ‘enim uvjetima kao ลกto je na primjer if izjava.

CASE operator moลพe se definirati razliฤitim sintaksama na sljedeฤ‡i naฤin:

Moลพete koristiti razliฤite uvjete:

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN condition3 THEN result3
  โ€ฆ
  ELSE resultn
END

Ili, moลพete koristiti samo jedan izraz i staviti razliฤite moguฤ‡e vrijednosti za odabir:

CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  WHEN value3 THEN result3
  โ€ฆ
  ELSE restuln
END

Imajte na umu da je klauzula ELSE opcionalna.

Primjer

U sljedeฤ‡em primjeru, koristit ฤ‡emo CASE izraz s NULL vrijednoลกฤ‡u u stupcu ID odjela u tablici Studenti kako bismo prikazali tekst 'Nema odjela' na sljedeฤ‡i naฤin:

SELECT
  StudentName,
  CASE
    WHEN DepartmentId IS NULL THEN 'No Department'
    ELSE DepartmentId
  END AS DepartmentId
FROM Students;
  • Operator CASE ฤ‡e provjeriti vrijednost DepartmentId-a je li null ili nije.
  • Ako je vrijednost NULL, tada ฤ‡e odabrati literalnu vrijednost 'No Department' umjesto vrijednosti DepartmentId.
  • Ako nije vrijednost null, tada ฤ‡e odabrati vrijednost stupca DepartmentId.

Ovo ฤ‡e vam dati izlaz kao ลกto je prikazano u nastavku:

SQLite CASE uvjetni rezultati

Uobiฤajeni tabliฤni izraz

Uobiฤajeni tabliฤni izrazi (CTE) su podupiti koji su definirani unutar SQL naredbe s danim imenom.

Ima prednost nad podupitima jer je definiran iz SQL naredbi i uฤinit ฤ‡e upite lakลกim za ฤitanje, odrลพavanje i razumijevanje.

Uobiฤajeni tabliฤni izraz moลพe se definirati stavljanjem klauzule WITH ispred naredbi SELECT na sljedeฤ‡i naฤin:

WITH CTEname
AS
(
   SELECT statement
)
SELECT, UPDATE, INSERT, or update statement here FROM CTE

โ€žCTEnameโ€œ je bilo koji naziv koji moลพete dati CTE-u, moลพete ga koristiti za kasnije pozivanje na njega. Imajte na umu da moลพete definirati naredbe SELECT, UPDATE, INSERT ili DELETE na CTE-ovima.

Sada, da vidimo primjer kako koristiti CTE u SELECT klauzuli.

Primjer

U sljedeฤ‡em primjeru definirat ฤ‡emo CTE iz naredbe SELECT, a zatim ฤ‡emo ga kasnije upotrijebiti u drugom upitu:

WITH AllDepartments
AS
(
  SELECT DepartmentId, DepartmentName
  FROM Departments
)
SELECT
  s.StudentId,
  s.StudentName,
  a.DepartmentName
FROM Students AS s
INNER JOIN AllDepartments AS a ON s.DepartmentId = a.DepartmentId;

U ovom upitu definirali smo CTE i dali mu naziv โ€žSvi odjeliโ€œ. Ovaj CTE je definiran iz SELECT upita:

SELECT DepartmentId, DepartmentName
  FROM Departments

Nakon ลกto smo definirali CTE, upotrijebili smo ga u SELECT upitu koji dolazi nakon njega.

Imajte na umu da Uobiฤajeni izrazi tablice ne utjeฤu na izlaz upita. To je naฤin definiranja logiฤkog pogleda ili podupita kako bi se ponovno upotrijebili u istom upitu. Uobiฤajeni tabliฤni izrazi su poput varijable koju deklarirate i ponovno je koristite kao podupit. Samo izjava SELECT utjeฤe na izlaz upita.

Ovaj upit ฤ‡e vam dati:

SQLite Uobiฤajeni tabliฤni izraz

Napredni upiti

Napredni upiti su oni upiti koji sadrลพe sloลพene spojeve, podupite i neke agregate. U sljedeฤ‡em odjeljku vidjet ฤ‡emo primjer naprednog upita:

Gdje dobivamo,

  • Nazivi odjela sa svim studentima za svaki odjel
  • Imena uฤenika odvojena zarezom i
  • Prikazuje odjel s najmanje tri uฤenika
SELECT
  d.DepartmentName,
  COUNT(s.StudentId) StudentsCount,
  GROUP_CONCAT(StudentName) AS Students
FROM Departments AS d
INNER JOIN Students AS s ON s.DepartmentId = d.DepartmentId
GROUP BY d.DepartmentName
HAVING COUNT(s.StudentId) >= 3;

Dodali smo klauzulu JOIN kako bismo dobili DepartmentName iz tablice Departments. Nakon toga smo dodali klauzulu GROUP BY s dvije agregacijske funkcije:

  • โ€œBROJโ€ za brojanje uฤenika za svaku grupu odjela.
  • GROUP_CONCAT za spajanje uฤenika za svaku grupu s zarezom odvojenim u jednom nizu.

Nakon GROUP BY, koristili smo klauzulu HAVING za filtriranje odjela i odabir samo onih odjela koji imaju najmanje 3 uฤenika.

Rezultat ฤ‡e biti sljedeฤ‡i:

SQLite Napredni upiti

Pitanja i odgovori

WHERE filtrira pojedinaฤne retke prije bilo koje grupeping i ne moลพe koristiti agregacijske funkcije. HAVING filtrira cijele grupe nakon GROUP BY i moลพe testirati agregate kao ลกto su COUNT ili SUM. U upitu, WHERE se piลกe prije GROUP BY, a HAVING nakon njega.

SQL kljuฤne rijeฤi poput SELECT i WHERE ne razlikuju velika i mala slova. Operator LIKE ne razlikuje velika i mala slova za ASCII slova, dok GLOB razlikuje velika i mala slova. Tekst pohranjen u stupcima zadrลพava izvorna velika i mala slova, pa usporedbe vrijednosti s operatorom jednakosti poลกtuju toฤne znakove.

Dodajte ORDER BY RANDOM() i LIMIT 1 u SELECT, na primjer SELECT * FROM Students ORDER BY RANDOM() LIMIT 1. RANDOM() mijeลกa retke i LIMIT vraฤ‡a jedan. Poveฤ‡ajte broj LIMIT da biste dohvatili nekoliko nasumiฤnih redaka.

JOIN kombinira stupce iz dvije tablice jedan pored drugog koristeฤ‡i uvjet podudaranja, proลกirujuฤ‡i svaki redak. UNION slaลพe retke dvaju SELECT rezultata jedan na drugi u jednu listu, tako da oba upita moraju vratiti isti broj stupaca.

Ne. Bez ORDER BY klauzule SQLite moลพe vratiti retke bilo kojim redoslijedom, tako da LIMIT moลพe odabrati razliฤite retke pri svakom pokretanju. Uvijek uparite LIMIT s ORDER BY kada trebate predvidljive rezultate, kao ลกto je ORDER BY StudentId LIMIT 10.

Napravite indeks na stupcima koriลกtenim u klauzulama WHERE, JOIN i ORDER BY tako da SQLite moลพete pronaฤ‡i retke bez skeniranja cijele tablice. Odabir samo potrebnih stupaca i pokretanje naredbe ANALIZE za osvjeลพavanje statistike takoฤ‘er poboljลกava brzinu upita.

Da. AI tekstualni SQL asistenti pretvaraju zahtjeve na obiฤnom engleskom jeziku u SQLite Naredbe SELECT, WHERE, JOIN i GROUP BY. Navoฤ‘enje naziva tablice i stupca poboljลกava toฤnost, a svaki generirani upit treba pregledati i testirati prije pokretanja na stvarnim podacima.

Da. GitHub kopilot sugerira SQLite upiti ugraฤ‘eni u ureฤ‘ivaฤe poput VS Code, dovrลกavajuฤ‡i klauzule SELECT, JOIN, aggregate i GROUP BY. ฤŒita obliลพnje sheme i komentare, pa njegovi prijedlozi ponovno koriste vaลกa stvarna imena tablica i stupaca.

Saลพmite ovu objavu uz: