Está en la página 1de 8

ESTRUCTURA DE UNA CONSULTA

Opcional / Lo que más se utiliza en combinación con la clausula de


Clausula Lo que se pone después de la clausula
Requerido la estructura:

Requerido SELECT Lista de columnas que se quieren consultar o con las que Funciones de columna y de renglón; Clausula
se quiere realizar una operación. DISCTINCT; Operaciones aritméticas; Subconsultas

Requerido FROM Relación de tablas que contienen (o que vinculan tablas) INNER JOIN; LEFT OUTER JOIN; RIGHT OUTER
con las columnas antes listadas. JOIN; FULL OUTER JOIN

Opcional WHERE Condición simple o compuesta para recuperar renglones LIKE, ‘-‘ y ‘%’; BETWEEN y AND; IN(..); IS NULL;
que se ajusten a la misma. IS NOT NULL; OPERACIONES ARITMETICAS
(+,-,* Y /);OPERACIONES LÓGICAS (AND, OR y
NOT); OPERACIONES DE COMPARACIÓN (=,<>,>,<,
>= y <=); Subconsultas

Opcional GROUP BY Lista de columnas con las que se quiere agrupar una HAVING
consulta.
Opcional ORDER BY Lista de columnas con las que se quiere ordenar la DESC; ASC
consulta

Consultas ejemplo con la base de datos del modelo anterior

Consultar todas las columnas de la tabla ALUMNO.

SELECT BOLETA,NOMBRE_ALUMNO,DIR_ALUMNO,ESTATUS,NOMBRE_TUTOR,TEL_ALUMNO,PROMEDIO,CORREO_E,CVE_CARRERA,PLAN_ESTUDIOS
FROM ALUMNO

Ó
SELECT *
FROM ALUMNO

…… La consulta anterior con todas las columnas se puede hacer citando todas las columnas o simplemente con un asterisco.
Consultar BOLETA y NOMBRE_ALUMNO de la tabla ALUMNO para tener un listado de los alumnos registrados en nuestra base de datos.

SELECT BOLETA, NOMBRE_ALUMNO


FROM ALUMNO

…… La consulta anterior realiza una operación que se llama proyección, es decir solo considera algunas columnas.

Ahora agregando el promedio a la consulta…

SELECT BOLETA, NOMBRE_ALUMNO, PROMEDIO


FROM ALUMNO

Poniendo diferente encabezado de columna…

SELECT BOLETA "Número de boleta", NOMBRE_ALUMNO "Nombre con apellidos", PROMEDIO RENDIMIENTO
FROM ALUMNO

Realizando una operación aritmética con alfanuméricos…

SELECT 'EL ALUMNO : ' + NOMBRE_ALUMNO + ' CON NÚMERO DE BOLETA : ' + BOLETA + 'TIENE COMO PROMEDIO : PROMEDIO', PROMEDIO
FROM ALUMNO

Ahora realizando una operación con alfanuméricos y numéricos

SELECT 'EL ALUMNO : ' + NOMBRE_ALUMNO + ' CON NÚMERO DE BOLETA : ' + BOLETA + 'TIENE COMO PROMEDIO : PROMEDIO' "DATOS
DEL ALUMNO", PROMEDIO, ' FALTA ' + CAST((10 - PROMEDIO) AS CHAR) + 'PARA OBTENER 10' "META"
FROM ALUMNO

…… Las consultas anteriores utilizan comillas (“ “) para cambiar el encabezado de las columnas pero cuando ese encabezado es de varias
palabras, si solo es de una palabra el encabezado no son necesarias las comillas
…… Las consultas anteriores utilizan comillas simples (‘’) para agregar una cadena de caracteres al resultado de la consulta.
…… Las consultas anteriores utilizan operaciones aritméticas, la restricción es alfanuméricos con alfanuméricos y numéricos con
numéricos.

Ahora restringiendo el número de renglones en la consulta por una condición simple

SELECT BOLETA, NOMBRE_ALUMNO, PROMEDIO


FROM ALUMNO
WHERE BOLETA = '2008602598'

…… Lo anterior se llama restricción y utiliza la clausula WHERE para llevarla a cabo, una condición puede ser simple, o compuesta si
agrega varios operadores (aritméticos, lógicos o de comparación).
Ahora realizando una consulta de 2 tablas

SELECT BOLETA, NOMBRE_ALUMNO, PROMEDIO, NOMBRE_CARRERA


FROM CARRERA, ALUMNO

…… Lo anterior se llama producto cartesiano (todos los renglones de una tabla se relacionan con todos los de la otra tabla).

Ahora realizando la consulta pero con una condición para convertir el producto cartesiano en intersección.

SELECT BOLETA, NOMBRE_ALUMNO, PROMEDIO, NOMBRE_CARRERA


FROM CARRERA, ALUMNO
WHERE CARRERA.CVE_CARRERA = ALUMNO.CVE_CARRERA AND
CARRERA.PLAN_ESTUDIOS = ALUMNO.PLAN_ESTUDIOS

