You are on page 1of 19

SQL.

Consultes bàsiques

Contingut
Introducció .................................................................................................................................... 2
Orígens i evolució del llenguatge SQL ....................................................................................... 2
Tipus de sentències SQL ............................................................................................................ 3
SQL allotjat ................................................................................................................................ 4
Tipus de dades............................................................................................................................... 4
Tipus de dades string................................................................................................................. 5
El tipus CHAR [(longitud)] ...................................................................................................... 5
El tipus VARCHAR (longitud).................................................................................................. 6
Tipus de dades numèriques ...................................................................................................... 6
Els tipus de dades INTEGER ................................................................................................... 6
Tipus FLOAT, REAL i DOUBLE ................................................................................................. 6
Tipus de dades DECIMAL i NUMERIC .................................................................................... 7
Tipus de dades per a moments temporals (dates).................................................................... 7
El tipus de dada DATE............................................................................................................ 7
El tipus de dada DATETIME ................................................................................................... 8
Consultes simples .......................................................................................................................... 8
Sentència SELECT (Consulta) ..................................................................................................... 9
Clàusules SELECT i FROM ........................................................................................................ 10
Clàusula ORDER BY .................................................................................................................. 11
Clàusula WHERE ...................................................................................................................... 12
BETWEEN valor1 AND valor2 .............................................................................................. 13
IN ......................................................................................................................................... 13
LIKE ...................................................................................................................................... 14
IS NULL................................................................................................................................. 14
Operadors lògics...................................................................................................................... 15
Funcions d'Agregat (valors resum).............................................................................................. 16
Maneig dels valors nuls ........................................................................................................... 19
Ús de DISTINCT en les funcions de totals ................................................................................ 19
SQL. Consultes bàsiques

Introducció
En aquesta unitat, "Llenguatge SQL. Consultes bàsiques ", farem els primers passos en el
coneixement del llenguatge SQL de consultes.

El DQL (Data Query Language) ho formen les instruccions capaces de consultar les dades de les
taules.

La introduirem en els tipus de dades que pot gestionar i en el disseny de consultes senzilles en
la base de dades. Després passarem a ampliar el nostre coneixement sobre el llenguatge SQL
per a aprofitar la potència que dona en l'àmbit de la consulta d'informació. Així, per exemple,
aprendrem a ordenar la informació, a agrupar-la efectuant filtrats per a reduir el nombre de
resultats, combinar resultats de diferents consultes És a dir, que aquest llenguatge és una
meravella que possibilita efectuar qualsevol tipus de consulta sobre una base de dades per a
obtindre la informació desitjada.

Per a adquirir un bon coneixement del llenguatge SQL, és necessari que aneu reproduint en el
vostre ordinador tots els exemples incorporats en el text, i també la realització de les activitats
i els exercicis.

La millor manera d'iniciar l'estudi del llenguatge SQL és executar consultes senzilles en la base
de dades. Abans, no obstant això, ens convé conéixer els orígens i evolució que ha tingut aquest
llenguatge, els diferents tipus de sentències SQL existents (subdivisió del llenguatge SQL), així
com els diferents tipus de dades (Números, dates, cadenes ...) que ens podem trobar
emmagatzemades en les bases de dades, encara que ja ho vam veure en el tema anterior. I,
llavors, ja ens podrem iniciar en l'execució de consultes simples.

Orígens i evolució del llenguatge SQL


El model relacional en el qual es basen els SGBD actuals va ser presentat en 1970 pel matemàtic
Edgar Frank Codd, que treballava en els laboratoris d'investigació de l'empresa d'informàtica
IBM. Un dels primers SGBD relacionals a aparéixer va ser el System R d'IBM, que es va
desenvolupar com a prototip per a provar la funcionalitat del model relacional i que anava
acompanyat del llenguatge SEQUEL (acrònim de Structured English Query Language) per a
manipular i accedir a les dades emmagatzemades en el System R. Posteriorment, la paraula
SEQUEL es va condensar en SQL (acrònim de SQL).

Una vegada comprovada l'eficiència del model relacional i del llenguatge SQL, es va iniciar una
dura carrera entre diferents marques comercials. Així, tenim:
SQL. Consultes bàsiques

