Tema 4 SQL

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 47

UNIDAD III

Consultas y Lenguaje de Manipulación de Datos


(DML)
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

Objetivo

El alumno consultará y manipulará los datos de una base de datos.

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:

Libro (idLibro, Título, Idioma, idEditorial)


Autor (idAutor, Nombre)
Tema (idTema, Nombre)
Editorial (idEditorial, Nombre, Dirección, Teléfono)
Ejemplar (idLibro, idejemplar, Edición, Ubicación)
Usuario (idUsuario, Nombre, Dirección, Teléfono)
Préstamo (idUsuario, idLibro, idEjemplar, FechaPresta, FechaDevol)
Temas_Libro (idLibro, idTema)
Autores_Libro (idLibro, idAutor)

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

(PK): Primary Key


(FK): Foreign Key

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

Tabla temas_libro: Tabla autores_libro:


idlibro idtema idlibro idautor
1 1 1 1
1 2 2 3
2 4 2 5
3 3 3 4
3 2 4 2
3 1 5 1
4 7
5 6
5 5

3.1. Instrucciones INSERT, UPDATE, DELETE

• 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, …)

(Silberschatz, Korth, Sudarshan, 2006, p.85)


(Molinaro, 2006, p.109)

DONDE:
nombtabla Es el nombre de la tabla a la que se le insertan los
datos.

campo1, campo2, … Nombre de los campos que serán afectados con la


inserción (opcional)

valor1, valor2, … Son los valores que se asignarán a los campos, en el


orden especificado en la lista (campo1, campo2,…).

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.

INSERT INTO editorial VALUES (1, ‘Clío’, ‘Miguel Angel de Quevedo


783 Coyoacán México DF’, ‘56572701’)

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:

INSERT INTO editorial(ideditorial, nombre, direccion)


VALUES (2, ‘Impala’, ‘St. Claire Ave. 994’)

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]

(Silberschatz, Korth, Sudarshan, 2006, p.87)

DONDE:
nomtabla Es el nombre de la tabla que será afectada.

nomcolumna Nombre de la columna que se actualizará.

nuevovalor Nuevo valor que se asignará a la columna.

nomcol Nombre de la columna que se analizará para cumplir


una condición.

algunvalor Valor que debe cumplir la columna nomcol.

________________________________________________________________________________________________________________________________________

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)

Para estructurar condiciones más específicas, es recomendable estudiar cómo trabaja la


cláusula WHERE, que se presenta en el segundo inciso del punto 3.2 de esta unidad.

• DELETE.

Para borrar registros de una tabla se utiliza la instrucción DELETE.

SINTAXIS:
DELETE FROM nombretabla
WHERE nomcol = algunvalor

(Molinaro, 2006, p.121)


(Microsoft, 2003, AEL)
DONDE:
nombretabla Es el nombre de la tabla de la cual se borrará el registro.

nomcol Nombre de la columna que se analizará para cumplir una


condición.

algunvalor Valor que debe cumplir la columna nomcol.

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)

Para estructurar condiciones más específicas, es recomendable estudiar cómo trabaja la


cláusula WHERE, que se presenta en el segundo inciso del punto 3.2 de esta unidad.

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.

3.2. Consultas básicas SELECT, WHERE, ORDER BY y funciones a


nivel de registro

• 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)

La sintaxis general para la instrucción SELECT es un poco compleja, ya que de


forma opcional pueden agregarse cláusulas que ayudan a estructurar una consulta
tan específica como sea necesaria de la siguiente manera:

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

Sin embargo por el momento sólo se presenta el funcionamiento de la sintaxis básica o


mínima con la que puede funcionar la instrucción SELECT, porque más adelante se irán
agregando una a una el resto de las cláusulas, de esta manera se apreciará claramente el
alcance de una consulta de selección.

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)

La tabla editorial tiene los siguientes datos:


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

SELECT ideditorial, nombre


FROM editorial

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)

La tabla libro tiene los siguientes datos:


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 DISTINCT idioma


FROM libro

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’.

Esta cláusula se adjunta a otras instrucciones para condicionar su operación, (como


se mostró en el punto 3.1 de esta unidad).

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)

WHERE condición1 [AND | OR | NOT | XOR] condición2 [AND | OR | NOT


| XOR] condición3....

(Molinaro, 2006, p.37)


(Microsoft, 2003, AEL)

