Está en la página 1de 37

Fundamentos Bases de Datos

Consultas

(1 parte)

Fundamentos Bases de Datos


Consultas

Las sentencias DML del lenguaje SQL son:


SELECT: extrae informacin de la BD, de una o varias
tablas
INSERT: inserta registro(s) en alguna tabla
DELETE: borra registro(s) de una tabla
UPDATE: modifica registros de una tabla

(Cualquier ejecucin de un comando en un SGBD se


denomina consulta (del trmino ingls query), debe
entenderse como peticin al SGBD para realizar una
operacin determinada.)

Fundamentos Bases de Datos


Consultas

Sintaxis:
SELECT [DISTINCT] select_expr
[,select_expr] ...
[FROM tabla]
siendo
select_expr:
nombre_columna [AS alias]
| *
| expresion
El prametro DISTINCT fuerza a evitar las repeticiones
y que solo se muestren los registros con valores distintos

Fundamentos Bases de Datos


Consultas

# consulta 1
SELECT * FROM vehiculos;
+-----------+----------------+---------+
| matricula | modelo
| marca
|
+-----------+----------------+---------+
| 1129FGT
| ibiza gt
| seat
|
| 1132GHT
| leon tdi 105cv | seat
|
| M6836YX
| corolla g6
| toyota |
| 7423FZY
| coupe
| hyundai |
| 3447BYD
| a3 tdi 130cv
| audi
|
+-----------+----------------+---------+

Fundamentos Bases de Datos


Consultas

SELECT matricula,
concat(marca,modelo) as coche
FROM vehiculos;
+-----------+---------------------+
| matricula | coche
|
+-----------+---------------------+
| 1129FGT
| seatibiza gt
|
| 1132GHT
| seatleon tdi 105cv |
| M6836YX
| toyotacorolla g6
|
| 7423FZY
| hyundaicoupe
|
| 3447BYD
| audia3 tdi 130cv
|
+-----------+---------------------+
(La funcin concat en Oracle solo admite 2 parmetros)

Fundamentos Bases de Datos


Consultas

SELECT 1+6;
+-----+
| 1+6 |
+-----+
|
7 |
+-----+

SELECT matricula, modelo,1+5


FROM vehiculos;
+-----------+----------------+-----+
| matricula | modelo
| 1+5 |
+-----------+----------------+-----+
| 1129FGT
| ibiza gt
|
6 |
| 1132GHT
| leon tdi 105cv |
6 |
| M6836YX
| corolla g6
|
6 |
| 7423FZY
| coupe
|
6 |
| 3447BYD
| a3 tdi 130cv
|
6 |
+-----------+----------------+-----+

(En Oracle para poder utilizar las expresiones algebraicas es


necesario especificar FROM dual)

Fundamentos Bases de Datos


Consultas

SELECT marca FROM


vehiculos;
+---------+
| marca
|
+---------+
| seat
|
| seat
|
| toyota |
| hyundai |
| audi
|
+---------+

SELECT DISTINCT
marca
FROM vehiculos;
+---------+
| marca
|
+---------+
| seat
|
| toyota |
| hyundai |
| audi
|
+---------+

Realizar actividad 4.1

Fundamentos Bases de Datos


Consultas

Filtro: condicin que cualquier SGBD interpreta para


seleccionar registros y mostrarlos como resultado de la
consulta
SELECT [DISTINCT] select_expr
[,select_expr] ...
[FROM tabla]
[WHERE filtro];

siendo
filtro la expresin que indica la condicin o condiciones
que deben satisfacerse

Fundamentos Bases de Datos


Consultas

SELECT * FROM vehiculos


WHERE marca='seat';
+-----------+----------------+-------+
| matricula | modelo
| marca |
+-----------+----------------+-------+
| 1129FGT
| ibiza gt
| seat |
| 1132GHT
| leon tdi 105cv | seat |
+-----------+----------------+-------+