• IBM comercialitza diversos productes relacionals amb el llenguatge SQL: System / 38 en 1979,
SQL / DS en 1981, i DB2 en 1983.

• Relational Programari, Inc. (Actualment, Oracle Corporation) crea la seua pròpia versió de
SGBD relacional per a la Marina dels EUA, la CIA i altres. En l'estiu de 1979 llança Oracle V2
(versió 2) per a les computadores VAX (Les grans competidores de l'època amb les
computadores d'IBM).

El llenguatge SQL va evolucionar (cada marca comercial seguia el seu propi criteri) fins que els
principals organismes d'estandardització van intervindre per a obligar als diferents SGBD
relacionals implementar una versió comuna del llenguatge i, així, en 1986 l'ANSI (American
National Standards Institute) publica l'estàndard SQL-86, que en 1987 és ratificat per l'ISO
(Organització Internacional per a la Normalització, o International Organization for
Standardization en anglés).

Diferents revisions de l'estàndard SQL que han aparegut des de 1986:

1986 revisió SQL-86 (SQL-87 / SQL1) Publicat per l’ANSI en 1986, i ratificat per ISO en 1987.

1989 SQL-89 revisió.

1992 SQL-92 (SQL2) Gran revisió.

1999 SQL:1999 (SQL3) Introducció de consultes recursives, disparadores…

2003 SQL:2003 Introducció de XML, funcions Windows...

2006 SQL:2006

Tipus de sentències SQL


Els SGBD relacionals incorporen el llenguatge SQL per a executar diferents tipus de tasques en
les bases de dades: definició de dades, consulta de dades, actualització de dades, definició
d'usuaris, concessió de privilegis ... Per aquest motiu, les sentències que aporta el llenguatge
SQL solen agrupar en les següents:

