Você está na página 1de 11

SQL (Structured Query Language)

Las operaciones sobre la base de datos estn determinadas por el Lenguaje SQL, bajo estndares determinados los cuales pueden ser utilizadas de forma bsica o avanzada segn el DBMS utilizado.

SELECT Operaciones Adicionales 1 Operaciones Adicionales 2 Operaciones Adicionales 3 Operaciones Adicionales 4 Operaciones Adicionales 5 Operaciones Adicionales 6 Tutorial Sql (.pdf) EJERCICIOS

Las operaciones SQL correspondientes al SELECT se realizarn con el siguente ejempo: PERSONAS Cedula Nombre 71134534 Juan 23423445 12453535 75556743 43533322 78900456 Primer_Apellido Segundo_Apellido Sexo Direccin Mesa Uribe M Cra 25 22-1 Cra 45 11Ana Mara Betancur Bermudez F 13 Gloria Betancur Garces F Tr. 12 43-5 Cll.6ta 14Pedro Ochoa Pelaez M 45 Patricia Angel Guzmn F Cll. 45 23-1 Carlos Betancur Agudelo M Cir. 5 12-5 Telefono Salario Cedula_Sup Cod_dep 2567532 1,600,000 23423445 3 3433444 1,700,000 43890231 2756533 1,350,000 71134534 2686885 1,700,000 43890231 2674563 1,350,000 71134534 4445775 1,500,000 75556743 2 3 1 3 1

73456789 Mario 43890231 Claudia 78900700 Fabio DEPENDIENTES Cedula 78900456 78900456 23423445 71134534 71134534 75556734

Gmez Gonzalez Solano

Angel Beltran Prez

M F M

Cr. 53 23-1 3456789 1,200,000 23423445 Cll. 10 14-1 2660356 1,800,000 43890231 Tr. 3 32-1 4345678 1,200,000 75556743

2 0 1

Nombre_Dep Juanita Oscar Hector Mara Gloria Jorge

Sexo F M M F F M

FechaN 12-Abr-95 15-Ene-89 23-Dic-67 05-Mar-60 27-Nov-97 14-Mar-96

Parentesco Hija Hijo Cnyuge Cnyuge Hija Hijo

DEPARTAMENTOS Codigo_Dep 0 1 2 3 PROYECTOS Numero_Proy 129001 139001 139002 Nombre Registro y Matrcula Red Lan Instalacin nuevo Switche Lugar Bloque 21 Bloque 14 Bloque 21 Codigo_Dep 2 1 1 Nombre_Dep Gerencia Teleinformatica Desarrollo Soporte Tcnico Cedula_Jefe 43890231 75556734 23423445 71134534

129002 129003 149001 149002 149003

Notas Paso de aplicativos FOXPRO A COBOL Inventario de HW y SW Licenciamiento Evaluacin de equipos PC's

Campus Bloque 21 Minas Campus Bloque 18

2 2 3 3 3

1. OPERACIN SELECT
La sintaxis bsica de esta operacin es: SELECT <lista de atributos> FROM <lista de tablas> WHERE <condiciones> Ejemplos: a. Select bsico. Se desea obtener la cdula y el nombre de todas las personas que trabajan en la compaa. SELECT cedula, nombre FROM personas Similar la operacin el lgebra relacional sera:

cedula, nombre

(PERSONAS)

Resultado/ Cedula 71134534 23423445 12453535 Nombre Juan Ana Mara Gloria

75556743 43533322 78900456

Pedro Patricia Carlos

b. Select con clausula WHERE. Se desea obtener toda la informacin de la persona cuya cdula sea igual a 12453535. SELECT nombre,primer_apellido,segundo_apellido,direccion,telefono FROM personas WHERE cedula = 12453535 Similar la operacin el lgebra relacional sera:

nombre, primer_apellido, segundo_apellido, direccion, telefono

cedula = 1245353

(PERSONAS) )

Resultado/ Nombre Gloria Primer_Apellido Betancur Segundo_Apellido Garces Direccin Tr. 12 43-5 Telefono 2756533

c. En la clausula WHERE es posible utilizar los conectores lgicos AND - OR. Se necesita la cdula y el nombre de las personas cuyo apellido sea BETANCUR y su sexo sea MASCULINO: SELECT cedula,nombre FROM personas WHERE primer_apellido = 'Betancur' AND sexo = 'M' Resultado/ Cedula 78900456 Nombre Carlos

