Tema 4 SQL
Tema 4 SQL
Tema 4 SQL
Objetivo
Introducción
El DML es un sublenguaje de SQL que nos permite recuperar los datos almacenados en la
base de datos, así como actualizar la misma incluyendo sentencias para añadir nuevos
datos, modificar y/o borrar los ya existentes.
Para utilizar el DML es necesario contar con una base de datos y con sus tablas
correspondientes. En esta unidad se usarán ejemplos que hacen referencia a la base de datos
“Biblioteca”, cuyo diagrama entidad-relación se propuso en las actividades de la Unidad II
conformada por las siguientes relaciones:
A continuación se describen los tipos de datos que manejará cada campo de las tablas:
Tabla libro
CAMPO TIPO
idLibro (PK) INT
Titulo CHAR(60)
Idioma CHAR(15)
idEditorial (FK) SMALLINT
________________________________________________________________________________________________________________________________________
40
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
Tabla autor
CAMPO TIPO
idAutor (PK) INT
Nombre CHAR(60)
Tabla tema
CAMPO TIPO
idTema (PK) SMALLINT
Nombre CHAR(40)
Tabla editorial
CAMPO TIPO
idEditorial (PK) SMALLINT
Nombre CHAR(60)
Direccion CHAR(60)
Telefono CHAR(15)
Tabla ejemplar
CAMPO TIPO
idLibro (FK) INT
idEjemplar (PK) SMALLINT
Edicion SMALLINT
Ubicación CHAR(15)
Tabla usuario
CAMPO TIPO
idUsuario (PK) INT
Nombre CHAR(60)
Direccion CHAR(60)
Telefono CHAR(15)
Tabla prestamo
CAMPO TIPO
idUsuario (FK) INT
idLibro (FK) INT
idEjemplar (FK) SMALLINT
FechaPresta DATE
FechaDevol DATE
Tabla Temas_libro
CAMPO TIPO
idLibro (FK) INT
idTema (FK) SMALLINT
________________________________________________________________________________________________________________________________________
41
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
Tabla Autores_libro
CAMPO TIPO
idLibro (FK) INT
idAutor (FK) INT
Para obtener un panorama más amplio, tanto de la estructura de la base de datos como de
sus relaciones, se ejemplifican las tablas con los siguientes datos:
Tabla libro:
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
3 Food Culture in México inglés 1
4 Minas de Oro del Perú español 3
5 Mujer y Sociedad español 3
Tabla autor:
Tabla tema:
idautor nombre
1 Gabriela A. Gasca Díaz idtema nombre
2 Gonzalo Sáenz Lara 1 México
3 Helen Droppert Lang 2 Historia
4 Joshua Duncan Smith 3 Gastronomía
5 Ralph Parker Alessy 4 Matemáticas
5 Sociología
6 Mujeres
7 Minerales
Tabla editorial:
ideditorial nombre dirección telefono
1 Clío Miguel Angel de Quevedo 783 Coyoacán 56572701
México DF
2 Impala St. Claire Avenue 994 Toronto Ontario 50081000
Canada.
3 Castillo Insurgentes Sur 1886 Col. Florida México 51281350
DF
4 Alfaomega Pitágoras 1139 Col. Del Valle México DF 50897740
________________________________________________________________________________________________________________________________________
42
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
Tabla ejemplar:
idlibro idejemplar edicion ubicacion
1 1 1 E-D2418
1 2 1 E-D2419
1 3 2 E-D2420
2 1 3 S-M4512
2 2 4 S-M4513
Tabla usuario:
idusuario nombre dirección teléfono
1 Claudio Romo Independecia 524 6143857
2 Edgar Lara Hidalgo 151 6184536
3 Adrián Mora Juárez 600 6199673
Tabla prestamo:
idusuario idlibro idejemplar fechapresta fechadevol
1 1 2 2005-02-21 2005-02-27
3 2 1 2006-12-10 2006-12-15
1 3 2 2007-04-17 2007-04-19
• INSERT
Para introducir renglones en una tabla se usa la instrucción INSERT que en su
forma básica tiene la siguiente sintaxis:
________________________________________________________________________________________________________________________________________
43
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
SINTAXIS:
INSERT INTO nomtabla[(campo1, campo2,…)]
VALUES (valor1, valor2, …)
DONDE:
nombtabla Es el nombre de la tabla a la que se le insertan los
datos.
Los campos no incluidos en la lista (campo1, campo2,…) tomarán su valor por defecto o
NULL si no tienen valor por defecto. Si no se especifica la lista (campo1, campo2,…),
habrá que especificar los valores de todos los campos de la tabla en la lista (valor1,
valor2,…) respetando el orden de los campos en la creación de la tabla.
EJEMPLO 1:
Para la tabla editorial que consta de los campos ieditorial, nombre,
direccion y telefono.
INTERPRETACIÓN:
Se inserta un nuevo registro obteniendo el siguiente resultado:
Tabla editorial
ideditorial nombre direccion telefono
1 Clío Miguel Angel de Quevedo 783 56572701
Coyoacán México DF
________________________________________________________________________________________________________________________________________
44
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO 2:
Tomando en cuenta la tabla resultante del ejemplo anterior:
INTERPRETACIÓN:
Se inserta un nuevo registro y en su campo telefono se asigna NULL.
Tabla editorial
ideditorial nombre direccion telefono
1 Clío Miguel Angel de Quevedo 783 56572701
Coyoacán México DF
2 Impala St. Claire Ave. 994
• UPDATE
Para modificar los datos de un registro existente se utiliza la sentencia UPDATE, con
la siguiente sintaxis:
SINTAXIS:
UPDATE nomtabla
SET nomcolumna = nuevovalor
[WHERE nomcol = algunvalor]
DONDE:
nomtabla Es el nombre de la tabla que será afectada.
________________________________________________________________________________________________________________________________________
45
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
La sintaxis está compuesta por la instrucción SET para establecer el nuevo valor en la
columna deseada y opcionalmente la cláusula WHERE para identificar el registro que se
quiere modificar, evaluando una condición que al resultar verdadera se llevará a cabo la
actualización de la columna con su nuevo valor. Si no se especifica la “cláusula WHERE”
(Molinaro, 2006, p.37), entonces se actualizarán todos los registros de la tabla.
EJEMPLO 1:
UPDATE editorial
SET telefono = ’50081000’
WHERE nombre = ‘Impala’
INTERPRETACION:
Se actualiza el campo telefono para el registro que tenga como valor
en su campo nombre ‘Impala’.
Tabla editorial
ideditorial nombre direccion telefono
1 Clío Miguel Angel de Quevedo 783 56572701
Coyoacán México DF
2 Impala St. Claire Ave. 994 50081000
EJEMPLO 2:
Tomando en cuenta la tabla resultante del ejemplo anterior:
UPDATE editorial
SET direccion=’St Claire Ave. 994 Toronto Ontario Canada’,
telefono = ’51281350’
WHERE nombre = ‘Impala’
INTERPRETACION:
Se actualizan los campos direccion y telefono para el registro que
tenga en su campo nombre el valor ‘Impala’.
Tabla editorial
ideditorial nombre direccion telefono
1 Clío Miguel Angel de Quevedo 783 56572701
Coyoacán México DF
2 Impala St. Claire Ave. 994 Toronto 51281350
Ontario Canada
________________________________________________________________________________________________________________________________________
46
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
• DELETE.
SINTAXIS:
DELETE FROM nombretabla
WHERE nomcol = algunvalor
DELETE se combina con WHERE para identificar el registro que se quiere borrar,
evaluando una condición y al resultar verdadera se borrará el registro.
EJEMPLO:
Tomando en cuenta la tabla resultante del ejemplo 2:
DELETE FROM editorial
WHERE nombre = ‘Impala’
INTERPRETACION:
Se borra el registro que tenga en su campo nombre el valor ‘Impala’.
Tabla editorial:
ideditorial nombre direccion telefono
1 Clío Miguel Angel de Quevedo 783 56572701
Coyoacán México DF
________________________________________________________________________________________________________________________________________
47
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
En caso de querer borrar todo el contenido de una tabla se puede usar la instrucción
TRUNCATE, como se mostró en la Unidad II (en el punto 2.3 Alteración y borrado de
tablas), pero se puede hacer también con la instrucción DELETE. La diferencia es que
TRUNCATE elimina la tabla por completo y vuelve a crear la estructura sin registros,
mientras que DELETE borra los registros de forma secuencial y usa la siguiente sintaxis:
SINTAXIS:
DELETE * FROM nombretabla
(Molinaro, 2006, p.121)
(Microsoft, 2003, AEL)
DONDE:
nombretabla Es el nombre de la tabla de la que se borrarán todos sus
registros.
EJEMPLO:
DELETE * FROM editorial
INTERPRETACION:
Se borran uno a uno, todos los registros de la tabla editorial.
• SELECT
Esta instrucción se utiliza para realizar consultas a una base de datos; se encarga de
indicar al motor de datos que devuelva información específica de las tablas y el
resultado es presentado en forma de conjunto de registros.
________________________________________________________________________________________________________________________________________
48
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
SINTAXIS GENERAL:
SELECT [ALL | DISTINCT] campo1, campo2, ...
FROM nombretabla
[WHERE condición1 [AND | OR | XOR] condición2 ...]
[GROUP BY campo1, campo2, ...]
[HAVING condición1 [AND | OR | XOR] condición2 ...]
[ORDER BY campo1 | indice1 [ASC | DESC],
campo2 | indice2 [ASC | DESC], ... ]
(Microsoft, 2003, AEL)
http://www.mysql.com
SITNAXIS BASICA:
SELECT [ALL | DISTINCT] campo1, campo2, ...
FROM nombretabla
(Microsoft, 2003, AEL)
http://www.mysql.com
DONDE:
ALL Indica que se quieren seleccionar todos los valores,
devolviendo todos los campos de la tabla.
El símbolo asterisco (*) es equivalente a la palabra ALL.
DISTINCT Indica que se quieren seleccionar sólo los valores
distintos, omitiendo los registros cuyos campos
seleccionados coincidan totalmente.
campo1, Nombre de los campos que se desea consultar.
campo2,...
nombretabla Nombre de la tabla sobre la que se quiere hacer la
consulta.
EJEMPLO 1:
________________________________________________________________________________________________________________________________________
49
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
INTERPRETACION:
Se hace una consulta a la tabla editorial, solicitando únicamente los
campos ideditorial y nombre, el resultado de esta consulta es:
Tabla resultante del select
ideditorial nombre
1 Clío
2 Impala
EJEMPLO 2:
Tomando en cuenta la tabla inicial del ejemplo 1:
SELECT *
FROM editorial
INTERPRETACION:
Se hace una consulta a la tabla editorial, solicitando todos los
campos, y el resultado es:
Tabla resultante del select
ideditorial nombre direccion telefono
1 Clío Miguel Angel de Quevedo 783 56572701
Coyoacán México DF
2 Impala St. Claire Ave. 994 Toronto 51281350
Ontario Canada
EJEMPLO 3:
________________________________________________________________________________________________________________________________________
50
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
INTERPRETACION:
Se hace una consulta a la tabla libro para conocer los distintos
idiomas en que existen libros. El resultado de la consulta es:
Tabla resultante del select
idioma
español
inglés
• WHERE
Es una cláusula que evalúa cada registro de una tabla con respecto a una condición
establecida, permitiendo que formen parte del resultado únicamente los registros
que resulten ‘verdaderos’.
La condición está formada por tres elementos que son: columna, “operador”
(Microsoft, 1999, p.66) y valor, además, se puede encadenar a más condiciones por
medio de operadores lógicos como AND, OR, NOT y XOR. (Microsoft, 1999, p.67)
La sintaxis de WHERE permite que la condición sea tan estricta como se desee y
está estructurada de la siguiente forma:
SINTAXIS:
________________________________________________________________________________________________________________________________________
51
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
DONDE:
condición1, Es lo que tiene que evaluar la cláusula WHERE.
Está compuesta por:
columna operador valor
La cláusula WHERE adicionada a la instrucción SELECT filtra los datos antes de ser
devueltos por la consulta, presentando finalmente los registros que cumplen con la
condición establecida como se muestra en los siguientes ejemplos:
________________________________________________________________________________________________________________________________________
52
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO 1:
Considerando que la tabla libro tiene estos datos:
Tabla libro
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
3 Food Culture in Mexico inglés 1
SELECT *
FROM libro
WHERE idioma = ’español’
INTERPRETACION:
Se hace una consulta a la tabla libro para conocer los libros en
idioma español, visualizando todos los campos de la tabla, dando el
siguiente resultado:
Tabla resultante del select
idlibro titulo idioma editorial
1 Historia de México español 1
EJEMPLO 2:
Tomando en cuenta la tabla inicial del ejemplo1:
INTERPRETACION:
Realizar una consulta a la tabla libro, pidiendo que se desplieguen
las columnas idlibro y titulo de los registros que en editorial tengan
el valor 1 y su idioma sea español. Resultando lo siguiente:
________________________________________________________________________________________________________________________________________
53
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
INTERPRETACION:
Consulta la tabla libro pidiendo que se desplieguen las columnas
idlibro y titulo, que en editorial tengan el valor 1 ó su idioma sea
inglés. Resultando lo siguiente:
Tabla resultante del select
idlibro titulo
1 Historia de México
2 Math
3 Food Culture in Mexico
EJEMPLO 4:
Tabla libro
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
3 Food Culture in Mexico inglés 1
4 Minas de Oro del Perú español 3
5 Mujer y Sociedad español 3
SELECT *
FROM libro
WHERE titulo LIKE ‘M%’
INTERPRETACIÓN:
Llevar a cabo una consulta a la tabla libro, solicitando todos aquellos
registros cuyo título empiece con la letra M, no importando el resto
del título y obtiene como resultado:
Tabla resultante del select
idlibro titulo idioma ideditorial
2 Math inglés 2
4 Minas de Oro del Perú español 3
5 Mujer y Sociedad español 3
________________________________________________________________________________________________________________________________________
54
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO 5:
Tomando en cuenta la tabla inicial del ejemplo anterior:
SELECT *
FROM libro
WHERE titulo IN (‘Math’, ‘Historia de México’)
INTERPRETACIÓN:
Llevar a cabo una consulta a la tabla libro, solicitando los registros
cuyo título sea ‘Math’ o ‘Historia de México’ y el resultado es:
Tabla resultante del select
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
EJEMPLO 6:
Tomando en cuenta la tabla inicial del ejemplo 4:
SELECT *
FROM libro
WHERE titulo IN (‘Math’, ‘Historia de México’)
INTERPRETACIÓN:
Lleva a cabo una consulta a la tabla libro, solicitando los registros
cuyo título sea ‘Math’ o ‘Historia de México’ y el resultado es:
Tabla resultante del select
idlibro titulo idioma editorial
1 Historia de México español 1
2 Math inglés 2
EJEMPLO 7:
Tomando en cuenta la tabla inicial del ejemplo 4:
________________________________________________________________________________________________________________________________________
55
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
INTERPRETACIÓN:
Se hace una consulta a la tabla libro solicitando el título y el idioma
de todos los registros cuyo valor del campo idlibro se encuentre en el
rango de 2 a 4, resultando:
Tabla resultante del select
titulo idioma
Math inglés
Food Culture in Mexico inglés
Minas de Oro del Perú español
• ORDER BY
SITNAXIS:
ORDER BY nombrecampo1 [ASC | DESC],
nombrecampo2 [ASC | DESC],...
DONDE:
nombrecampo1, Nombre del campo por el que se necesitan ordenar
nombrecampo2,... los datos
________________________________________________________________________________________________________________________________________
56
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
INTERPRETACIÓN:
Se hace una consulta a la tabla libro solicitando mostrar los campos
ideditorial y título ordenados alfabéticamente por título, quedando el
siguiente resultado:
Tabla resultante del select
ideditorial titulo
3 Food Culture in Mexico
1 Historia de México
2 Math
3 Minas de Oro del Perú
2 Mujer y Sociedad
EJEMPLO 2:
Tomando en cuenta la tabla inicial del ejemplo anterior:
INTERPRETACIÓN:
Se hace una consulta a la tabla libro solicitando mostrar los campos
ideditorial y título ordenados por ideditorial y después por título,
ambos de forma ascendente, quedando así:
________________________________________________________________________________________________________________________________________
57
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO 3:
Tomando en cuenta la tabla inicial del ejemplo 1:
INTERPRETACIÓN:
Se hace una consulta a la tabla libro solicitando mostrar los campos
ideditorial y título ordenados por ideditorial de forma descendente y
después por título de forma ascendente, quedando así:
En SQL existen muchas funciones que pueden complementar el manejo de los datos.
Se dividen en dos grandes grupos: Funciones Escalares y Funciones Agregadas.
________________________________________________________________________________________________________________________________________
58
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
Las funciones a nivel de registro se utilizan dentro de las expresiones y actúan con los
valores de las columnas, variables o constantes. Se pueden incluir en SELECT, WHERE y
ORDER BY.
Existe una gran variedad de funciones escalares. Cada DBMS proporciona un sinnúmero de
funciones que trabajan a nivel de registro y que son de gran utilidad, cuya sintaxis puede
variar de un DBMS a otro.
La Tabla 3.1 resume las funciones que normalmente ofrecen los DBMS, dividiéndolas por
categorías, de acuerdo al tipo de dato con que trabajan:
CATEGORÍA DESCRIPCIÓN
Funciones de cadena Realizan una operación sobre una cadena de
entrada y regresa una cadena o un valor numérico
Funciones matemáticas Realizan un cálculo con el parámetro de entrada y
regresa un valor numérico.
Funciones de fecha y hora Realiza una operación sobre un dato de hora o
fecha como entrada y regresa un valor ya sea
fecha, hora, numérico o cadena.
Funciones de texto e imagen Realizan una operación sobre un valor texto o
imagen como entrada y regresan información
acerca de ese valor.
Funciones de configuración Regresan información sobre la configuración
actual.
Funciones de cursores Regresan información sobre cursores.
Funciones de metadatos Regresan información acerca de la base de datos y
sus objetos.
Funciones de seguridad Regresan información acerca de los usuarios y sus
roles.
Se mencionan en la Tabla 3.2 sólo algunas funciones cuyo uso es frecuente y de gran
utilidad:
________________________________________________________________________________________________________________________________________
59
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
FUNCION UTILIDAD
CURTIME() Devuelve la hora actual
CURDATE() Devuelve la fecha actual
YEAR() Devuelve el año
RIGHT() Devuelve los caracteres a la derecha de cierta posición
LEFT() Devuelve los caracteres a la izquierda de cierta posición
UCASE() Devuelve una cadena en mayúsculas
LCASE() Devuelve una cadena en minúsculas
MID() Devuelve los caracteres que se encuentran en medio de dos
posiciones
ABS() Regresa un valor numérico absoluto
POWER() Eleva un valor numérico a una potencia específica
SQRT() Devuelve la raíz cuadrada de un número
TRUNCATE() Trunca los decimales deseados de un valor numérico
Hasta ahora todas las consultas que se han usado se refieren sólo a una tabla, pero también
es posible hacer consultas usando varias tablas.
Se usa la instrucción UNION cuando se tienen dos tablas con las mismas columnas y se
quiere obtener una nueva tabla con las filas de la primera y de la segunda.
Las tablas con las que trabaja UNION pueden ser reales o lógicas, las tablas reales son las
que se encuentran almacenadas en la base de datos y las tablas lógicas son los resultados de
una consulta. Esto permite llevar a cabo esta operación con más frecuencia, porque pocas
veces se tienen en una base de datos tablas idénticas en cuanto a columnas.
________________________________________________________________________________________________________________________________________
60
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
El resultado que se genera de una unión es siempre una tabla lógica y no incluye valores
repetidos, para incluir todos los valores de las tablas no importando si están repetidos, se
agrega ALL a la instrucción.
SINTAXIS:
sentenciaSQL1
UNION [ALL]
sentenciaSQL2
DONDE:
sentenciaSQL1 Sintaxis de la instrucción SELECT:
EJEMPLO 1:
Suponiendo que se tienen dos tablas de libros con la misma estructura, la
primera libro1 tiene datos de libros antiguos y la segunda libro2 tiene datos
de libros nuevos.
Tabla libro1
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
________________________________________________________________________________________________________________________________________
61
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
Tabla libro2
idlibro titulo idioma ideditorial
1 Historia de México español 1
3 Food Culture in Mexico inglés 3
4 Minas de Oro del Perú español 3
5 Mujer y Sociedad español 2
INTERPRETACIÓN:
Se realiza una consulta a la tabla libro1 solicitando todos sus
registros y el resultado se une a la consulta realizada a la tabla
libro2 que solicita todos sus registros. Resultado:
EJEMPLO 2:
Tomando en cuenta las tablas iniciales del ejemplo anterior.
INTERPRETACIÓN:
Se realiza una consulta a la tabla libro1 solicitando el campo titulo
de todos sus registros y el resultado se une a la consulta realizada a
la tabla libro2 que solicita el campo título de todos sus registros.
________________________________________________________________________________________________________________________________________
62
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
Hacer consultas sobre varias tablas nos permite realizar operaciones como la reunión o
JOIN.
La reunión es una operación del álgebra relacional, que consiste esencialmente en conectar
filas de una tabla con filas de otra, obteniendo una tabla con columnas de la primera unidas
a las columnas de la segunda tabla, y las filas de la tabla resultante son concatenaciones de
filas de ambas tablas.
SINTAXIS:
SELECT *
FROM nombretabla1, nombretabla2
DONDE:
nombretabla1 Son los nombres de las tablas con que se
realiza el producto cartesiano.
EJEMPLO:
Las tablas libro y editorial tienen los siguientes datos:
________________________________________________________________________________________________________________________________________
63
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
Tabla libro
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
Tabla editorial
ideditorial nombre direccion telefono
1 Clío Miguel Angel de Quevedo 783 56572701
2 Impala St. Claire Ave. 994 51281350
SELECT *
FROM libro, editorial
INTERPRETACIÓN:
Se hace una consulta de las tablas libro y editorial obteniendo su
combinación como se muestra:
Tabla resultante del select
idlibro titulo idioma ideditorial ideditorial nombre direccion telefono
1 Historia español 1 1 Clío Miguel 56572701
de México Angel de
Quevedo
783
1 Historia español 1 2 Impala St. Claire 51281350
de México Ave. 994
2 Math inglés 2 1 Clío Miguel 56572701
Angel de
Quevedo
783
2 Math inglés 2 2 Impala St. Claire 51281350
Ave. 994
También es posible realizar el producto cartesiano de una tabla consigo misma, en este caso
lo que se necesita es utilizar un nombre de alias por lo menos para una de las dos
menciones de la tabla.
Hay que tener en cuenta que el producto cartesiano obtiene todas las posibles
combinaciones de filas por lo tanto si se tienen dos tablas de n registros cada una, el
resultado será de n x n filas. En una base de datos real, se podría hablar de 100 registros
________________________________________________________________________________________________________________________________________
64
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
para una tabla pequeña, y al realizar el producto cartesiano con otra de la misma dimensión
se tendrían (100 x 100) registros y si el resultado se utiliza para hacer otro producto
cartesiano con una tercer tabla de 50 registros, el resultado será una tabla de (100 x 100 x
50) por lo tanto el producto cartesiano resulta ser una operación costosa.
Existe una forma eficiente para emparejar filas y es usando un producto cartesiano
restringido, donde las filas que se emparejan deben cumplir con una determinada condición.
Para eso se usarán los siguientes operadores JOIN:
• Reunión Interna
SINTAXIS:
SELECT campo1, campo2, campo3,...
FROM primeratabla
INNER JOIN segundatabla
ON primeratabla.llave = segundatabla.llaveforanea
________________________________________________________________________________________________________________________________________
65
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
DONDE:
campo1,campo2, Nombre de los campos que se desean mostrar
campo3,... en la tabla resultante.
Tabla libro
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
3 Food Culture in Mexico inglés 0
4 Minas de Oro del Perú español 0
5 Mujer y Sociedad español 2
Tabla editorial
ideditorial nombre direccion telefono
1 Clío Miguel Angel de Quevedo 783 56572701
2 Impala St. Claire Ave. 994 51281350
INTERPRETACIÓN:
Se hace una consulta de los títulos en la tabla libro que tengan una
editorial correspondiente.
________________________________________________________________________________________________________________________________________
66
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
• Reunión Externa
SINTAXIS:
SELECT campo1, campo2, campo3,...
FROM primeratabla
LEFT OUTER JOIN segundatabla
ON primeratabla.llave = segundatabla.llaveforanea
67
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
DONDE:
campo1,campo2, ... Nombre de los campos que se desean mostrar
en la tabla resultante
EJEMPLO:
Tomando en cuenta nuevamente las tablas libro y editorial, del
ejemplo anterior:
INTERPRETACIÓN:
Se hace una consulta de los títulos en la tabla libro, con el
nombre de la editorial que le corresponde.
Tabla resultante del select
titulo nombre
Historia de México Clío
Math Impala
FoodoCulture in México NULL
Minaso de Oro del Perú NULL
Mujer y Sociedad Impala
68
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
SINTAXIS:
SELECT campo1, campo2, campo3,...
FROM primeratabla
RIGHT OUTER JOIN segundatabla
ON primeratabla.llave = segundatabla.llaveforanea
DONDE:
campo1,campo2,... Nombre de los campos que se desean mostrar
en la tabla resultante
EJEMPLO:
Las tablas libro y editorial tienen ahora los siguientes datos:
Tabla libro
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
3 Food Culture in Mexico inglés 1
4 Minas de Oro del Perú español 1
5 Mujer y Sociedad español 2
Tabla editorial
ideditorial nombre direccion telefono
1 Clío Miguel Angel de Quevedo 783 56572701
2 Impala St. Claire Ave. 994 51281350
4 Alfa Omega Pitágoras 1139 50897740
________________________________________________________________________________________________________________________________________
69
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
INTERPRETACIÓN:
Se hace una consulta de los nombres de editoriales con los
títulos de libros que les correspondan.
3.4. Subconsultas
Una subconsulta es una consulta que se hace sobre los datos que resultan de otra consulta,
es decir es una sentencia SELECT que aparece dentro de otra sentencia SELECT.
Una subconsulta tiene la misma sintaxis que una sentencia SELECT básica solo que va
encerrada entre paréntesis. Se puede incorporar a la lista de selección, en la cláusula
WHERE o en la cláusula HAVING de la consulta principal.
SINTAXIS:
________________________________________________________________________________________________________________________________________
70
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
DONDE:
campo1, campo2,... Nombre de los campos que se seleccionan
EJEMPLO 1:
Ahora se usará la tabla de préstamos con los siguientes datos:
Tabla prestamo
idusuario idlibro idejemplar fechapresta fechadevol
1 1 2 2005-02-21 2005-02-27
3 2 1 2006-12-10 2006-12-15
1 3 2 2007-04-17 2007-04-19
SELECT *
FROM prestamo
WHERE idusuario = 1
AND fechapresta = (SELECT MAX(fechapresta)
FROM prestamo
WHERE idusuario = 1)
INTERPRETACIÓN:
Se quiere visualizar el préstamo más reciente que se ha hecho al
usuario # 1.
________________________________________________________________________________________________________________________________________
71
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO 2:
Tomando en cuenta que las tablas usuario y prestamo tienen los siguientes
datos:
Tabla usuario
idusuario nombre direccion telefono
1 Claudio Romo Independencia 524 6143857
2 Edgar Lara Hidalgo 151 6184536
3 Adrián Mora Juárez 600 6199673
Tabla prestamo
idusuario idlibro idejemplar fechapresta fechadevol
1 4 1 1999-03-14 1999-03-15
2 1 1 2003-12-11 2003-12-18
3 3 2 2000-09-18 2000-09-20
1 1 1 1999-03-27 2001-03-30
1 3 2 2001-07-18 2001-07-22
________________________________________________________________________________________________________________________________________
72
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
INTERPRETACIÓN:
Se requiere una lista de los usuarios con su número de identificación,
nombre y la fecha de su primer préstamo.
Los resultados que se obtienen con una subconsulta también se logran con un JOIN que por
lo general trabaja más rápido, sin embargo esto depende de qué tan compleja sea la consulta
y qué tan grandes estén las tablas de la base de datos.
Son funciones que operan sobre una colección de valores y regresan un sólo valor.
________________________________________________________________________________________________________________________________________
73
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO:
Considerando los siguientes datos para la tabla préstamo:
Tabla prestamo:
idusuario idlibro idejemplar fechapresta fechadevol
1 1 2 2005-02-21 2005-02-27
3 2 1 2006-12-10 2006-12-15
1 3 2 2007-04-17 2007-04-19
2 1 1 2007-11-14 2007-11-15
INTERPRETACIÓN:
Para saber cuántas peticiones se han atendido, se lleva a cabo un
conteo de los registros en la tabla de préstamos, dando como resultado
3.
EJEMPLO:
A partir de la tabla préstamo del ejemplo anterior:
SELECT MAX(fechapresta)
FROM prestamo
WHERE idlibro=1
INTERPRETACIÓN:
Se desea saber cuál fue la última fecha en que se prestó algún ejemplar
del libro 1, dando como resultado: 2007-11-14
________________________________________________________________________________________________________________________________________
74
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO:
Considerando los siguientes datos para la tabla ejemplar:
Tabla ejemplar:
idlibro idejemplar edicion ubicacion
1 1 1 E-D2418
1 2 1 E-D2419
1 3 2 E-D2420
2 1 3 S-M4512
2 2 4 S-M4513
INTERPRETACIÓN:
Se desea saber cuántos libros existen en total en la biblioteca, por lo
tanto se realiza un conteo de la tabla ejemplar.
• GROUP BY
Esta cláusula nos sirve para agrupar registros en la salida de un SELECT de acuerdo
a los diferentes valores que pueda tener una columna.
El beneficio que se tiene al usar GROUP BY, es que los valores de salida en la
columna indicada, se ordenan y elimina valores duplicados además de que nos
permite aplicar una función de conjunto de registros, como por ejemplo COUNT() o
SUM().
Cuando se utiliza una función agregada junto con GROUP BY, dicha función debe
regresar un resultado para cada uno de los grupos.
________________________________________________________________________________________________________________________________________
75
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
SINTAXIS:
SELECT campo1, campo2, ...
FROM nombretabla
[GROUP BY campo1, campo2, ...]
DONDE:
campo1, ... Nombre de los campos que se seleccionan de una tabla y
por los que se puede agrupar la tabla resultante.
EJEMPLO 1:
Se tomará en cuenta la tabla ejemplar con los siguientes datos:
Tabla ejemplar
idlibro idejemplar edicion ubicacion
1 1 1 E-D2418
1 2 1 E-D2419
1 3 2 E-D2420
2 1 3 S-M4512
2 2 4 S-M4513
INTERPRETACIÓN:
Se requiere saber cuántos ejemplares se tienen de cada libro.
Inicialmente se hace una consulta a la tabla de ejemplares solicitando
que se agrupen los registros por número de identificación del libro,
después haga un conteo de las veces en que se repiten los números de
identificación y nos muestre tanto el número de libro como las veces
que se encuentra repetido.
________________________________________________________________________________________________________________________________________
76
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO 2:
A partir de la tabla inicial del ejemplo anterior:
INTERPRETACIÓN:
Se requiere saber cuántos ejemplares se tienen de las diferentes
ediciones de cada libro. Es necesario hacer una consulta a la tabla
ejemplares, solicitando que se agrupen los registros por número de
identificación del libro y después por edición, haciendo un conteo de
las veces en que se repiten los números de identificación con sus
diferentes ediciones y nos muestre el número de libro, el número de
edición y las veces que se encuentra repetido.
• HAVING
Cuando se quiere aplicar una condición sobre una columna que se obtuvo por medio
de una función de conjunto de registros, no es posible utilizar la cláusula WHERE,
en éstos casos es necesario recurrir a la cláusula HAVING.
________________________________________________________________________________________________________________________________________
77
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
SINTAXIS:
SELECT [ALL | DISTINCT] campo1, campo2, ...
FROM nombretabla
[GROUP BY campo1, campo2, ...]
[HAVING condición1 [AND | OR] condición2 ...]
DONDE:
campo1 Nombre de los campos que se seleccionan de una
tabla y por los que se puede agrupar la tabla
resultante.
nombretabla Nombre de la tabla sobre la que se hace la selección
condición1 Son las condiciones que deberán cumplir los
registros de la tabla resultante.
EJEMPLO:
Tomando en cuenta la tabla ejemplar con los siguientes datos:
Tabla ejemplar
idlibro idejemplar edicion ubicacion
1 1 1 E-D2418
1 2 1 E-D2419
1 3 2 E-D2420
2 1 3 S-M4512
2 2 4 S-M4513
INTERPRETACIÓN:
Se requiere saber qué libros tienen tres ejemplares o más.
78
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO:
A partir de la tabla libro que tiene los siguientes datos:
Tabla LIBRO:
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
3 Food Culture in México inglés 1
4 Minas de Oro del Perú español 3
5 Dizionario Italiano-Spagnolo italiano 7
6 Advanced Engineering Mathematics inglés 2
7 Intermediate Accounting inglés 1
8 Mujer y Sociedad español 3
9 Les Matematiques francés 6
INTERPRETACIÓN:
Se quieren consultar los idiomas en que sólo hay un libro.
________________________________________________________________________________________________________________________________________
79
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
Se usa INSERT ... SELECT para insertar en una tabla varios registros seleccionados de otra
tabla o tablas.
SINTAXIS:
INSERT INTO tabla_destino[(campodestino1, campodestino2,…)]
SELECT (campoorigen1, campoorigen2,...)
FROM tabla_origen
WHERE condición
DONDE:
tabla_destino Es el nombre de la tabla a la que se le insertan los datos.
campoorigen1,... Son los nombres de los campos que tienen los datos que
serán insertados en la tabla destino.
________________________________________________________________________________________________________________________________________
80
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
EJEMPLO:
Suponiendo que existe una tabla libro99 con datos de libros antiguos que se
pondrán a disposición de los usuarios. Se requiere insertar los registros de la
tabla libro99 en la tabla libro:
Tabla libro99:
idlibro titulo idioma ideditorial
99001 Problemas resueltos de estadística básica español 3
99003 Algoritmos y ejercicios resueltos en Java español 1
99004 Access guía rápida español 1
99005 Oracle application server 10G essentials ingles 2
Tabla libro:
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
3 Food Culture in México inglés 1
INTERPRETACIÓN:
Se hace una selección de todos los campos de la tabla libro99 y se
insertan en la tabla libro, resultando de la siguiente manera:
Tabla libro:
idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
3 Food Culture in México inglés 1
99001 Problemas resueltos de estadística básica español 3
99003 Algoritmos y ejercicios resueltos en Java español 1
99004 Access guía rápida español 1
99005 Oracle application server 10G essentials inglés 2
________________________________________________________________________________________________________________________________________
81
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
3.8. Síntesis
El sublenguaje DML se utiliza para dar mantenimiento a los datos de una base de datos.
Las posibles sentencias aplicables van desde la inserción de nuevos registros y la
modificación de los ya existentes hasta el borrado de los mismos.
También es posible realizar consultas por medio del DML, esta opción aplicable tanto a una
sola tabla como a un conjunto de tablas, es una de las razones más importantes para utilizar
un DBMS, ya que al combinar la sintaxis básica de la sentencia SELECT con condiciones
específicas, criterios de ordenamiento, funciones, operadores, subconsultas, funciones de
agregado, etc., es posible generar una gama muy amplia de posibles consultas, obteniendo
información valiosa para la toma de decisiones.
Tomando en cuenta las siguientes tablas con sus respectivos datos, realizar las actividades
que se piden, indicando el código SQL que se usaría y los datos que se obtienen como
resultado.
Tabla alumnos:
idalumno apellidos nombre carrera creditos
A1001 Sánchez Tania Electrónica 90
A1002 Chávez Ana Industrial 36
A1005 López Pedro Computación 3
A1010 Barreto Eduardo Administración 63
A1013 Maya Oscar Industrial 0
A1015 Juárez Mónica Electrónica 42
A1020 Reyes José Química 15
Tabla maestros:
idmaestro nombre departamento nivel
M101 Alejo Vazquez Administración Titular
M105 Trejo Lemus Química Suplente
M110 Bravo Nuñez Computación Auxiliar
M115 Santana Reza Electrónica Auxiliar
M221 Sandoval Belmont Química Titular
________________________________________________________________________________________________________________________________________
82
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
Tabla materias:
clavemateria idmaestro horario aula
CONT1 M101 LMiV9 H221
QUIM1 M105 MJV10 J225
QUIM2 M105 LJV12 M110
ISE M115 LMiV11 C221
MATE1 M110 LMJ9 J225
MATE2 M110 LMiV11 J225
Tabla cursa:
idalumno clavemateria calificacion
A1001 CONT1 9
A1001 ISE 7
A1002 CONT1 6
A1002 QUIM1 4
A1002 MATE2 8
A1010 CONT1
A1010 MATE2
A1020 QUIM1 8
A1020 MATE1 9
• ¿Qué alumnos cursan alguna materia con el maestro Bravo Nuñez? Muestra la clave
del alumno y su calificación.
• Muestra el nombre y la carrera de todos los alumnos que cursan materia con el
maestro Santana Reza.
• Se requiere una lista de todas las materias que se imparten en la misma aula, con sus
horarios y número de aula.
• Muestra todas las combinaciones de alumno y maestro donde la carrera del alumno
sea diferente al departamento al que pertenece el maestro.
________________________________________________________________________________________________________________________________________
83
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
• Muestra los nombres y las claves de todos los maestros que imparten clase en el aula
J225.
• Muestra una lista en orden alfabético, de los alumnos que tomen alguna clase con el
maestro Alejo Vázquez, anexando la clave de cada uno.
• Muestra la clave del alumno y el número de materias que está cursando actualmente.
________________________________________________________________________________________________________________________________________
84
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)
________________________________________________________________________________________________________________________________________
85