1. Sentències destinades a la definició de les dades (LDD), que permeten definir els objectes
(taules, camps, valors possibles, regles d'integritat referencial, restriccions ...).

2. Sentències destinades al control sobre les dades (LCD), que permeten concedir i retirar
permisos sobre els diferents objectes de la base de dades.

3. Sentències destinades a la consulta de les dades (DQL), que permeten accedir a les dades en
manera consulta.
SQL. Consultes bàsiques

4. Sentències destinades a la manipulació de les dades (LMD), que permeten actualitzar la base
de dades (altes, baixes i modificacions).

En alguns SGBD no hi ha distinció entre LC i LMD, i únicament es parla de LMD per a les consultes
i actualitzacions. De la mateixa manera, a vegades s'inclouen les sentències de control (LCD)
juntament amb les de definició de dades (LDD).

No té gens d'importància que s'incloguen en un grup o que siguen un grup propi: és una simple
classificació.

SQL allotjat
Les sentències SQL poden presentar, no obstant això, una segona sintaxi, sintaxi allotjada,
consistent en un conjunt de sentències que són admeses dins d'un llenguatge de programació
anomenat llenguatge amfitrió.

Així, podem trobar LC i LMD que poden allotjar-se en llenguatges de tercera generació com a C,
Cobol, Fortran ..., i en llenguatges de quarta generació. Els SGBD solen incloure un llenguatge de
tercera generació que permet allotjar sentències SQL en xicotetes unitats de programació
(funcions o procediments). Així, el SGBD Oracle incorpora el llenguatge PL / SQL, el SGBD
SQLServer incorpora el llenguatge Transact-SQL, el SGBD MySQL 5.x segueix la sintaxi SQL 2003
per a la definició de rutines de la mateixa manera que el SGBD DB2 d'IBM.

Tipus de dades
L'evolució anàrquica que ha seguit el llenguatge SQL ha fet que cada SGBD haja pres les seues
decisions quant als tipus de dades permeses. Certament, els diferents estàndards SQL que han
anat apareixent han marcat una certa línia i els SGBD s'acosten, però tampoc poden deixar de
fer costat als tipus de dades que han proporcionat al llarg de la seua existència, ja que hi ha
moltes bases de dades repartides pel món que les utilitzen.

De tot això hem de deduir que, a fi de treballar amb un SGBD, hem de conéixer els principals
tipus de dades que facilita (numèriques, alfanumèriques, moments temporals ...) i hem de fer-
ho centrant-nos en un SGBD concret (la nostra elecció ha sigut MySQL) tenint en compte que la
resta de SGBD també incorpora tipus de dades similars i, en cas d'haver de treballar, sempre
haurem de donar una ullada a la documentació que cada SGBD facilita.

Cada valor manipulat per un SGBD determinat correspon a una mena de dada que associa un
conjunt de propietats al valor. Les propietats associades a cada tipus de dada fan que un SGBD
concret tracte de manera diferent els valors de diferents tipus de dades.
SQL. Consultes bàsiques

En el moment de creació d'una taula, cal especificar un tipus de dada per a cadascuna de les
columnes. En la creació d'una acció o funció emmagatzemada en la base de dades, cal especificar
un tipus de dada per a cada argument. L'assignació correcta de la mena de dada és fonamental
perquè els tipus de dades defineixen el domini de valors que cada columna o argument pot
contindre. Així, per exemple, les columnes de tipus DONA'T no podran acceptar el valor '30 de
febrer 'ni el valor 2 ni la cadena Hola.

Dins dels tipus de dades bàsiques, podem distingir els següents:

• Tipus de dades per a gestionar informació alfanumèrica.

• Tipus de dades per a gestionar informació numèrica.

• Tipus de dades per a gestionar moments temporals (dates i temps).

• Altres tipus de dades.

MySQL és el SGBD amb el qual es treballa en aquests materials i el llenguatge SQL de MySQL el
descrit.

Podeu trobar més informació referent a això en el manual de referència Capítol 11. Tipus de
columna.

Tipus de dades string


Els tipus de dades string emmagatzemen dades alfanumèriques en el conjunt de caràcters de la
base de dades. Aquests tipus són menys restrictius que altres tipus de dades i, en conseqüència,
tenen menys propietats. Així, per exemple, les columnes de tipus caràcter poden
emmagatzemar valors alfanumèrics –lletres i xifres-, però les columnes de tipus numèric només
poden emmagatzemar valors numèrics.

Generalment (hi ha uns altres), nosaltres utilitzarem els Següents:

El tipus CHAR [(longitud)]

Aquest tipus especifica una cadena de longitud fixa (indicada per longitud) i, per tant, MySQL
assegura que tots els valors emmagatzemats en la columna tenen la longitud especificada. Si
s'insereix una cadena de longitud més curta, MySQL la farcida amb espais en blanc fins a la
longitud indicada. Si s'intenta inserir una cadena de longitud més llarga, es trunca.

La longitud mínima i per defecte (no és obligatòria) per a una columna de tipus CHAR és d'1
caràcter, i la longitud màxima permesa és de 255 caràcters.
SQL. Consultes bàsiques

Per a indicar la longitud, és necessari especificar-la amb un número entre parèntesi, que indica
el nombre de caràcters, que tindrà l'string . Per exemple: CHAR (10).

El tipus VARCHAR (longitud)

Aquest tipus especifica una cadena de longitud variable que pot ser, com a màxim, la indicada
per longitud, valor que és obligatori introduir.

Els valors de tipus VARCHAR emmagatzemen el valor exacte que indica l'usuari sense afegir
espais en blanc. Si s'intenta inserir una cadena de longitud més llarga, VARCHAR retorna un
error.

La longitud màxima d'aquesta mena de dades és de 65.535 caràcters. La longitud es pot indicar
amb un número, que indica el nombre de caràcters màxim que contindrà l'string . Per exemple:
VARCHAR (10).

Tipus de dades numèriques


MySQL suporta tots els tipus de dades numèriques de SQL estàndard.

Podríem fer una classificació dels tipus numèrics entre ENTERS i REALS. Hi ha diferents tipus en
funció dels valors admesos (pots consultar el manual). Per a simplificar, nosaltres utilitzarem els
següents:

Els tipus de dades INTEGER

El tipus INTEGER (comunament abreujat com INT) emmagatzema valors sencers.

Hi ha diversos subtipus d'enters en funció dels valors admesos.

Els tipus de dades senceres admeten l'especificació del nombre de dígits que cal mostrar d'un
valor concret, utilitzant la sintaxi: INT (N), sent N el nombre de dígits visibles.

Així, doncs, si s'especifica una columna de tipus INT (4), en el moment de seleccionar un valor
concret, es mostraran només 4 dígits. Cal tindre en compte que aquesta especificació no
condiciona el valor emmagatzemat, tan sols fixa el valor que cal mostrar.

Tipus FLOAT, REAL i DOUBLE

FLOAT, REAL i DOUBLE són els tipus de dades numèriques que emmagatzemen valors numèrics
reals (és a dir, que admeten decimals).

Els tipus FLOAT i REAL emmagatzemen en 4 bytes i els DOUBLE en 8 bytes.


SQL. Consultes bàsiques

Els tipus FLOAT, REAL o DOUBLE PRECISION admeten que especifiquen els dígits de la part
sencera (E) i els dígits de la part decimal (D, que poden ser 30 com a màxim, i mai més grans que
E-2). La sintaxi per a aquesta especificació seria:

• FLOAT (E, D)

• REAL (D, A)

• DOUBLE PRECISION (E, D)

Tipus de dades DECIMAL i NUMERIC

DECIMAL i NUMERIC són els tipus de dades reals de punt fix que admet MySQL.

Són sinònims i, per tant, es poden utilitzar indistintament.

Els valors en punt fix no s'emmagatzemaran mai de manera arredonida, és a dir, que si cal
emmagatzemar un valor en un espai que no és adequat, emetrà un error.

Aquest tipus de dades permeten assegurar que el valor és exactament el que s'ha introduït. No
s'ha arredonit. Per tant, es tracta d'una mena de dades molt adequat per a representar valors
monetaris, per exemple.

Tots dos tipus de dades permeten especificar el total de dígits (T) i la quantitat de dígits decimals
(D), amb la següent sintaxi:

DECIMAL (T, D)

NUMERIC (T, D)

Tipus de dades per a moments temporals (dates)


El tipus de dades que MySQL disposa per a emmagatzemar dades que indiquen moments
temporals són varis. Els més utilitzats són els Següents:

El tipus de dada DATE

DATE permet emmagatzemar dates. El format d'una data en MySQL és 'AAAAMM-DD ', en el
qual AAAA indica l'any expressat en quatre dígits, MM indica el mes expressat en dos dígits i DD
indica el dia expressat en dos dígits.

La data mínima suportada pel sistema és '1000-01-01'. I la data màxima admissible en MySQL és
'9999-12-31'.
SQL. Consultes bàsiques

El tipus de dada DATETIME

DATATIME és un tipus de dada que permet emmagatzemar combinacions de dies i hores.

El format de DATETIME en MySQL és 'AAAA-MM-DD HH: MM: SS', en la qual AAAA-MM-DD és


l'any, el mes i el dia, i HH: MM: SS indiquen l'hora, minut i segon, expressats en dos dígits,
separats per ':'.

Consultes simples
Una vegada ja coneixem els diferents tipus de dades que ens podem trobar emmagatzemats en
una base de dades (nosaltres ens hem centrat en MySQL, però en la reste de SGBD és similar),
estem en condicions d'iniciar l'explotació de la base de dades, és a dir, de començar la gestió de
les dades. Evidentment, per a poder gestionar dades, prèviament s'ha d'haver definit les taules
que han de contindre les dades, i per a poder consultar dades hi ha haver-los introduït abans.
L'aprenentatge del llenguatge SQL s'efectua, no obstant això, en sentit invers; és a dir,
començarem coneixent les possibilitats de consulta de dades sobre taules ja creades i amb dades
ja introduïdes. Necessitem, no obstant això, conéixer l'estructura de les taules que s'han de
gestionar i les relacions existents entre elles.

Per exemple, la figura 1.1 mostra el disseny de l'esquema Empresa, implementat amb la utilitat
modeling del programari MySQL Workbench, que utilitza una notació molt intuïtiva:
SQL. Consultes bàsiques

• Les claus primàries indiquen amb el símbol d'una clau.

• Els atributs que no admeten valors nuls van precedits de un símbol que està totalment acolorit.

• Els atributs que admeten valor nul van precedits de un símbol que està marcat a soles el seu
contorn.

• Els atributs que formen part de una Clau Aliena porten el símbol en roig.

CAP: atribut no obligatori que forma part de una Clau aliena

CLIENT_COD: atribut obligatori que forma part de una Clau aliena

COD_NUM atribut que forma part de una Clau aliena i de la Clau


Primaria

• Les interrelacions 1: N indiquen amb una línia que acaba amb tres branques al costat de
l'entitat interrelacionada en el costat N.

• L'opcionalidad s'indica amb un cercle al costat de l'entitat opcional i l'obligatorietat amb una
xicoteta línia perpendicular a la interrelació.

• Si situeu el ratolí sobre una de les línies, marcarà la Clau Primària d'una de les taules i la seua
corresponent Clau Aliena en l'altra.

Sentència SELECT (Consulta)


Tal com ho indica el seu nom, aquesta sentència permet seleccionar l'el usuari demana, no ha
d'indicar on l'ha d'anar a buscar ni com l'ha de fer.

La sentència SELECT consta de diferents apartats que se solen denominar clàusules. Dos
d'aquests apartats són sempre obligatoris (SELECT i FROM) i són els primers que presentarem.
La resta de clàusules han d'utilitzar-se segons els resultats que es vulguen obtindre.
SQL. Consultes bàsiques

Símbols utilitzats per a especificar la sintaxi en SQL:

[ ] (claudàtors). Els claudàtors serveixen per a tancar text que no és obligatori en la instrucció.
És a dir, per a indicar una part opcional de la instrucció.

| (barra vertical). Aquest símbol (|), la barra vertical, indica opció disyuntiva. Quan hi ha
diferents paraules o seccions en la instrucció separades per la barra, s'està indicant que només
podrem triar una de les opcions (són opcions, per tant, excloents).

... (punts suspensius) Indica que la secció anterior als punts suspensius, es pot repetir una vegada
i una altra.

{} (claus) Les claus serveixen per a indicar seccions obligatòries. Normalment s'usa amb la barra
vertical per a indicar que només es pot triar una opció, però és obligatori triar una.

Clàusules SELECT i FROM


La clàusula SELECT permet triar columnes i/o valors derivats d'aquestes (resultats de les
expressions).