Fundamentos Bases de Datos


Consultas

#expresin 1 (oracle): (2+3)*7


SELECT (2+3)*7 from dual;
(2+3)*7
---------35

#expresin 2 (mysql): (2+3)>(6*2)


SELECT (2+3)>(6*2);
+-------------+
| (2+3)>(6*2) |
+-------------+
|
0 | #0 = falso, es falso que 5>12
+-------------+

Fundamentos Bases de Datos


Consultas

#(mysql): la fecha de hoy -31 aos;


SELECT date_sub(now(), interval 31 year);
+-----------------------------------+
| date_sub(now(), interval 31 year) |
+-----------------------------------+
| 1980-12-19 13:41:40
|
+-----------------------------------+

Leer fichero expresiones.pdf

Fundamentos Bases de Datos


Consultas

#selecciona los nombres de los jugadores de los Lakers:


SELECT Nombre FROM jugadores WHERE
Nombre_equipo='Lakers';

#selecciona los nombres de los jugadores espaoles de


los Lakers:
SELECT Nombre FROM jugadores WHERE
Nombre_equipo='Lakers'
and Procedencia='Spain';

Fundamentos Bases de Datos


Consultas

#Selecciona los jugadores espaoles y eslovenos de los Lakers


SELECT Nombre, Altura, Procedencia FROM
jugadores
WHERE Nombre_equipo='Lakers'
AND (Procedencia='Spain' OR
Procedencia='Slovenia');
+---------------+--------+-------------+
| Nombre
| Altura | Procedencia |
+---------------+--------+-------------+
| Pau Gasol
| 7-0
| Spain
|
| Sasha Vujacic | 6-7
| Slovenia
|
+---------------+--------+-------------+

Fundamentos Bases de Datos


Consultas

IN: Operador de pertenencia a conjuntos.


Sintaxis:
Nombre_columna IN

(valor_1, valor_2 , valor_3,)

Permite comprobar si una columna tiene un valor igual


que cualquiera de los que estn incluidos en el conjunto
de valores indicados de una manera ms corta que
utilizando el anidamiento de condiciones con OR.

Fundamentos Bases de Datos


Consultas

#Selecciona los jugadores espaoles, eslovenos y