d. Select combinando tablas y utilizacin del comodn '*'. Se desea obtener la informacin de todos los dependientes de las personas cuyo apellido sea BETANCUR y su sexo sea MASCULINO. Cuando se trabaja con varias tablas y se utiliza el '*', se le debe anteponer el nombre de la tabla de la cual se desea extraer la informacin: SELECT dependientes.* FROM personas, dependientes WHERE primer_apellido = 'Betancur' AND sexo = 'M' AND dependiente.cedula = personas.cedula Resultado/ Cedula 78900456 78900456 Nombre_Dep Juanita Oscar Sexo F M FechaN 12-Abr-95 15-Ene-89 Parentesco Hija Hijo

e. Utilizando alias o sinnimos de trabajo a las tablas del Select. Estos se utilizan por facilidad en el manejo de la instruccin. La misma consulta anterior: SELECT d.* FROM personas p, dependientes d WHERE primer_apellido = 'Betancur' AND sexo = 'M' AND d.cedula = p.cedula Resultado/ Cedula 78900456 78900456 Nombre_Dep Juanita Oscar Sexo F M FechaN 12-Abr-95 15-Ene-89 Parentesco Hija Hijo

f. Cuando se necesita extraer informacin distintiva dentro de un grupo de tuplas, se utiliza la clausula DISTINCT. Por ejemplo, se necesita extraer los diferentes valores de salarios que se pagan en la compaa:

SELECT distinct salario FROM personas Resultado/ Salario 1,600,000 1,700,000 1,350,000 1,500,000 1,200,000 1,800,000 g. Una de las clausulas ms significativas en el Select es el COUNT, la cual se utiliza para contar la cantidad de registros que cumplen con una condicin especfica: g.1 Mostrar el total de empleados en la compaa: SELECT count(*) FROM personas Resultado/ 9 g.2 Mostrar el total de proyectos que tiene asignada la dependencia 3 SELECT count(*) FROM proyectos WHERE codigo_dep = 3 Resultado/ 3

g.3 Mostrar cuntos salarios diferentes o distintas se pagan en la compaa: SELECT count(distinct salario) FROM personas Resultado/ 6 h. Clusula WHERE compara sus campos comunmente con valores nicos, pero tambien es posible comparar con un "conjunto" de valores. Esto es realizable a travs del operador IN. Ejemplo, se desea saber qu empleados estn involucrados en los proyectos 139001 o 139002. h.1 Forma bsica: SELECT personas.* FROM personas, proyectos WHERE (numero_proy = 139001 OR numero_proy =139002) AND cod_dep = codigo_dep h.2 Forma con IN: SELECT personas.* FROM personas, proyectos WHERE numero_proy IN (139001,139002) AND cod_dep = codigo_dep Resultado/ PENDIENTE i. Operacin Select con anidamientos. La clausula WHERE comunmente compara los campos con valores exactos, pero tambin es probable utilizarla comparando sus campos con otras sentencias Select. Esta forma tambin es llamada Consulta anidada: i.1 Mostrar los diferentes proyectos en donde el ingeniero OCHOA participa: SELECT distinct numero_proy FROM proyectos

WHERE numero_proy IN (select numero_proy from proyectos p, departamentos d, personas where p.codigo_dep = d.codigo_dep and primer_apellido = 'Ochoa') i.2 Mostrar los empleados cuyo jefe es de apellidos BETANCUR BERMUDEZ: SELECT personas.* FROM personas WHERE cedula_sup IN (select cedula from personas where primer_apellido = 'Betancur' and segundo_apellido = 'Bermudez') i.3 Mostrar el nombre de los empleados cuyo salario es mayor que el de todos los empleados del departamento 3. Aqu se utiliza la utilizacin de la clusula ALL: SELECT nombre, primer_apellido, segundo_apellido FROM personas WHERE salario > ALL (select salario from personas where cod_dep = 3) j. En el select es posible validar la existencia de informacin nula a travs de la clusula NULL. Ejemplo, Mostrar los empleados que no tengan asignado salario: SELECT * FROM personas WHERE salario IS NULL k. Otra clusula que es posible utilizar en el Select es EXIST, la cual ayuda a validar si el resultado de una consulta anidada es vacio o no. k.1 Seleccionar todos los empleados cuyo dependiente tenga la misma cedula, sexo y nombre.

