Consultes simples mitjançant llenguatge SQL. Filtres, ordenació i aplicació de fòrmuleso

15
Consultes simples «Select» Miquel Boada 25-11-2016

Transcript of Consultes simples mitjançant llenguatge SQL. Filtres, ordenació i aplicació de fòrmuleso

Consultes simples«Select»

Miquel Boada25-11-2016

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Objectius1. Realització de consultes en una taula

Coneixements previs• Model Entitat-Relació.• Model relacional.• Transformació del model Entitat-Relació al model relacional.• Sistemes gestors de bases de dades (SGBD).• Creació de base de dades.• Creació de taules.

Requisits previs• Ordinador amb MySQL server instal·lat.• Client MySQL server (MySQL Workbench per la representació gràfica).• Connexió al servidor des del client • Una base de dades creada.

Autor: Miquel Boada Pàgina 2 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

SQL - SelectConsultes simples.....................................................................................................................................1Objectius....................................................................................................................................................2Coneixements previs................................................................................................................................2Requisits previs.........................................................................................................................................2Introducció................................................................................................................................................4Select sintaxis............................................................................................................................................5Consultes «simples».................................................................................................................................6

select_expr...........................................................................................................................................6 Consultes per camps. Exemples........................................................................................................6 Utilització operacions. Exemples.......................................................................................................7 Utilització funcions. Exemples...........................................................................................................7

Funcions no agregades..................................................................................................................7 Exemples funcions no agregades.............................................................................................8

Funcions agregades........................................................................................................................8 Exemples funcions agregades..................................................................................................8

Filtres....................................................................................................................................................9 Operadors en els filtres..................................................................................................................9

Operadors. Exemples................................................................................................................9 Operadors lògics...........................................................................................................................10

Operadors lògics. Exemples....................................................................................................10 Operador IN..................................................................................................................................10

Operador IN. Exemple.............................................................................................................11 Operador Like...............................................................................................................................11

Operador Like. Exemples........................................................................................................11 Precedència operadors................................................................................................................12 Valor NULL.....................................................................................................................................12

IS NULL / IS NOT NULL............................................................................................................13 IS NULL / IS NOT NULL. Exemples.....................................................................................13

Distinct...........................................................................................................................................13 Order by.............................................................................................................................................14

Order by. Exemples......................................................................................................................14Webgrafia................................................................................................................................................15

Autor: Miquel Boada Pàgina 3 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Introducció.Un dels objectius principals de la implementació d'una base de dades és la gestió de lainformació. Per a gestionar la informació és precís poder-la localitzar de forma eficient. Caltenir en compte que durant el procés de normalització s'ha dividit la informació en múltiplestaules. Una de les opcions importants que s'hauran de realitzar serà la de tornar a uniraquesta informació per a tenir una visió global o relacionada de la mateixa. Per a consultar lainformació utilitzant el llenguatge SQL (Standard Query Language) disposem de la instrucció«select».Per a realitzar les diferents consultes es partirà del següent model ER i la seva conversió almodel físic.

create database dbheros;use dbheros;create table superhero(

nameh varchar(40), planet varchar(20) ,intelligence decimal(4,2) not null,

strong decimal(4,2) not null, primary key(nameh)) engine=innodb;

La informació emmagatzemada en aquesta taula serà el resultat de l'execució de les següentsinstruccions.

insert into superhero values("Superman","earth",round(rand()*100,2),round(rand()*100,2)),("Batman","earth",round(rand()*100,2),round(rand()*100,2)),("Spiderman","earth",round(rand()*100,2),round(rand()*100,2)),("Thor","earth",round(rand()*100,2),round(rand()*100,2)),("Hal Jordan",NULL,round(rand()*100,2),round(rand()*100,2)),("Wonder Woman","earth",round(rand()*100,2),round(rand()*100,2)),("Captain America",NULL,round(rand()*100,2),round(rand()*100,2)),("Martian Manhunter","Mars",round(rand()*100,2),round(rand()*100,2));

Autor: Miquel Boada Pàgina 4 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Select sintaxisLa instrucció «select» ens permet realitzar consultes en una base de dades. Les opcions mésutilitzades d'aquesta instrucció són:

SELECT [ALL | DISTINCT ] [HIGH_PRIORITY] [STRAIGHT_JOIN] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... ] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}]]

En essència, la instrucció select ens permet obtenir el valor associat a diferents columnes ocamps d'una o vàries taules. Les taules que es consultin no han d'estar obligatòriament en lamateixa taula.

Autor: Miquel Boada Pàgina 5 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Consultes «simples»El format de la consulta més simple, on intervingui almenys una taula, està composat per lasentència: Select select_expr1 [,select_expr2] … from table ;

select_expr L'expressió «select_expr » es pot substituir per a qualsevol de les següents alternatives:

nom_camp: obtenir la informació d'un camp de la taula. Els diversos camps es separaranmitjançant una coma. Si el nom del camp conté espais1 s'ha d'incloure entre els símbolsde ` (accent obert) o bé " (cometes dobles).* : obtenir la informació de tots els camps de la taulacamp operació camp : resultat d'aplicar un determinat càlcul a dos camps.funció(camp) : resultat d'aplicar una determinada funció a un camp.

Consultes per camps. Exemples

use dbheros;-- Obtenir el nom de tots els superherois de la base de dades

select nameh from superhero;-- Obtenir el nom i el planeta on resideixen tots els herois

select nameh, planet from superhero;-- Obtenir el nom , la força i la intel·ligència de cada un dels superherois

select nameh, strong, intelligence from superhero;

-- Obtenir totes les dades de tots els superheroisselect * from superhero;

Si una sentència «select» és molt llarga, es recomana escriure-la utilitzant diverses línies per amillorar la legibilitat. Cal tenir en compte que el llenguatge SQL ignora totes les tabulacions,espais sobrers (2 o més espais seguits) i salts de línia. A mode il·lustratiu en la tercera consultad'exemple s'ha introduït un salt de línia tot i que en aquest cas no era necessari.

1 Per a millor comoditat és preferible no utilitzar espais en blanc en els noms dels camps.

Autor: Miquel Boada Pàgina 6 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Utilització operacions. ExemplesÉs habitual que algunes vegades es vulgui realitzar alguna operació o càlcul entre dues dadesd'un mateix registre. Els operadors matemàtics que es disposen en el llenguatge SQL són elshabituals en la majoria dels llenguatges: + , - , / , * (multiplicació), % (mòdul).Quan es realitza un càlcul entre 2 o més camps d'una taula podem associar un nom a aquestcàlcul. Aquest nom es podrà utilitzar posteriorment per a referenciar el càlcul i simplificar lainstrucció resultant. L'associació es farà utilitzant la paraula «AS». Si el nom que volem assignarconté espais utilitzarem " cometes dobles o bé ` (accent obert).

-- Obtenir el nom del superheroi i la proporció entre la força i la intelligència -- de cada un dels superherois

select nameh, strong/intelligence from superhero; -- Obtenir el nom del superheroi i la proporció entre la força i -- la intelligència de cada un dels superherois.– Associar el nom "proporcio" al resultat de l'operació

select nameh, strong/intelligence as proporcio from superhero; -- Obtenir el nom del superheroi i la proporció entre la força i la intelligència -- de cada un dels superherois. -- Associar el nom "proporcio força i intel·ligencia" al resultat de l'operació

select nameh, strong/intelligence as "proporcio força i intel·ligencia" from superhero;

Utilització funcions. ExemplesDe forma semblant a la d'una fulla de càlcul, podem utilitzar funcions per a realitzar càlculs otransformacions amb els camps d'una taula. El llenguatge SQL diferencia dos tipus defuncions:

1. Funcions no agregades2. Funcions agregades

Funcions no agregadesLes funcions no agregades són aquelles funcions que tracten cada fila de forma individual. Sis'aplica la funció a una consulta de 100 registres, el resultat seran 100 registres amb el valordel camp calculat.

Autor: Miquel Boada Pàgina 7 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Exemples funcions no agregades

-- Obtenir el nom del superheroi i la proporció entre la força i la intelligència de cada un delssuperherois.-- El càlcul de la proporció ha de ser a 2 decimals.

select nameh, round(strong/intelligence,2) as proporcio from superhero; -- Mostrar en percentatge la proporció entre la força i la intel·ligència.

