• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
T7 - Select
 

T7 - Select

on

  • 521 views

SELECT en MySQL

SELECT en MySQL

Statistics

Views

Total Views
521
Views on SlideShare
466
Embed Views
55

Actions

Likes
0
Downloads
14
Comments
0

1 Embed 55

http://danisantiago.com 55

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    T7 - Select T7 - Select Presentation Transcript

    • Tema – 7 Consultas de selección. SELECT
    • Índice 1. Introducción 2. Sintaxis básica 3. Sentencia WHERE 4. Operadores 5. Sentencia ORDER BY 6. Tratamiento de valores nulos 7. Sentencia DISTINCT 8. Funciones de agregación 9. Sentencia GROUP BY 10. Sentencia HAVING 11. Sentencia LIMIT 12. UNION 13. Combinación entre tablas 1. Combinación interna 2. Combinación externa 14. Subconsultas 2
    • 7.1. SELECT • La sentencia SELECT es la más utilizada en las BBDD. Sirve para la realización de consultas con tal de obtener la información deseada. • Una consulta puede tener una sintaxis muy compleja, dependiendo de los datos que queramos obtener de la BDD. – – – – Podemos implicar a más de una tabla en una consulta. Podemos discriminar datos de la BDD según unos criterios. Podemos mostrar los datos ordenados. … 3
    • 7.2. Sintaxis básica • La sintaxis más sencilla de la sentencia SELECT es la siguiente: SELECT <expresión/columna>, <expresión/columna>, … FROM <tabla>, <tabla>, … ; 4
    • 7.2. Sintaxis básica • Ejemplo: tenemos una tabla Alumno (dni, nombre, apellidos, fecha_nacimiento, nota_exp), de la cual queremos obtener el nombre y nota de expediente de todos los alumnos: SELECT nombre, nota_exp FROM Alumno; 5
    • 7.2. Sintaxis básica • Ejemplo 2: se decide mostrar la nota de los alumnos con un incremento del 10%: SELECT nombre, nota_exp*1.1 FROM Alumno; • Ejemplo 3: queremos ver todos los datos de todos los alumnos: SELECT * FROM Alumno; 6
    • 7.2. Sintaxis básica • Los resultados que nos devuelve la sentencia SELECT se muestran en forma de tabla, en la que la primera columna corresponde a las columnas o expresiones que hemos puesto en nuestra sentencia SELECT. • Podemos dar nombre a los títulos de las columnas que se mostrarán en el resultado de nuestras consultas. 7
    • 7.2. Sintaxis básica • Sintaxis: SELECT <expresión/columna> AS alias, <expresión/columna> AS alias, … FROM <tabla>, <tabla> • Ejemplo 4: se decide mostrar la nota de los alumnos con un incremento del 10%: SELECT nombre, nota_exp*1.1 AS “Nota redondeada” FROM Alumno; 8
    • 7.3. Sentencia WHERE • La sintaxis de la sentencia SELECT se puede completar con la clausula WHERE. Esto nos permite seleccionar un conjunto de datos de una o más tablas cuyos valores cumplan los criterios que dicte la clausula WHERE. • SINTAXIS: SELECT <expresión/columna> AS alias, <expresión/columna> AS alias, … FROM <tabla>, <tabla> WHERE <condición de búsqueda>; 9
    • 7.3. Sentencia WHERE • Ejemplo 5: se quiere mostrar todos los datos de los alumnos aprobados SELECT * FROM Alumno WHERE nota_exp >= 5; 10
    • 7.3. Sentencia WHERE • La complejidad de la condición de búsqueda de la clausula WHERE puede ser muy alta debido a la cantidad de operadores disponibles para hacer operaciones. • A continuación veremos los operadores más comunes que se utilizan en las condiciones de búsqueda. 11
    • 7.4. Operadores • Operadores aritméticos: – +, -, *, /. • Operadores de comparación: – =, !=, >, <, >=, <=. – [NOT] LIKE, para comparar cadenas de caracteres usando patrones. Se pueden usar los caracteres especiales: • % (cualquier cadena de 0 o más caracteres). • _ (cualquier carácter). 12
    • 7.4. Operadores • Operadores de comparación: – Ejemplos: • LIKE ‘HOLA’. Compara con la cadena ‘HOLA’. • LIKE ‘HO%’. Compara con cualquier cadena que empiece por ‘HO’. • LIKE ‘%A%’. Compara con cualquier cadena que tenga ‘A’. • LIKE ‘_A%’. Compara con cualquier cadena que tenga ‘A’ como segundo carácter. • LIKE ‘____’. Compara con cadenas de 4 caracteres. 13
    • 7.4. Operadores • Operadores de comparación: – [NOT] BETWEEN valor1 AND valor2 – [NOT] IN (valor1, valor2, valor3, valor4, …) – IS [NOT] NULL • Todos estos operadores vistos se pueden encadenar con los operadores AND y OR. 14
    • 7.5. Sentencia ORDER BY • La sentencia SELECT nos ofrece una forma de mostrar los datos seleccionados ordenados bajo algún criterio. Esto lo conseguimos con la clausula ORDER BY. • Sintaxis: SELECT <expresión/columna> AS alias, <expresión/columna> AS alias, … FROM <tabla>, <tabla> WHERE <condición de búsqueda> ORDER BY <columna> [ASC/DESC]; 15
    • 7.5. Sentencia ORDER BY • Ejemplo: mostrar los datos de los alumnos aprobados, ordenados descendientemente por nota: SELECT * FROM Alumno WHERE nota_exp >= 5 ORDER BY nota_exp DESC; 16
    • 7.5. Sentencia ORDER BY • Ejemplo 2: mostrar los datos de los alumnos aprobados, ordenados descendientemente por nota, y crecientemente por nombre: SELECT * FROM Alumno WHERE nota_exp >= 5 ORDER BY nota_exp DESC, nombre ASC; 17
    • 7.6. Tratamiento de valores nulos • Hay diversas funciones que utilizan el valor NULL: – NULLIF (A,B): compara dos valores A y B y, si son iguales devuelve NULL, sino devuelve el primer valor (éste no debe ser NULL). – NULLS FIRST: la cláusula ORDER BY pone los valores nulos al final. Con NULLS FIRST pondremos estos valores al principio de la consulta. – COALESCE (A, B, C,…): devuelve el primer valor de la lista que no sea NULL. 18
    • 7.6. Tratamiento de valores nulos • Ejemplo: imaginemos la siguiente tabla: PRODUCTO VENTAS OBJETIVO Producto A 75 100 Producto B 200 200 Producto C 110 150 • Queremos mostrar NULL si las ventas han alcanzado el objetivo, y sino mostraremos las ventas actuales: SELECT producto, NULLIF(ventas, objetivo) FROM Producto 19
    • 7.6. Tratamiento de valores nulos • Ejemplo 2: mostramos los datos de los alumnos ordenados por nota, pero los que no tengan nota que aparezcan primero: SELECT nombre, apellidos, nota_exp FROM Alumno ORDER BY nota NULLS FIRST 20
    • 7.6. Tratamiento de valores nulos • Ejemplo 3: imaginemos la siguiente tabla: Id_articulo Fabricante Proveedor 100 10 NULL 200 NULL 4 • Un artículo nos lo sirve un fabricante o un proveedor, pero no los dos a la vez. Queremos una consulta que nos muestre el artículo y el suministrador (ya sea fabricante o proveedor), sin necesidad de mostrar valores nulos: SELECT id_articulo, COALESCE(Fabricante, Proveedor) Suministrador FROM Articulo 21
    • 7.7. Sentencia DISTINCT • La sentencia DISTINCT acompaña al SELECT y permite especificar que en el resultado no se presenten filas repetidas. • Sintaxis: SELECT DISTINCT <expresión/columna>, <expresión/columna> AS alias, … FROM <tabla>, <tabla> WHERE <condición de búsqueda> ORDER BY <columna> [ASC/DESC]; 22
    • 7.7. Sentencia DISTINCT • Ejemplo: en una BDD con las tablas “Departamento” y “Empleado” (relación 1:N) queremos saber el código del departamento donde trabaja algún empleado: SELECT DISTINCT cod_dept FROM Empleado; 23
    • 7.8. Funciones de agregación • Las funciones de agregación (o de agrupación) operan sobre conjuntos de filas para dar un resultado por grupo y devolver un único valor que se aplica a un grupo de registros. • Las funciones de agregación más usadas son: AVG, COUNT, MAX, MIN, SUM. 24
    • 7.8. Funciones de agregación • AVG (col): retorna el valor medio de la columna “col”, ignorando los valores nulos. • COUNT (* o expr): retorna el número de veces que “expr” aparece con valor no nulo. La opción “*” contabiliza todas las filas seleccionadas. • MAX (expr): retorna el valor máximo de “expr”. • MIN (expr): retorna el valor mínimo de “expr”. • SUM (expr): devuelve la suma de los valores de “expr” sin contar los valores nulos. 25
    • 7.8. Funciones de agregación • Ejemplo: cuántos alumnos tenemos en la escuela: SELECT count (*) AS “Número alumnos” FROM Alumno; • Ejemplo 2: cuántos alumnos con diferente nombre hay en nuestra escuela: SELECT count (DISTINCT nombre) AS “Nombres diferentes” FROM Alumno; 26
    • 7.9. Sentencia GROUP BY • La cláusula GROUP BY permite agrupar las filas resultantes de una consulta según una o más de las columnas seleccionadas. • Sintaxis: SELECT <expresión/columna>, <expresión/columna>… FROM <tabla>, <tabla> WHERE <condición de búsqueda> GROUP BY <alias/columna>, <alias/columna>,… ORDER BY <columna> [ASC/DESC]; 27
    • 7.9. Sentencia GROUP BY • Ejemplo: queremos saber la nota máxima de cada curso. SELECT id_curso, MAX(nota_exp) FROM Alumno GROUP BY id_curso; • Ejemplo 2: queremos saber las ventas totales de cada departamento: SELECT id_dept, SUM(ventas) FROM vendedor GROUP BY id_dept; 28
    • 7.9. Sentencia GROUP BY • De los ejemplos anteriores sacamos una regla importante: – Las columnas que aparecen en una sentencia SELECT y no lo hacen dentro de funciones de agregación, deben aparecer obligatoriamente en la cláusula GROUP BY. – No todas las columnas que aparecen en la cláusula GROUP BY deben hacerlo en la cláusula SELECT. 29
    • 7.10. Sentencia HAVING • La cláusula HAVING permite especificar condiciones de filtrado sobre los grupos resultantes de una cláusula GROUP BY. • Sintaxis: SELECT <expresión/columna>, <expresión/columna>… FROM <tabla>, <tabla> WHERE <condición de búsqueda> GROUP BY <alias/columna>, <alias/columna>,… HAVING <condición_sobre_grupos> ORDER BY <columna> [ASC/DESC]; 30
    • 7.10. Sentencia HAVING • Ejemplo: queremos saber la nota media los cursos, siempre que sea mayor o igual que 5. SELECT id_curso, AVG(nota_exp) FROM Alumno GROUP BY id_curso HAVING AVG(nota_exp) >= 5; • Ejemplo 2: queremos saber las ventas totales de cada departamento, cuyas ventas superen los 10.000€: SELECT id_dept, SUM(ventas) FROM vendedor GROUP BY id_dept HAVING SUM(ventas) > 10000; 31
    • 7.11. Sentencia LIMIT • La sentencia LIMIT nos permite limitar el número de filas que se mostrarán como resultado de la consulta. • Pondremos LIMIT siempre al final de la consulta. • LIMIT va acompañada de uno o dos parámetros numéricos. – Con un argumento: el valor indica el número de filas que queremos que se retornen desde el principio del conjunto de resultado. – Con dos argumentos: el primer valor indica cual es el primer registro del conjunto de resultados que queremos mostrar, y el segundo valor indica cuántos resultados queremos. 32
    • 7.11. Sentencia LIMIT • Ejemplo: queremos el nombre de los tres alumnos con mejor nota. SELECT nombre FROM Alumno ORDERED BY nota_exp DESC LIMIT 3; • Ejemplo 2: queremos todos los datos de los alumnos que ocupan las filas comprendidas entre la 5ª y la 14ª (hay que tener en cuenta que el primer registro ocupa la posición 0). SELECT * FROM Alumno LIMIT 4, 10; 33
    • 7.12. UNION • La sentencia UNION nos permite mostrar el resultado de dos sentencias SELECT, sin repeticiones. Las dos consultas que se pretenda unir deben tener el mismo número de columnas, y ser del mismo tipo de datos. 34
    • 7.12. UNION • Sintaxis: Sentencia_SELECT_sin_order_by UNION Sentencia_SELECT_sin_order_by ORDER BY… 35
    • 7.13. Combinación entre tablas • SQL nos proporciona las herramientas necesarias para poder realizar consultas de diversas tablas que están relacionadas. • Estas consultas combinadas pueden ser de dos tipos: – Combinación interna. – Combinación externa. 36
    • 7.13.1. Combinación interna • Imaginemos la siguiente BDD: • Queremos mostrar en una única consulta los datos de los alumnos y de su profesor. 37
    • 7.13.1. Combinación interna SELECT * FROM Alumno a, Profesor p WHERE a.idProfesor = p.idProfesor • Hemos dado un nombre a las tablas, y luego hemos antepuesto este nombre a los atributos de la cláusula WHERE. Esto se hace cuando los atributos de las dos tablas tienen el mismo nombre, y así evitar conflictos. 38
    • 7.13.1. Combinación interna SELECT * FROM Alumno INNER JOIN Profesor ON a.idProfesor = p.idProfesor • La cláusula INNER JOIN permite separar las condiciones de combinación de otros criterios, que incluiríamos a continuación en una cláusula WHERE. 39
    • 7.13.2. Combinación externa • La combinación interna no incluye en el resultado los registros que no cumplen la condición de combinación. • En algunos casos nos interesará obtener en el resultado tanto los registros que cumplan la condición de combinación, como los que no. • La combinación externa nos proporciona las herramientas para poder hacer estas consultas no excluyentes. Podremos usar: – LEFT OUTER JOIN – RIGHT OUTER JOIN 40
    • 7.13.2. Combinación externa SELECT * FROM Alumno LEFT OUTER JOIN Profesor ON a.idProfesor = p.idProfesor • Esta consulta nos devolverá todos los alumnos, independientemente de que tengan profesor o no (para estos últimos se mostrará NULL en todos los campos referentes a la tabla Profesor). 41
    • 7.13.2. Combinación externa SELECT * FROM Alumno RIGHT OUTER JOIN Profesor ON a.idProfesor = p.idProfesor • Esta consulta nos devolverá todos los alumnos que tengan profesor, y todos los datos de la tabla Profesor, tengan algún registro en Alumno o no. 42
    • 7.14. Subconsultas • Una subconsulta es una sentencia SELECT que se incluye dentro de la cláusula WHERE de otra sentencia SELECT. La subconsulta se cierra entre paréntesis y no incluye punto y coma final. • Podemos realizar cuatro tipos de subconsultas: – Comparación – Comparación cuantificada – Pertenencia a un conjunto – Existencia 43
    • 7.14. Subconsultas • Subconsulta de comparación: queremos saber los datos de los alumnos que han sacado mejor nota que el alumno ‘Ignacio’: SELECT * FROM Alumno WHERE nota_exp > (SELECT nota_exp FROM Alumno WHERE nombre = ‘Ignacio’); • La subconsulta siempre debe devolver un único valor, o una única columna. 44
    • 7.14. Subconsultas • Subconsulta de comparación cuantificada: en este tipo de subconsultas se realizan operaciones lógicas para comparar un valor de la fila actual con cada uno de los valores devueltos por la subconsulta. En este tipo de operaciones, las subconsultas deben hacerse en una única columna, nunca deben realizarse de manera que devuelva como resultado más de una columna. – Se pueden usar 3 cláusulas en estas consultas: ANY, SOMO, ALL. 45
    • 7.14. Subconsultas • Subconsulta de comparación cuantificada: queremos mostrar los datos de las alumnas cuya edad sea mayor que la de cualquier alumno: SELECT * FROM Alumno WHERE sexo=‘F’ AND edad > ALL (SELECT edad FROM Alumno WHERE sexo=‘M’); 46
    • 7.14. Subconsultas • Subconsulta de comparación cuantificada: queremos mostrar los datos de las alumnas cuya edad sea mayor que la de algún alumno: SELECT * FROM Alumno WHERE sexo=‘F’ AND edad > ANY (SELECT edad FROM Alumno WHERE sexo=‘M’); • ANY y SOME son equivalente. 47
    • 7.14. Subconsultas • Subconsulta de pertenencia a un conjunto: se comprobará si existe el valor de la consulta en alguno de los resultados producidos por la subconsulta con el operador IN. 48
    • 7.14. Subconsultas • Subconsulta de existencia: en esta consulta se comprobará si la subconsulta produce algún resultado. Si esta devuelve algún resultado, la operación devolverá el valor verdadero. • Ejemplo: buscamos todos los alumnos que no han pagado algún recibo: SELECT * FROM Alumno WHERE EXISTS (SELECT * FROM Moroso WHERE Alumno.id_alumno = Moroso.id_alumno 49