…. La anterior consulta realiza una operación que se llama intersección (es cuando se vinculan 2 tablas con una condición de igualdad y
los renglones de una tabla se relacionan con los de la otra solo cuando se cumple esa condición de igualdad).

Ahora con las clausulas INNER JOIN Y ON en una consulta de 2 tablas

SELECT BOLETA, NOMBRE_ALUMNO, PROMEDIO, NOMBRE_CARRERA


FROM CARRERA INNER JOIN ALUMNO ON CARRERA.CVE_CARRERA = ALUMNO.CVE_CARRERA AND
CARRERA.PLAN_ESTUDIOS = ALUMNO.PLAN_ESTUDIOS

Ahora en una consulta de 3 tablas

SELECT GRUPO.CVE_SECUENCIA, NO_GRUPO, GRUPO.CVE_UAP, NOMBRE_U_AP


FROM GRUPO INNER JOIN SECUENCIA ON GRUPO.CVE_SECUENCIA = SECUENCIA.CVE_SECUENCIA
INNER JOIN U_APRENDIZAJE ON GRUPO.CVE_UAP = U_APRENDIZAJE.CVE_UAP

Ahora una consulta con OUTER JOIN, La consulta de los alumnos con su carrera incluyendo todas las carreras aun cuando no tengan alumnos
relacionados.

SELECT BOLETA, NOMBRE_ALUMNO, PROMEDIO, NOMBRE_CARRERA


FROM CARRERA LEFT OUTER JOIN ALUMNO ON CARRERA.CVE_CARRERA = ALUMNO.CVE_CARRERA AND
CARRERA.PLAN_ESTUDIOS = ALUMNO.PLAN_ESTUDIOS

…. La anterior consulta realiza una intersección (pero con una adecuación para también considerar renglones aún cuando no se cumple con
la condición de igualdad).

Ahora una consulta Con el nombre del alumno “CARLOS BARRERA” con las secuencias que está cursando.

SELECT DISTINCT ALUMNO.BOLETA, NOMBRE_ALUMNO, CVE_SECUENCIA


FROM ALUMNO INNER JOIN CALIFICACIONES_SEMESTRE
ON ALUMNO.BOLETA = CALIFICACIONES_SEMESTRE.BOLETA
WHERE NOMBRE_ALUMNO = 'CARLOS BARRERA'

…. Lo anterior (DISTINCT) se utiliza para no repetir los mismos valores de renglones en la consulta.
Ahora un subconsulta en lugar de una columna a consultar

SELECT BOLETA, NOMBRE_ALUMNO, (SELECT NOMBRE_CARRERA


FROM CARRERA
WHERE CARRERA.CVE_CARRERA = ALUMNO.CVE_CARRERA AND
CARRERA.PLAN_ESTUDIOS = ALUMNO.PLAN_ESTUDIOS) CARRERA

FROM ALUMNO

…. Lo anterior utiliza una consulta dentro de otra consulta y regresa a la consulta principal el valor de la columna NOMBRE_CARRERA,
pero le pone de encabezado CARRERA.

Ahora un subconsulta en la clausula WHERE

SELECT 'Esau Hernandez Matias', CVE_SECUENCIA, CVE_UAP, PRIMER_DEP


FROM CALIFICACIONES_SEMESTRE
WHERE BOLETA = (SELECT BOLETA FROM ALUMNO WHERE NOMBRE_ALUMNO = 'Esau Hernandez Matias')

…. Lo anterior utiliza una consulta dentro de otra consulta en la clausula where para recuperar las calificaciones del primer
departamental del alumno Esau Hernandez Matias.

Ahora un subconsulta en la clausula WHERE, pero también utilizando una función de columna.

SELECT BOLETA, NOMBRE_ALUMNO, PROMEDIO


FROM ALUMNO
WHERE PROMEDIO = (SELECT MAX(PROMEDIO) FROM ALUMNO)

…. Lo anterior utiliza una subconsulta que recupera el valor máximo de la columna promedio para condicionar a la consulta principal a
recuperar solo a los alumnos con el promedio máximo.

Ahora un consulta que utiliza un funcion DATEPART que es una funcion de renglón.

SELECT CVE_PERIODO, TIPO_PERIODO,


DATEPART(YY,FECHA_INI) 'AÑO DE INICIO',
DATEPART(MM,FECHA_INI) 'MES DE INICIO'

…. La consulta anterior realiza una consulta para realizar una función en cada renglón que sea parte de la consulta.

FROM PERIODO
Ahora una consulta para recuperar datos de alumnos cuyo nombre empiece con la letra E

SELECT *
FROM ALUMNO
WHERE NOMBRE_ALUMNO LIKE 'E%'

…. La consulta anterior utiliza la clausula LIKE para condicionar la consulta para recuperar solo los renglones en donde el nombre del
alumno inicie con la letra E y después exista lo que sea como nombre.