select nameh, concat(round(strong/intelligence*100,2)," %") from superhero;

Funcions agregadesLes funcions agregades són aquelles que agrupen totes les files d'una consulta obtenint unúnic resultat; el seu resultat és una única fila amb el resultat demanat. Per exemple, «sum»(sumatori), «count» (total de files), «avg» (mitjana) són funcions agregades.

Exemples funcions agregades

-- Obtenir el total d'herois introduïts en la taulaselect count(*) from superhero;

-- Obtenir la mitjana de força i d'intel·ligència de tots els heroisselect avg(strong) as "mitjana força", avg(intelligence) as "mitjana intel·ligència"

from superhero;

Podeu obtenir el llistat complet d'operacions i funcions en l'URL del producte oficial:http://dev.mysql.com/doc/refman/5.7/en/functions.html

Autor: Miquel Boada Pàgina 8 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Filtres.Quan es realitzen consultes a les taules moltes vegades es precisa obtenir la informació d'unsubconjunt del total de registres que conté la taula. Quan es dóna aquesta situació s'aplica unfiltre. L'aplicació dels filtres es realitza amb la clàusula «where» (on). Quan en els filtres esvolen referenciar valors alfanumèrics fixes, cal incloure aquest valor entre cometes simples( 'caràcters ' ).

Operadors en els filtresAlguns dels operadors de comparació que podem usar en els filtres de les consultes són:

v1=v2 : v1 i v2 han de tenir el mateix valor per tal que la condició sigui certa.v1>v2 : v1 ha de ser més gran que v2 per tal que la condició sigui certa.v1<v2 : v1 ha de ser més petit que v2 per tal que la condició sigui certa.v1>=v2 : v1 ha de ser més gran o igual a v2 per tal que la condició sigui certa.v1<=v2 : v1 ha de ser més petit o igual a v2 per tal que la condició sigui certa.v1<>v22 : v1 i v2 han de tenir valors diferents per tal que la condició sigui certa.v1 between min and max : el resultat és cert si el valor de v1 és més gran o igual a min imés petit o igual a max.IN (valor1[, valor2 ]...)v1 LIKE v2

En els filtres es poden utilitzar també funcions o operacions. En aquest cas el més normal ésincloure l'operació o la funció en la clausula where.

Operadors. Exemples

-- Obtenir totes les dades de "batman"select * from superhero where nameh='batman';

-- Obtenir totes les dades de tots els herois que el seu nom no sigui batmanselect * from superhero where nameh<>'batman';

-- Obtenir el nom de tots els herois que tinguin una força superior a 20select nameh from superhero where strong>20;

-- Total d'intel·ligència de tots els herois que tenen més força que intel·ligènciaselect sum(intelligence) from superhero where strong>intelligence;

-- Obtenir el nom de tots els herois que tinguin el doble o més de força que d'intel·ligència select nameh from superhero where strong/intelligence>=2;

-- Obtenir el nom de tots els herois que tinguin una força entre 1 i 5 ambdós inclososselect nameh from superhero where strong between 1 and 5;

2 També es pot utilitzar l'operador != .

Autor: Miquel Boada Pàgina 9 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Operadors lògicsEls operadors lògics permeten enllaçar diferents condicions. Els operadors lògics més comunsen el llenguatge SQL són:

cond1 AND cond2cond 1 OR cond2NOT cond13

Cal tenir en compte que en el llenguatge SQL hi ha tres valors diferents que pot prendre unacondició: TRUE, FALSE i el valor especial NULL .La taula de veritat per a cada un dels operadors lògics és:

AND ORNOT

TRUE FALSE NULL TRUE FALSE NULL

TRUE TRUE FALSE NULL TRUE TRUE TRUE TRUE TRUE FALSE

FALSE FALSE FALSE FALSE FALSE TRUE FALSE NULL FALSE TRUE

NULL NULL FALSE NULL NULL TRUE NULL NULL NULL NULL

El tema de valors NULL es tracta posteriorment en aquest mateix document.

Operadors lògics. Exemples

-- Obtenir tota la informació de tots els herois que tenen el planeta earth assignat i que la seva -- força sigui superior a 50