DONDE:
condición1, Es lo que tiene que evaluar la cláusula WHERE.
Está compuesta por:
columna operador valor

columna nombre de la columna que se va a evaluar

operador + símbolo aritmético de suma


- símbolo aritmético de resta
* símbolo aritmético de multiplicación
/ símbolo aritmético de división
= símbolo comparativo “igual que”
< símbolo comparativo “menor que”
> símbolo comparativo “mayor que”
<> símbolo comparativo “diferente de”
<= símbolo comparativo “menor o igual”
>= símbolo comparativo “mayor o igual”
BETWEEN (para saber si el valor está incluido en un rango
específico)
LIKE (busca un patrón dentro de una columna, utiliza el
símbolo % para definir letras faltantes en el patrón)
IN (se utiliza cuando se conoce el valor exacto que debe
devolver por lo menos una de las columnas)

valor valor con que debe cumplir la columna

AND | OR | Operadores lógicos


XOR | NOT

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:

SELECT idlibro, titulo


FROM libro
WHERE editorial = 1 AND idioma = ‘español’

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:

Tabla resultante del select


idlibro titulo
1 Historia de México
EJEMPLO 3:

________________________________________________________________________________________________________________________________________

53
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

Tomando en cuenta la tabla inicial del ejemplo 1:


SELECT idlibro, titulo
FROM libro
WHERE editorial = 1 OR idioma = ‘inglés’

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:

SELECT titulo, idioma


FROM libro
WHERE idlibro BETWEEN (2) AND (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

Es una cláusula que se incorpora generalmente a la instrucción SELECT y sirve


para presentar los datos ordenados por columnas específicas. El criterio de
ordenamiento puede incluir una o más columnas, en caso de incluir varias columnas
los registros se ordenan por la primera y si existen valores repetidos se ordenan por
la segunda columna especificada en el criterio y así sucesivamente.

SITNAXIS:
ORDER BY nombrecampo1 [ASC | DESC],
nombrecampo2 [ASC | DESC],...

(Molinaro, 2006, p.49)

DONDE:
nombrecampo1, Nombre del campo por el que se necesitan ordenar
nombrecampo2,... los datos

ASC Indica ordenamiento del valor menor al mayor.


(Orden por defecto)

DESC Indica ordenamiento del valor mayor al menor


EJEMPLO 1:

________________________________________________________________________________________________________________________________________

56
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

Si se tiene la tabla libro con 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 3
4 Minas de Oro del Perú español 3
5 Mujer y Sociedad español 2

SELECT ideditorial, titulo


FROM libro
ORDER BY titulo

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:

SELECT idediotrial, titulo


FROM libro
ORDER BY ideditorial, titulo

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)

Tabla resultante del select


ideditorial titulo
1 Historia de México
2 Math
2 Mujer y Sociedad
3 Food Culture in Mexico
3 Minas de Oro del Perú

EJEMPLO 3:
Tomando en cuenta la tabla inicial del ejemplo 1:

SELECT idediotrial, titulo


FROM libro
ORDER BY ideditorial DESC, titulo

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í:

Tabla resultante del select


ideditorial titulo
3 Food Culture in Mexico
3 Minas de Oro del Perú
2 Math
2 Mujer y Sociedad
1 Historia de México

• Funciones a nivel de registro.

En SQL existen muchas funciones que pueden complementar el manejo de los datos.
Se dividen en dos grandes grupos: Funciones Escalares y Funciones Agregadas.

o Funciones Escalares: operan sobre un único valor y regresan un único valor,


por lo tanto trabajan a nivel de registro.

________________________________________________________________________________________________________________________________________

58
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

o Funciones Agregadas: operan sobre una colección de valores pero regresan


un solo valor y se tratarán a fondo en el punto 3.5 de esta Unidad.

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.

Tabla 3.1 Categorías de las Funciones

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

Tabla 3.2 Funciones de uso frecuente

(Silberschatz, Korth, Sudarshan, 2006, p.121)


(Microsoft, 2003, AEL)
http://www.mysql.com

3.3. Consultas sobre múltiples tablas

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.

3.3.1. Unión de 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

(Silberschatz, Korth, Sudarshan, 2006, p.80)


(Microsoft, 1999, p.231)

DONDE:
sentenciaSQL1 Sintaxis de la instrucción SELECT:

SELECT [ALL | DISTINCT] campo1, campo2,...