La clàusula FROM permet especificar les taules (també podrien ser vistes: view) en les quals cal
anar a buscar les columnes o sobre les que es calcularan els valors resultants de les expressions.

Una sentència SQL es pot escriure en una única línia, però per a fer la sentència més llegible
solen utilitzar diferents línies per a les diferents clàusules.

La sintaxi més simple de la sentència SELECT utilitza aquestes dues clàusules de manera
obligatòria:

SELECT {* | {[ DISTINCT ] columna | expressió [[AS] àlies ], ...}}

FROM nom_taula

[ORDER BY {columna [ASC | DESC]} [, columna [ASC | DESC]]]…;

On:

*. L'asterisc significa que se seleccionen totes les columnes.

DISTINCT fa que no es mostren projeccions duplicades afecta a tot el que hi ha darrere. Només
es pot usar una vegada immediatament després de SELECT

columna. És el nom d'una columna de la taula que es desitja mostrar.

expressió. Una expressió vàlida SQL.

àlies. És un nom que se li dona a la capçalera de la columna en el resultat d'aquesta instrucció.


Es pot usar AS o no usar-se
SQL. Consultes bàsiques

Expressió: una expressió vàlida en SQL és un: literal o un valor derivat d'aplicar operadors o
funcions en els quals poden participar diferents columnes o valors literals.