select * from superhero where strong>50 and planet='earth';-- Obtenir el nom dels herois que no es diguin Batman o que tinguin el planeta earth assignat

select nameh from superhero where nameh<>'Batman' or planet='earth';-- Obtenir totes les dades de tots dels herois amb una força o intel·ligència inferior a 50 -- i que tinguin el planeta 'earth' associat

select * from superhero where (strong<50 or intelligence<50) and planet='earth';-- Obtenir el nom de tots els herois que NO tinguin una intelligencia superior a 50 -- ni una força superior a 50

select * from superhero where NOT (strong>50 or intelligence>50);

Operador INL'operador IN serveix per a comprovar si un valor està dins d'una seqüència de valors.L'operador IN equival a concatenar diferents valors amb l'operador OR. Per exemple, lasentència select … where valor IN (v1,v2,v3) equival a select … where valor=v1 or valor=v2 or valor=v3.

3 Per a tots els operadors lògics podem utilitzar la notació equivalent al llenguatge C, tot i que en el llenguatge SQL no és l'opció mésutilitzada.

Autor: Miquel Boada Pàgina 10 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Operador IN. Exemple

select * from superhero where planet IN ('Earth','Mars', 'Jupiter', 'Saturn');

Operador LikeEn les consultes a bases de dades és habitual voler buscar la informació pel contingut parciald'una columna. Així, consultes com, tots els noms que comencen, contenen o finalitzen ambuna o vàries lletres són habituals. Quan cal realitzar consultes d'aquests tipus , l'opció mésviable és utilitzar l'operador «LIKE». Aquest operador comprova si els caràcters especificatsestan continguts en el camp.S'utilitza el caràcter comodí % per a indicar 0 o molts caràcters. Així, per exemple, l'expressió«ma%» està associada a totes les paraules que comencen per «ma». L'expressió %abc% estàassociada a totes les paraules que contenen abc (abc) inclosa.Tot i que és menys freqüent, podem utilitzar el caràcter '_' (guió baix) per a indicar un úniccaràcter.

Operador Like. Exemples

-- Tots els herois que el seu nom acabi amb 'man'select * from superhero where nameh like '%man';

-- Tots els herois que tinguin una 'i' en el seu nom i assignat un planeta que començi per 'e'select * from superhero

where nameh like '%i%' and planet like 'e%';-- Tots els herois que el seu nom contingui les lletres 'i' i 'm' i acabi amb n

select * from superhero where nameh like '%i%m%n';-- Tots els herois que el seu nom comenci per 'i' i tingui una longitud de 2 caràcters

select * from superhero where nameh like 'i_;

Autor: Miquel Boada Pàgina 11 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Precedència operadorsUn dels aspectes importants quan es fan consulta i que cal tenir en compte és la precedènciadels operadors, o sigui; quin és l'ordre que utilitza el llenguatge per a calcular els resultatsd'una clàusula where. Tot i que en el llenguatge hi ha molts més operadors , en aquest document es mostren aquellsque són més habituals en les consultes ordenats pel seu ordre d'execució. Es pot trobar lallista completa d'operadors a la plana: http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html

