Having
Miquel Boada
25-11-2016
Desenvolupament aplicacions multiplataforma (DAM)
Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL
Tema 2 – Introducció . Integritat referencial
Objectius
1. Selecció de registres amb funcions d'agregat
Coneixements previs
• Instrucció select
• Funció d'agregat
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 7
Desenvolupament aplicacions multiplataforma (DAM)
Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL
Tema 2 – Introducció . Integritat referencial
SQL - Having
Objectius....................................................................................................................................................2
Coneixements previs................................................................................................................................2
Requisits previs.........................................................................................................................................2
Introducció ...............................................................................................................................................6
Having........................................................................................................................................................6
Alies............................................................................................................................................................7
Sintaxis i exemples...................................................................................................................................7
Exemples having..................................................................................................................................7
Autor: Miquel Boada Pàgina 3 de 7
Desenvolupament aplicacions multiplataforma (DAM)
Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL
Tema 2 – Introducció . Integritat referencial
Per a realitzar les diferents consultes es partirà del següent model ER i la seva conversió al
model físic.
Superhero Planet
Les instruccions per a crear la base de dades , les taules i les dades es detallen a continuació.
Tenir en compte que la força i la intel·ligència es generen mitjançant un número aleatori i, per
tant, aquests valors diferiran dels valors mostrats en la taula anterior.
Autor: Miquel Boada Pàgina 4 de 7
Desenvolupament aplicacions multiplataforma (DAM)
Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL
Tema 2 – Introducció . Integritat referencial
create database if not exists dbheroes;
use dbheroes;
create table planet ( namep varchar(20), mass decimal(6,2) not null,
primary key(namep)
) engine=innodb;
create table superheroes (
nameh varchar(40),
planet varchar(20),
intelligence decimal(4,2) not null,
strong decimal(4,2) not null,
primary key(nameh)
) engine=innodb;
insert into planet values ("Mercury",0.06),("Venus",0.82),("Earth",1),("Mars",0.11),
("Jupiter",317.8),("Saturn",95.2),("Uranus",14.6),("Neptune",17.2);
alter table superheroe
add constraint fk_superhero_planet
foreign key (planet) references planet(namep)
on delete restrict
on update cascade;
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","mars",round(rand()*100,2),round(rand()*100,2)),
("Thor","earth",round(rand()*100,2),round(rand()*100,2)),
("Hal Jordan","Venus",round(rand()*100,2),round(rand()*100,2)),
("Wonder Woman","earth",round(rand()*100,2),round(rand()*100,2)),
("Captain America","Venus",round(rand()*100,2),round(rand()*100,2)),
("Martian Manhunter","Mars",round(rand()*100,2),round(rand()*100,2));
Autor: Miquel Boada Pàgina 5 de 7
Desenvolupament aplicacions multiplataforma (DAM)
Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL
Tema 2 – Introducció . Integritat referencial
Introducció .
Quan es volen realitzar consultes del tipus:
✔ Quins anys s'ha facturat més que la facturació de l'any 2016?
✔ Quins articles s'han venut més que l'article X?
✔ ….
O consultes relacionades amb les taules del nostre exemple
✔ Quins planetes tenen més força que la força del planeta terra?
✔ Quins planetes tenen una intel·ligència superior a la mitjana de la intel·ligència?
✔ …....
És precís utilitzar la clausula «group by» amb «having» per a poder fer el filtre dels missatges.
Having.
La clausula «having» s'utilitzarà quan es vulguin filtrar les files d'una instrucció «select» segons
el resultat d'una funció d'agregat. Com es pot observar en el tipus de consulta realitzades a la
introducció (total facturació, total producte venut, total força, total intel·ligència) per a obtenir
cada un d'aquests valors cal aplicar una funció d'agregat (sum) en el nostre cas. Per resoldre la
consulta: Quins planetes tenen una intel·ligència superior a la mitjana de la intel·ligència?
es podria pensar en la consulta no vàlida:
Select planet, sum(intelligence) from superheroes
group by planet
where sum(intelligence)>(select avg(intelligence) from superheroes);
Tot i que es pot pensar que la consulta és vàlida, l'utilització de la clausula where amb una
funció d'agregat no és vàlida i és precís substituir-la per having.
Select planet, sum(intelligence) from superheroes
group by planet
having sum(intelligence)>(select avg(intelligence) from superheroes);
Quan s'utilitza la clausula having , podem combinar la condició o condicions amb funcions
d'agregat amb condicions relacionades amb consultes de la informació de les columnes que es
mostren en el select (en el nostre cas, planet).
Select planet, sum(intelligence) from superheroes
group by planet
having sum(intelligence)>(select avg(intelligence) from superheroes)
and planet like 'p%'; -- Planetes que comencin per la lletra P
Autor: Miquel Boada Pàgina 6 de 7
Desenvolupament aplicacions multiplataforma (DAM)
Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL
Tema 2 – Introducció . Integritat referencial
Alies
Una bona opció és associar un àlies a la columna que conté la funció d'agregat i utilitzar aquest
àlies en l'expressió del having. D'aquesta forma l'expressió queda més simple.
-- Quins planetes tenen una força mitjana superior a la mitjana de força de tots els planetes
Select planet, avg(strong) as averageStrong from superheroes
group by planet
having averageStrong>(select avg(strong) from superheroes);
Sintaxis i exemples
La clausula «having» va ubicada després de la clausula «group by».
Exemples having
-- Quins planetes tenen una intel·ligència superior a la mitjana d'intel·ligència de tots els planetes
Select planet, sum(intelligence) from superheroes
group by planet
having sum(intelligence)>(select avg(intelligence) from superheroes);
-- Quins planetes tenen una intel·ligència superior a la mitjana d'intel·ligència de tots els planetes
-- i el nom del planeta comença per la lletra P
Select planet, sum(intelligence) from superheroes
group by planet
having sum(intelligence)>(select avg(intelligence) from superheroes)
and planet like 'p%';
-- Quins planetes tenen una força mitjana superior a la mitjana de força de tots els planetes
Select planet, avg(strong) as averageStrong from superheroes
group by planet
having averageStrong>(select avg(strong) from superheroes);
Video exemple: Exemples utilització having
Autor: Miquel Boada Pàgina 7 de 7