SELECT p.nombre, p.primer_apellido, p.segundo_apellido FROM personas p WHERE EXIST (select * from dependiente d where p.cedula = d.cedula and d.sexo = p.sexo and nombre = nombre_dep) k.2 Seleccionar los empleados que no tienen dependientes: SELECT p.nombre, p.primer_apellido, p.segundo_apellido FROM personas p WHERE NOT EXIST (select * from dependiente d where p.cedula = d.cedula) l. Con la operacin de Select tambin es posible utilizar funciones agregadas para: sumar (SUM), maximizar (MAX), minimizar (MIN) y promediar (AVG). Se pueden utilizar al nivel de la clusula SELECT o en la clusual HAVING (que veremos posteriormente. Ejemplo, el total pagado por la compaa, el mximo y el mnimo salario y el promedio pagado: SELECT sum(salario), max(salario), min(salario), avg(salario) FROM personas m. Agrupacin de tuplas y aplicacin de condiciones para ellas. Aqu se utilizan dos clusulas nuevas: GROUP BY, la cual agrupa tuplas segn las columnas puestas en la clusula Select; HAVING, permite hacer operaciones sobre estas agrupaciones. Veamos: m.1 Mostrar el nmero y el nombre del proyecto en donde trabajen ms de dos empleados SELECT nombre, numero_proy FROM proyectos, trabaja_en WHERE numero_proy = nump GROUP BY nombre, numero_proy HAVING count(*) > 1

n. La clusula WHERE adems de las anteriores instrucciones tambin puede utilizar la instruccin LIKE, que le sirve para encontrar informacin string no precisa. Veamos el siguiente ejemplo: SELECT nombre, numero_proy FROM proyectos WHERE nombre LIKE '%lic%' o. En la clusula Select tambin es posible realizar operaciones aritmticas '+', '-', '*', con los campos de valor: SELECT salario*1.18 FROM personas WHERE salario < 1200000 p. Una clusula ms que podemos utilizar en la operacin Select es la que me permite dale un orden a las tuplas, ORDER BY, segn el o los criterios indicados a travs de columnas. SELECT * FROM personas ORDER BY nombre, primer_apellido, segundo_apellido

2. EJERCICIOS CON LA CLAUSULA SELECT


Se tiene el siguiente esquema de base de datos para el manejo de informacin de un Sistema de Transportes intermunicipales: TERMINALES_TRANSPORTE (cod_terminal, nombre, ciudad, estado) VIAJES(nmero, transportadora, das) TARIFAS(num_viaje, cod_tarifa, monto, restricciones) TRAYECTO_VIAJE(num_viaje, num_trayecto, cod_terminal_sale, hora_salida_programada, cod_terminal_llega, hora_llegada_programada) VIAJES_REALIZADOS(num_viaje, num_trayecto, fecha, num_asientos_disponibles, id_transporte, cod_terminal_sale, hora_salida, cod_terminal_llega, hora_llegada)

VIAJES_AUTORIZADOS(tipo_transporte, cod_terminal) TRANSPORTE(id_transporte, total_de_asientos, tipo_transporte) RESERVA_ASIENTOS(num_viaje, num_trayecto, fecha, num_asiento, nombre_cliente, tel_cliente) El anterior esquema describe una base de datos con informacin sobre viajes de lneas areas. Cada VIAJE se identifica con un nmero de viaje, y consta de uno o ms TRAYECTO_VIAJE con num_trayecto 1, 2, 3, etc. Cada trayecto tiene horas y terminales de salida y de llegada programados, y tiene muchos TRAYECTO_VIAJE, uno por cada fecha en que tiene lugar el viaje. Se mantienen TARIFAS para cada viaje. Para cada movimiento de trayecto, se mantiene RESERVA_ASIENTOS, el transporte empleado en el trayecto y las horas de salida y llegada y los terminales especficos. Un TRANSPORTE se identifica con id_transporte y es de un cierto tipo_transporte. VIAJES AUTORIZADOS relaciona los tipo_transporte con los terminales en los que puede aterrizar. Cada TERMINAL se identifica con un cod_terminal. Especifique las siguientes consultas: 1. Prepare una lista con los nmeros de viaje y los das de todos los viajes o trayectos de viaje que salen del terminal codigo CA001 y llegan al terminal cdigo BO001. 2. Obtenga una lista con los nmeros de viaje, cdigos de terminal de salida, horas de salida programadas, cdigos de terminal de llegada, horas de llegada programadas y das de todos los viajes o trayectos de viajes que salgan de algn terminal de la ciudad de Santa Marta y lleguen a algn terminal de la ciudad de Buenaventura. 3. Liste las diferentes tarifas que se aplicaron a los viajes que se realizaron entre los terminales de Santa Marta y Medelln, en el ao 1999. 4. Liste los terminales que tienen el mayor trfico en un da (haga el ejemplo con cualquier fecha). 5. Muestre los viajes con los correspondientes transportes, que tuvieron ms de 50 pasajero con reservas.

Você também pode gostar