MENU DESPLEGABLE

Comando select segunda parte


UNA CONSULTA BÁSICA ENTRE TABLAS

MySQL permite realizar consultas simultáneas en registros situados en varias tablas.

SINTAXIS:

SELECT __....campos...___ FROM tabla1,tabla2,...
WHERE tabla1.claveprincipal=tabla2.claveforanea,....;

CONSULTA EN TABLAS COMBINADAS

El JOIN nos permitirá obtener un listado de los campos que tienen coincidencias en ambas tablas.

  • SINTAXISPara 2 tablas:
SELECT __...campos...___ FROM tabla1
[INNER] JOIN tabla2
ON tabla1.claveprincipal=tabla2.claveforanea
WHERE condiciones_para_cualquier_campo_de_cualquier_tabla;


  • SINTAXISPara 3 tablas:

SELECT __...campos...___ FROM tabla1
[INNER] JOIN tabla2
ON tabla1.claveprincipal=tabla2.claveforanea
INNER JOIN tabla3
ON tabla2.claveprincipal=tabla3.claveforanea
WHERE condiciones_para_cualquier_campo_de_cualquier_tabla;

Ejemplo de Tablas Combinadas: Mostrar la relación de clientes que han obtenido un préstamo en alguna sucursal de Miraflores.

select nombre_cliente from clientes join prestamos on clientes.codcliente = prestamos.codcliente where  nombre_sucursal = “Miraflores”;

  • LEFT JOIN
  • RIGTH JOIN

Uso de cláusulas de Comando select en MySQL
 
Cláusula WHERE

Donde se especifican las condiciones de búsqueda y join  para las filas que conforman el conjunto resultado.

[select ...]    [from ...] where  condiciones_de_búsqueda

Las condiciones de búsqueda pueden incluir:

n  Operadores de Comparación (=, <>, < y >).
n  Porciones de cadenas de caracteres (substr)
n  Rangos (between y not between).
n  Listas (in, not in).
n  Patrones de caracteres (like y not like).
n  Valores desconocidos (is null y is not null).
n  Combinaciones con conjunciones (and, or).

Comodines en la cláusula where

COMODÍN
SIGNIFICADO
* %
Cualquier cadena de cero o más caracteres.
?, #, _
Cualquier carácter/ número único.
[-]
Cualquier carácter único dentro de un rango.
[!]
Cualquier carácter único que no está dentro de un rango.

Comodines en la cláusula where

….where  nombre_campo like ... no like "______"

Ø  like “Ma%”       busca todos los nombres que comiencen con “Ma”
                                               (Ej.: María, Mariana, Manuel, Martín)
Ø  like “%ía”          busca todos los nombres que terminen con “ía”.
                                               (Ej.: Sofía, María, Estefanía).
Ø  like “%ar%”      busca todos los nombres que tengan las letras “ar”.
                                               (Ej.:Carlos, Arturo, Eleazar).
Ø  like “_va”          busca todos los nombres de tres letras que terminan en “va”.              
(Ej.: Eva, Iva, Ava).
Ø  like “[CM]arlo[ns]”       busca todos los nombres:  Carlon, Marlon, Carlos y Marlos.
Ø  like  “[B-D]elia”              busca todos los nombres que terminan en “elia” y que comiencen con las letras de la B a la D.
(Ej.: Delia, Celia).
Ø  like “_ _ _”        busca todas las cadenas de exactamente 3 caracteres.
Ø  like “_ _ _ %”   busca las cadenas de al menos 3 caracteres.

EJEMPLOS DE LA SENTENCIA select

·         select emp_id, fecha_nac, direccion from empleado where nombre = “juan” and apellido = “perez”

·        select campo/s from [table] limit [numero];
Muestra los registros desde el 1 hasta [numero].
Ej. select * from clientes limit 10;  (Muestra los 10 primeros registros.)