1. *, /, DIV, %, MOD2. -, +3. = (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN4. BETWEEN, CASE, WHEN, THEN, ELSE5. NOT6. AND, &&7. OR, ||8. = (assignment), :=

En el següent vídeo es mostra la importància de la precedència dels operadors utilitzant elsoperador «AND» i «OR». Com es pot veure en el vídeo, els resultats difereixen segons com esfaci la consulta: https://youtu.be/YDp-CUgT7SE

Valor NULLEl valor «NULL» és un valor especial del llenguatge SQL que s'utilitza per a indicar que el valord'un camp és desconegut, o sigui; no se li pot assignar cap valor ja que no el sabem. Perexemple, en una base de dades d'una empresa concessionàira hi ha una taula «vehicle» amb lainformació dels cotxes que té a la venta. Els camps d'aquesta taula són: {bastidor (PK),matrícula, color, model, marca}4. Donat que la matrícula del cotxe és desconeguda fins que esprocedeixi a la venta i matriculació del cotxe, cal permetre el valor NULL (desconegut) com avalor vàlid de camp. Tot i que l'utilització del valor NULL és un sistema molt vàlid per a indicarla situació «desconeguda», aquest valor té una incidència directe en les consultes i cal tenir-lopresent.Cal tenir present que el valor NULL no és un valor sobre el qual es puguin realitzar operacions.Si es fa una operació amb valor NULL el resultat sempre és NULL. Podeu executar aquestesinstruccions per a comprovar-ho

4 S'han posat només alguns valors a mode d'exemple.

Autor: Miquel Boada Pàgina 12 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

-- Operacions amb valor NULLselect 3+NULL;select NULL/0;select 30*NULL;select 5%NULL;

En el nostre exemple el camp «planet» permet valor NULL.

IS NULL / IS NOT NULL

L'expressió «IS NULL» és una expressió especial que ens permet comprovar si el valor d'uncamp és conegut o desconegut, o sigui; té valor NULL. Cal tenir en compte que la sentènciaselect … where nomCamp=NULL no funciona ja que no hi ha dos NULL iguals! Teniu unademostració en el següent vídeo: https://youtu.be/uxUEEtk0DqkDe la mateixa forma que utilitzem l'operador «IS NULL» podem utilitzar l'operador «IS NOTNULL» per a descartar els valors NULL de la nostra consulta.Cal tenir en compte quan es combina el valor NULL amb els operadors AND o OR, ja quepoden canviar el significat de la nostra consulta. Com s'observa en les taules de veritat TRUEAND NULL s'evalua a NULL, la qual cosa fa que no es retorni cap resultat. Per aclarir aquestconcepte podeu consultar el següent vídeo: https://youtu.be/DszlkDqnw8I

IS NULL / IS NOT NULL. Exemples

-- Obtenir tota la informació de tots els herois que tenen assignat un planeta «desconegut»select * from superhero where planet is null;-- Obtenir tota la informació de tots els herois que NO tenen assignat un planeta «desconegut»select * from superhero where planet is not null;

DistinctQuan es seleccionen columnes i s'obtenen les files associades a les mateixes hi ha lapossibilitat que es mostrin registres duplicats. Amb l'ordre «distinct» podem evitar de formasimple aquesta duplicació de dades. El format de la comanda és:

select distinct col1 [,col2] … from taula

És important observar com l'ordre «distinct» es pot aplicar a més d'una columna. Cal tenirpresent, però , que només actua quan totes les columnes incloses en el select tenen el mateixvalor: How distinct works (video)

Autor: Miquel Boada Pàgina 13 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Order byQuan es fa una consulta es poden ordenar els resultats de forma ascendent o descendent perun o varis camps. En el cas de combinar varis camps, l'ordre pot ser ascendent per una sèriede camps i descendent pels altres. Utilitzem «ASC» quan es vulgui ordenar de forma ascendent(de més petit a més gran) i DESC quan es vulgui fer de forma descendent (de més gran a méspetit)La instrucció que utilitzem per a ordenar els registres és «order by» i la seva sintaxis dins lainstrucció «select» és:

select columnes from taula where condició order by col1 [ASC|DESC] [,col2 [ASC|DESC]]...

Order by. Exemples

-- Obtenir tots els herois ordenats per la seva força ( de - a + )select * from superhero order by strong; -- ordre per defecte ASC-- Obtenir tots els herois de més a menys intel·ligents. Si tenen la mateixa intel·ligència, -- el segon criteri és per la força. També de més a menys.select * from superhero order by intelligence DESC, strong DESC;-- Obtenir tots els herois que tinguin més intel·ligència que força. Ordenar els resultats per -- la intel·ligència (primer els més intel·ligents). Si tenen la mateixa intel·ligència -- per força (primer els més dèbils).select * from superhero where intelligence>strong

order by intelligence DESC, strong;

Autor: Miquel Boada Pàgina 14 de 15

Desenvolupament aplicacions multiplataforma (DAM)

Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL

Tema 3 – Consultes simples

Webgrafiahttp://dev.mysql.com/doc/refman/5.7/en/select.htmlhttp://dev.mysql.com/doc/refman/5.7/en/working-with-null.htmlhttp://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html

Autor: Miquel Boada Pàgina 15 de 15