More Related Content

PDF
Consultes amb múltiples taules utilitzant left, right i inner join. Funcionam...
PPTX
Medialab Weserburg·
PDF
Durkheim y Weber
PPTX
Crecimiento social y cultural en bucaramanga
DOCX
Tarea 6 recursos educativos noranyi
PPTX
Diapositivas electiva
PPTX
Lno studios 2007 discription
PPT
Proyecto de vida f
Consultes amb múltiples taules utilitzant left, right i inner join. Funcionam...
Medialab Weserburg·
Durkheim y Weber
Crecimiento social y cultural en bucaramanga
Tarea 6 recursos educativos noranyi
Diapositivas electiva
Lno studios 2007 discription
Proyecto de vida f

Viewers also liked (8)

PPTX
Chiers pitch deck ppt 2 18-17
PDF
Soutenance - Master 2 Recherche
DOCX
Resume
DOCX
ELMEZUGHI_FARAJ_2016_CV
PPTX
Parent presentation
PPT
¿Cómo tiene el pelo?
DOCX
19th February 2017 - What is a living Sacrifice?
PPTX
End Times Doctrine
Chiers pitch deck ppt 2 18-17
Soutenance - Master 2 Recherche
Resume
ELMEZUGHI_FARAJ_2016_CV
Parent presentation
¿Cómo tiene el pelo?
19th February 2017 - What is a living Sacrifice?
End Times Doctrine
Ad

More from Miquel Boada Artigas (20)

