Home » Articole » Articole » Calculatoare » Programare » SQL » SQL: Restricții în tabele

SQL: Restricții în tabele

postat în: SQL 0

Nume de tabele

Cuvântul cheie FROM este folosit pentru a specifica tabelul pe care va funcționa comanda. Acest nume de tabel poate fi folosit ca identificator. În primele exemple simple, prefixarea numelor de coloane cu identificatorul numelui tabelului poate fi folosită, dar nu este necesară. În comanda ulterioară, mai complexă, identificatorul numelui tabelului este o caracteristică necesară.

SELECT person.firstname, person.lastname
FROM   person;
-- Definiți un alias pentru numele tabelului (analogic cu numele coloanelor). Pentru a păstra o privire de ansamblu, de obicei
-- abreviați tabelele după primul caracter al numelui lor.
SELECT p.firstname, p.lastname
FROM   person AS p;  -- Sugestie: nu toate sistemele acceptă cuvântul cheie „AS” cu aliasuri de tabel. Omiteți-l în aceste cazuri!
-- Cuvântul cheie „AS” este din nou opțional.
SELECT p.firstname, p.lastname
FROM   person p;

Restricție (specificați rândurile rezultate)

În clauza WHERE, specificăm câteva „condiții de căutare” care se găsesc printre tabelele sau vizualizările numite. Evaluarea acestui criteriu este – de cele mai multe ori – unul dintre primele lucruri în timpul executării unei comenzi SELECT. Înainte ca orice rând să poată fi sortat sau afișat, acesta trebuie să îndeplinească condițiile din clauză.

Dacă omitem clauza, toate rândurile tabelului sunt preluate. În caz contrar, numărul de rânduri va fi redus conform criteriilor specificate. Dacă specificăm „greutate < 70”, de exemplu, sunt preluate doar acele rânduri în care coloana de greutate stochează o valoare mai mică de 70. Restricțiile acționează asupra rândurilor de tabele prin evaluarea valorilor coloanelor (uneori acţionează asupra altor lucruri precum existenţa rândurilor, dar pentru moment ne concentrăm pe principii de bază). Ca rezultat, ne putem imagina că evaluarea „clauza where” produce o listă de rânduri. Această listă de rânduri va fi procesată în pași suplimentari, cum ar fi sortarea, gruparea sau afișarea anumitor coloane (proiecție).

Comparații

Comparăm între ele variabilele, valorile constante și rezultatele apelurilor de funcții în același mod în care am proceda în diferite limbaje de programare. Singura diferență este că folosim nume de coloane în loc de variabile. Operatorii de comparare trebuie să se potrivească cu tipurile de date date pe care trebuie să opereze. Rezultatul comparației este o valoare booleană. Dacă este „adevărat”, rândul corespunzător va fi procesat în continuare. Cateva exemple:

  • „’weight = 70” compară coloana „weight” cu valoarea constantă „70”, dacă coloana este egală cu valoarea constantă.
  • „70 = ‘weight”: la fel ca înainte.
  • „firstname = lastname” compară două coloane – fiecare pe același rând – pentru egalitate. Nume precum „Frederic Frederic” se evaluează drept adevărate.
  • „firstname < lastname” este o comparație corectă a două coloane în funcție de ordinea lexicală a șirurilor.
  • „LENGTH(firstname) < 5” compară rezultatul unui apel de funcție cu valoarea constantă „5”. Funcția LENGTH() operează pe șiruri de caractere și returnează un număr.

Logica booleană

Adesea dorim să specificăm mai mult decât un singur criteriu de căutare, de exemplu, există persoane născute în San Francisco cu numele Baker? Pentru a face acest lucru, specificăm fiecare comparație necesară independent de următoarea și le unim împreună cu operatorii booleeni ȘI respectiv SAU.

SELECT *
FROM   person
WHERE  place_of_birth = 'San Francisco'
AND    lastname = 'Baker';

Rezultatul unei comparații este un boolean. Poate fi comutat între „adevărat” și „fals” de către operatorul unar NU.

SELECT  *
FROM    person
WHERE   place_of_birth = 'San Francisco'
AND NOT lastname = 'Baker'; -- toate cu excepția 'Baker'
-- pentru clarificare: NOT din exemplul anterior este o „operație unară” asupra rezultatului
--                    comparație. Nu este o completare la AND.
SELECT  *
FROM    person
WHERE   place_of_birth = 'San Francisco'
AND (NOT (lastname = 'Baker'));   --  la fel ca înainte, dar explicit notat cu paranteze

Precedența comparațiilor și a logicii booleene este următoarea:

  1. toate comparatiile
  2. Operator NU
  3. Operator ȘI
  4. Operator SAU
-- AND (născut în SF și numele Baker; 1 hit ca rezultat intermediar) va fi procesat înainte
-- OR  (persoana Yorgos; 1 hit)
-- 1 + 1 ==> 2 rânduri
SELECT *
FROM   person
WHERE  place_of_birth = 'San Francisco' -- 4 hits SF
AND    lastname = 'Baker'               -- 1 hit Baker
OR     firstname = 'Yorgos'             -- 1 hit Yorgos
;