serbios de los Lakers
SELECT Nombre, Altura,Procedencia
FROM jugadores
WHERE Nombre_equipo='Lakers' AND
Procedencia IN
('Spain','Slovenia','Serbia &
Montenegro');

Fundamentos Bases de Datos


Consultas

BETWEEN: Operador de rango.


Sintaxis:
Nombre_columna BETWEEN valor_1 AND valor_2

Permite seleccionar los registros que estn incluidos en


un rango de valores de una manera ms corta que
anidando condiciones con el operador AND.

Fundamentos Bases de Datos


Consultas

SELECT Nombre, Nombre_equipo, Peso FROM


jugadores
WHERE Peso BETWEEN 270 AND 300;
+----------------+---------------+------+
| Nombre
| Nombre_equipo | Peso |
+----------------+---------------+------+
| Chris Richard | Timberwolves | 270 |
| Paul Davis
| Clippers
| 275 |
| ....
| ....
| ... |
| David Harrison | Pacers
| 280 |
+----------------+---------------+------+

Realizar actividad 4.2

Fundamentos Bases de Datos


Consultas

IS: Operador de test de valor nulo.


IS NOT: Operador de test de valor no nulo

Sintaxis:
Nombre_columna IS null;
Nombre_columna IS NOT null;

Permite verificar si un valor es nulo o no.

Fundamentos Bases de Datos


Consultas

#seleccionar jugadores cuya procedencia es desconocida


SELECT nombre,Nombre_equipo
FROM jugadores WHERE Procedencia IS null;
+----------------+---------------+
| nombre
| Nombre_equipo |
+----------------+---------------+
| Anthony Carter | Nuggets
|
+----------------+---------------+

#la consulta contraria saca el resto de jugadores


SELECT nombre,Nombre_equipo
FROM jugadores WHERE Procedencia IS NOT null;

Fundamentos Bases de Datos


Consultas

Seleccionan los registros que cumplen una serie de


caractersticas usando los caracteres comodn % y _.

El carcter comodn % busca coincidencias de


cualquier nmero de caracteres, incluso cero
caracteres.
El carcter comodn _ busca coincidencias de
exactamente un carcter.

Fundamentos Bases de Datos


Consultas

SELECT * FROM vehiculos WHERE modelo


LIKE '%tdi%';
+-----------+----------------+-------+
| matricula | modelo
| marca |
+-----------+----------------+-------+
| 1132GHT
| leon tdi 105cv | seat |
| 3447BYD
| a3 tdi 130cv
| audi |
+-----------+----------------+-------+

Fundamentos Bases de Datos


Consultas

Sacar los equipos que empiecen por R, que terminen por S y


que tengan 7 caracteres.
Sacar los equipos que aparezca en su nombre como segunda
letra la o.

Fundamentos Bases de Datos


Consultas

Consiste en limitar el nmero de registros devuelto por


una consulta. Este tipo de filtro no es estndar y su
funcionamiento vara con el SGBD.
Sintaxis MySQL:
LIMIT [desplazamiento,]n_filas

Donde n filas indica el nmero de registros a devolver


y desplazamiento a partir de qu registro se empieza a
contar.
Sintaxis ORACLE:
rownum <|<= nfilas
Siendo rownum una pseudocolumna propia del SGBD

Fundamentos Bases de Datos


Consultas

#devuelve los 4 primeros registros


SELECT nombre, Nombre_equipo
FROM jugadores limit 4;

#devuelve 3 registros a partir del sexto


SELECT nombre, Nombre_equipo
FROM jugadores LIMIT 5,3;

Fundamentos Bases de Datos


Consultas

# Saca los 25 primeros jugadores


SELECT *
FROM jugadores
WHERE rownum <= 25;

Fundamentos Bases de Datos


Consultas

Para mostrar ordenados los registros se utiliza la clusula


ORDER BY:
SELECT [DISTINCT] select_expr
[,select_expr] ...
[FROM tabla]
[WHERE filtro]
[ORDER BY {nombre_columna | expr |
posicin} [ASC | DESC] , ...];

Fundamentos Bases de Datos


Consultas

SELECT
Division,Nombre
FROM equipos
WHERE
Conferencia='West'
ORDER BY
Division ASC,
Nombre DESC;

+-----------+---------------+
| Division | Nombre
|
+-----------+---------------+
| NorthWest | Trail Blazers |
| NorthWest | Timberwolves |
| NorthWest | Supersonics
|
| NorthWest | Nuggets
|
| NorthWest | Jazz
|
| Pacific
| Warriors
|
| Pacific
| Suns
|
| Pacific
| Lakers
|
| Pacific
| Kings
|
| Pacific
| Clippers
|
| SouthWest | Spurs
|
| SouthWest | Rockets
|
| SouthWest | Mavericks
|
| SouthWest | Hornets
|
| SouthWest | Grizzlies
|
+-----------+---------------+

Fundamentos Bases de Datos


Consultas

Se pueden generar consultas ms complejas que resuman cierta


informacin, extrayendo informacin calculada de varios conjuntos
de registros.
Hay que hacer uso de las funciones de columna que convierten un
conjunto de registros en una informacin simple:
SUM (Expresin)
#Suma los valores indicados en el
argumento
AVG (Expresin)
#Calcula la media de los valores
MIN (Expresin)
#Calcula el mnimo
MAX (Expresin)
#Calcula el mximo
COUNT (nbColumna) #Cuenta el nmero de valores de una
columna (excepto los nulos)
COUNT (*)
#Cuenta el nmero de valores de una fila
incluyendo los nulos.

Fundamentos Bases de Datos


Consultas

SELECT count(*) FROM vehiculos;


+----------+
| count(*) |
+----------+
|
5 |
+----------+

Fundamentos Bases de Datos


Consultas

#consulta 1: Cunto pesa el jugador ms pesado de la nba?


SELECT max(peso) FROM jugadores;
#consulta 2: Cunto mide el jugador ms bajito de la nba?
SELECT min(altura) FROM jugadores;
#consulta 3: Cuntos jugadores tienen los Lakers?
SELECT count(*) FROM jugadores WHERE
Nombre_equipo='Lakers';
#consulta 4: Cunto pesan de media los jugadores de los
Blazers?
SELECT avg(peso) FROM jugadores WHERE
Nombre_equipo='Blazers';

Fundamentos Bases de Datos


Consultas

Con las consultas de resumen se pueden realizar


agrupaciones de registros.
Se denomina agrupacin de registros a un conjunto de
registros que cumplen que tienen una o varias columnas
con el mismo valor.

Fundamentos Bases de Datos


Consultas

SELECT [DISTINCT] select_expr


[,select_expr] ...
[FROM tabla]
[WHERE filtro]
[GROUP BY expr [, expr].... ]
[ORDER BY {nombre_columna | expr |
posicin} [ASC | DESC] , ...]

Fundamentos Bases de Datos


Consultas

SELECT * FROM vehiculos;


+-----------+----------------+---------+
| matricula | modelo
| marca
|
+-----------+----------------+---------+
| 1129FGT
| ibiza gt
| seat
|
| 1132GHT
| leon tdi 105cv | seat
|
| M6836YX
| corolla g6
| toyota |
| 7423FZY
| coupe
| hyundai |
| 3447BYD
| a3 tdi 130cv
| audi
|
+-----------+----------------+---------+

SELECT marca, count(*)


FROM
vehiculos GROUP BY
marca;
+---------+----------+
| marca
| count(*) |
+---------+----------+
| audi
|
1 |
| hyundai |
1 |
| seat
|
2 |
| toyota |
1 |
+---------+----------+

Fundamentos Bases de Datos


Consultas

#Cunto pesa el jugador ms pesado de cada equipo?


SELECT Nombre_equipo, max(peso)
FROM jugadores GROUP BY Nombre_equipo;
#Cuntos equipos tiene cada conferencia en la nba?
SELECT count(*), conferencia
FROM equipos GROUP BY conferencia;
#Cunto pesan de media los jugadores de Espaa, Francia e
Italia?
SELECT
avg(peso),
procedencia
FROM
jugadores
WHERE
procedencia
IN
('Spain','Italy','France')
GROUP
BY
procedencia;

Fundamentos Bases de Datos


Consultas

Los filtros de grupos deben realizarse mediante el uso de la


clusula HAVING ya que WHERE acta antes de agrupar los
registros.
SELECT [DISTINCT] select_expr
[,select_expr] ...
[FROM tabla]
[WHERE filtro]
[GROUP BY expr [, expr].... ]
[HAVING filtro_grupos]
[ORDER BY {nombre_columna | expr |
posicin} [ASC | DESC] , ...]

HAVING aplica los mismos filtros que la clusula WHERE.

Fundamentos Bases de Datos


Consultas

# Seleccionar los equipos de la nba cuyos jugadores


pesen de media ms de 228 libras
SELECT Nombre_equipo, avg(peso)
FROM jugadores
GROUP BY Nombre_equipo
HAVING avg(peso)>228
ORDER BY avg(peso);

Fundamentos Bases de Datos


Consultas

# seleccionar qu equipos de la nba tienen ms de 1


jugador espaol
SELECT Nombre_equipo,count(*)
FROM jugadores
WHERE procedencia='Spain'
GROUP BY Nombre_equipo
HAVING count(*)>1;

También podría gustarte