PDF
Configuracio servei dns_linux
PDF
Configuracio servei dns Windows
PDF
Configuració d'un sistema d'auditoria amb Windows Server
PDF
Monitorització en sistemes informàtics. Windows i Linux.
PDF
LLenguatge SQL. Consultes amb agrupació de files.
PDF
Consultes simples mitjançant llenguatge SQL. Filtres, ordenació i aplicació d...
PDF
Creació de taules amb integritat referencial.
PDF
Creació de base de dades utilitzant llenguatge SQL.
PDF
Tema 01 - Creació de taules amb SQL.
PDF
Instal·lació MySQL Server i Workbench. Creació de base de dades. Tipus de dad...
PDF
Model relacional i normalització
PDF
Transformació model entitat-relació al model relacional
PDF
Model entitat relació extès (Extended Entity Relationship)
PDF
Model entitat relació (ER)
PDF
Introducció bases de dades distribuides
PDF
Introducció bases de dades centralitzades
PDF
Sistemes gestors de bases de dades
PDF
Emmagatzematge de la informació
PDF
Història de les bases de dades
PDF
Model relacional i formes normals
Configuracio servei dns_linux
Configuracio servei dns Windows
Configuració d'un sistema d'auditoria amb Windows Server
Monitorització en sistemes informàtics. Windows i Linux.
LLenguatge SQL. Consultes amb agrupació de files.
Consultes simples mitjançant llenguatge SQL. Filtres, ordenació i aplicació d...
Creació de taules amb integritat referencial.
Creació de base de dades utilitzant llenguatge SQL.
Tema 01 - Creació de taules amb SQL.
Instal·lació MySQL Server i Workbench. Creació de base de dades. Tipus de dad...
Model relacional i normalització
Transformació model entitat-relació al model relacional
Model entitat relació extès (Extended Entity Relationship)
Model entitat relació (ER)
Introducció bases de dades distribuides
Introducció bases de dades centralitzades
Sistemes gestors de bases de dades
Emmagatzematge de la informació
Història de les bases de dades
Model relacional i formes normals
Ad

