Consultes Postgres: diferència entre les revisions

De FFAWiki
 
(Hi ha 151 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
===[[Postgres]]===
:Composició d'una consulta:
:Composició d'una consulta:


Línia 4: Línia 6:


__TOC__
__TOC__
==Links de descarga de les bases de dades en les que es fan els exemples==


[ftp://mayola.ddns.net/wiki/sanitat.sql Descargar base de dades sanitat]
[ftp://mayola.ddns.net/wiki/sanitat.sql Descargar base de dades sanitat]
[ftp://mayola.ddns.net/wiki/sanitat.dump Descargar base de dades sanitat2 (normalitzada)]
[ftp://mayola.ddns.net/wiki/videoclub.sql Descargar base de dades videoclub]
[ftp://mayola.ddns.net/wiki/toctag.sql Descargar base de dades toctag (posa sql pero es un dump)]
[ftp://mayola.ddns.net/wiki/toctag.dump Descargar base de dades toctag (Amb mes dades)]
[ftp://mayola.ddns.net/wiki/empresa.sql Descargar base de dades empresa]
[[Importar Base de Dades]]
==[[SELECT]]==
==[[SELECT]]==


:Definició:
:Definició:


::Camps que volem que ens tregui per pantalla
::Mostra els camps que volem que ens tregui per pantalla, s'utilitza per seleccionar dades d'una base de dades. Les dades retornades s’emmagatzemen en una taula de resultats, anomenada conjunt de resultats o result-set en anlges.


:Exemple: (Base de dades sanitat)
:Exemple: (Base de dades sanitat)


::SELECT count(especialitat) FROM doctor WHERE especialitat='Pediatria';  
::SELECT * FROM doctor;  


::Conta totes aquelles especialitats dels doctors les quals son Pediatria.
::En aquest cas no tenim filtre en el SELECT per lo que mostra tots els camps de la taula doctor


'''Eines que es poden utilitzar:'''
'''Eines que es poden utilitzar:'''
Línia 24: Línia 41:
:Definició:
:Definició:


::Compta les files que s’imprimeixen
::Compta les files que s’imprimeixen, en general la funció COUNT() retorna el nombre de files que coincideix amb un criteri especificat.


:Exemple:
:Exemple: (Base de dades sanitat)
 
::SELECT count(especialitat) FROM doctor WHERE especialitat='Pediatria';


::Falta exemple
::Conta totes aquelles especialitats dels doctors les quals son Pediatria.




Línia 37: Línia 56:
::Agrupa el camp que s’especifiqui traient els que estan repetits (si s’han de mostrar més d’un camp no es molt recomanat, millor GROUP BY)
::Agrupa el camp que s’especifiqui traient els que estan repetits (si s’han de mostrar més d’un camp no es molt recomanat, millor GROUP BY)


:Exemple:
:Exemple: (Base de dades sanitat)
 
::SELECT DISTINCT(especialitat) FROM doctor;


::Falta exemple
::Mostra les especialitats de la taula doctors que son diferents (Per dir d'alguna manera les agrupa).




Línia 46: Línia 67:
:Definició:
:Definició:


::Falta definició
::Extreu de tot aquell camp o valor de tipus (datetime, date, time...).
 
:'''Maneres de fer-lo servir: '''
 
::date_part('field', source)
 
::field = microseconds | milliseconds | second | minute | hour | day | week | month | quarter (Quart d'un any) | year | decade (Decada, cada 10) | century (secle, cada 100) | millennium (mileni, cada 1000)


:Exemple:
:::SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); -> Retorna: 16 (Quan no li fiques un camp de la base de dades s'ha d'especificar que és el valor que li poses en aquest cas un temps)
 
:::SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); -> Retorna: 4 (Quan no li fiques un camp de la base de dades s'ha d'especificar que és el valor que li poses en aquest cas un interval)
 
:Exemple: (Base de dades empresa)
 
::SELECT DATE_PART('YEAR',com_data) FROM comanda; -> Retorna: tots els anys de la columne com_data de la taula comanda (En aquest cas s'utilitzen dades d'una taula)
 
:'''Expressions:'''
 
::CURRENT_DATE → Data actual
 
::current_time → Hora actual


::Falta exemple
::current_timestamp → Data i hora actual


::AGE() → Treu un interval amb l'edat, despres amb el DATE_PART('YEAR', AGE(nom_camp)), pots treure els anys de l'edat (si el camp no esta definit com a data hs de posar DATE_PART('YEAR', AGE('8/7/2002')::date)).


====COALESCE====
====COALESCE====
Línia 57: Línia 97:
:Definició:
:Definició:


::Mostra el primer valor de la llista separats per coma que no sigui null
::Mostra el primer valor de la llista (COALESCE'''(comissio,0)''', el que esta en nagreta) es la llista separats per coma que no sigui null


:Exemple:
:Exemple: (base de dades empresa)
 
[[Fitxer:Coalesce-ex.jpeg|esquerra|600px|]]
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>


::Falta exemple
::En aquest cas volem sumar el salari mes la comisio, pero no tots tenen comisio (son camps nulls) per tan utilitzarem COALESCE que el que fa es agafar el pimer valor que no sigui null de la llista COALESCE'''(comissio,0)''', el que esta en nagreta es la llista.


:::SELECT cognom,salari+COALESCE(comissio,0) as sou FROM emp;


====UPPER()====
====UPPER()====
Línia 72: Línia 130:
:Exemple:
:Exemple:


::Falta exemple
::Exemple amb un text qualsevol:
 
:::SELECT UPPER('hola, estas a ffawiki') as TEXT; -> Resultat: HOLA, ESTAS A FFAWIKI
 
::Exemple amb un camp d'una taula: (base de dades empresa)


:::SELECT UPPER(cognom) as COGNOM FROM emp;


====LOWER()====
====LOWER()====
Línia 83: Línia 146:
:Exemple:
:Exemple:


::Falta exemple
::Exemple amb un text qualsevol:
 
:::SELECT UPPER('HOLA, ESTAS A FFAWIKI') as TEXT; -> Resultat: hola, estas a ffawiki
 
::Exemple amb un camp d'una taula: (base de dades empresa)


:::SELECT LOWER(cognom) as COGNOM FROM emp;


====CASE (CASE camp1 WHEN valor1 THEN mostra1 WHEN valor2 THEN mostra2 END)====
====CASE (CASE camp1 WHEN valor1 THEN mostra1 WHEN valor2 THEN mostra2 ELSE mostra3 END)====


:Definició:
:Definició:


::Si cambia un valor del camp especificat si surt entre els valors especificats (when valor) per el que se li digui (then valor) , per acabar s’ha de posar END i tancar parèntesis
::Si cambia un valor del camp especificat si surt entre els valors especificats (when valor) per el que se li digui (then valor) , per acabar s’ha de posar END i tancar parèntesis. '''L'ELSE no es obligatori'''
 
:Exemple: (Base de dades videoclub)


:Exemple:
::SELECT codipeli,titol,(case codigenere when 1 then 'Brus Lee' when 2 then 'Stalone' when 3 then 'Al pacino' END) from pelicula;
 
::: Enves de dirte un numero et diu el nom d'un actor


::Falta exemple
[[Fitxer:Case-ex.jpeg|esquerra|1200px|]]


<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>


====SUM()====
====SUM()====
Línia 101: Línia 182:
:Definició:
:Definició:


::Suma tots els camps o valors entre parèntesis separats per comes
::Suma tots els camps o valors entre parèntesis separats per comes.


:Exemple:
:Exemple: (Base de dades Sanitat)


::Falta exemple
::Sumarem els llits que te cada hospital


:::SELECT hospital_cod,sum(qtat_llits) as llits FROM sala GROUP BY hospital_cod;


====AVG()====
====AVG()====
Línia 114: Línia 196:
::Fa la mitjana dels camps o valors entre parèntesis separats per comes
::Fa la mitjana dels camps o valors entre parèntesis separats per comes


:Exemple:
:Exemple: (Base de dades empresa)


::Falta exemple
::Fa la mitjana dle que cobren tots els empleats


:::SELECT ofici,AVG(salari) FROM emp GROUP BY ofici;


====AS====
====AS====
Línia 125: Línia 208:
::A l’hora de mostrar camps que tinguin alguna funció d’agregació si es posa (camp as alies) quan mostri les files el nom de la fila serà l’alies especificat
::A l’hora de mostrar camps que tinguin alguna funció d’agregació si es posa (camp as alies) quan mostri les files el nom de la fila serà l’alies especificat


:Exemple:
:Exemple: (Base de dades empresa)
 
::Posem un alies (mitjana_sou) a la mitjana dels salaris


::Falta exemple
:::SELECT ofici,AVG(salari) AS mitjana_sou FROM emp GROUP BY ofici;


==[[FROM]]==
==[[FROM]]==
Línia 135: Línia 220:
::Taula a on bucar els camps
::Taula a on bucar els camps


:Exemple:
:Exemple: (Base de dades empresa)
 
::Mostra els cognoms de la taula emp.
 
:::SELECT cognom FROM emp;
 
==[[JOIN]]==
 
:Definició:
 
::Ajunta taules de diferentes maneres: Left Join, Left Outer Join, Inner Join, Right Join, Right Outer Join, Full Join, Full Outer Join.
 
:Exemple: (Base de dades sanitat)
 
::Mostra per els noms de l'hospital els nomes de totes les seves sales
 
:::SELECT hospital.nom,sala.nom FROM sala INNER JOIN hospital ON sala.hospital_cod=hospital.hospital_cod;
 
[[Fitxer:Join-ex.jpeg|esquerra|800px|]]
 
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
:Imatge de Tots els Joins
 
[[Fitxer:Join.png|esquerra|600px|]]
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
 
===Inner Join===
 
:Definició:
 
::Uneix dos (pots fer de dos en dos) taules pels camps que tenen iguals (tants iguals com vulguis), i nomes s'utilitzen els tu especifiques en el SELECT.
 
:Exemple: (Base de dades toctag)
 
::Mostra el nom del cicle (c) i el nom de la família professional (f) on la id de la família coincideixi amb la id de la manilia de cicle
 
:::SELECT c.descripcio,f.descripcio FROM cicle_formatiu c INNER JOIN familia_professional f ON c.familia_id=f.familia_id;
 
[[Fitxer:Inner-Join-ex.jpeg|esquerra|800px|]]
 
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
====NATURAL Join====
 
:Definició:
 
::Substitueix l'ON del INER JOIN fen la compraració per si sol dels camps que hi han en comu (perque son iguals).
 
:Exemple: (Base de dades toctag)
 
::Mostra la relació entre els alumnes i les axpulsions.
 
:::SELECT * FROM alumnes NATURAL JOIN expulsions;
 
[[Fitxer:NATURAL-join-ex.jpeg|esquerra|800px|]]
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
===Right Join===
 
:Definició:
 
::Agafa la taula de la dreta i els camps en comú
 
:Exemple: (Base de dades toctag)
 
::Mostra el titol de la pelicula i si esta llogada o no.
 
:::SELECT pelicula.titol,(CASE count(prestec.codipeli) WHEN 0 THEN 'No Llogada' ELSE 'Llogada' END) as prestec FROM prestec RIGHT JOIN pelicula ON prestec.codipeli=pelicula.codipeli GROUP BY pelicula.titol;
 
[[Fitxer:Right-Join-ex.jpeg|esquerra|800px|]]
 
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
===Left Join===
 
:Definició:
 
::Agafa la taula de la esquerra i els camps en comú
 
:Exemple: (Base de dades toctag)
 
::Mostra el titol de la pelicula i si esta llogada o no.
 
:::SELECT titol FROM pelicula p LEFT JOIN prestec t ON p.codipeli=t.codipeli WHERE t.codipeli IS NULL;
 
[[Fitxer:Left-Join-is-NULL-ex.jpeg|esquerra|800px|]]
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
===Right Join is NULL===
 
:Definició:
 
::Agafa la taula de la dreta pero no els camps en comú
 
:Exemple: (Base de dades toctag)
 
::Mostra les pelicules no llogades
 
::: SELECT titol FROM prestec t RIGHT JOIN pelicula p ON p.codipeli=t.codipeli WHERE t.codipeli IS NULL;
 
[[Fitxer:Right-Join-is-NULL-ex.jpeg|esquerra|800px|]]
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
===Left Join is NULL===
 
:Definició:
 
::Agafa la taula de la esquerra pero no els camps en comú
 
:Exemple: (Base de dades toctag)
 
::Mostra les pelicules no llogades
 
:::SELECT titol FROM pelicula p LEFT JOIN prestec t ON p.codipeli=t.codipeli WHERE t.codipeli IS NULL;
 
[[Fitxer:Left-Join-is-NULL-ex.jpeg|esquerra|800px|]]
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
===Full Join===
 
:Definició:
 
::Agafa totes les taules
 
:Exemple: (Base de dades toctag)
 
::Mostra les dos taules, si esta a les dos et fa una linea amb les dades de les dos taules, i si esta només en una mostra una linea amb les dades d'aquella unica taula en la qual esta. (El LIMIT es per que no surti una gran llista)
 
:::SELECT * FROM expulsions ex FULL JOIN entrades_tard et ON ex.dni=et.dni LIMIT 15;
 
[[Fitxer:Full-Join-ex.jpeg|esquerra|800px|]]
 


::Falta posar exemple
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>


==[[WHERE]]==
==[[WHERE]]==
Línia 145: Línia 523:
::Condicions que han de complir les files per a que les mostri per pantalla
::Condicions que han de complir les files per a que les mostri per pantalla


:Exemple:
:Exemple: (Base de dades empresa)
 
::Mostra els cognoms i el salari de aquella gent que el seu salari es superior a 200.000


::Falta posar exemple
:::SELECT cognom,salari FROM emp WHERE salari>200000;


'''Eines que es poden utilitzar:'''
'''Eines que es poden utilitzar:'''
Línia 157: Línia 537:
::Es pot utilitzar una consulta per tal de fer un filtre o condicio amb dades d'alguna altre taula relacionada o de la propia
::Es pot utilitzar una consulta per tal de fer un filtre o condicio amb dades d'alguna altre taula relacionada o de la propia


:Exemple:
:Exemple:  
 
::'''Subconsulta taula relacionada''' (Base de dades toctag)
 
:::Mostra tots aquells dni i noms d'alumnes de la taula algumnes que coincideixen amb els dni de la taula d'expulsions.
 
::::SELECT dni,alumne FROM alumnes WHERE dni IN(SELECT DISTINCT(dni) FROM expulsions);
 
::'''Subconsulta en la mateixa taula''' (Base de dades empresa)
 
:::Mostra els treballadors que el seu numero d'empleat de la taula emp coincideix amb la llista de numeros de empleats que son caps.


::Falta exemple
::::SELECT cognom FROM emp WHERE emp_no IN(SELECT distinct(cap) FROM emp);


====AND====
====AND====
Línia 165: Línia 555:
:Definició:
:Definició:


::El seu us es unir varies conducions o filtres
::El seu us es unir varies conducions o filtres.


:Exemple:
:Exemple: (Base de dades empresa)
 
::Mostra aquells salaris que son mes grans de 200.000 i mes petits a 300.000


::Falta exemple
:::SELECT cognom,salari FROM emp WHERE salari>200000 AND salari<300000;


====IN/NOT IN====
====IN/NOT IN====
Línia 175: Línia 567:
:Definició:
:Definició:


::Falta Descripció
::Comproba si esta dins de la llista que se li especifiqui entre parèntesi IN'''()''', on esta la nagreta es on va la llista.
 
:Exemple: (Base de dades toctag)


:Exemple:
::'''IN'''
 
:::'''Exemple amb subcunsulta'''
 
::::Mostra tots aquells dni i noms d'alumnes de la taula algumnes que coincideixen amb els dni de la taula d'expulsions.
 
:::::SELECT dni,alumne FROM alumnes WHERE dni IN(SELECT DISTINCT(dni) FROM expulsions);
 
 
:::'''Exemple amb la mateixa taula'''
 
::::Mostra tots aquells treballadors que tenen la categoria empleat i venedor
 
:::::SELECT cognom,ofici FROM emp WHERE ofici IN('empleat','venedor');
 
::'''NOT IN'''
 
:::'''Exemple amb la mateixa taula'''
 
::::Mostra tots aquells treballadors que no tenen la categoria empleat i venedor


::Falta exemple
:::::SELECT cognom,ofici FROM emp WHERE ofici NOT IN('empleat','venedor');


====EXISTS/NOT EXISTS====
====EXISTS/NOT EXISTS====
Línia 185: Línia 598:
:Definició:
:Definició:


::Falta Descripció
::Fa una subconsulta i l'exists segons si troba algo o no, torna true o false i en el cas que dongui true imprimeix. (S'utilitza en subconsultes)


:Exemple:
:Exemple:


::Falta exemple
::Mostra totes les columnes de la taula expulsions, pero nomes mostra les dades quan el dni de la taula alumnes el qual esta fent quart de l'ESO i si auqest mateix dni coincideix amb el dni de la taula d'expulsions.
 
:::SELECT * FROM expulsions WHERE EXISTS (SELECT dni FROM alumnes WHERE estudis like 'ESO4%' and dni=expulsions.dni);


====Operadors====
====Operadors====
Línia 195: Línia 610:
:Definició:
:Definició:


::Falta Descripció
::És una funció que realitza algun tipus d'operació en un nombre, variable o funció


===== + =====
===== + =====
Línia 203: Línia 618:
:::Definició:
:::Definició:


::::Falta Descripció
::::suma
 
:::Exemple:
 
::::Falta exemple


===== - =====
===== - =====
Línia 215: Línia 626:
:::Definició:
:::Definició:


::::Falta Descripció
::::resta
 
:::Exemple:
 
::::Falta exemple
 
====Comparadors====
 
:Definició:
 
::Falta Descripció
 
:Definició:
 
::Falta Descripció


===== = =====
===== = =====
Línia 237: Línia 634:
:::Definició:
:::Definició:


::::Falta Descripció
::::igual
 
:::Exemple:
 
::::Falta exemple


===== < =====
===== < =====
Línia 249: Línia 642:
:::Definició:
:::Definició:


::::Falta Descripció
::::Més petit que
 
:::Exemple:
 
::::Falta exemple


===== > =====
===== > =====
Línia 261: Línia 650:
:::Definició:
:::Definició:


::::Falta Descripció
::::Més gran que
 
:::Exemple:
 
::::Falta exemple


===== != =====
===== != =====
Línia 273: Línia 658:
:::Definició:
:::Definició:


::::Falta Descripció
::::No igual
 
:::Exemple:
 
::::Falta exemple


===== LIKE / NOT LIKE =====
===== LIKE / NOT LIKE =====
Línia 285: Línia 666:
:::Definició:
:::Definició:


::::Falta Descripció
::::Compara un camp o un valor amb un patro. (no va amb integers)


:::Exemple:
:::Exemple:


::::Falta exemple
::::Mostra els alumnes que estan cursant l'ESO.
 
:::::SELECT dni,alumne FROM alumnes WHERE estudis LIKE 'ESO%';


====== Eines: _ / % ======
====== Eines: _ / % ======
Línia 303: Línia 686:
:Definició:
:Definició:


::Falta Descripció
::L'ordre retorna true si tots els valors de la subqueria compleixen la condició. Necessita sempre un comarador devant.
 
:Exemple: (Base de dades empresa)


:Exemple:
::Mostra cognom d'aquella persona que te el salari mes alt de tots.


::Falta exemple
:::SELECT cognom FROM EMP WHERE salari >= ALL(SELECT salari FROM emp);


====ANY/SOME====
====ANY/SOME====
Línia 313: Línia 698:
:Definició:
:Definició:


::Falta Descripció
::ANY: qualsevol
::SOME: algun
 
::Si (qualsevol/algun) coincideix amb la llista s'imprimeix. ANY'''()''' SOME'''()''', en la nagreta es on es posa la llista.


:Exemple:
:Exemple:


::Falta exemple
::Mostra els alumnes amb estudis DAM
 
:::SELECT alumne,estudis FROM alumnes WHERE estudis = SOME(SELECT estudis FROM alumnes WHERE estudis like 'DAM%');
 
::::::SELECT alumne,estudis FROM alumnes WHERE estudis = ANY(SELECT estudis FROM alumnes WHERE estudis like 'DAM%');


==[[GROUP BY]]==
==[[GROUP BY]]==
Línia 323: Línia 715:
:Definició:
:Definició:


::Agrupar resultat del camps que tinguin un un valor igual
::Agrupa els valors que coincideixen amb la mateixa columna.
 
:Exemple: (Base de dades sanitat)


:Exemple:
::Agrupa els codis de l'hopital iguals i conta quantes sales hi ha per hospital.


::Falta exemple
:::SELECT hospital_cod,count(sala_cod) FROM sala GROUP BY hospital_cod;


==[[HAVING]]==
==[[HAVING]]==
Línia 333: Línia 727:
:Definició:
:Definició:


::Condició que s’aplica un cop agrupats els camps
::Condició que s’aplica un cop agrupats els camps.


:Exemple:
:Exemple: (Base de dades sanitat)
 
::Agrupa els codis de l'hopital iguals i conta quantes sales hi ha per hospital pero nomes mostra si hi ha mes de 2 sales.


::Falta exemple
:::SELECT hospital_cod,count(*) FROM sala GROUP BY hospital_cod HAVING count(*)>2;


==[[ORDER BY]]==
==[[ORDER BY]]==
Línia 343: Línia 739:
:Definició:
:Definició:


::Mostra les files ordenades per els camps que s’hi posin
::Mostra les files ordenades per els camps que s’hi posin.
 
:Exemple: (Base de dades sanitat)


:Exemple:
::Ordena els codis hospital


::Falta exemple
:::SELECT hospital_cod,sala_cod FROM sala ORDER BY hospital_cod;


===DESC===
===DESC===
Línia 353: Línia 751:
:Definició:
:Definició:


::Fa que l’ordre sigui descendent
::Fa que l’ordre sigui descendent.


:Exemple:
:Exemple:


::Falta exemple
::Ordena de manera descendent els codis hospital
 
:::SELECT hospital_cod,sala_cod FROM sala ORDER BY hospital_cod DESC;


==[[LIMIT]]==
==[[LIMIT]]==
Línia 363: Línia 763:
:Definició:
:Definició:


::Mostra les files fins a arribar al número de files que hi especifiquem
::Mostra les files fins a arribar al número de files que hi especifiquem. Es sol fer servir amb l'ORDER BY
 
:Exemple: (Base de dades sanitat)
 
::SELECT hospital_cod,count(*) FROM sala GROUP BY hospital_cod ORDER BY hospital_cod DESC LIMIT 1;
 
:Captura sense '''LIMIT'''
 
[[Fitxer:Sense-limit-ex.jpeg|esquerra|900px|]]
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
:Captura amb '''LIMIT'''
 
[[Fitxer:Limit-ex.jpeg|esquerra|900px|]]
 
<br>
<br>
<br>
<br>
<br>
 
==[[UNION]]==
 
:Definició:
 
::L'UNIN l'ajunta com el FULL JOIN pero no son el mateix (fa falta el mateix camp a les dos taules)
 
:Exemple: (Base de dades toctag)
 
::Mostra els alumnes de batxillerat i els alumnes de ESO
 
:::SELECT alumne,estudis FROM alumnes WHERE estudis like 'ESO%' UNION SELECT alumne,estudis FROM alumnes WHERE estudis like 'BAT%';
 
[[Fitxer:UNION-ex.jpeg|esquerra|800px|]]
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
==[[INTERSECT]]==
 
:Definició:
 
::L'INTERSECT l'ajunta com el INNER JOIN pero no son el mateix (fa falta el mateix camp a les dos taules)
 
:Exemple: (Base de dades toctag)
 
::Mostra aquelles persones que han arribat tard i tambe han sigut expulsades.
 
:::SELECT dni FROM entrades_tard INTERSECT SELECT dni FROM expulsions;
 
[[Fitxer:INTERSECT-ex.jpeg|esquerra|800px|]]
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
 
==[[EXCEPT]]==
 
:Definició:
 
::Agafa la primera consulta i li treu a la segona consulta (Una resta)
 
:Exemple: (Base de dades toctag)
 
::Agafa totes els expulsats i treu els que han arribat tard.
 
:::SELECT dni FROM expulsions EXCEPT SELECT dni from entrades_tard;
 
[[Fitxer:EXCEPT-ex.jpeg|esquerra|800px|]]


:Exemple:


::Falta exemple
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>

Revisió de 16:35, 15 març 2021

Postgres

Composició d'una consulta:
SELECT camp1/expressió, camp2/expressió, camp3/expressió, ..,campn/expressió FROM taula WHERE condició_cerca GROUP BY camp1, camp2 , ..., campn HAVING condicio_sobre_grups ORDER BY camp1 [ASC|DESC], camp2 [ASC|DESC], ..., campm [ASC|DESC] LIMIT n

Links de descarga de les bases de dades en les que es fan els exemples

Descargar base de dades sanitat

Descargar base de dades sanitat2 (normalitzada)

Descargar base de dades videoclub

Descargar base de dades toctag (posa sql pero es un dump)

Descargar base de dades toctag (Amb mes dades)

Descargar base de dades empresa

Importar Base de Dades

SELECT

Definició:
Mostra els camps que volem que ens tregui per pantalla, s'utilitza per seleccionar dades d'una base de dades. Les dades retornades s’emmagatzemen en una taula de resultats, anomenada conjunt de resultats o result-set en anlges.
Exemple: (Base de dades sanitat)
SELECT * FROM doctor;
En aquest cas no tenim filtre en el SELECT per lo que mostra tots els camps de la taula doctor

Eines que es poden utilitzar:

COUNT(*)

Definició:
Compta les files que s’imprimeixen, en general la funció COUNT() retorna el nombre de files que coincideix amb un criteri especificat.
Exemple: (Base de dades sanitat)
SELECT count(especialitat) FROM doctor WHERE especialitat='Pediatria';
Conta totes aquelles especialitats dels doctors les quals son Pediatria.


DISTINCT

Definició:
Agrupa el camp que s’especifiqui traient els que estan repetits (si s’han de mostrar més d’un camp no es molt recomanat, millor GROUP BY)
Exemple: (Base de dades sanitat)
SELECT DISTINCT(especialitat) FROM doctor;
Mostra les especialitats de la taula doctors que son diferents (Per dir d'alguna manera les agrupa).


DATE_PART(,)

Definició:
Extreu de tot aquell camp o valor de tipus (datetime, date, time...).
Maneres de fer-lo servir:
date_part('field', source)
field = microseconds | milliseconds | second | minute | hour | day | week | month | quarter (Quart d'un any) | year | decade (Decada, cada 10) | century (secle, cada 100) | millennium (mileni, cada 1000)
SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); -> Retorna: 16 (Quan no li fiques un camp de la base de dades s'ha d'especificar que és el valor que li poses en aquest cas un temps)
SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); -> Retorna: 4 (Quan no li fiques un camp de la base de dades s'ha d'especificar que és el valor que li poses en aquest cas un interval)
Exemple: (Base de dades empresa)
SELECT DATE_PART('YEAR',com_data) FROM comanda; -> Retorna: tots els anys de la columne com_data de la taula comanda (En aquest cas s'utilitzen dades d'una taula)
Expressions:
CURRENT_DATE → Data actual
current_time → Hora actual
current_timestamp → Data i hora actual
AGE() → Treu un interval amb l'edat, despres amb el DATE_PART('YEAR', AGE(nom_camp)), pots treure els anys de l'edat (si el camp no esta definit com a data hs de posar DATE_PART('YEAR', AGE('8/7/2002')::date)).

COALESCE

Definició:
Mostra el primer valor de la llista (COALESCE(comissio,0), el que esta en nagreta) es la llista separats per coma que no sigui null
Exemple: (base de dades empresa)
Coalesce-ex.jpeg















En aquest cas volem sumar el salari mes la comisio, pero no tots tenen comisio (son camps nulls) per tan utilitzarem COALESCE que el que fa es agafar el pimer valor que no sigui null de la llista COALESCE(comissio,0), el que esta en nagreta es la llista.
SELECT cognom,salari+COALESCE(comissio,0) as sou FROM emp;

UPPER()

Definició:
Passa tot el text entre parèntesis a majúscules, també poden ser camps d’una taula
Exemple:
Exemple amb un text qualsevol:
SELECT UPPER('hola, estas a ffawiki') as TEXT; -> Resultat: HOLA, ESTAS A FFAWIKI
Exemple amb un camp d'una taula: (base de dades empresa)
SELECT UPPER(cognom) as COGNOM FROM emp;

LOWER()

Definició:
Passa tot el text entre parèntesis a minúscules, també poden ser camps d’una taula
Exemple:
Exemple amb un text qualsevol:
SELECT UPPER('HOLA, ESTAS A FFAWIKI') as TEXT; -> Resultat: hola, estas a ffawiki
Exemple amb un camp d'una taula: (base de dades empresa)
SELECT LOWER(cognom) as COGNOM FROM emp;

CASE (CASE camp1 WHEN valor1 THEN mostra1 WHEN valor2 THEN mostra2 ELSE mostra3 END)

Definició:
Si cambia un valor del camp especificat si surt entre els valors especificats (when valor) per el que se li digui (then valor) , per acabar s’ha de posar END i tancar parèntesis. L'ELSE no es obligatori
Exemple: (Base de dades videoclub)
SELECT codipeli,titol,(case codigenere when 1 then 'Brus Lee' when 2 then 'Stalone' when 3 then 'Al pacino' END) from pelicula;
Enves de dirte un numero et diu el nom d'un actor
Case-ex.jpeg










SUM()

Definició:
Suma tots els camps o valors entre parèntesis separats per comes.
Exemple: (Base de dades Sanitat)
Sumarem els llits que te cada hospital
SELECT hospital_cod,sum(qtat_llits) as llits FROM sala GROUP BY hospital_cod;

AVG()

Definició:
Fa la mitjana dels camps o valors entre parèntesis separats per comes
Exemple: (Base de dades empresa)
Fa la mitjana dle que cobren tots els empleats
SELECT ofici,AVG(salari) FROM emp GROUP BY ofici;

AS

Definició:
A l’hora de mostrar camps que tinguin alguna funció d’agregació si es posa (camp as alies) quan mostri les files el nom de la fila serà l’alies especificat
Exemple: (Base de dades empresa)
Posem un alies (mitjana_sou) a la mitjana dels salaris
SELECT ofici,AVG(salari) AS mitjana_sou FROM emp GROUP BY ofici;

FROM

Definició:
Taula a on bucar els camps
Exemple: (Base de dades empresa)
Mostra els cognoms de la taula emp.
SELECT cognom FROM emp;

JOIN

Definició:
Ajunta taules de diferentes maneres: Left Join, Left Outer Join, Inner Join, Right Join, Right Outer Join, Full Join, Full Outer Join.
Exemple: (Base de dades sanitat)
Mostra per els noms de l'hospital els nomes de totes les seves sales
SELECT hospital.nom,sala.nom FROM sala INNER JOIN hospital ON sala.hospital_cod=hospital.hospital_cod;
Join-ex.jpeg













Imatge de Tots els Joins
Join.png
























Inner Join

Definició:
Uneix dos (pots fer de dos en dos) taules pels camps que tenen iguals (tants iguals com vulguis), i nomes s'utilitzen els tu especifiques en el SELECT.
Exemple: (Base de dades toctag)
Mostra el nom del cicle (c) i el nom de la família professional (f) on la id de la família coincideixi amb la id de la manilia de cicle
SELECT c.descripcio,f.descripcio FROM cicle_formatiu c INNER JOIN familia_professional f ON c.familia_id=f.familia_id;
Inner-Join-ex.jpeg













NATURAL Join

Definició:
Substitueix l'ON del INER JOIN fen la compraració per si sol dels camps que hi han en comu (perque son iguals).
Exemple: (Base de dades toctag)
Mostra la relació entre els alumnes i les axpulsions.
SELECT * FROM alumnes NATURAL JOIN expulsions;
NATURAL-join-ex.jpeg


















Right Join

Definició:
Agafa la taula de la dreta i els camps en comú
Exemple: (Base de dades toctag)
Mostra el titol de la pelicula i si esta llogada o no.
SELECT pelicula.titol,(CASE count(prestec.codipeli) WHEN 0 THEN 'No Llogada' ELSE 'Llogada' END) as prestec FROM prestec RIGHT JOIN pelicula ON prestec.codipeli=pelicula.codipeli GROUP BY pelicula.titol;
Right-Join-ex.jpeg



















Left Join

Definició:
Agafa la taula de la esquerra i els camps en comú
Exemple: (Base de dades toctag)
Mostra el titol de la pelicula i si esta llogada o no.
SELECT titol FROM pelicula p LEFT JOIN prestec t ON p.codipeli=t.codipeli WHERE t.codipeli IS NULL;
Left-Join-is-NULL-ex.jpeg























Right Join is NULL

Definició:
Agafa la taula de la dreta pero no els camps en comú
Exemple: (Base de dades toctag)
Mostra les pelicules no llogades
SELECT titol FROM prestec t RIGHT JOIN pelicula p ON p.codipeli=t.codipeli WHERE t.codipeli IS NULL;
Right-Join-is-NULL-ex.jpeg























Left Join is NULL

Definició:
Agafa la taula de la esquerra pero no els camps en comú
Exemple: (Base de dades toctag)
Mostra les pelicules no llogades
SELECT titol FROM pelicula p LEFT JOIN prestec t ON p.codipeli=t.codipeli WHERE t.codipeli IS NULL;
Left-Join-is-NULL-ex.jpeg























Full Join

Definició:
Agafa totes les taules
Exemple: (Base de dades toctag)
Mostra les dos taules, si esta a les dos et fa una linea amb les dades de les dos taules, i si esta només en una mostra una linea amb les dades d'aquella unica taula en la qual esta. (El LIMIT es per que no surti una gran llista)
SELECT * FROM expulsions ex FULL JOIN entrades_tard et ON ex.dni=et.dni LIMIT 15;
Full-Join-ex.jpeg
















WHERE

Definició:
Condicions que han de complir les files per a que les mostri per pantalla
Exemple: (Base de dades empresa)
Mostra els cognoms i el salari de aquella gent que el seu salari es superior a 200.000
SELECT cognom,salari FROM emp WHERE salari>200000;

Eines que es poden utilitzar:

Subconsultes

Definició:
Es pot utilitzar una consulta per tal de fer un filtre o condicio amb dades d'alguna altre taula relacionada o de la propia
Exemple:
Subconsulta taula relacionada (Base de dades toctag)
Mostra tots aquells dni i noms d'alumnes de la taula algumnes que coincideixen amb els dni de la taula d'expulsions.
SELECT dni,alumne FROM alumnes WHERE dni IN(SELECT DISTINCT(dni) FROM expulsions);
Subconsulta en la mateixa taula (Base de dades empresa)
Mostra els treballadors que el seu numero d'empleat de la taula emp coincideix amb la llista de numeros de empleats que son caps.
SELECT cognom FROM emp WHERE emp_no IN(SELECT distinct(cap) FROM emp);

AND

Definició:
El seu us es unir varies conducions o filtres.
Exemple: (Base de dades empresa)
Mostra aquells salaris que son mes grans de 200.000 i mes petits a 300.000
SELECT cognom,salari FROM emp WHERE salari>200000 AND salari<300000;

IN/NOT IN

Definició:
Comproba si esta dins de la llista que se li especifiqui entre parèntesi IN(), on esta la nagreta es on va la llista.
Exemple: (Base de dades toctag)
IN
Exemple amb subcunsulta
Mostra tots aquells dni i noms d'alumnes de la taula algumnes que coincideixen amb els dni de la taula d'expulsions.
SELECT dni,alumne FROM alumnes WHERE dni IN(SELECT DISTINCT(dni) FROM expulsions);


Exemple amb la mateixa taula
Mostra tots aquells treballadors que tenen la categoria empleat i venedor
SELECT cognom,ofici FROM emp WHERE ofici IN('empleat','venedor');
NOT IN
Exemple amb la mateixa taula
Mostra tots aquells treballadors que no tenen la categoria empleat i venedor
SELECT cognom,ofici FROM emp WHERE ofici NOT IN('empleat','venedor');

EXISTS/NOT EXISTS

Definició:
Fa una subconsulta i l'exists segons si troba algo o no, torna true o false i en el cas que dongui true imprimeix. (S'utilitza en subconsultes)
Exemple:
Mostra totes les columnes de la taula expulsions, pero nomes mostra les dades quan el dni de la taula alumnes el qual esta fent quart de l'ESO i si auqest mateix dni coincideix amb el dni de la taula d'expulsions.
SELECT * FROM expulsions WHERE EXISTS (SELECT dni FROM alumnes WHERE estudis like 'ESO4%' and dni=expulsions.dni);

Operadors

Definició:
És una funció que realitza algun tipus d'operació en un nombre, variable o funció
+
+
Definició:
suma
-
-
Definició:
resta
=
=
Definició:
igual
<
<
Definició:
Més petit que
>
>
Definició:
Més gran que
!=
!=
Definició:
No igual
LIKE / NOT LIKE
LIKE / NOT LIKE
Definició:
Compara un camp o un valor amb un patro. (no va amb integers)
Exemple:
Mostra els alumnes que estan cursant l'ESO.
SELECT dni,alumne FROM alumnes WHERE estudis LIKE 'ESO%';
Eines: _ / %
_ / %
_ : S'utilitza per calcular quin caracter exacte del parametre vols que sigui igual
% : S'ho traga tot, per exemple si vols bucar una parula que conte una x seria '%x%'

ALL

Definició:
L'ordre retorna true si tots els valors de la subqueria compleixen la condició. Necessita sempre un comarador devant.
Exemple: (Base de dades empresa)
Mostra cognom d'aquella persona que te el salari mes alt de tots.
SELECT cognom FROM EMP WHERE salari >= ALL(SELECT salari FROM emp);

ANY/SOME

Definició:
ANY: qualsevol
SOME: algun
Si (qualsevol/algun) coincideix amb la llista s'imprimeix. ANY() SOME(), en la nagreta es on es posa la llista.
Exemple:
Mostra els alumnes amb estudis DAM
SELECT alumne,estudis FROM alumnes WHERE estudis = SOME(SELECT estudis FROM alumnes WHERE estudis like 'DAM%');
SELECT alumne,estudis FROM alumnes WHERE estudis = ANY(SELECT estudis FROM alumnes WHERE estudis like 'DAM%');

GROUP BY

Definició:
Agrupa els valors que coincideixen amb la mateixa columna.
Exemple: (Base de dades sanitat)
Agrupa els codis de l'hopital iguals i conta quantes sales hi ha per hospital.
SELECT hospital_cod,count(sala_cod) FROM sala GROUP BY hospital_cod;

HAVING

Definició:
Condició que s’aplica un cop agrupats els camps.
Exemple: (Base de dades sanitat)
Agrupa els codis de l'hopital iguals i conta quantes sales hi ha per hospital pero nomes mostra si hi ha mes de 2 sales.
SELECT hospital_cod,count(*) FROM sala GROUP BY hospital_cod HAVING count(*)>2;

ORDER BY

Definició:
Mostra les files ordenades per els camps que s’hi posin.
Exemple: (Base de dades sanitat)
Ordena els codis hospital
SELECT hospital_cod,sala_cod FROM sala ORDER BY hospital_cod;

DESC

Definició:
Fa que l’ordre sigui descendent.
Exemple:
Ordena de manera descendent els codis hospital
SELECT hospital_cod,sala_cod FROM sala ORDER BY hospital_cod DESC;

LIMIT

Definició:
Mostra les files fins a arribar al número de files que hi especifiquem. Es sol fer servir amb l'ORDER BY
Exemple: (Base de dades sanitat)
SELECT hospital_cod,count(*) FROM sala GROUP BY hospital_cod ORDER BY hospital_cod DESC LIMIT 1;
Captura sense LIMIT
Sense-limit-ex.jpeg









Captura amb LIMIT
Limit-ex.jpeg






UNION

Definició:
L'UNIN l'ajunta com el FULL JOIN pero no son el mateix (fa falta el mateix camp a les dos taules)
Exemple: (Base de dades toctag)
Mostra els alumnes de batxillerat i els alumnes de ESO
SELECT alumne,estudis FROM alumnes WHERE estudis like 'ESO%' UNION SELECT alumne,estudis FROM alumnes WHERE estudis like 'BAT%';
UNION-ex.jpeg












INTERSECT

Definició:
L'INTERSECT l'ajunta com el INNER JOIN pero no son el mateix (fa falta el mateix camp a les dos taules)
Exemple: (Base de dades toctag)
Mostra aquelles persones que han arribat tard i tambe han sigut expulsades.
SELECT dni FROM entrades_tard INTERSECT SELECT dni FROM expulsions;
INTERSECT-ex.jpeg




















EXCEPT

Definició:
Agafa la primera consulta i li treu a la segona consulta (Una resta)
Exemple: (Base de dades toctag)
Agafa totes els expulsats i treu els que han arribat tard.
SELECT dni FROM expulsions EXCEPT SELECT dni from entrades_tard;
EXCEPT-ex.jpeg