Es poden utilitzar operadors matemàtics com: -, +, *, /, DIV, MOD

I també funcions. Aquestes es divideixen en blocs segons siguen els seus paràmetres o el valor
que retornen. Així tenim:

 Funcions per a cadenes de caràcters (Apartat 12.3. del manual)


 Funcions numèriques (Apartat 12.4. del manual)
 Funcions de data i hora (Apartat 12.5. del manual)

Per exemple (Exemples sobre la BD EMPRESA):

SELECT *

FROM PRODUCTE

Projecta totes les columnes de la taula PRODUCTE

SELECT UPPER(COGNOM), SALARI, SALARI/14 ‘SALARI MESUAL’

FROM EMP

Projecta 3 columnes: la primera és el resultat d'aplicar una funció (UPPER), la segona és un camp
pur i la tercera el resultat d'un càlcul. La 3a columna porta un àlies per a la capçalera ‘SALARI
MESUAL’ (si l'àlies té espais en blanc és necessari posar-ho entre cometes simples).

El llenguatge SQL permet donar un nom alternatiu (àlies) a cada columna. Cal tindre en compte
el següent:

Si l'àlies està format per diverses cadenes (hi ha espais en blanc), és necessari posar-ho entre
cometes.

Pot portar o no la paraula reservada AS.

Clàusula ORDER BY
La clàusula order by que permet ordenar el resultat de la consulta.

Sempre va al final de la consulta.

Poden especificar-se diversos criteris. L'ordre dels criteris determinarà l'ordenació: s'aplica el
primer criteri i dins del primer el segon….

L'ordre per defecte és ascendent (ASC)


SQL. Consultes bàsiques

ORDER BY {columna [ASC | DESC]} [, columna [ASC | DESC]]…

Per exemple:

SELECT COGNOM, SALARI

FROM EMP

order by SALARI DESC, COGNOM

Els criteris d'ordenació no tenen per què estar definits sobre les projeccions del SELECT; poden
estar definits sobre qualsevol columna. No obstant això, si estan definits sobre columnes
projectades en el SELECT, podem fer referència a les mateixes pel número d'ordre en què es
projecten.

La consulta anterior equivaldria a aquesta:

SELECT COGNOM, SALARI

FROM EMP

order by 2 DESC, 1

Clàusula WHERE
La clàusula WHERE s'afig darrere de la clàusula FROM amb el que ampliem la sintaxi de la
sentència SELECT:

select expressión|columna [, expressión|columna]...

from taula

[where <condició>];

La clàusula WHERE permet establir els criteris de selecció sobre les files generades per la clàusula
FROM.

Una condició és una expressió que s'avalua a vertader o fals per a cadascuna de les files. Per a
generar condicions podem utilitzar, entre altres, els següents operadors de comparació:
SQL. Consultes bàsiques

En el cas dels textos, les comparacions es


fan en ordre alfabètic. Només que és un
ordre alfabètic estricte. És a dir, l'ordre dels
caràcters en la taula de codis. Així la lletra Ñ
i les vocals accentuades mai queden ben
ordenades ja que figuren amb codis més
alts. Les majúscules figuren abans que les
minúscules (la lletra “Z” és menor que la
“a”). Pel que per a cadenes pràcticament
Es poden utilitzar tant per a comparar
només utilitzarem els comparadors
números com per a comparar textos i dates.
d'igualtat o diferent.

BETWEEN valor1 AND valor2

L'operador BETWEEN ens permet obtindre dades que es troben entre dos valors determinats
(incloent els dos extrems).

Es pot usar per a qualsevol tipus de dades encara que per a cadenes no té molt de sentit. La
utilitzarem només per a expressions numèriques i dates.

L'ordre dels valors és important: s'ha de posar primer el menor AND el major.

Exemple:

SELECT COGNOM, SALARI

FROM EMP

WHERE SALARI BETWEEN 100000 AND 200000

L'operador NOT BETWEEN ens permet obtindre els valors que són menors estrictes que el més
xicotet i majors estrictes que el més gran. Exemple:

SELECT COGNOM, SALARI

FROM EMP

WHERE SALARI NOT BETWEEN 100000 AND 200000

IN

L'operador IN ens permet obtindre files que tinguen en la columna algú del valors de la llista:

Exemple:
SQL. Consultes bàsiques

SELECT COGNOM

FROM EMP

WHERE OFICI IN (‘VENEDOR’, ‘EMPLEAT’);

Per descomptat, també podem utilitzar NOT IN. Prova-ho.

LIKE

L'operador LIKE s'usa sobretot amb textos i dates permet obtindre registres el valor dels quals
en un camp complisca una condició textual. LIKE utilitza una cadena que pot contindre aquests
símbols formant un patró:

Si no s'utilitzen comodins, equival a = (igual)

També podem utilitzar NOT LIKE. Prova-ho.

SELECT COGNOM

FROM EMP

WHERE COGNOM LIKE 'A%';

-- Selecció dels empleats que el seu COGNOM conté la lletra ‘R’ i acaba en ‘O

SELECT COGNOM

FROM EMP

WHERE COGNOM LIKE '%R%O';

IS NULL

La clàusula IS NULL retorna “vertader” si una expressió conté el valor nul, i “Fals” en cas contrari.
La clàusula IS NOT NULL retorna “vertader” si una expressió NO conté un nul, i “Fals” en cas
contrari.

Exemples:

-- Retorna les files de EMP NO valor en el camp CAP

SELECT *

FROM EMP

WHERE CAP IS NULL;


SQL. Consultes bàsiques

-- Retorna els empleats que SÍ QUE tenen cap

SELECT *

FROM EMP

WHERE CAP IS NOT NULL;

Operadors lògics
Podem realitzar condicions complexes a partir de condicions simples enllaçant-les amb
operadors lògics.

Aquest exemple seria equivalent al de BETWEEN

SELECT COGNOM, SALARI

FROM EMP

WHERE SALARI >=100000 AND SALARI <=200000

Aquest exemple seria equivalent al de NOT BETWEEN

SELECT COGNOM, SALARI

FROM EMP

WHERE SALARI <=100000 OR SALARI >=200000

MOLT IMPORTANT:

La major precedència (el que primer es 'resol') la té NOT.

AND té precedència sobre OR. La precedència es pot modificar amb parèntesi. És àlgebra
booleana (de Boole). Així, per la propietat distributiva, les expressions següents són equivalents:

Condición1 AND Condición2 OR Condición1 AND Condición3 =

= Condición1 AND (Condició2 OR Condición3)


SQL. Consultes bàsiques

Nota: Funcionen com la multiplicació (AND) respecte a la suma (OR)

Les taules de veritat són les següents:

AND OR

C1 C2 C1 AND C2 C1 C2 C1 OR C2
F F F F F F
F V F F V V
V F F V F V
V V V V V V

C1 C2 C3 C1 AND C2 OR C3 C1 AND (C2 OR C3)


F F F F F
F F V V F
F V F F F
F V V V F
V F F F F
V F V V V
V V F V V
V V V V V

Funcions d'Agregat (valors resum)


Ja hem vist com fer càlculs amb les dades d'una consulta i fins i tot com utilitzar funcions en
aqueixos càlculs. Però fins ara les funcions utilitzades només podien usar informació procedent
de dades de la mateixa fila. És a dir, no podíem sumar, per exemple, dades procedents de
diferents files. No obstant això, fer càlculs amb dades de diferents files és una necessitat molt
habitual.

Les funcions de càlcul amb grups són les encarregades de realitzar càlculs en vertical (usant
dades de diferents files) en lloc d'en horitzontal (usant dades procedents de la mateixa fila en la
qual veiem el resultat).

