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)

Business intelligence și analitica în afaceri
Business intelligence și analitica în afaceri

Esențială pentru profesioniștii și studenții pasionați de transformarea datelor brute în informații valoroase.

Nu a fost votat $4.99$10.99 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Criptomonede
Criptomonede

Descoperă lumea fascinantă a criptomonedelor și impactul lor asupra economiei globale!

Nu a fost votat $0.00 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Etica Big Data în cercetare
Etica Big Data în cercetare

Principalele probleme cu care se confruntă oamenii de știință în lucrul cu seturile mari de date (Big Data), evidențiind principale aspecte etice, luând în considerare inclusiv legislația din Uniunea Europeană. După o scurtă Introducere despre Big Data, secțiunea Tehnologia prezintă … Citeşte mai mult

Nu a fost votat $0.00$2.35 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.

Lasă un răspuns

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