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:
#selecciona los nombres de los jugadores espaoles de los Lakers:
SELECT Nombre FROM jugadores WHERE
Nombre_equipo='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
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
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;
Top Related