Quan fem una consulta de valors resumeixen el resultat és una ÚNICA FILA I NOMÉS PODEM
PROJECTAR FUNCIONS D'AGREGAT.

Són valors resultat d'un conjunt de files (les que passen el filtre del WHERE). No podem en
aqueixa mateixa consulta projectar valors individuals de files (encara que l'execució no d'error).
SQL. Consultes bàsiques

Si ho penseu, és lògic. Per exemple: en una mateixa pregunta (consulta) jo no puc preguntar
quants sou en classe i quin és el cognom. Si estic consultant valors d'un conjunt, no té sentit
consultar valors individuals.

Les funcions de càlculs de totals per a dades agrupades són les següents:

Funció Significat
Compta els elements (files) d'un grup que tenen valor (no tenen valor
NULL) en la expressió.
Si lo que volem es contar les files de un grup: Se sol indicar un asterisc
(COUNT(*))en lloc d'una expressió; el compte seria el mateix que si
fiquem una expressió que tinga valor per a totes les files del grup
COUNT(expressió)
Cal tindre en compte que aquesta funció ignora els valors nuls a l'hora
de comptar, per la qual cosa l'expressió COUNT(telefon) retorna la
quantitat de files que tenen valor en el camp telefon. No compta una
fila si té NULL en el camp o expressió corresponent.
Expressió pot ser de QUALSEVOL TIPUS
Suma els valors de l'expressió (sol valors numèrics)
SUM(expressió)
Expressió només pot ser de TIPUS NUMÈRIC
Calcula la mitjana aritmètica sobre l'expressió indicada (sol valors
AVG(expressió) numèrics)
Expressió només pot ser de TIPUS NUMÈRIC
Mínim valor que pren l'expressió indicada
MIN(expressió)
Expressió pot ser de QUALSEVOL TIPUS
Màxim valor que pren l'expressió indicada
MAX(expressió)
Expressió pot ser de QUALSEVOL TIPUS
Calcula la desviació estàndard (sol valors numèrics)
STDDEV(expressió)
Expressió només pot ser de TIPUS NUMÈRIC
Calcula la variància (sol valors numèrics)
VARIANCE(expressió)
Expressió només pot ser de TIPUS NUMÈRIC