Ahora una consulta para recuperar datos de alumnos cuyo promedio este entre 7 y 8

SELECT *
FROM ALUMNO
WHERE PROMEDIO BETWEEN 7 AND 8

…. La consulta anterior utiliza la clausula BETWEEN se acompaña de AND para mencionar un rango de valores que condicionar la consulta.

Ahora una consulta para recuperar datos de alumnos con boleta sea: 2009311117, 2011600240 y 2011602518

SELECT *
FROM ALUMNO
WHERE BOLETA IN ('2009311117','2011600240','2011602518')

…. La consulta anterior utiliza la clausula IN que se acompaña de paréntesis para listar los valores que condicionan la consulta.

Ahora una consulta para recuperar datos de alumnos cuando el el nombre de tutor existe como responsable y posteriormente
otra consulta con lo opuesto.

SELECT *
FROM ALUMNO
WHERE NOMBRE_TUTOR IS NOT NULL

SELECT *
FROM ALUMNO
WHERE NOMBRE_TUTOR IS NULL

…. La consulta anterior utiliza las clausulas IS NOT NULL e IS NULL para restringir la consulta cuando una columna tiene valores o no.
Ahora consultas para recuperar boleta, nombre, carrera y promedio de alumnos de las carreras de Ciencias e Ingenierìa en
Infomàtica en donde los promedios de Ciencias sean mayores a 9 y los de Ingenierìa sean mayores a 8, tambien ordenarlos
por carrera y nombre del alumno primero, y despues por carrera (ascendente) y promedio (descendente)

SELECT BOLETA, NOMBRE_ALUMNO, CVE_CARRERA, PROMEDIO


FROM ALUMNO
WHERE (CVE_CARRERA = 'C' AND PROMEDIO > 9) OR
(CVE_CARRERA = 'N' AND PROMEDIO > 8)
ORDER BY CVE_CARRERA, NOMBRE_ALUMNO

SELECT BOLETA, NOMBRE_ALUMNO, CVE_CARRERA, PROMEDIO


FROM ALUMNO
WHERE (CVE_CARRERA = 'C' AND PROMEDIO > 9) OR
(CVE_CARRERA = 'N' AND PROMEDIO > 8)
ORDER BY CVE_CARRERA ASC, PROMEDIO DESC

…. La consulta anterior utiliza una condición compuesta puesto que utiliza una combinación de operadores que se agrupan con paréntesis
para identificar las operaciones que se tienen que realizar primero.
…. La consulta anterior utiliza la clausula ORDER BY para ordenar en base a la carrera y después a promedio, pero hay diferencia entre
la primera consulta y la segunda para ilustrar las clausulas ASC Y DESC.

…. Ahora usando GROUP BY para realizar operación considerando grupos

SELECT NOMBRE_ALUMNO, COUNT(CALIFICACIONES_SEMESTRE.BOLETA), AVG(PRIMER_DEP) "PROMEDIO PRIMER DEP"


FROM ALUMNO INNER JOIN CALIFICACIONES_SEMESTRE
ON ALUMNO.BOLETA = CALIFICACIONES_SEMESTRE.BOLETA
WHERE PRIMER_DEP IS NOT NULL
GROUP BY NOMBRE_ALUMNO, CALIFICACIONES_SEMESTRE.BOLETA
ORDER BY CALIFICACIONES_SEMESTRE.BOLETA
-- Comprobación

SELECT NOMBRE_ALUMNO, PRIMER_DEP


FROM ALUMNO INNER JOIN CALIFICACIONES_SEMESTRE
ON ALUMNO.BOLETA = CALIFICACIONES_SEMESTRE.BOLETA
WHERE NOMBRE_ALUMNO = 'Antonio Arias Mejia'
SELECT (CARRERA.CVE_CARRERA), NIVEL_UAP, ALUMNO.BOLETA, AVG(PRIMER_DEP)

FROM CARRERA INNER JOIN ALUMNO


ON CARRERA.CVE_CARRERA = ALUMNO.CVE_CARRERA AND
CARRERA.PLAN_ESTUDIOS = ALUMNO.PLAN_ESTUDIOS
INNER JOIN CALIFICACIONES_SEMESTRE
ON ALUMNO.BOLETA = CALIFICACIONES_SEMESTRE.BOLETA
INNER JOIN U_APRENDIZAJE_CARRERA
ON CARRERA.CVE_CARRERA = U_APRENDIZAJE_CARRERA.CVE_CARRERA AND
CARRERA.PLAN_ESTUDIOS = U_APRENDIZAJE_CARRERA.PLAN_ESTUDIOS

GROUP BY CARRERA.CVE_CARRERA, NIVEL_UAP, ALUMNO.BOLETA

ORDER BY CVE_CARRERA, NIVEL_UAP, ALUMNO.BOLETA

También podría gustarte