LLenguatge SQL. Consultes utilitzant having

  • 2. Desenvolupament aplicacions multiplataforma (DAM) Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL Tema 2 – Introducció . Integritat referencial Objectius 1. Selecció de registres amb funcions d'agregat Coneixements previs • Instrucció select • Funció d'agregat 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 7
  • 3. Desenvolupament aplicacions multiplataforma (DAM) Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL Tema 2 – Introducció . Integritat referencial SQL - Having Objectius....................................................................................................................................................2 Coneixements previs................................................................................................................................2 Requisits previs.........................................................................................................................................2 Introducció ...............................................................................................................................................6 Having........................................................................................................................................................6 Alies............................................................................................................................................................7 Sintaxis i exemples...................................................................................................................................7 Exemples having..................................................................................................................................7 Autor: Miquel Boada Pàgina 3 de 7
  • 4. Desenvolupament aplicacions multiplataforma (DAM) Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL Tema 2 – Introducció . Integritat referencial Per a realitzar les diferents consultes es partirà del següent model ER i la seva conversió al model físic. Superhero Planet Les instruccions per a crear la base de dades , les taules i les dades es detallen a continuació. Tenir en compte que la força i la intel·ligència es generen mitjançant un número aleatori i, per tant, aquests valors diferiran dels valors mostrats en la taula anterior. Autor: Miquel Boada Pàgina 4 de 7
  • 5. Desenvolupament aplicacions multiplataforma (DAM) Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL Tema 2 – Introducció . Integritat referencial create database if not exists dbheroes; use dbheroes; create table planet ( namep varchar(20), mass decimal(6,2) not null, primary key(namep) ) engine=innodb; create table superheroes ( nameh varchar(40), planet varchar(20), intelligence decimal(4,2) not null, strong decimal(4,2) not null, primary key(nameh) ) engine=innodb; insert into planet values ("Mercury",0.06),("Venus",0.82),("Earth",1),("Mars",0.11), ("Jupiter",317.8),("Saturn",95.2),("Uranus",14.6),("Neptune",17.2); alter table superheroe add constraint fk_superhero_planet foreign key (planet) references planet(namep) on delete restrict on update cascade; 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","mars",round(rand()*100,2),round(rand()*100,2)), ("Thor","earth",round(rand()*100,2),round(rand()*100,2)), ("Hal Jordan","Venus",round(rand()*100,2),round(rand()*100,2)), ("Wonder Woman","earth",round(rand()*100,2),round(rand()*100,2)), ("Captain America","Venus",round(rand()*100,2),round(rand()*100,2)), ("Martian Manhunter","Mars",round(rand()*100,2),round(rand()*100,2)); Autor: Miquel Boada Pàgina 5 de 7
  • 6. Desenvolupament aplicacions multiplataforma (DAM) Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL Tema 2 – Introducció . Integritat referencial Introducció . Quan es volen realitzar consultes del tipus: ✔ Quins anys s'ha facturat més que la facturació de l'any 2016? ✔ Quins articles s'han venut més que l'article X? ✔ …. O consultes relacionades amb les taules del nostre exemple ✔ Quins planetes tenen més força que la força del planeta terra? ✔ Quins planetes tenen una intel·ligència superior a la mitjana de la intel·ligència? ✔ ….... És precís utilitzar la clausula «group by» amb «having» per a poder fer el filtre dels missatges. Having. La clausula «having» s'utilitzarà quan es vulguin filtrar les files d'una instrucció «select» segons el resultat d'una funció d'agregat. Com es pot observar en el tipus de consulta realitzades a la introducció (total facturació, total producte venut, total força, total intel·ligència) per a obtenir cada un d'aquests valors cal aplicar una funció d'agregat (sum) en el nostre cas. Per resoldre la consulta: Quins planetes tenen una intel·ligència superior a la mitjana de la intel·ligència? es podria pensar en la consulta no vàlida: Select planet, sum(intelligence) from superheroes group by planet where sum(intelligence)>(select avg(intelligence) from superheroes); Tot i que es pot pensar que la consulta és vàlida, l'utilització de la clausula where amb una funció d'agregat no és vàlida i és precís substituir-la per having. Select planet, sum(intelligence) from superheroes group by planet having sum(intelligence)>(select avg(intelligence) from superheroes); Quan s'utilitza la clausula having , podem combinar la condició o condicions amb funcions d'agregat amb condicions relacionades amb consultes de la informació de les columnes que es mostren en el select (en el nostre cas, planet). Select planet, sum(intelligence) from superheroes group by planet having sum(intelligence)>(select avg(intelligence) from superheroes) and planet like 'p%'; -- Planetes que comencin per la lletra P Autor: Miquel Boada Pàgina 6 de 7
  • 7. Desenvolupament aplicacions multiplataforma (DAM) Mòdul 2 – Bases de dades - UF2 - llenguatges SQL: DML i DDL Tema 2 – Introducció . Integritat referencial Alies Una bona opció és associar un àlies a la columna que conté la funció d'agregat i utilitzar aquest àlies en l'expressió del having. D'aquesta forma l'expressió queda més simple. -- Quins planetes tenen una força mitjana superior a la mitjana de força de tots els planetes Select planet, avg(strong) as averageStrong from superheroes group by planet having averageStrong>(select avg(strong) from superheroes); Sintaxis i exemples La clausula «having» va ubicada després de la clausula «group by». Exemples having -- Quins planetes tenen una intel·ligència superior a la mitjana d'intel·ligència de tots els planetes Select planet, sum(intelligence) from superheroes group by planet having sum(intelligence)>(select avg(intelligence) from superheroes); -- Quins planetes tenen una intel·ligència superior a la mitjana d'intel·ligència de tots els planetes -- i el nom del planeta comença per la lletra P Select planet, sum(intelligence) from superheroes group by planet having sum(intelligence)>(select avg(intelligence) from superheroes) and planet like 'p%'; -- Quins planetes tenen una força mitjana superior a la mitjana de força de tots els planetes Select planet, avg(strong) as averageStrong from superheroes group by planet having averageStrong>(select avg(strong) from superheroes); Video exemple: Exemples utilització having Autor: Miquel Boada Pàgina 7 de 7