Está en la página 1de 24

BASE DE DATOS

Lenguaje de Consulta
Estructurado
SQL
Structured Query Language
Parte 2 .- SELECT
Prof. Edwuard Castaeda
Actualizado a 13/05/2014

BASE DE DATOS
AGENDA

Consultas:
Sintaxis.
Una Tabla
Al menos 2 tablas
INNER JOIN.
LEFT JOIN.
RIGHT JOIN.
Funciones de Agregacin
COUNT.
MAX.
MIN.
AVG.
SUM.

BASE DE DATOS
SQL Sintaxis - SELECT
SELECT
distintc, campos, funciones, (select's),
FROM
Tablas, join's, alias
WHERE
Condiciones por campo(s), Select, IN, BETWEEN,
LIKE, NOT, =, >, <, >=, <=,<>
GROUP BY
Campos
HAVING
Resultado
ORDER BY
campos

BASE DE DATOS
SQL DER Gestin de
Proyectos
proyecto
codigo
descripcion
trayecto
cod_tutor
cod_comunidad

comunidad
codigo
descripcion
cod_parroquia
representante

alumno
participa
codigo
cod_alumno
cod_proyecto
fecha_presenta
ptos_obtenido

tutor
codigo
nombre
apellido
sexo

codigo
cedula
nombre
apellido
sexo
fch_nacimiento

BASE DE DATOS
SQL Sintaxis SELECT
(Una Tabla)
Obtener un listado donde se muestren todos los campos de los alumnos
Solucin en lenguaje natural
SELECT todos los campos
FROM La tabla alumno
Solucin en lenguaje SQL

SELECT codigo, cedula, nombre, apellido, sexo, fch_nacimiento


FROM alumno
Otra forma (Usando el comodn * = Todos los campos)
SELECT *
FROM alumno

BASE DE DATOS
SQL Sintaxis SELECT
(Una Tabla)
Obtener un listado de alumnos donde se muestren la cedula, apellido y nombre
ordenado por apellido
Solucin en lenguaje natural
SELECT los campos cedula, apellido y nombre
FROM la tabla alumno
ORDER BY ordenado por el apellido
Solucin en lenguaje SQL
SELECT cedula, apellido, nombre
FROM alumno
ORDER BY apellido asc (Por defecto es ascendente, si se
requiere de forma descendente se especifica 'desc')

BASE DE DATOS
SQL Sintaxis SELECT
(Una Tabla)
Obtener un listado de alumnos que hayan nacido en el ao 2013, donde se
muestre la cedula, apellido y nombre, fch_nacimiento ordenado por apellido de
forma descendente

Solucin 1 en lenguaje SQL


SELECT cedula, apellido, nombre, fch_nacimiento
FROM alumno
WHERE fch_nacimiento>='01/01/2013' AND
fch_nacimiento<='31/12/2013'
ORDER BY apellido desc
Solucin 2 en lenguaje SQL
SELECT cedula, apellido, nombre, fch_nacimiento
FROM alumno
WHERE fch_nacimiento BETWEEN '01/01/2013' AND
'31/12/2013'
ORDER BY apellido desc

BASE DE DATOS
SQL Sintaxis SELECT
(Una Tabla)
Obtener un listado de proyectos que sean del trayecto 1 y 3, donde se muestre la
descripcion, y el trayecto

Solucin 1 en lenguaje SQL


SELECT trayecto, descripcion
FROM proyecto
WHERE trayecto=1 OR trayecto=3
ORDER BY descripcion
Solucin 2 en lenguaje SQL
SELECT trayecto, descripcion
FROM proyecto
WHERE trayecto IN (1,3)
ORDER BY descripcion

BASE DE DATOS
SQL Sintaxis SELECT
(Una Tabla)
Obtener un listado de proyectos donde su descripcin est relacionada con
inscripcin y que ademas sean del trayecto 2, donde se muestre la descripcion.
Solucin en lenguaje SQL
SELECT descripcion
FROM proyecto
WHERE trayecto=2 AND descripcion like '%inscripcin%'

Obtener un listado de tutores que su apellido empiece con 'C' donde se muestre
nombre, apellido.
Solucin en lenguaje SQL
SELECT nombre, apellido
FROM tutor
WHERE apellido like 'C%'

BASE DE DATOS
SQL Sintaxis SELECT
(Dos Tablas)
Sintaxis SQL para select's que involucran ms de una tabla
SELECT campos
FROM tabla1, tabla2,...,tablaN
WHERE (tabla1.campoprimario = tabla2.campoforaneo) and ... and
(tablaN-1.campoprimario = tablaN.campoforaneo)
SELECT campos
FROM tabla1 INNER JOIN tabla2 ON
(tabla1.campoprimario = tabla2.campoforaneo)
INNER JOIN tablaN ON
(tablaN-1.campoprimario = tablaN.campoforaneo)

Regla de Oro: Al involucrar dos o mas tablas, se debe


establecer una condicin de igualdad entre las tablas
mediante la relacin de sus campos claves

BASE DE DATOS
SQL Sintaxis SELECT
(Dos Tablas)
Obtener un listado de proyectos con su tutor, donde se muestre la apellido y
nombre del tutor, la descripcion y trayecto del proyecto, ordenarlos por apellido del
tutor.
Solucin en Lenguaje Natural
SELECT campos de las tablas
FROM tablas involucradas
WHERE se igualan los campos claves relacionados.
SELECT apellido, nombre, descripcion, trayecto
FROM tutor, proyecto
WHERE tutor.codigo = proyecto.cod_tutor
ORDER BY apellido asc

En ambos casos se debe


igualar el campo primario de la
tabla tutor(codigo) con su
correspondiente campo forneo
proyecto(cod_tutor)

SELECT apellido, nombre, descripcion, trayecto


FROM tutor INNER JOIN proyecto ON
(tutor.codigo = proyecto.cod_tutor)
ORDER BY apellido asc

BASE DE DATOS
SQL Sintaxis SELECT
(Dos Tablas)
Obtener un listado de proyectos con su tutor, donde se muestre la apellido y
nombre del tutor, la descripcion y trayecto del proyecto, ordenarlos por apellido del
tutor.
Solucin en Lenguaje Natural
SELECT campos de las tablas cuidando la ambiguedad
FROM tablas involucradas
WHERE se igualan los campos claves relacionados.
SELECT apellido, nombre, descripcion, trayecto
FROM tutor, proyecto
WHERE tutor.codigo = proyecto.cod_tutor
ORDER BY apellido asc

En ambos casos se debe


igualar el campo primario de la
tabla tutor(codigo) con su
correspondiente campo forneo
proyecto(cod_tutor)

SELECT apellido, nombre, descripcion, trayecto


FROM tutor INNER JOIN proyecto ON
(tutor.codigo = proyecto.cod_tutor)
ORDER BY apellido asc

BASE DE DATOS
SQL Sintaxis SELECT
(Tres Tablas)
Obtener un listado de alumnos que participan en los proyectos (15,19,21), donde
se muestre del alumno, codigo, nombre, apellido, de los proyectos codigo y
descripcion, ademas de indicar fecha de presentacin del mismo y puntaje
obtenido por alumno
Existir ambieguedad, si se
Solucin en SQL
hace referencia a un campo que
SELECT campos de las tablas cuidando la ambiguedad
FROM tablas involucradas
WHERE se igualan los campos claves relacionados.
Solucin en SQL

est tambin definido en otra


tabla, Para resolver la
ambiguedad se antepone el
nombre de la tabla al campo
que se quiere indicar y a
continuacin el smbolo punto
(.)

SELECT alumno.codigo, nombre, apellido, proyecto.codigo, descripcion,


fecha_presenta, ptos_obtenido
FROM alumno INNER JOIN participa ON
(alumno.codigo=participa.cod_alumno)
INNER JOIN proyecto ON
(participa.cod_proyecto = proyecto.codigo)
WHERE proyecto.codigo in (15,19,21)

BASE DE DATOS
SQL Sintaxis SELECT
(Tres Tablas)
Obtener un listado de alumnos que participan en los proyectos (15,19,21), donde
se muestre del alumno, codigo, nombre, apellido, de los proyectos codigo y
descripcion, ademas de indicar fecha de presentacin del mismo y puntaje
obtenido por alumno

Solucin en SQL mediante el uso de alias

Existir ambieguedad, si se
hace referencia a un campo que
est tambin definido en otra
tabla. Para resolver la
ambiguedad se definen alias en
el From... Tabla t1, y se
antepone el nombre del alias al
campo que se quiere indicar y a
continuacin el smbolo punto
(.)

SELECT a.codigo, nombre, apellido,p.codigo, descripcion,


fecha_presenta, ptos_obtenido
FROM alumno a INNER JOIN participa pa ON
(a.codigo=pa.cod_alumno)
INNER JOIN proyecto p ON
(pa.cod_proyecto = p.codigo)
WHERE p.codigo in (15,19,21)

BASE DE DATOS
SQL Sintaxis SELECT
(Cuatro Tablas)
Obtener un listado de alumnos que participan en los proyectos (15,19,21), donde
se muestre del alumno, codigo, nombre, apellido, de los proyectos codigo y
descripcion, ademas de indicar fecha de presentacin del mismo y puntaje
obtenido por alumno, Debe indicar tambin el nombre y apellido de su tutor

Solucin en SQL mediante el uso de alias


SELECT a.codigo, a.nombre, a.apellido,p.codigo, descripcion,
fecha_presenta, ptos_obtenido, t.apellido, t.nombre
FROM alumno a INNER JOIN participa pa ON
(a.codigo=pa.cod_alumno)
INNER JOIN proyecto p ON
(pa.cod_proyecto = p.codigo)
INNER JOIN tutor t ON
(p.cod_tutor = t.codigo)
WHERE p.codigo in (15,19,21)

BASE DE DATOS
SQL Sintaxis SELECT
(Cinco Tablas)
Obtener un listado de alumnos que participan en los proyectos (15,19,21), donde
se muestre del alumno, codigo, nombre, apellido, de los proyectos codigo y
descripcion, ademas de indicar fecha de presentacin del mismo y puntaje
obtenido por alumno, Debe indicar tambin el nombre y apellido de su tutor y la
descripcion de la comunidad

Solucin en SQL mediante el uso de alias


SELECT a.codigo, a.nombre, a.apellido,p.codigo, p.descripcion,
fecha_presenta, ptos_obtenido, t.apellido, t.nombre, c.descripcion
FROM alumno a INNER JOIN participa pa ON
(a.codigo=pa.cod_alumno)
INNER JOIN proyecto p ON
(pa.cod_proyecto = p.codigo)
INNER JOIN tutor t ON
(p.cod_tutor = t.codigo)
INNER JOIN comunidad c ON
(p.cod_comunidad = c.codigo)
WHERE p.codigo in (15,19,21)

BASE DE DATOS
SQL Sintaxis SELECT
(LEFT JOIN)
Obtener un listado de todas las registradas comunidades. Si alguna dispone de
proyecto indicar cual mediante la descripcin del mismo.
Solucin en SQL mediante el uso de alias
SELECT c.codigo, c.descripcion, p.descripcion
FROM comunidades c LEFT JOIN proyecto p ON
(p.cod_comunidad = c.codigo)

LEFT JOIN... Muestra todos los elementos


del lado izquierdo, con su
correspondiente del lado derecho
si lo tiene, en caso contrario
del lado derecho coloca null
Cmo ser RIGHT JOIN ?

BASE DE DATOS
SQL Sintaxis SELECT
(Funciones de Agregacin )
Funciones (dependiendo del campo especificado)
COUNT: Cuenta la cantidad de registros no nulos.(se puede especificar '*')
SUM: Suma los valores.
MAX: Obtiene el valor mximo.
MIN: Obtiene el valor mnimo.
AVG: Obtiene el promedio
Regla de Oro
Al utilizar una funcin de agregacin
en una consulta, se se colocan campos
adicionales, se debe
colocar la clausula
GROUP BY
con todos los campos que se indiquen

BASE DE DATOS
SQL Sintaxis SELECT
(COUNT)
Obtener la cantidad de alumnos registrados.
Solucin en SQL
SELECT count(*)
FROM alumno
Obtener la cantidad de alumnos registrados del sexo masculino.
Solucin en SQL
SELECT count(*)
FROM alumno
WHERE sexo = 'M'
Obtener la cantidad de alumnos registrados del sexo masculino y que el
apellido contenga 'ez'.
Solucin en SQL
SELECT count(*)
FROM alumno
WHERE sexo = 'M' AND apellido LIKE '%ez%'

BASE DE DATOS
SQL Sintaxis SELECT
(COUNT)
Obtener la cantidad de alumnos registrados por sexo.
Solucin en SQL
SELECT count(*), sexo
FROM alumno
GROUP BY sexo
Obtener la cantidad de proyectos registrados por trayecto y que ademas la
descripcin del proyecto contenga la palabra 'hospital'
Solucin en SQL
SELECT count(*), trayecto
FROM proyecto
WHERE descripcion LIKE '%hospital%'
GROUP BY trayecto

BASE DE DATOS
SQL Sintaxis SELECT
(MAX)
Obtener el mximo puntaje obtenido para un proyecto
Solucin en SQL
SELECT MAX(ptos_obtenido)
FROM participa
Obtener los alumnos que han obtenido el mayor puntaje en los proyectos
presentados
Solucin en SQL
SELECT nombre, apellido, p.descripcion, p.trayecto
FROM alumno a INNER JOIN participa pa ON
(a.codigo=pa.cod_alumno)
INNER JOIN proyecto p ON
(pa.cod_proyecto=p.codigo)
WHERE ptos_obtenidos = (
SELECT MAX(ptos_obtenido)
FROM participa
)

BASE DE DATOS
SQL Sintaxis SELECT
(MIN)
Obtener el mnimo puntaje obtenido para un proyecto
Solucin en SQL
SELECT MIN(ptos_obtenido)
FROM participa
Obtener los alumnos que han obtenido el mnimo puntaje en los proyectos
presentados
Solucin en SQL
SELECT nombre, apellido, p.descripcion, p.trayecto
FROM alumno a INNER JOIN participa pa ON
(a.codigo=pa.cod_alumno)
INNER JOIN proyecto p ON
(pa.cod_proyecto=p.codigo)
WHERE ptos_obtenidos = (
SELECT MIN(ptos_obtenido)
FROM participa
)

BASE DE DATOS
SQL Sintaxis SELECT
(AVG)
Obtener el promedio sobre el puntaje obtenido para los proyectos presentados
Solucin en SQL
SELECT AVG(ptos_obtenido)
FROM participa
WHERE fecha_presenta is not null
Obtener los alumnos que han obtenido el puntaje igual al promedio en los
proyectos presentados
Solucin en SQL
SELECT nombre, apellido, p.descripcion, p.trayecto
FROM alumno a INNER JOIN participa pa ON
(a.codigo=pa.cod_alumno)
INNER JOIN proyecto p ON
(pa.cod_proyecto=p.codigo)
WHERE ptos_obtenidos = (
SELECT AVG(ptos_obtenido)
FROM participa
WHERE fecha_presenta is not null )

BASE DE DATOS
SQL Sintaxis SELECT
(SUM)
Obtener la sumatoria de puntaje obtenidos para los proyectos presentados
Solucin en SQL
SELECT SUM(ptos_obtenido)
FROM participa

También podría gustarte