FROM nombretabla
[WHERE condición1 [AND | OR | XOR]
condición2 ...]
[GROUP BY campo1, campo2, ...]
[HAVING condición1 [AND | OR]
condición2 ...]
[ORDER BY campo1 | indice1 [ASC | DESC],
campo2 | indice2 [ASC | DESC],... ]

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

SELECT * FROM libro1


UNION
SELECT * FROM libro2

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:

Tabla resultante del select


idlibro titulo idioma ideditorial
1 Historia de México español 1
2 Math inglés 2
3 Food Culture in Mexico inglés 3
4 Minas de Oro del Perú español 3
5 Mujer y Sociedad español 2

EJEMPLO 2:
Tomando en cuenta las tablas iniciales del ejemplo anterior.

SELECT titulo FROM libro1


UNION ALL
SELECT titulo FROM libro2

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)

Tabla resultante del select


titulo
Historia de México
Math
Historia de México
Food Culture in Mexico
Minas de Oro del Perú
Mujer y Sociedad

3.3.2. Operadores JOIN

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.

La forma básica de la reunión es conocida como producto cartesiano y en su sintaxis no es


necesario incluir la palabra JOIN.

SINTAXIS:
SELECT *
FROM nombretabla1, nombretabla2

(Microsoft, 1999, p.219)


http://www.mysql.com

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.

La reunión, producto cartesiano o también conocida como combinación, no es la operación


más utilizada, generalmente cuando se quiere componer o combinar dos tablas, es porque
se desea agregar a las filas de una tabla sólo las filas que le correspondan de otra tabla, a
esto se le llama “emparejar filas”.

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

Se le llama INNER JOIN o Reunión Interna, a la combinación de dos tablas cuya


tabla resultante tendrá únicamente registros que pertenezcan al producto cartesiano
de las tablas originales, es decir que los registros que no se correspondan en ambas
tablas no serán incluidos en el resultado.

SINTAXIS:
SELECT campo1, campo2, campo3,...
FROM primeratabla
INNER JOIN segundatabla
ON primeratabla.llave = segundatabla.llaveforanea

(Microsoft, 1999, p.219)


http://www.mysql.com

________________________________________________________________________________________________________________________________________

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.

primeratabla Son los nombres de las tablas desde las que se


segundatabla combinan los registros.

primeratabla.llave Nombre del campo llave con el que se buscarán


los campos que coincidan en la segunda tabla.

segundatabla.llaveforaea Nombre del campo llave foránea que deberá


coincidir con el campo llave de la primera
tabla.
EJEMPLO:
Tomar en cuenta nuevamente las tablas libro y editorial, ahora 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 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

SELECT titulo, nombre


FROM libro
INNER JOIN editorial
ON libro.ideditorial = editorial.ideditorial

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)

Tabla resultante del select


titulo nombre
Historia de México Clío
Math Impala
Mujer y Sociedad Impala

• Reunión Externa

Se le llama Reunión Externa a la combinación de dos tablas y se muestran todos los


registros resultantes de dicha combinación tengan o no correspondencia, es decir
que se toman todos los registros de la primer tabla y uno a uno se combinan con los
registros de la segunda (generalmente se usa un índice para localizar los registros de
la segunda tabla como condición a cumplir) y para cada registro encontrado se
añade una fila a la tabla resultante. Si no existe ninguna fila en la segunda tabla que
cumpla la condición, se combina el registro de la primera tabla con un registro
NULL de la segunda tabla.

Existen dos grupos de reuniones externas, izquierda y derecha, dependiendo de cual


de las tablas se lea en primer lugar:

o LEFT OUTER JOIN

Se recorre la tabla de la izquierda y se buscan registros en la tabla de la


derecha, si no se encuentra un registro que le corresponda se concatena con
NULL.

SINTAXIS:
SELECT campo1, campo2, campo3,...
FROM primeratabla
LEFT OUTER JOIN segundatabla
ON primeratabla.llave = segundatabla.llaveforanea

(Microsoft, 1999, p.222)


http://www.mysql.com
________________________________________________________________________________________________________________________________________

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

primeratabla Son los nombres de las tablas desde las que se


combinan los registros.

primeratabla.llave Nombre del campo llave con el que se buscarán


los campos que coincidan en la segunda tabla.

segundatabla.llaveforaea Nombre del campo llave foránea que deberá


coincidir con el campo llave de la primera tabla.

EJEMPLO:
Tomando en cuenta nuevamente las tablas libro y editorial, del
ejemplo anterior:

SELECT titulo, nombre


FROM libro
LEFT OUTER JOIN editorial
ON libro.ideditorial = editorial.ideditorial

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

o RIGHT OUTER JOIN

Se recorre la tabla de la derecha y se buscan registros en la tabla de la


izquierda, si no se encuentra un registro que le corresponda se concatena con
NULL.
________________________________________________________________________________________________________________________________________

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

(Microsoft, 1999, p.222)


http://www.mysql.com

DONDE:
campo1,campo2,... Nombre de los campos que se desean mostrar
en la tabla resultante

primeratabla Nombre de la primera tabla a la que se le


añadirán las filas.

segundatabla Nombre de la segunda tabla que tiene las filas


que serán añadidas.

primeratabla.llave Nombre del campo llave con el que se buscarán


los campos que coincidan en la segunda tabla.

segundatabla.llaveforaea Nombre del campo llave foránea que deberá


coincidir con el campo llave de la primera tabla.

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)

SELECT titulo, nombre


FROM libro
RIGHT OUTER JOIN editorial
ON libro.ideditorial = editorial.ideditorial

INTERPRETACIÓN:
Se hace una consulta de los nombres de editoriales con los
títulos de libros que les correspondan.

Tabla resultante del select


titulo nombre
Historia de México Clío
Food Culture in Mexico Clío
Minas de Oro del Perú Clío
Math Impala
Mujer y Sociedad Impala
NULL Alfa Omega

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:

SELECT campo1, campo2,.....


FROM nombretabla
WHERE condición operador (SELECT campo1, campo2,...
FROM nombretabla
WHERE condición)
(Microsoft, 1999, p.243)
http://www.mysql.com

________________________________________________________________________________________________________________________________________

70
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

DONDE:
campo1, campo2,... Nombre de los campos que se seleccionan

nombretabla Nombre de la tabla sobre la que se hace la


selección.

condición Condición que evaluará la cláusula WHERE

operador operador que une la segunda selección con la


primera.

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.

Es necesario hacer una consulta a la tabla de préstamos


condicionando que el número de usuario sea 1, pero además que la
fecha del préstamo sea igual a la fecha más reciente que tiene dentro
de sus préstamos el usuario #1.

Primero se evalúa la subconsulta que arroja como resultado (2007-


04-17) y esto se agrega a la consulta inicial.

________________________________________________________________________________________________________________________________________

71
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

Y la consulta total muestra el siguiente resultado:

Tabla resultante del select


idusuario idlibro idejemplar fechapresta fechadevol
1 3 2 2007-04-17 2007-04-19

En ocasiones se necesita, dentro de la subconsulta, hacer referencia al valor de una columna


del registro actual de la primer consulta, a esto se le llama “referencia externa” y se ilustra
con el siguiente ejemplo:

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

SELECT idusuario, nombre,


(SELECT MIN(fechapresta)
FROM prestamo
WHERE idusuario = usuarios.idusuario) as prestamoinical
FROM usuarios

________________________________________________________________________________________________________________________________________

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.

Se hace una consulta a la tabla usuarios solicitando idusuario y


nombre, después registro a registro se busca en la tabla prestamo
todos aquellos préstamos que le correspondan para sacar la fecha
más antigua. Al campo resultante de la subconsulta se le asigna el
alias prestamoinicial. La tabla resultante es:
Tabla resultante del select
idusuario nombre prestamoinicial
1 Claudio Romo 1999-03-14
2 Edgar Lara 2003-12-11
3 Adrián Mora 2000-09-18

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.

3.5. Funciones de conjunto de registros COUNT, SUM, AVG, MAX,


MIN.

Son funciones que operan sobre una colección de valores y regresan un sólo valor.

En la siguiente tabla se presentan funciones que resumen los valores de un conjunto de


registros y que se utilizan con mayor frecuencia. Serán ejemplificadas en el punto 3.6 de
esta Unidad.
Tabla de Funciones
NOMBRE DE LA FUNCION OPERACION QUE REALIZA
COUNT() Cuenta los valores distintos de NULL
SUM() Realiza la suma de los valores, en caso de resultar
0 devuelve NULL.
AVG() Calcula el promedio de valores numéricos
MAX() Calcula el valor máximo de un número o cadena c

________________________________________________________________________________________________________________________________________

73
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

MIN() Calcula el valor mínimo de un número o de una