·         select campo/s from [table] limit [numero inicio],[numero];
Muestra los registros desde el número de inicio hasta numero inicio + numero.
Ej. select * from clientes limit 11,10; (Muestra desde registro 11 hasta el 10.)


Cláusula GROUP BY

Especifica las columnas  por las que las filas van a estar agrupadas o particionadas. Los resultados de la consulta contiene un valor o conjunto de valores para cada conjunto de valores indicado por las funciones_de_agregación nombradas en la lista del select

SINTAXIS:

select columnas_de_agrupación,…, función_de_agregación,… from … [where …] group by columnas_de_agrupación,…

Funciones de Agregación más usadas
SUM([ALL|DISTINCT] expresión)
Calcula el total de una expresión numérica para todas las filas o sólo las distintas.
AVG([ALL|DISTINCT] expresión)
Calcula el promedio de una expresión numérica para las filas involucradas.
MIN([ALL|DISTINCT] expresión)
Calcula el mínimo valor de una expresión numérica para las filas involucradas
MAX([ALL|DISTINCT] expresión)
Calcula el máximo valor de una expresión numérica para las filas involucradas.
COUNT([ALL|DISTINCT] expresión)
Número de veces que se repite el valor de la expresión.
COUNT(*)
Número de filas seleccionadas

Ejemplo de Cláusula group by

·         Mostrar la suma de sueldo básico de los empleados activos, por Departamento.
select nombre_depto, sum(sueldobasico) from  empleado em, departamento de where em.iddepartamento = de.iddepartamento and estadoempleado= 'act’ group by  nombre_depto

·         “Obtener el número de titulares de cuenta de cada sucursal”
select nombre_sucursal, nombre-cliente from  titular-cuenta tc, cuenta cue where tc.numero-cuenta = cue. numero-cuenta group by nombre-sucursal

Cláusula HAVING

Especifica una restricción que aplica a las funciones de agregación de los grupos. Esto afecta a las filas que son devueltas como resultado y no al cálculo de las funciones de agregación.

La cláusula where si condiciona el número de filas que intervienen en el cálculo de las funciones de agregación.

SINTAXIS:

select {{columnas_de_agrupación,…}, {función_de_agregación,…}} from … [where …] group by {columnas_de_agrupación,…} having condiciones_de_búsqueda

Ejemplo de Cláusula having

·         Mostrar el sueldo promedio de los Departamentos con promedio superior a 1000”
select           nombre_depto, avg(sueldobasico) from  empleado em, departamento de where em.iddepartamento =         de.iddepartamento and estadoempleado= 'act' group by nombre_depto having avg(sueldobasico) > 1000

·         Saldo promedio de cada cliente de Surco que tiene como mínimo 3 cuentas”
select tc. nombre-cliente, avg (saldo) from  titular-cuenta tc, cuenta cue, cliente cli where tc.numero-cuenta = cue.numero-cuenta  and tc.nombre-cliente = cli.nombre-cliente and ciudad-cliente = “surco” group by tc.nombre-cliente having count (distinct tc.numero-cuenta) >= 3


Cláusula ORDER BY

Ordena el resultado de las consultas por los valores de las columnas mencionadas. 

Solamente se puede ordenar por las columnas especificadas en el SELECT.

·         ASC: Es el valor por defecto e indica que los resultados se van a presentar ascendentemente.
·         DESC: Debe especificarse al lado de la columna cuyo orden se desea ver en forma descendente.

Consideración: ordenar un gran número de tuplas puede ser costoso. Es conveniente ordenar sólo cuando sea estrictamente necesario.

SINTAXIS:

select {columna 1, columna 2,…} from tablas/s… [where …] [group by...] order by columna 1 [asc|desc],....

Ejemplos de Cláusula order by

·         select   nombre, avg(sueldobasico) from  empleado em, departamento de where em.departamento = de.departamento group by nombre order by avg(sueldobasico) desc

No hay comentarios:

Publicar un comentario