-- Același exemplu cu paranteze adăugate pentru a explicita precedența.
-- AND este procesată înainte de OR.
-- resultate ==> aceleași 2 rânduri ca mai sus
SELECT *
FROM   person
WHERE  (place_of_birth = 'San Francisco' -- 4 hits SF
AND    lastname = 'Baker')              -- 1 hit Baker
OR     firstname = 'Yorgos'             -- 1 hit Yorgos
;

-- AND (persoana Yorgos Baker; nicio lovitură ca rezultat intermediar) va fi procesată înainte
-- OR  (născut în SF; 4 hits)
-- 0 + 4 ==> 4 rânduri
SELECT *
FROM   person
WHERE  place_of_birth = 'San Francisco' -- 4 hits SF
OR     firstname = 'Yorgos'             -- 1 hit Yorgos
AND    lastname = 'Baker'               -- 1 hit Baker
;

-- Același exemplu cu paranteze adăugate pentru a explicita precedența.
-- AND este procesată înainte de OR.
-- resultate ==> aceleași 4 rânduri ca mai sus
SELECT *
FROM   person
WHERE  place_of_birth = 'San Francisco'  -- 4 hits SF
OR     (firstname = 'Yorgos'             -- 1 hit Yorgos
AND    lastname = 'Baker')               -- 1 hit Baker
;

-- Putem modifica succesiunea evaluărilor prin specificarea parantezelor.
-- La fel ca și primul exemplu, adăugând paranteze, un rând.
SELECT *
FROM   person
WHERE  place_of_birth = 'San Francisco' -- 4 hits SF
AND   (lastname = 'Baker'               -- 1 hit Baker
OR     firstname = 'Yorgos')            -- 1 hit Yorgos
;
Două abrevieri

Uneori scurtăm sintaxa folosind cuvântul cheie BETWEEN. Acesta definește o limită inferioară și superioară și este utilizat în principal pentru valori numerice și date, dar și aplicabil șirurilor.

SELECT *
FROM   person
WHERE  weight >= 70
AND    weight <= 90;
-- O formulare echivalentă mai scurtă și mai expresivă
SELECT *
FROM   person
WHERE  weight BETWEEN 70 AND 90; -- BETWEEN include cele două margini

Pentru compararea unei coloane sau a unei funcții cu mai multe valori, putem folosi expresia scurtă IN.

SELECT *
FROM   person
WHERE  lastname = 'de Winter'
OR     lastname = 'Baker';
-- O formulare echivalentă mai scurtă și mai expresivă
SELECT *
FROM   person
WHERE  lastname IN ('de Winter', 'Baker');

FETCH: Selectează și alege anumite rânduri

Uneori nu ne interesează toate rândurile rezultate, de exemplu: putem dori să vedem doar primele 3 sau 10 rânduri. Acest lucru poate fi realizat cu clauzele OFFSET și FETCH. OFFSET specifică numărul de rânduri care trebuie sărite (numărând de la începutul setului de rezultate), iar FETCH specifică numărul de rânduri după care livrarea rândurilor se va opri.

SELECT *
FROM   person
WHERE  place_of_birth = 'San Francisco'
ORDER BY firstname
FETCH FIRST 2 ROWS ONLY  -- doar primele două rțnduri
;

SELECT *
FROM   person
ORDER BY id              -- clauza WHERE (și clauza ORDER BY) sunt opâionale
OFFSET 5 ROWS
FETCH FIRST 2 ROWS ONLY  -- doar al 6-lea și al 7-lea rând (conform lui ORDER BY)
;

Vă rugăm să rețineți că clauzele OFFSET și FETCH sunt părți separate ale comenzii SELECT. Unele implementări gestionează această funcționalitate ca parte a clauzei WHERE sau cu cuvinte cheie diferite (ROWNUM, START, SKIP, LIMIT).

Funcționalitatea OFFSET și FETCH poate fi realizată de asemenea prin funcții de fereastră cu sintaxa lor mai generală.

(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)

Cunoaștere și Informații
Cunoaștere și Informații

Autor: Nicolae Sfetcu Ediția a doua Cunoașterea și informațiile (abordate în ansamblu sau în componentele lor distincte) sunt o preocupare majoră pentru tehnologia informației, sisteme de informații, știința informației și activitatea de informații în general. Procesul obţinerii, prelucrării şi analizei … Citeşte mai mult

Nu a fost votat 26.99 lei270.36 lei Selectează opțiunile
Facebook pentru afaceri şi utilizatori
Facebook pentru afaceri şi utilizatori

Ediția a doua (revăzută și îmbunătățită) Un ghid pentru dezvoltarea profilului propriu al utilizatorilor Facebook, şi pentru promovarea imaginii, produselor şi serviciilor firmei prin paginile de Facebook. Include volumele Ghid Facebook pentru utilizatori și Ghid pagini Facebook – Campanii de … Citeşte mai mult

22.49 lei32.36 lei Selectează opțiunile
Introducere în Business Intelligence
Introducere în Business Intelligence

Colecția ȘTIINȚA INFORMAȚIEI ”Introducere în Business Intelligence” oferă cititorilor informații cuprinzătoare despre business intelligence, explorând toate aspectele importante ale inteligenței de afaceri în scenariul actual. Subiectele tratate se referă la abordările de bază ale business intelligence. Cartea își propune să … Citeşte mai mult

Nu a fost votat 13.47 lei21.63 lei Selectează opțiunile

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *