dilluns, 20 de gener del 2014

SQL (2). DML . Select



DML (Data Modeling Language).

SELECT
Totes aquestes funcions s’apliquen sobre una columna excepte count que ho fa sobre totes les files.
  • WHERE
  • AND i OR
  • Expresions : > , < , <> , etc...

Tal com he dit, aquestes sentències permeten manipular les dades i no les taules on es guarden aquestes dades. La sentència principal d’aquest grup i la més potent de tot el llenguatge SQL és SELECT. Altres sentències d’aquest grup són INSERT, DELETE i UPDATE.


La sentència SELECT és una de les més potents de SQL i permet quasi realitza qualsevol tipus de consulta sobre les taules. L’ estructura bàsica és la següent:

La paraula SELECT seguida d’allò que volen obtenir de la taula. Aquesta part és obligatòria

La paraula FROM seguida de la taula o taules d’on es vol recuperar les dades. Aquesta part és obligatòria.

La paraula WHERE seguida d’un criteri de selecció o condició. Aquesta part és opcional

La paraula ORDER BY seguida del criteri d’ordenació. Aquesta part és opcional.

Així doncs la seva sintaxi és:

SELECT [COLUMNES] FROM [TAULA] WHERE [CONDICIO] ORDER BY [ORDRE]

Quan volem que ens torni totes les columnes podem usar l’asterisc en comptes d’escriure una a una les columnes de la taula.


Ara posaré un exemple. Suposem que tenim la següent taula o relació:

Llibre(codi_llibre, codi_autor, Títol, Preu, codi_editorial)

I volem que ens retorni totes les característiques del llibres que valen més de 20 euros. La sentència seria:

SELECT * FORM Llibre WHERE Preu> 20;



Tal com he dit amb la clàusula ORDER BY seguida de la columna per la qual volem ordenar podem tornar els resultats ordenats, ja que si no els resultats es retornen en qualsevol ordre i fins i tot de diferent manera en cada consulta. Per defecte, ordena de menor o menor, però si volem podem afegir la paraula reservada DESC i llavors la ordenació serà descendent.



Per exemple, ara volem la mateixa consulta anterior però ordenada per preu, i que primer ens mostri els més cars.



SELECT * FORM llibre Where Preu > 20 ORDER BY Preu DESC;



Si especifiquem quines columnes volem que ens retorni ens les retornarà amb el nom original de la taula. Però aquest nom també el podem canviar.



SELECT Preu AS Precio Where



També podem descartar els valors repetits mitjançant amb la paraula reservada DISTINCT.  Per exemple, volem saber de quins autors tenim llibres en la nostra base de dades



SELECT DISTINCT codi_autor FROM Llibre



Amb SQL podem fer consultes més sofisticades que les que he mostrat. Per fer-ho ens ajudarem dels predicats.

Predicats de comparació:  > =, < , >=, <=

Predicat NULL / NOT NULL

ANY, SOME, ALL

IN

BETWEEN

LIKE



El llenguatge SQL proporciona una sèrie de funcions d’agregació que permet efectuar diverses operacions amb les dades d’una base de dades. Les principals són:

  COUNT: ens dona el número total de files seleccionades

  MIN: ens dóna el valor mínim d’una columna.

  MAX: ens dóna el valor màxim d’una columna.

  AVG: calcula el valor mitjà d’una columna

  SUM: suma els valors d’una columna

COUNT(*): compta totes les files

COUNT(DISTINCT columna):només compta els valors si no són repetits

COUNT(columna): no compta els valors nuls.



També en una sentència podem fer grups de files:


  • La clàusula  GROUP BY: permet agrupar files segons les columnes indicades en aquesta clàusula
  • La clàusula HAVING especifica condicions de cerca per els grups de files, fa la mateixa funció que WHERE però dins de l’agrupació.

Resum
SELECT : principal sentència SQL. Permet recuperar dades.

FROM : de quina taula volem recuperar.

Selecció de les columnes :

* : l’asteric torna totes les columnes

Columna1, columna2, columna n : columnes separades per comes.

WHERE: quines condicions


Estructura:

SELECT nom camps FROM  nom taula WHERE condició

Exemples
SELECT * FROM Productes

      Torna totes les columnes de la taula Productes

SELECT Preu, Quantitat FROM Productes

      Torna les columnes Preu i Quantitat de la taula Productes

SELECT Nom FROM Productes WHERE Preu > 100

     Torna el nom del producte, de la taula productes  que el seu Preu sigui superior a 100

Condicions
Estructura:

SELECT nom camps FROM  nom taula WHERE condició AND condició

SELECT nom camps FROM  nom taula WHERE condició OR condició

SELECT Nom FROM Productes WHERE Preu > 100 Or Tipus=“Memòria”

        Torna el nom del producte, de la taula productes  que el seu Preu sigui superior a 100 o que sigui de tipus Memòria. 

Consultes simples
SELECT Nom  “Nom del Producte” FROM Productes WHERE Preu > 100 Or Tipus=“Memòria”

      Torna el nom del producte en una nova columna que es dius “Nom del    Producte”, de la taula productes  que el seu Preu sigui superior a 100 o que sigui de tipus Memòria.

Like / NOT Like 
L’operador [NOT] LIKE serveix per comparar una cadena (part esquerra de l’operador) amb una cadena patró (part dreta de l’operador) i pot contenir els següents caràcters especials:

% per indicar qualsevol cadena de zero o més caràcters.

_ per indicar qualsevol caràcter
LIKE 'Torres' Compara amb la cadena ‘Torres’.
LIKE 'Torr%' Compara amb qualsevol cadena iniciada per ‘Torr’.
LIKE '%S%' Compara amb tota cadena que contingui una ‘S’.
LIKE '_o%' Compara amb qualsevol cadena que tingui una ‘o’per segon caràcter.
LIKE '__' Compara amb qualsevol cadena de dos caràcters. 
BETWEEN /IN /NOT

Conjunt d’operadors de comparació:
[NOT] BETWEEN <valor_1> AND <valor_2>
que permet efectuar la comparació entre dos valors.
[NOT] IN (llista_valors)
que permet comparar amb una llista de valors.
IS [NOT] NULL
que permet reconèixer si estem davant d’un valor NULL. 
ANY/ALL
<comparador genèric> ANY (llista_valors_de_SELECT)
que permet efectuar una comparació genèrica (=, <>, !=, >,<, >=, <=) amb qualsevol dels valors de la dreta.


<comparador genèric> ALL (llista_valors_de_SELECT)
que permet efectuar una comparació genèrica (=, <>, !=, >,<, >=, <=) amb tots els valors de la dreta.


Observem que:
 =ANY és equivalent a IN
!=ALL és equivalent a NOT IN

COUNT/DISTINCT


COUNT(*)--> compta registres.*  --> ho compta tot
COUNT (id_producte) (sobre la taula productes)compta quants productes hi ha en la taula.
DISTINCT--> elimina repetits. Més lent. Internament executa primer l’ordre ORDER BY.
select nom from productes;
     Torna tots els noms de productes.
select distinct nom from productes;
     Torna tots els noms de productes sense repetits 


ORDER BY
Permet ordenar els resultats

ASC -->Ascendent (per defecte)

DESC --> Descent

Estructura:

SELECT columna1, columna2 FROM  nom taula WHERE condició ORDER BY columna1 ASC/DESC, columna2 ASC/DESC
select codi_producte, titol, preu from productes
order by preu, titol;
     Mostrar els codis, títols i preus dels productes ordenats de forma ascendent pel seu preu i ordenatspel títol quan tinguin el mateix preu.
select codi_producte, titol from productes
order by length(titol) DESC;
     Mostrar el codi i el títol dels productes ordenats de forma descendent per la longitud del seu títol.

FUNCIONS INCORPORADES
AVG --> mitjana
SELECT AVG(Preu) “Preu mig” FROM PRODUCTES
    AVG (preu) (sobre la taula productes) retorna el preu mitjà de tots els productes seleccionats que tenen preu (els nuls s’ignoren). Retorna NUL si no hi ha capregistre seleccionat. 


MAX() --> valor màxim
SELECT MAX(preu) "Preu màxim“ FROM Productes
Retorna el preu més alt.
MIN() --> valor mínim
SUM() --> suma valors 
LENGHT (cad)--> longitut d’una paraula 
LENGTH("Diumenge") retorna 8 
SELECT nom FROM PRODUCTES WHERE Length(nom) > 10
TRIM() -->elimina els espais blancs
TRIM(' Hola ') retorna 'Hola‘ 
SELECT TRIM(Nom) FROM PRODUCTES
UCASE(), --> converteix a majúscules.
UCASE ('Avui') retorna 'AVUI‘ 
SELECT UCASE(Nom) FROM PRODUCTES

Cap comentari:

Publica un comentari a l'entrada