Nosaltres només usarem COUNT, SUM, AVG, MIN i MAX.

Totes elles requereixen treballar amb grups (més endavant s'explica com agrupar files).

Si no s'indiquen grups, les funcions treballen sobre totes les files seleccionades (l'origen de les
quals són les taules del FROM i que compleixen les condicions del WHERE).
SQL. Consultes bàsiques

Una consulta és com una pregunta i ha de tindre sentit. Per exemple: no tindria sentit preguntar
quants alumnes hi ha en l'institut i el seu cognom; o bé preguntem per valors individuals dels
alumnes (de cadascú dels alumnes) o preguntem per valors resum de tot el grup d'alumnes.

Quan fem una consulta amb funcions d'agregat obtenim una sola fila per cada grup i només
és possible projectar funcions d'agregat o valors comuns a tot el grup (criteris d'agrupació).

Per exemple, si tenim aquesta taula:

Cod_treballador Nom Salari Telefon


1 Pedro 1200 630444444
2 Ana 1500 666666666
3 Raquel 1650 615156651
4 Sebastián 980 NULL
5 Marcs 1200 NULL
6 Mónica 1650 600000000
7 Raúl 1200 578964123
8 Mireia 980 635789412
9 Gorka 1650 NULL
10 Maia 1650 555555555