cadena

(Molinaro, 2006, p.411), (Silberschatz, Korth, Sudarshan, 2006, p.121).

A continuación se presentan algunos ejemplos de su aplicación:

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

SELECT COUNT(idusuario) FROM prestamo

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

SELECT COUNT(*) FROM ejemplar

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.

3.6. Agregación GROUP BY, HAVING.

• 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, ...]

(Microsoft, 1999, p.273)


(Microsoft, 2003, AEL)

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

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

SELECT idlibro, count(*) as ejemplares


FROM ejemplar
GROUP BY idlibro

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)

Tabla resultante del select


idlibro ejemplares
1 3
2 2

EJEMPLO 2:
A partir de la tabla inicial del ejemplo anterior:

SELECT idlibro, edicion, count(*) as ejemplares


FROM ejemplar
GROUP BY idlibro, edicion

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.

Tabla resultante del select


idlibro edicion ejemplares
1 1 2
1 2 1
2 3 1
2 4 1

• 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 ...]

(Microsoft, 1999, p.276)


(Microsoft, 2003, AEL)

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

SELECT idlibro, count(*) as ejemplares


FROM ejemplar
GROUP BY idlibro
HAVING ejemplares >= 3

INTERPRETACIÓN:
Se requiere saber qué libros tienen tres ejemplares o más.

Se hace una consulta a la tabla de ejemplares, solicitando que se


agrupen los registros por número de identificación del libro,
________________________________________________________________________________________________________________________________________

78
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

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, filtrando además sólo aquellos que
sean mayores o igual a 3 repeticiones.

Tabla resultante del select


idlibro ejemplares
1 3

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

SELECT idioma, count(*) as numlibros


FROM libro
GROUP BY idioma
HAVING numlibros = 1

INTERPRETACIÓN:
Se quieren consultar los idiomas en que sólo hay un libro.

Se hace una consulta a la tabla de libros, solicitando que se agrupen


los registros por idioma y se haga un conteo de las veces que se

________________________________________________________________________________________________________________________________________

79
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

repite cada uno. Finalmente se muestran sólo aquellos idiomas que


en su conteo dieron como resultado 1.

Tabla resultante del select


idioma numlibros
francés 1
italiano 1

3.7. Inserción de registros a partir de otras tablas

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

http://www.mysql.com Sitio oficial de MySQL.

DONDE:
tabla_destino Es el nombre de la tabla a la que se le insertan los datos.

campodestino1,... Nombre de los campos que serán afectados con la


inserción (opcional)

campoorigen1,... Son los nombres de los campos que tienen los datos que
serán insertados en la tabla destino.

tabla_origen Nombre de la tabla que tiene los campos: campoorigen 1,


campoorigen2, ...

condición característica que deben cumplir los registros que serán


insertados.

________________________________________________________________________________________________________________________________________

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

INSERT INTO libro


SELECT *
FROM libro99

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.

3.9. Actividades propuestas

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 la materia CONT1?

• ¿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)

• ¿Qué materias imparte el maestro Trejo Lemus? Muestra la clave de la materia.

• 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.

• ¿Encuentra a todos los alumnos que cursan la materia MATE2?

• Se requiere un listado con el nombre de cada materia, adicionalmente muestra la clave


del maestro que la imparte, así como el horario y el aula en que lo hace.

• ¿Qué materias imparte el maestro Bravo Nuñez? Muestra la clave de la materia.

• ¿Cuántos maestros hay en cada nivel?

• Muestra la clave del alumno y el número de materias que está cursando actualmente.

• Es necesario conocer el nombre de los alumnos que reprobaron QUIM1.

• Se requiere la clave de los alumnos que cursan tres materias.

3.10. Bibliografía de la unidad

Silberschatz; Korth, Sudarshan, Fundamentos de Bases de Datos; Quinta Edición; McGraw


Hill; 2006.

Anthony Molinaro, Curso de SQL, Editorial Anaya, 2006.

SQL Server, versión 8, Ayuda en línea (AEL), Microsoft, 2003.

________________________________________________________________________________________________________________________________________

84
Unidad III Consultas y Lenguaje de Manipulación de Datos (DML)

Microsoft, Implementing a Database on Microsoft SQL Server 7.0, Training and


Certification Workbook, 1999.

http://www.mysql.com Sitio oficial de MySQL.

________________________________________________________________________________________________________________________________________

85

También podría gustarte