Anda di halaman 1dari 8

4.

2 - DML (Data Management Languaje)


SELECT
El comando más elemental es el SELECT. Se utiliza de la siguiente forma:

SELECT <Nombres de columna>


FROM <nombre de tabla>;
Los nombres de columna van separados por comas.

EJEMPLO 1:
Obtener los créditos de las asignaturas.
SELECT Creditos
FROM ASIGNATURA;
EJEMPLO 2:
Nombres y créditos de las asignaturas.
SELECT Nombre,Creditos
FROM ASIGNATURA;
EJEMPLO 3:
Posibles distintos créditos de asignaturas.
SELECT DISTINCT(Creditos)
FROM ASIGNATURA;
EJEMPLO 4:
Todos los datos de personas.
SELECT *
FROM PERSONA;

4.3 - FUNCIONES DE AGRUPACIÓN


FUNCIONES DE AGRUPACIÓN
SUM - Calcula la suma de los valores de una columna.
AVG - Calcula la media de los valores de una columna.
MAX - Calcula el máximo de los valores de una columna.
MIN - Calcula el mínimo de los valores de una columna.
COUNT - Calcula número de filas de una columna.

EJEMPLO 5:
Mostrar la suma de todos los créditos de las asignaturas.
SELECT SUM(Creditos)
FROM ASIGNATURA;
EJEMPLO 6:
Media de coste básico.
SELECT AVG(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 7:
Coste básico de la asignatura más cara.
SELECT MAX(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 8:
Coste básico de la asignatura más barata.
SELECT MIN(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 9:
Cuantos costes básicos hay.
SELECT COUNT(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 10:
Cuantos costes básicos distintos hay.
SELECT COUNT(DISTINCT(CosteBasico))
FROM ASIGNATURA;
Nota: Válido para ORACLE, no para ACCESS.

EJEMPLO 11:
Cuantas asignaturas hay.
SELECT COUNT(*)
FROM ASIGNATURA;

RENOMBRAMIENTO DE CAMPOS
Podemos renombrar un campo con la instrucción AS en ACCESS o dejando un espacio en blanco en
ORACLE.

EJEMPLO 12:
Suma de los créditos de las asignaturas llamando a la columna resultante "TotalCreditos".

ACCESS:
SELECT SUM(Creditos) AS "TotalCreditos"
FROM ASIGNATURA;
ORACLE:
SELECT SUM(Creditos) "TotalCreditos"
FROM ASIGNATURA;

4.4 - OPERADORES. WHERE. BETWEEN


OPERADORES
= Igual que.
> Mayor que.
< Menor que.
>= Mayor o igual que.
<= Menor o igual que
<> Distinto que.

AND Y Lógico.
OR Ó Lógico.
NOT No Lógico.
TIPOS DE EXPRESIONES

- Un nombre de columna.
- Un valor constante.

COMANDO WHERE

SELECT <nombres de columna>


FROM <nombre de tabla>
WHERE <nombre de columna> <operador> <expresión>;
El conjunto (<nombre de columna> <operador> <expresión>) es una condición booleana, lo que
quiere decir que su valor debe ser Verdadero o Falso.
EJEMPLO 13:
Nombre y créditos de las asignaturas del primer cuatrimestre.
SELECT Nombre, Creditos
FROM ASIGNATURA
WHERE Cuatrimestre = "1";
- En ORACLE las cadenas de texto y fechas se encierran entre comillas simples ('cadena'). - En
ACCESS las cadenas de texto se encierran entre comillas dobles ("cadena") y las fechas entre
almoadillas (#fecha#).

EJEMPLO 14:
Nombre y Apellido de las personas nacidas antes del 1 de enero de 1975.

ACCESS:
SELECT Nombre, Apellido
FROM PERSONA
WHERE FechaNacimiento < #1/01/1975#;
ORACLE:
SELECT Nombre Apellido
FROM PERSONA
WHERE FechaNacimiento < '1/01/1975';
EJEMPLO 15:
Nombre y coste básico de las asignaturas de más de 4,5 créditos.
SELECT Nombre, CosteBasico
FROM ASIGNATURA
WHERE Creditos > 4.5;
EJEMPLO 16:
Nombre de las asignaturas cuyo coste básico esté entre 25 y 35 euros.
SELECT Nombre
FROM ASIGNATURA
WHERE CosteBasico >= 25 AND CosteBasico <= 35;
EJEMPLO 17:
Id de los alumnos matriculados en la asignatura '150212' ó en la '130113' ó en ambas.

ACCESS con repetidos:


SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212" OR IdAsignatura = "130113";
ACCESS sin repetidos:
SELECT DISTINCT(IdAlumno)
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212" OR IdAsignatura = "130113";
ORACLE con repetidos:
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = '150212' OR IdAsignatura = '130113';
ORACLE sin repetidos:
SELECT DISTINCT(IdAlumno)
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = '150212' OR IdAsignatura = '130113';
EJEMPLO 18:
Nombres de las asignaturas del 2º cuatrimestre que no sean de 6 créditos.

ACCESS:
SELECT Nombre
FROM ASIGNATURA
WHERE Cuatrimestre = "2"
AND NOT (Creditos = 6);
ORACLE:
SELECT Nombre
FROM ASIGNATURA
WHERE Cuatrimestre = '2'
AND NOT (Creditos = 6);
EJEMPLO 19:
Mostrar el identificador de los alumnos matriculados en cualquier asignatura excepto la '150212' y
la '130113'.
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE NOT (IdAsignatura = "150212" OR IdAsignatura = "130113");
Nota: No está bien del todo. Ver ejemplo 49.

OPERADOR BETWEEN
Equivale a un rango de valores seguidos incluidos entre dos dados.

EJEMPLO 20:
Nombre de las asignaturas cuyo coste básico esté entre 25 y 35 euros. (Idem. 16). Ver ejemplo 16.
SELECT Nombre
FROM ASIGNATURA
WHERE CosteBasico BETWEEN 25 AND 35;

4.5 - IN, LIKE, &, ||. ORDER BY

OPERADOR IN
La instrucción IN sirve para encontrar un dato entre un conjunto de valores dados.
Podemos utilizar NOT IN para discriminar un dato que no se encuentre en el conjunto de valores
dados.

EJEMPLO 21:
Id de los alumnos matriculados en la asignatura '150212' ó en la '130113' ó en ambas. (Idem.
17). Ver ejemplo 17.
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura IN ("150212", "130113");

LIKE
La instrucción LIKE permite comparar un valor o dato con un patrón.

EJEMPLO 22:
Nombre y apellido de las personas cuyo apellido comience por 'G'.
SELECT Nombre, Apellido
FROM PERSONA
WHERE Apellido LIKE "G%";
COMODINES:
ACCESS ORACLE
1 carácter ? _
varios caracteres * %

EJEMPLO 23 A:
Nombre de las asignaturas que no tienen dato para el IdTitulacion.
SELECT Nombre
FROM ASIGNATURA
WHERE IdTitulacion IS NULL;
EJEMPLO 23 B:
Nombre de las asignaturas que tienen dato para el IdTitulacion.

SELECT Nombre
FROM ASIGNATURA
WHERE IdTitulacion IS NOT NULL;
EJEMPLO 24:
Nombre de las asignaturas cuyo coste por crédito sea mayor de 8 euros.
SELECT Nombre
FROM ASIGNATURA
WHERE (CosteBasico/Creditos) > 8;
EJEMPLO 25:
Nombre y número de horas de todas las asignaturas. (1cred.=10 horas).
SELECT Nombre, Creditos*10 AS NUM_HORAS
FROM ASIGNATURA;
OPERADORES DE CADENAS (& y ||)
Para enlazar cadenas en ORACLE utilizamos || y en ACCESS &.

EJEMPLO 26:
Mostrar el nombre completo en una columna y la dirección completa en otra columna de las personas.

ORACLE:
SELECT Nombre||' '||Apellido DireccionCalle||', '||DireccionNum||' - '||Ciudad
FROM PERSONA;
ACCESS:
SELECT Nombre&" "&Apellido, DireccionCalle&", "&DireccionNum&" - "&Ciudad
FROM PERSONA;

FUNCIONES DE ORDENACIÓN: ORDER BY


Los resultados de un SELECT se pueden ordenar a gusto del usuario mediante la claúsula ORDER BY.

Atributos de ordenación:

ASC - Orden creciente.


DESC - Orden descendente.
(Por defecto el orden es creciente).

EJEMPLO 27:
Datos de personas por orden alfabético de apellidos.

SELECT *
FROM PERSONA
ORDER BY Apellido;
EJEMPLO 28:
Datos de las asignaturas del 2º cuatrimestre por orden alfabético de IdTitulacion. Para cada titulación
ordenar por coste mostrando primero las asignaturas más caras y para las asignaturas del mismo
coste mostrar por orden alfabético de nombre de asignatura.
SELECT *
FROM ASIGNATURA
WHERE Cuatrimestre = "2"
ORDER BY IdTitulacion, CosteBasico DESC, Nombre;

4.6 - FROM CON VARIAS TABLAS

TABLAS RELACIONADAS (FROM)


Las consultas pueden relacionar varias tablas que se encuentren nombradas en el FROM.

Por ejemplo si tenemos dos tablas TAB1 y TAB2 con dos columnas cada una llamadas T1C1, T1C2,
T2C1 y T2C2, 3 filas en TAB1 y 4 filas en TAB2, la siguiente consulta mostrará una macrotabla de 4
columnas por 12 filas.

EJEMPLO 29:
Construir las tablas anteriores en una base de datos nueva y ejecutar la siguiente consulta:
SELECT *
FROM TAB1, TAB2;
Guardar la base de datos como ejemplo_from.mdb.

EJEMPLO 29B:
Nombre y apellidos de los profesores.
SELECT Nombre, Apellido
FROM PERSONA, PROFESOR
WHERE PERSONA.DNI = PROFESOR.DNI;

PROCESO DE RESOLUCIÓN DE CONSULTAS


1. Decidir qué tablas están implicadas y ponerlas en el FROM.

2. Ver cuáles son las relaciones entre las tablas, seleccionar


las relevantes para la consulta en cuestión y ponerlas como
condiciones en el WHERE.

3. Poner el resto de condiciones en el WHERE, ORDER BY u otras.

4. Fijar las columnas a mostrar en el SELECT.


EJEMPLO 30:
Nombre de asignaturas impartidas por profesores de Logroño.
SELECT Asignatura.Nombre
FROM ASIGNATURA, PROFESOR, PERSONA
WHERE ASIGNATURA.IdProfesor = PROFESOR.IdProfesor
AND PROFESOR.DNI = PERSONA.DNI
AND Ciudad = "Logroño";
EJEMPLO 31:
Nombre completo (nombre y apellido), en una sóla columna, de los alumnos.

SELECT Nombre&" "&Apellido


FROM PERSONA, ALUMNO
WHERE PERSONA.DNI = ALUMNO.DNI;
EJEMPLO 32:
DNI, Nombre y Apellido de los alumnos que viven en La Rioja. Como criterio usar el teléfono.
SELECT PERSONA.DNI AS DNI, Nombre, Apellido
FROM PERSONA, ALUMNO
WHERE PERSONA.DNI = ALUMNO.DNI
AND Telefono LIKE "941*";
EJEMPLO 33:
DNI, Nombre y Apellido de los alumnos matriculados en la asignatura "Seguridad Vial".
SELECT PERSONA.DNI AS DNI_, PERSONA.Nombre, Apellido
FROM PERSONA, ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA
WHERE PERSONA.DNI = ALUMNO.DNI
AND ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND ASIGNATURA.NOMBRE = "Seguridad Vial";
EJEMPLO 34:
Id de las titulaciones en las que está matriculado el alumno con DNI 20202020A. Un alumno está
matriculado en una titulación si está matriculado en una asignatura de la titulación.

SELECT DISTINCT(IdTitulacion)
FROM ASIGNATURA, ALUMNO_ASIGNATURA, ALUMNO
WHERE ASIGNATURA.IdAsignatura = ALUMNO_ASIGNATURA.IdAsignatura
AND ALUMNO_ASIGNATURA.IdAlumno = ALUMNO.IdAlumno
AND ALUMNO.DNI = "20202020A";
EJEMPLO 35:
Nombre de las asignaturas en las que está matriculada Rosa García, mostrando también por cada
asignatura, el número de matrícula.

SELECT ASIGNATURA.Nombre,ALUMNO_ASIGNATURA.IdAlumno
FROM PERSONA, ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA
WHERE PERSONA.DNI = ALUMNO.DNI
AND ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND PERSONA.Nombre = "Rosa"
AND PERSONA.Apellido = "García";
EJEMPLO 36:
DNI de los alumnos a los que imparte el profesor Jorge Sáenz.
SELECT ALUMNO.DNI AS DNI_ALUMNO
FROM PERSONA, ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA, PROFESOR
WHERE PERSONA.DNI = PROFESOR.DNI
AND ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND ASIGNATURA.IdProfesor = PROFESOR.IdProfesor
AND PERSONA.Nombre = "Jorge"
AND PERSONA.Apellido = "Sáenz";
Otra forma de hacer lo mismo es utilizando una subconsulta llamadas también consultas anidadas.
Este tipo de consultas se verán más adelante a partir del ejercicio 49.
SELECT ALUMNO.DNI AS DNI_ALUMNO
FROM ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA
WHERE ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND ASIGNATURA.IdProfesor IN (SELECT PROFESOR.IdProfesor
FROM PERSONA, PROFESOR
WHERE PERSONA.DNI = PROFESOR.DNI
AND PERSONA.Nombre = "Jorge"
AND PERSONA.Apellido = "Sáenz");
EJEMPLO 37:
Cual sería el coste global de cursar la titulación de Matemáticas si el coste de cada asignatura fuera
incrementado en un 7%.
SELECT SUM(CosteBasico*1.07)
FROM ASIGNATURA, TITULACION
WHERE ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
AND TITULACION.Nombre = "Matemáticas";
Les dejo esta URL para que consulten los demás
ejemplos.

ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-
%20sql/Apuntes%20Bloque%20SQL/tema4g.html

Anda mungkin juga menyukai