Suposant que són les dades de la taula treballadors, la consulta:

SELECT MAX(salari) FROM treballadors;

Retorna el valor 1650, que és el màxim salari. Mentre que la consulta:

SELECT COUNT(*), COUNT(salari) FROM treballadors;

Retornaria 10 i 10, ja que hi ha 10 treballadors en la taula i totes les files tenen valor en el atribut
salari.

SELECT COUNT(telefon) FROM treballadors;

Retornaria 7 ja que hi ha sols 7 files en la taula treballadors que tenen valor en el atribut telefon

Les consultes anteriors només tenen una columna però podem projectar les columnes que
desitgem. Per exemple:

SELECT MAX(salari), MIN(salari),COUNT(*),COUNT(DISTINCT salari)


FROM treballadors;
SQL. Consultes bàsiques

MAX(salari) MIN(salari) COUNT(*) COUNT(DISTINCT


salari)
1650 980 10 4

Maneig dels valors nuls

Les funcions de càlcul agrupat ignoren els valors NULL.

La funció COUNT, se sol usar amb asterisc (*) com a objecte de càlcul, la qual cosa fa que
compte files independentment del seu contingut. Si usem una expressió, com
COUNT(telefon), no comptaria les files que tinguen un telefon nul en elles.

Ús de DISTINCT en les funcions de totals

Les funcions anteriors admeten que anteposem el terme DISTINCT abans de l'expressió.
D'aqueix forma, només es tenen en compte els valors diferents. Per exemple:

SELECT COUNT(DISTINCT salari)

El resultat és 4 perquè només hi ha 4 salaris diferents. El mateix ocorre amb la resta de


funcions, DISTINCT fa que s'ignoren els valors repetits.

You might also like