Você está na página 1de 126

Universidad de

Centro de Educación Virtual y a Distancia

Programas de Educación a Distancia

ADMINISTRACIÓN DE BASE DE
DATOS II

SERGIO PEÑALOZA ROJAS

Formando Colombianos De Bien

Álvaro González Joves


Rector

María Eugenia Velasco Espitia


Decana Facultad de Estudios Avanzados, Virtuales, a Distancia y Semiescolarizados

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Tabla de Contenido
Presentación 1
Introducción 2
Horizontes 4

UNIDAD 1: LENGUAJE DE DEFINICIÓN DE DATOS 5


Descripción Temática 5
Horizontes 6
Núcleos Temáticos y Problemáticos 6
Proceso de Información 6
1.1 COMPONENTES DEL LENGUAJE SQL 6
1.1.1 Tipos de Datos 6
1.1.2 Operadores 9
1.2 RESTRICCIONES SEMANTICAS 10
1.2.1 Clave Primaria 10
1.2.2 Unicidad 11
1.2.3 Obligatoriedad 11
1.2.4 Clave Foránea 11
1.2.5 Verificación 12
1.2.6 Disparadores 12
1.3 BASE DE DATOS 13
1.3.1 Creación de Base de Datos 13
1.3.2 Eliminar Base de Datos 14
1.4 TABLAS 15
1.4.1 Creación de Tablas 16
1.4.2 Alterar Tablas 22
1.4.3 Eliminar Tablas 26
1.5 IMPLEMENTACIÓN EN POSTGRESQL 27
Proceso de Comprensión y Análisis 34
Solución de Problemas 36
Síntesis Creativa y Argumentativa 37
Autoevaluación 38
Repaso Significativo 39
Bibliografía Sugerida 40

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II

UNIDAD 2: LENGUAJE DE DEFINICION DE DATOS I 41


Descripción Temática 41
Horizontes 42
Núcleos Temáticos y Problemáticos 42
Proceso de Información 42
2.1 COMPONENTES DEL LENGUAJE SQL 42
2.1.1 Características del Lenguaje SQL 42
2.1.2 Operadores 43
2.1.3 Cláusulas 44
2.1.4 Predicados 44
2.2 CONSULTAS DE ACCION 45
2.2.1 Insertar 45
2.2.2 Modificar 47
2.2.3 Eliminar 50
2.3 CONSULTAS DE SELECCIÓN – SIMPLES 52
2.3.1 Select 52
2.3.2 Consultas Simples con la Cláusula FROM 55
2.3.3 Consultas Simples con la Cláusula ORDER BY 60
2.3.4 Consultas Simples con el Predicado DISTINCT/ALL 63
2.3.5 Consultas Simples con la Cláusula WHERE 64
2.4 CONSULTAS DE SELECCIÓN – MULTITABLAS 69
2.4.1 Producto Cartesiano 70
2.4.2 Composición Interna – Producto cartesiano más Restricción 71
2.4.3 Composición Interna - INNER JOIN 76
2.4.4 Composición Externa 77
2.5 FUNCIONES DE FORMATO 79
2.6 IMPLEMENTACIÓN EN POSTGRESQ 83
Proceso de Comprensión y Análisis 86
Solución de Problemas 88
Síntesis Creativa y Argumentativa 91
Autoevaluación 91
Repaso Significativo 92
Bibliografía Sugerida 94

UNIDAD 3: LENGUAJE DE DEFINICION DE DATOS II 95


Descripción Temática 95
Horizontes 96
Núcleos Temáticos y Problemáticos 96
Proceso de Información 96
3.1 FUNCIONES DE COLUMNA 96
3.1.1 Función COUNT 96
3.1.2 Función SUM 98
3.1.3 Función MIN 99

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II

3.1.4 Función MAX 100


3.1.5 Función AVG 101
3.2 CONSULTAS SUMARIAS 102
3.2.1 La cláusula GROUP BY 103
3.2.2 La cláusula HAVING 104
3.3 SUBCONSULTAS 106
3.3.1 Referencias Externas 106
3.3.2 Anidar Subconsultas 107
3.3.3 Subconsultas en la cláusula FROM 108
3.3.4 Subconsulta en las cláusulas WHERE y HAVING 109
3.4 IMPLEMENTACIÓN EN POSTGRESQL 111
Proceso de Comprensión y Análisis 114
Solución de Problemas 116
Síntesis Creativa y Argumentativa 119
Autoevaluación 119
Repaso Significativo 120
Bibliografía Sugerida 121

BIBLIOGRAFIA GENERAL 122

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 1

Presentación
La educación superior se ha convertido hoy día en prioridad para el Gobierno
Nacional y para las universidades públicas, brindado oportunidades de superación
y desarrollo personal y social, sin que la población tenga que abandonar su región
para merecer de este servicio educativo; prueba de ello es el espíritu de las
políticas educativas que se refleja en el proyecto de Decreto Estándares de Calidad
en Programas Académicos de Educación Superior a Distancia de la Presidencia de
la República, el cual define: “Que la Educación Superior a Distancia es aquella que
se caracteriza por diseñar ambientes de aprendizaje en los cuales se hace uso de
mediaciones pedagógicas que permiten crear una ruptura espacio temporal en las
relaciones inmediatas entre la institución de Educación Superior y el estudiante, el
profesor y el estudiante, y los estudiantes entre sí”.

La Educación Superior a Distancia ofrece esta cobertura y oportunidad educativa


ya que su modelo está pensado para satisfacer las necesidades de toda nuestra
población, en especial de los sectores menos favorecidos y para quienes las
oportunidades se ven disminuidas por su situación económica y social, con
actividades flexibles acordes a las posibilidades de los estudiantes.

La Universidad de Pamplona gestora de la educación y promotora de llevar


servicios con calidad a las diferentes regiones, y el Centro de Educación Virtual y a
Distancia de la Universidad de Pamplona, presentan los siguientes materiales de
apoyo con los contenidos esperados para cada programa y les saluda como parte
integral de nuestra comunidad universitaria e invita a su participación activa para
trabajar en equipo en pro del aseguramiento de la calidad de la educación superior
y el fortalecimiento permanente de nuestra Universidad, para contribuir
colectivamente a la construcción del país que queremos; apuntando siempre hacia
el cumplimiento de nuestra visión y misión como reza en el nuevo Estatuto
Orgánico:

Misión: Formar profesionales integrales que sean agentes generadores de


cambios, promotores de la paz, la dignidad humana y el desarrollo nacional.

Visión: La Universidad de Pamplona al finalizar la primera década del siglo XXI


deberá ser el primer centro de Educación Superior del Oriente Colombiano.

Luis Armando Portilla Granados – Director CEVDUP

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 2

Introducción
Hoy en día la información es el bien inmaterial más importante utilizada ya sea por
empresas o por personas en particular, con un fin común, el de prescindir de esta
información en el momento deseado, con un mínimo costo de recursos y en forma
eficiente. Por ello, surgieron las BD (Bases de Datos, por sus siglas en español) y
los SGBD (Sistemas de Gestión de Bases de Datos, pos sus siglas en español). Las
cuales son vitales en una empresa u organización, ya que almacenan la
información concerniente a los diferentes procesos de funcionamiento críticos, y
controlan el acceso y la manipulación de los datos en está.

Los SGBD proporcionan en primer lugar un lenguaje que permite especificar la


estructura y el tipo de los datos, así como las restricciones sobre los datos. Todo
esto se almacenará en la base de datos. En segundo lugar un lenguaje de manejo
de datos bien sea procedurales y no procedurales. En los lenguajes procedurales
se especifica qué operaciones se deben realizar para obtener los datos, mientras
que en los lenguajes no procedurales se especifica qué datos deben obtenerse sin
decir cómo hacerlo. El lenguaje no procedural más utilizado es el SQL (Structured
Query Language, por sus siglas en inglés), Lenguaje de Consulta Estructurado, que
de hecho, es un estándar y es el lenguaje de los SGBDR (Sistemas de Gestión de
Bases de Datos, por sus siglas en español). Las especificaciones más habituales
usadas en los motores de base de datos son SQL 1992 (llamadas también SQL-92
o SQL-2), el SQL 1999 (denominado SQL-99 o SQL-3) y actualmente se esta
desarrollando (en complementación) la versión SQL 2003. Los SGBDR populares
como Oracle, Sysbase, Informix o de código abierto como PostgreSQL buscan
basarse o implementar estos estándares.

En el entorno de una BD de datos las personas juegan unos papeles importantes


para un buen diseño de la BD. En la presente asignatura el estudiante tendrá que
jugar los siguientes roles, en primer lugar ser Administrador de la BD quien se
encarga del diseño físico de la BD y de su implementación, realiza el control de la
seguridad y de la concurrencia, mantiene el sistema para que siempre se
encuentre operativo, y por último Diseñador de la BD quien realizan el diseño
lógico de la BD, debiendo identificar los datos, las relaciones entre datos y las
restricciones sobre los datos y sus relaciones. El diseñador de la BD debe tener un
profundo conocimiento de los datos de la empresa y también debe conocer sus

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 3

reglas de negocio. Las reglas de negocio describen las características principales


de los datos tal y como las ve la empresa.

Estimado estudiante concientizarse sobre la importancia de la asignatura con


respecto a su perfil profesional, ya que toda empresa por pequeña que sea, está
regida por un conjunto de reglas de negocio en el mundo real y que pueden ser
sistematizadas en un micro mundo como son las BD.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 4

Horizontes

1. Utilizar correctamente las instrucciones del SQL, y las funciones para dar
solución a diversos problemas.

2. Identificar claramente la utilidad del Lenguaje de Definición de Datos, en la


descripción de los objetos que forman una base de datos.

3. Entender los conceptos de Lenguaje no prodedural SQL en los Sistemas de


Gestión de Base de Datos Relacional.

4. Identificar claramente la utilidad del Lenguaje de Manipulación de Datos, en el


procesamiento de los datos de la base de datos.

5. Reconocer la importancia de la asignatura con respecto al perfil profesional del


estudiante.

6. Determinar las características de las consultas sumarias, en el procesamiento


de los datos de la base de datos.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 5

UNIDAD 1: LENGUAJE DE DEFINICIÓN


DE DATOS
Descripción Temática

El SQL (Structured query language, por sus siglas en inglés), lenguaje de consulta
estructurado, es un lenguaje surgido de un proyecto de investigación de IBM para
el acceso a bases de datos relacionales. El cual se ha convertido en un estándar de
lenguaje de bases de datos, y la gran mayoría de los sistemas de bases de datos lo
soportan, desde sistemas para computadores personales, hasta grandes
computadores.

Como su nombre indica, el SQL nos permite realizar consultas a la base de datos.
Pero el nombre se queda corto ya que SQL además realiza funciones de definición
de la base de datos.

El DDL (Data Description Language, por sus siglas en inglés), Lenguaje de


Definición de Datos, incluye órdenes para definir, modificar o borrar las tablas en
las que se almacenan los datos y de las relaciones entre estas. (Es el que más
varia de un sistema a otro)

Los SGBDR son aquellos que almacenan y administran de manera lógica los datos
en forma de tablas (o relaciones). Las tablas son la estructura básica donde se
almacena la información en la base de datos. Dado que en la mayoría de los casos,
no hay forma de que el proveedor de base de datos sepa con antelación cuales
son sus necesidades de almacenamiento de datos, es probable que necesite crear
tablas en la base de datos usted mismo. Muchas herramientas de base de datos le
permiten crear tablas sin ingresar SQL, pero debido a que las tablas son los
contenedores de toda la información, es importante incluir la sintaxis SQL en esta
unidad.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 6

Horizontes

 Identificar claramente la estructura de una tabla en DDL.

 Conocer los fundamentos básicos de DDL, por ser éste un importante


lenguaje no procedural.

 Plantear las restricciones semánticas en DDL del modelo relacional.

Núcleos Temáticos y Problemáticos

 Componentes del lenguaje SQL.

 Restricciones semánticas.

 Base de Datos.

 Tablas.

 Ejemplos.

Proceso de Información

1.1 COMPONENTES DEL LENGUAJE SQL

1.1.1 Tipos de Datos

SQL admite una variada gama de tipos de datos para el tratamiento de la


información contenida en las tablas, los tipos de datos pueden ser numéricos (con
o sin decimales), alfanuméricos, de fecha o boléanos (si o no). Según el gestor de
base de datos que estemos utilizando los tipos de datos varían, pero se reducen
básicamente a los expuestos anteriormente. Dependiendo de cada gestor de

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 7

bases de datos el nombre que se da a cada uno de estos tipos puede variar.
Básicamente tenemos los siguientes tipos de datos.

 Tipos Numéricos

Tipo Definición Bytes

Integer
Valores enteros con signo. 4
Int

Numeric(n,m) Números reales de hasta 18 digitos (con decimales), variable


donde n representa el total de dígitos admitidos
(normalmente denominado precisión) y m el número de
posiciones decimales (escala).

Decimal(n,m) Igual que el tipo numeric. variable

Real Número de coma flotante, este tipo de datos se suele 4


utilizar para los valores en notación científica.

Float Número de coma flotante, este tipo de datos se suele 8


utilizar para los valores en notación científica.

 Tipos Alfanuméricos

Tipo Definición Bytes

char(n) Almacena de 1 a 255 caracteres alfanúmericos. Este valor 0-255


viene dado por n, y es el tamaño utilizado en disco para
almacenar dato. Es decir si defino un campo como
char(255), el tamaño real del campo será de 255, aunque
el valor solo contenga 100.

varchar(n) Igual que el tipo char, con la salvedad que varchar 0-255
almacena únicamente los bytes que contenga el valor del
campo.

Nota: el tamaño del campo varia en función de cada base de datos, siendo 255 el
valor standart.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 8

 Tipos Fecha

Tipo Definición Bytes

Date Almacena sólo fechas 4

Time Almacena sólo tiempos del día 8

TimeStamp Almacena la fecha y el tiempo 8

Nota: la aparición de los tipos de datos de fecha supuso una autentica revolución
del mundo de la bases de datos, en realidad, la base de datos almacena
internamente números enteros, de hay que el tamaño sea de 4 bytes y 8 bytes (2
enteros), pero aporta la validación del dato introducido.

 Tipos Boléanos
Tipo Definición Bytes

Bit Los bit almacena un 0 ó no cero, según las bases de datos será 1
1 ó -1. Se aplica la lógica booleana, 0 es falso y no cero
verdadero.

Boolean Los boolean pueden tener uno de sólo dos estados: “verdadero” 1
o “falso”. Un tercer estado, “desconocido”, se representa por el
SQL el valor nulo.

Los valores literales válidos para el “verdadero” son:

't' ó 'true' ó 'y' ó 'yes' ó '1'

Los valores literales válidos para el “falso” son:

'f' ó 'false' ó 'n' ó 'not' ó '0'

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 9

1.1.2 Operadores

Los operadores se pueden definir como combinaciones de caracteres que se


utilizan tanto para realizar asignaciones como comparaciones entre datos.

Los operadores se dividen en aritméticos, relacionales, lógicos y concatenación.


Para esta unidad sólo destacamos los operadores relacionales y lógicos.

 Operadores Lógicos

Los operadores lógicos permiten comparar expresiones lógicas devolviendo


siempre un valor verdadero o falso. Los operadores lógicos se evalúan de izquierda
a derecha.

Operador Significado

AND a b a AND b
TRUE TRUE TRUE
TRUE FALSE FALSE
TRUE NULL NULL
FALSE FALSE FALSE
FALSE NULL FALSE
NULL NULL NULL

OR a b a OR b
TRUE TRUE TRUE
TRUE FALSE TRUE
TRUE NULL TRUE
FALSE FALSE FALSE
FALSE NULL NULL
NULL NULL NULL

NOT a NOT a
TRUE FALSE
FALSE TRUE
NULL NULL

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 10

 Operadores Relacionales

Los operadores mostrados aquí están definidos para un número de tipos de datos
nativos, que van desde los tipos numéricos hasta los tipos date/time.

Operador Descripción Utilización

< Menor que 1<2

<= Menor o igual que 1<=2

> Mayor que 2>1

>= Mayor o igual que 2>=1

= Igual 1=1

<> Diferente 1<>2

1.2 RESTRICCIONES SEMANTICAS1

La cláusula CONSTRAINT sirve para definir una restricción que se podrá


eliminar cuando queramos sin tener que borrar la columna. A cada restricción se le
asigna un nombre que se utiliza para identificarla y para poder eliminarla cuando
se quiera.

Como restricciones tenemos la de clave primaria (clave principal), la de índice


único (sin duplicados), la de valor no nulo, y la de clave foránea.

1.2.1 Clave Primaria

La restricción de clave primaria (PRIMARY KEY) permiten declarar un atributo


(campo) o conjunto de atributos como la clave primaria de una relación (identifica
unívocamente cada tupla (o registros) de la relación.

1
CASTAÑO, Miguel. Diseño de Base de Datos – Problemas Resueltos. AlfaOmega.
2001. pp. 126 a 129

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 11

1.2.2 Unicidad

La restricción de unicidad (UNIQUE) nos permite definir claves alternativas (los


valores de uno o varios atributos no pueden repetirse en diferentes tuplas o
registros de una relación)

1.2.3 Obligatoriedad

La restricción de obligatoriedad (NOT NULL) permite declarar si uno o varios


atributos de una relación deben tomar siempre un valor, es decir, no puede tomar
valores nulos.

1.2.4 Clave Foránea

La restricción de clave foránea (FOREIGN KEY), también denominada integridad


referencial, se utiliza para, mediante claves foráneas (conjunto de atributos en una
relación que es una clave principal en otra o la misma relación) enlazar relaciones
de una base de datos. La integridad referencial nos indica que los valores de la
clave foránea en la relación hijo deben corresponderse con los valores de la clave
primaria en la relación padre o bien ser nulos si se admiten nulos. Los atributos
que son clave foránea en una relación no necesitan tener los mismos nombres
que los atributos de la clave primaria con la cual ellos se corresponden.

Además de la integridad referencial que nos permite enlazar relaciones entre sí


dando lugar a la estructura de la BD, el modelo relacional permite también definir
las opciones de borrado y modificación en las claves foráneas. Estas opciones
indican las acciones que hay que llevar a cabo cuando se produce un borrado o
modificación de una tupla (o registros) en la relación padre referenciada por una
relación hija. La posibilidades para una operación de actualización (borrar o
modificar) son:

 Borrado/modificación en cascada (CASCADE)

El borrado (o modificación) de una tupla (o registros) en la relación padre


ocasiona un borrado (o modificación) de todas la tuplas relacionadas en la relación
hija (tuplas cuya clave foránea coincida con el valor de la clave primaria de la tupla
eliminada o modificada en la relación padre).

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 12

 Borrado/modificación restringido (RESTRICT)

En este caso si existen tuplas (o registros) en la relación hija relacionadas con la


tupla de la relación padre sobre la que se realiza la operación, entonces no se
puede llevar a cabo dicha operación.

 Borrado/modificación con puesta a nulos (SET NULL)

Esta posibilidad nos permite poner valor de la calve foránea referenciada a NULL
cunado se produce el borrado o modificación de una tupla (o registros) en la
relación padre.

Las opciones de borrado y modificación pueden ser distintas para una determinada
clave foránea de una relación.

1.2.5 Verificación

La restricción de verificación (CHECK), en algunos casos puede ocurrir que sea


necesario especificar una condición que deben cumplir los valores de determinados
atributos de una relación de la BD aparte de las restricciones ya vistas de clave
primaria, unicidad, obligatoriedad y clave foránea. Para ello se definen las
restricciones de verificación que, al igual que las ya estudiadas, siempre llevan
implícitas un rechazo en caso de que no se cumpla la condición especificada y que
también se comprueban ante una inserción, borrado o modificación.

1.2.6 Disparadores

A veces puede interesar especificar una acción distinta del rechazo cuando no se
cumple una determinada restricción semántica. En ese caso, se recurre al uso de
los disparadores (TRIGGERs) que no permiten además de indicar una acción,
especificar la acción que queremos se lleve a cabo si la condición se hace
verdadera. Los disparadores pueden interpretarse como reglas que especifican
que cuando se produce un evento, si se cumple una condición, entonces se realiza
una determinada acción. Los disparadores no están soportados en el SQL-92; sin
embargo, existen productos relacionales que los soportan aunque con diferencias
en el modo de funcionamiento. Además también son convenientes para mantener
algunas restricciones del Modelo E-R que no tienen contrapartida en el modelo
relacional.

Nota: el manejo de los disparadores no esta contemplado en esta asignatura.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 13

1.3 BASE DE DATOS

Una base de datos es un conjunto de datos almacenados entre los que existen
relaciones lógicas y ha sido diseñada para satisfacer los requerimientos de
información de una empresa u organización. En una base de datos, además de los
datos, también se almacena su descripción. Esta descripción es lo que se
denomina metadatos, se almacena en el diccionario de datos o catálogo y es lo
que permite que exista independencia de datos lógica-física.

1.3.1 Creación de Base de Datos

 Descripción

CREATE DATABASE
Crea una nueva base de datos. El creador pasa a ser el propietario de la
nueva base de datos.

 Estructura

CREATE DATABASE name


[ [ WITH ] [ OWNER [=] dbowner ]
[ LOCATION [=] 'dbpath' ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]

 Entradas

Pueden escribirse los parámetros optativos en cualquier orden, no sólo el orden


ilustró anteriormente.

name
El nombre de un base de datos para crear.

dbowner
El nombre del usuario de la base de datos quien será el dueño de la nueva
base de datos, opor defecto usará el valor predefinido defecto (a saber, el
usuario que ejecuta la orden).

template
El nombre de la plantilla para crear la nuevo banco de datos, o por defecto
usará la plantilla predefinida.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 14

encoding
Establece la codificación para usar en la nueva base de datos. Especifique
un cadena constante (por ejemplo, ' SQL_ASCII'), o un entero que pone en
código el número, o por defecto usará la codificación predefinida.

 Salidas

CREATE DATABASE
Mensaje devuelto si la orden se completa satisfactoriamente.

ERROR
Mensaje devuelto si ocurre un error e indicando el error (No tiene privilegios
para crear la BD, la BD ya existe, entre otros)

 Uso

Ejemplo No. 1.1


Crear la base de datos factorx
CREATE DATABASE transporte;

Ejemplo No. 1.2


Crear la base de datos factorx con la plantilla template0
CREATE DATABASE transporte TEMPLATE = template0;

1.3.2 Eliminar Base de Datos

 Descripción

DROP DATABASE
Elimina las entradas de catálogo de una base de datos existente y borra el
directorio que contiene los datos. Solamente puede ser ejecutado por el
propietario de la base de datos (normalmente quien la creó).

 Estructura

DROP DATABASE name

 Entradas

name
El nombre de una base de datos existente que se desea eliminar.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 15

 Salidas

DROP DATABASE
Mensaje devuelto si la orden se completa satisfactoriamente.

ERROR
Mensaje devuelto si ocurre un error e indicando el error (No tiene privilegios
para borrar la BD, la BD ya no existe, entre otros)

 Uso

Ejemplo No. 1.3


Eliminar la base de datos factorx
DROP DATABASE factorx;

1.4 TABLAS

El modelo relacional se basa en el concepto matemático de relación, que


gráficamente se representa mediante una tabla. Codd, que era un experto
matemático, utilizó una terminología perteneciente a las matemáticas, en concreto
de la teoría de conjuntos y de la lógica de predicados.

Una relación es una tabla con columnas y filas. Un SGBD sólo necesita que el
usuario pueda percibir la base de datos como un conjunto de tablas. Esta
percepción sólo se aplica a la estructura lógica de la base de datos. No se aplica a
la estructura física de la base de datos, que se puede implementar con distintas
estructuras de almacenamiento.

Un atributo es el nombre de una columna de una relación. En el modelo relacional,


las relaciones se utilizan para almacenar información sobre los objetos que se
representan en la base de datos. Una relación se representa gráficamente como
una tabla bidimensional en la que las filas corresponden a registros individuales y
las columnas corresponden a los campos o atributos de esos registros. Los
atributos pueden aparecer en la relación en cualquier orden.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 16

1.4.1 Creación de Tablas

 Descripción

CREATE TABLE
Introducirá una nueva clase o tabla en la base de datos actual. La tabla será
poseída por el usuario que introduce la sentencia.

 Diagrama

Restricción1

Restricción2

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 17

 Estructura

CREATE [ TEMPORARY | TEMP ] TABLE table_name (


Column_name data_type
[ NULL | NOT NULL ] [ UNIQUE ] [ DEFAULT value ]
[column_constraint_clause | PRIMARY KEY } [ ... ] ]
[, ... ]
[, PRIMARY KEY ( column [, ...] ) ]
[, CHECK ( condition ) ]
[, table_constraint_clause ]
) [ INHERITS ( inherited_table [, ...] ) ]

y table_constraint_clause es:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] ) |
PRIMARY KEY ( column_name [, ... ] ) |
CHECK ( expression ) |
FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn
[, ... ] ) ]
[ ON DELETE action ] [ ON UPDATE action ] }

 Entradas

Pueden escribirse los parámetros optativos en cualquier orden, no sólo el orden


ilustró anteriormente.

table_name
El nombre de una nueva clase o tabla a crear.

column_name
El nombre de un campo.

data_type
El tipo del campo.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 18

DEFAULT value
Un valor por defecto para el campo.

column_constraint_clause
La cláusula opcional de restricciones (constraint) especifica una lista
de restricciones de integridad o comprueba que las nuevas
inserciones o actualizaciones deben satisfacer para que la inserción o
la actualización tenga éxito.

table_constraint_clause
La cláusula opcional CONSTRAINT especifica una lista de
restricciones de integridad que las nuevas inserciones o las
actualizaciones deberán satisfacer para que una sentencia insert o
update tenga éxito. Cada restricción debe ser evaluada a una
expresión booleana. Se pueden referenciar múltiples campos con una
única restricción. Sólo se puede definir una única cláusula PRIMARY
KEY por tabla; PRIMARY KEY column (una restricción de tabla) and
PRIMARY KEY (una restricción de campo) son mutuamente
excluyentes.

 Salidas

CREATE
Mensaje devuelto si la table se ha creado con éxito.

ERROR
Mensaje devuelto si la creación de la tabla falla. Este mensaje viene
normalmente acompañado por algún texto explicativo, como: ERROR:
Relation 'table' already exists que ocurre en tiempo de ejecución, si la
tabla especificada ya existe en la base de datos. ERROR: DEFAULT: type
mismatched Si el tipo de datos o el valor por defecto no corresponde al
tipo de datos de la definición del campo.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 19

 Uso

El presente ejercicio corresponde a un fragmento sobre la Convocatoria del Factor


X, cuyo programa se realiza en televisión:

CONVOCATORIA FACTOR X

El concurso Factor X desea crear un sistema de reservado para los participantes,


para lo cual es necesario crear una base de datos que almacene toda la
información de las audiciones que organiza. Cada audición se celebra en una
fecha determinada y también que almacene el lugar (ciudad y sitio) de la audición.

En la audición intervienen varios participantes que pueden ser de 3 tipos: entre 16


y 24 años, mayores de 24 años y grupo.

En el caso de los participantes entre 16 y 24 años, y mayores de 24 años interesa


almacenar el instrumento que toca (si toca algún instrumento), el código asignado
en la convocatoria, su nombre y apellido, su número de identificación nacional y si
fue aceptado o no.

Para los grupos hay que indicar si son duos, trios, etc, el nombre del grupo.
Además, interesa el nombre de cada uno de sus componentes, así, como el
instrumento que toca (si toca algún instrumento) si fue aceptado o no. En este
sentido es importante tener en cuenta los participantes, entre 16 y 24 años, y
mayores de 24 años. Sin embargo no todos los participantes tienen que pertenecer
a un grupo.

El participante se puede presentar a una o varias audiciones y en cada una de ellas


se debe registrar el tiempo (duración aproximada) de su interveción.

Nota: los tres punto (…) al final de ejercicio indica que es mas largo y sólo se tomo
un fragmento de él.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 20

MODELO RELACIONAL DE LA BASE DE DATOS CONVOCATORIA FACTOR X

Notación:
PK PRIMARY KEY, FK FORENIGN KEY, * UNIQUE.

Recuerde los atributos derivado no forman parte del modelo relacional.

El presente Modelo se obtuvo a partir de los conocimientos obtenidos del Modelo


ER y Modelo Relaciona (Visto en la Asignatura Administración de base de datos I)

Ejemplo No. 1.4


Obtener el script para la tabla participante

CREATE TABLE participante(


pa_codigo VARCHAR(10),
pa_nombre VARCHAR(20) NOT NULL,
pa_aceptado BOOLEAN,
PRIMARY KEY(pa_codigo)
);

Nota
El atributo pa_codigo por ser clave primaria no acepta valores nulos aunque
no se halla indicado la restricción NOT NULL.

El atributo pa_aceptado por ser de tipo lógico acepta dos valores ‘t’ ó ‘f’ y el
valor null, ya que no tiene ninguna restricción de obligatoriedad.

Ejemplo No. 1.5


Obtener el script para la tabla grupo. Para crear esta relación debe haber
creado la tabla participante, ya que la tabla hija grupo depende de la tabla
padre participante.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 21

CREATE TABLE grupo(


gr_codigo VARCHAR(10),
PRIMARY KEY(gr_codigo),
FOREIGN KEY(gr_codigo) REFERENCES participante(pa_codigo)
ON UPDATE CASCADE ON DELETE CASCADE
);

Nota
En la relación se muestra un ejemplo de integridad referencial con las
relaciones grupo y participante.

Las claves primarias de la relación hija grupo y de la relación padre


participante son gr_codigo y pa_codigo, respectivamente. El atributo
gr_codigo de la relación grupo es una clave foránea que referencia la
relación participante, es decir, los valores del atributo gr_codigo deben
corresponder con los valores del atributo clave primaria pa_codigo de la
relación participante.

El borrado de un participante supone un borrado de un grupo.

La actualización de un participante supone una actualización de un grupo.

Ejemplo No. 1.6


Obtener el script para la tabla persona. Para crear esta relación debe haber
creado las tablas participante y grupo , ya que la tabla hija persona depende de
las tablas padre participante y grupo.

CREATE TABLE persona(


pe_codigo VARCHAR(10),
pe_identificacion VARCHAR(15) NOT NULL,
pe_pertenece_gr VARCHAR(20),
pe_apellido VARCHAR(20) NOT NULL,
pe_tipo INTEGER NOT NULL,
pe_instrumento CHAR(20),
PRIMARY KEY(pe_codigo),
UNIQUE (pe_identificacion),
FOREIGN key(pe_codigo) REFERENCES participante(pa_codigo)
on update cascade on delete cascade,
FOREIGN KEY(pe_pertenece_gr) REFERENCES grupo(gr_codigo)
ON UPDATE CASCADE ON DELETE SET NULL,
CHECK(pe_tipo=1 or pe_tipo=2)
);

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 22

Nota
El atributo pe_instrumento no tiene la restricción de obligatoriedad, ya que
en el ejercicio se indica que sólo se debe registrar el instrumento que toca
siempre y cuando toque algún instrumento.

El borrado de un grupo implica que todas las personas que pertenecen a él


pasarán a contener NULL en el atributo pe_pertenece_gr.

La relación persona define una restricción sobe el atributo pe_tipo que


establece que el tipo de categoría del participante puede ser 1 (participantes
entre 16 y 24 años) o 2 (mayores de 24 años) o viceversa. Así, si se va ha
insertar una persona con n valor diferente a 1 o 2 la operación se
rechazaría. Al igual si se deja nulo debido a que tiene la restricción de
obligatoriedad.

La Generalización Exclusiva de que si un participante esta clasificado como grupo


no puede ser persona o viceversa, se lleva acabo con los TRIGGERs. Como se dijo
anteriormente en esta asignatura no se tiene contemplado este tema.

1.4.2 Alterar Tablas

 Descripción

ALTER TABLE
Cambia la definición de una tabla existente. Hay varios formas:

ADD COLUMN
Esta forma agrega una nueva columna a la tabla que usa la misma sintaxis
como CREATE TABLE.

DROP COLUMN
Esta forma borra una columna de una tabla. Se dejarán caer
automáticamente también los índices y restricciones de la tabla que
involucran la columna. Usted necesitará decir CASCADE si algo fuera de la
tabla depende de la columna, por ejemplo, referencias de calve foránea.

ALTER COLUMN TYPE


Esta forma cambia el tipo de una columna de una tabla. Se convertirán los
índices y las restricciones de la tabla simples que involucran la columna
automáticamente para usar el nuevo tipo de la columna.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 23

 Diagrama

Restricción1

Restricción2

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 24

 Estructura

ALTER TABLE [ ONLY ] name [ * ]


action [, ... ]
ALTER TABLE [ ONLY ] name [ * ]
RENAME [ COLUMN ] column TO new_column
ALTER TABLE name
RENAME TO new_name

donde action es una de estas acciones:

ADD [ COLUMN ] column type [ column_constraint [ ... ] ]


DROP [ COLUMN ] column [ RESTRICT | CASCADE ]
ALTER [ COLUMN ] column TYPE type [ USING expression ]
ALTER [ COLUMN ] column SET DEFAULT expression
ALTER [ COLUMN ] column DROP DEFAULT
ALTER [ COLUMN ] column { SET | DROP } NOT NULL
ALTER [ COLUMN ] column SET STATISTICS integer

 Entradas

name
El nombre (posiblemente esquema-calificado) de una tabla existente para
alterar. Si ONLY se especifica, sólo esa tabla se altera. Si ONLY no se
especifica, la tabla y todas sus tablas descendientes se actualizan.

column
El nombre de una nueva o existente columna.

new_column
El nuevo nombre para una columna existente.

new_name
El nuevo nombre para la tabla.

type
El tipo de dato de la nueva columna, o el nuevo tipo de dato para una
columna existente.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 25

 Salidas

ALTER TABLE
Mensaje devuelto si la orden se completa satisfactoriamente.

ERROR
Mensaje devuelto si ocurre un error e indicando el error (El tipo de dato no
existe, el atributo no existe para eliminar, entre otros)

 Uso

Ejemplo No. 1.7


Adicionar el atributo pe_fecha_nacimiento de tipo date a la tabla persona:
ALTER TABLE persona ADD COLUMN pe_fecha_nacimiento date;

Ejemplo No. 1.8


Adicionar una restricción de NOT NULL al atributo pe_fecha_nacimiento de la
tabla persona:
ALTER TABLE persona ALTER COLUMN pe_fecha_nacimiento SET NOT
NULL;

Ejemplo No. 1.9


Eliminar el atributo pe_fecha_nacimiento de la tabla persona:
ALTER TABLE persona DROP COLUMN pe_fecha_ncimiento
RESTRICT;

Ejemplo No. 1.10


Renombrar el atributo pe_tipo por pe_categoria:
ALTER TABLE persona RENAME COLUMN pe_tipo TO pe_categoria;

Ejemplo No. 1.11


Renombra la tabla persona por solita
ALTER TABLE persona RENAME TO solista;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 26

1.4.3 Eliminar Tablas

 Descripción

DROP TABLE
Elimina tablas de una base de datos. Solo su propietario (owner) puede
destruir las tablas, tanto los datos como su estructura.

 Estructura

DROP TABLE name [, ...] [ CASCADE | RESTRICT ]

 Entradas

name
El nombre de una tabla existente que se desea eliminar.

CASCADE
Elimina automáticamente objetos que dependen de la tabla.

RESTRICT
No deja eliminar la tabla si cualquier objeto depende de él. Éste es el valor
por defecto.

 Salidas

DROP
El mensaje devuelto si el comando concluyo exitosamente.

ERROR Relation "nombre" Does Not Exist!


Si la tabla o vista especificada no existe en la base de datos.

 Uso

Ejemplo No. 1.12


Para destruir la tabla persona
DROP TABLE persona;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 27

Ejemplo No. 1.13


Para destruir dos tabla grupo y participante
DROP TABLE grupo, participante;

1.5 IMPLEMENTACIÓN EN POSTGRESQL

 Ingresar al SGBDR PostgreSQL

 Haga clic sobre el servidor PosgresSQL Database Server 8.0 para conectarse al
servidor

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 28

 Ingrese la contraseña (es la que usted coloco en el momento de instalar el


programa) para iniciar la conexión.

 Al conectarse sobre el servidor, la base de datos template1 queda por defecto


activada y el resto de bases de datos quedan tachadas con una cruz roja.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 29

 Abrir el edito para la base de datos template1

Observe que en el titulo de la ventana esta el nombre de la base de datos


template1

 Crear la base de datos empresa


En el editor de SQL escribir la sentencia para crear la base de datos:

CREATE DATABASE empresa TEMPLATE = template0;

Nota : PostgreSQL utiliza una plantilla para crear las bases de datos.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 30

 Ejecute el script. Si se creó la base de datos en la pestaña Data Output


informa que así fue (Query returned successfully) en otro caso no muestra
nada o indicara el error producido en la pestaña Messages.

 Cerrar el editor de SQL de la base de datos template1. El edito preguntara


si desea almacenar el script ¿Si o No?

 Refrescar el objeto Databases para que aparezca la base de datos


empresa

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 31

 Elegir la base de datos empresa haciendo clic en el nombre

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 32

 Abrir el editor para la base de datos empresa

Observe que en el titulo de la ventana esta el nombre de la base de datos


empresa

 Crear la tabla empleado

En el editor de SQL escribir las sentencias para crear la tabla:

CREATE TABLE empleado(


emp_nss VARCHAR(10) NOT NULL,
emp_nombre VARCHAR(20) NOT NULL,
emp_apellido VARCHAR(20) NOT Null,
emp_fecha_nacimiento DATE,
emp_direccion VARCHAR(30),
emp_sexo BOOLEAN,
emp_salario FLOAT,
emp_supervisor VARCHAR(10),
PRIMARY KEY(emp_nss),
FOREIGN KEY(emp_supervisor) REFERENCES empleado (emp_nss)

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 33

ON UPDATE CASCADE ON DELETE SET NULL,


CHECK(emp_salario>0)
);

 Ejecute el script. Si se creó la tabla en la pestaña Data Output informa que


así fue (Query returned successfully) en otro caso no muestra nada o indicara
el error producido en la pestaña Messages.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 34

Proceso de Comprensión y Análisis

Esta tabla (o relación) tiene la finalidad de guardar


información referente a departamentos y ciudades

Supóngase que se tiene los siguientes datos:

L_id L_nombre L_pertenece L_extension


d1 Norte de Santander
d2 Santander
d3 Bolivar
d4 Tolima
c1_1 Pamplona d1
c1_2 Bucaramanga d2
c1_3 Cartagena d3
c2_1 Cúcuta d1
c2_2 Lebrija d2
c3_1 Ocaña d1

Partiendo de esta información determine:

1. Si en el DDL se tuviera la siguiente restricción: FOREIGN KEY(l_pertenece)


REFERENCES lugar(l_id). ¿Cuál es el propósito de esa restricción si se
intentara insertar la ciudad Ibagué? Acompañado de los siguientes datos:

L_id L_nombre L_pertenece L_extension


c1_4 Ibagué d4

2. Si en el DDL se tuviera la siguiente restricción: FOREIGN KEY(l_pertenece)


REFERENCES lugar(l_id) ON UPDATE CASCADE ON DELETE CASCADE.
¿Cuál es el propósito de esa restricción si se intentara eliminar el departamento
identificado con d1?

3. Si en el DDL se tuviera la siguiente restricción: FOREIGN KEY(l_pertenece)


REFERENCES lugar(l_id) ON UPDATE CASCADE ON DELETE CASCADE.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 35

¿Cuál es el propósito de esa restricción si se intentara modificar la identificación


del departamento d1 por dpto1?

4. Si en el DDL se tuviera la siguiente restricción: FOREIGN KEY(l_pertenece)


REFERENCES lugar(l_id) ON UPDATE CASCADE ON DELETE RESTRICT.
¿Cuál es el propósito de esa restricción si se intentara eliminar el departamento
identificado con d2?

5. Si en el DDL se tuviera la siguiente restricción: FOREIGN KEY(l_pertenece)


REFERENCES lugar(l_id) ON UPDATE CASCADE ON DELETE SET NULL.
¿Cuál es el propósito de esa restricción si se intentara eliminar el departamento
identificado con d2?

6. Si en el DDL se tuviera la siguiente restricción: FOREIGN KEY(l_pertenece)


REFERENCES lugar(l_id) ON UPDATE CASCADE ON DELETE SET NULL.
¿Cuál es el propósito de esa restricción si se intentara eliminar el departamento
identificado con d2?

7. Si en el DDL se tuviera la siguiente restricción: l_nombrevarchar(30) NOT


NULL. ¿Cuál es el propósito de esa restricción si se intentara insertar un
departamento cualquiera pero no se especifica el nombre?

8. Si en el DDL se tuviera la siguiente restricción: PRIMARY KEY(l_id). ¿Cuál es


el propósito de esa restricción si se intentara insertar el departamento
Amazonas? Acompañado de los siguientes datos:

L_id L_nombre L_pertenece L_extension


d3 Amazonas

9. Si en el DDL se tuviera la siguiente restricción: UNIQUE(l_nombre). ¿Cuál es


el propósito de esa restricción si se intentara insertar el departamento Bolivar?
Acompañado de los siguientes datos:

L_id L_nombre L_pertenece L_extension


d5 Bolivar 25.978

10. Si en el DDL se tuviera la siguiente restricción: CHECK(l_extension>=0). ¿Cuál


es el propósito de esa restricción si se intentara insertar el departamento
Caldas? Acompañado de los siguientes datos:

L_id L_nombre L_pertenece L_extension


d5 Caldas -7888

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 36

Solución de Problemas
Caso de Estudio: GESTIÓN DE TRABAJOS DE GRADO DE FIN DE
CARRERA.

Una Institución Universitaria quiere generar un sistema para tener controlado en


una base de datos todo lo referente a los Trabajos de Grado de Fin de Carrera
(T.G.F.C.): estudiantes que los realizan, profesores que los dirigen, temas de los
que tratan y tribunales que los corrigen.

Por tanto, es de interés que los estudiantes se definan por su número de


matrícula, DNI y nombre. Un estudiante realiza, evidentemente, sólo un T.G.F.C.
Los T.G.F.C. se definen por su tema, por un número de orden y por la fecha de
comienzo. Un T.G.F.C. determinado, no puede ser realizado por varios estudiantes.

Un profesor se define por su DNI, nombre y domicilio; y puesto que los T.G.F.C.
son del área en el que trabaja, NO interesa conocer el T.G.F.C. que dirige sino a
qué estudiante se lo dirige. Un Tribunal está formado por varios profesores y los
profesores pueden formar parte de varios tribunales. Por otra parte, sí es de
interés para el tribunal conocer qué estudiante es el que se presenta, con qué
T.G.F.C. y en qué fecha lo ha defendido. El tribunal se define por un número de
tribunal, lugar de examen y por el número de componentes.

Al margen de esto, un estudiante puede haber pertenecido a algún grupo de


investigación del que haya surgido la idea del T.G.F.C. Dichos grupos se identifican
por un número de grupo, su nombre y por su número de componentes. Un
estudiante no puede pertenecer a más de un grupo y no es de interés saber si el
grupo tiene algo que ver o no con el T.G.F.C. del estudiante; sí siendo de interés la
fecha de incorporación a dicho grupo.

Por otra parte, un profesor, al margen de dirigir el T.G.F.C. de algunos estudiantes,


puede haber colaborado con otros en la realización de dicho T.G.F.C. pero siendo
otro profesor el que lo dirige. En este caso, sólo es interesante conocer qué
profesor ha ayudado a qué estudiante (a un estudiante le pueden ayudar varios
profesores).

 Analice el contexto de la base de datos relacional “Gestión de Trabajos de


Grado de Fin de Carrera”

 Obtener el Diseño Lógico de la base de datos relacional “Gestión de Trabajos


de Grado de Fin de Carrera”

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 37

 Escriba instrucciones apropiadas en el DDL de SQL para declarar el modelo


relacional “Gestión de Trabajos de Grado de Fin de Carrera”

Síntesis Creativa y Argumentativa


MODELO ENTIDAD RELACION DE UN FRAGMENTO DE LA BASE DE DATO
DE ALQUILER DE VEHICULOS

 Obtener el DDL de SQL para declarar el modelo relacional expuesto en el


modelo ER.

 Argumentar las restricciones semánticas (Supuestos semánticos


complementarios y Semánticos no reflejados)

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 38

 Exponga otro caso de Modelo ER para aplicar el DDL.

Autoevaluación
MODELO RELACIONAL DE LA BASE DE DATOS BIBLIOTECA

Selección múltiple con única respuesta

1. Orden que permite crear la tabla usuario


A. Create table B. Creat table
C. New table D. Creater table

2. Orden que permite eliminar la tabla escribe


A. Erase table B. Delete table
C. Drop table D. Free table

3. Orden que permite crear la base de datos biblioteca


A. Creat database B. Create database
C. New basedata D. Creater basedata

4. Orden que permite eliminar la base de datos biblioteca


A. Erase basedata B. Delete database
C. Drop database D. Free basedata

Complete

5. ¿Qué instrucción se debe incluir en la tabla presta para indicar que los atributos
eje_id y lib_contiene_eje son una llave foránea?

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 39

6. ¿Qué instrucción que se debe incluir en la tabla ejemplar para indicar que el
atributo eje_disponible es de tipo lógico ( ‘t’ o ‘f’ donde ‘t’ indica que está
disponible y ‘f’ que no esta disponible) y no recibe valores nulos?

7. ¿Qué instrucción se debe incluir en la tabla libro para indicar que el atributo
lib_id es la llave principal?

8. ¿Qué instrucción que se debe incluir en la tabla usuario para indicar que el
atributo usu_fecha_nacimiento es de tipo fecha y recibe valores nulos?

9. ¿Qué instrucción que se debe incluir en la tabla libro para indicar que el atributo
lib_nombre es único?

10. Las relaciones del modelo de la biblioteca se quieren almacenar en una base
de datos llamada biblioteca. ¿Cuál sería la orden para crear la base de datos?

Repaso Significativo

Lenguaje de Definición de Datos, incluye órdenes para definir, modificar o borrar


las tablas en las que se almacenan los datos y de las relaciones entre estas.

Los SGBDR son aquellos que almacenan y administran de manera lógica los datos
en forma de tablas. Las tablas son la estructura básica donde se almacena la
información en la base de datos. Dado que en la mayoría de los casos, no hay
forma de que el proveedor de base de datos sepa con antelación cuales son sus
necesidades de almacenamiento de datos, es probable que necesite crear tablas
en la base de datos usted mismo.

SQL admite una variada gama de tipos de datos para el tratamiento de la


información contenida en las tablas, los tipos de datos pueden ser numéricos (con
o sin decimales), alfanuméricos, de fecha o boléanos (si o no). Según el gestor de
base de datos que estemos utilizando los tipos de datos varían, pero se reducen
básicamente a los expuestos anteriormente

Los operadores aritméticos, relacionales, lógicos y concatenación se pueden


definir como combinaciones de caracteres que se utilizan tanto para realizar
asignaciones como comparaciones entre datos.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 40

El modelo relacional proporciona mecanismos para recoger restricciones


semánticas o de usuario. Como restricciones tenemos la de clave primaria
(PRIMARY KEY), la de índice único (UNIQUE), la de valor no nulo (NOT NULL), la
de verificación (CHECK) y la de clave foránea (FOREIGN KEY).

Una base de datos es un conjunto de datos almacenados entre los que existen
relaciones lógicas y ha sido diseñada para satisfacer los requerimientos de
información de una empresa u organización. En una base de datos, además de los
datos, también se almacena su descripción.

CREATE DATABASE crea una nueva base de datos. El creador pasa a ser el
propietario de la nueva base de datos.

DROP DATABASE elimina las entradas de catálogo de una base de datos existente
y borra el directorio que contiene los datos. Solamente puede ser ejecutado por el
propietario de la base de datos.

CREATE TABLE introducirá una nueva clase o tabla en la base de datos actual. La
tabla será poseída por el usuario que introduce la sentencia.

ALTER TABLE cambia la definición de una tabla existente.

DROP TABLE elimina tablas de una base de datos. Solo su propietario (owner)
puede destruir las tablas, tanto los datos como su estructura.

Bibliografía Sugerida

GROFF, James R. , WEINBERG, Paul N. Aplique SQL. McGrawHill. 1991.

ELMASRI / NAVATHE. Sistemas de Bases de Datos. Conceptos Fundamentales.


Pearson Educación. 2000.

CASTAÑO, Miguel. Diseño de Base de Datos – Problemas Resueltos. AlfaOmega.


2001.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 41

UNIDAD 2: LENGUAJE DE DEFINICION


DE DATOS I
Descripción Temática

Los lenguajes orientados a transformaciones son lenguajes no procedurales que


utilizan relaciones para transformar los datos de entrada en la salida deseada.
Estos lenguajes tienen estructuras que son fáciles de utilizar y que permiten
expresar lo que se desea en términos de lo que se conoce. Uno de estos lenguajes
es SQL, el cual está compuesto por comandos, cláusulas, operadores y funciones
de agregado. Estos elementos se combinan en las instrucciones para crear,
actualizar y manipular las bases de datos.

El SQL (que se pronuncia deletreando en inglés las letras que lo componen, es


decir "ese-cu-ele" y no "siquel" como se oye a menudo) empieza en 1974 con la
definición, por parte de Donald Chamberlin y de otras personas que trabajaban en
los laboratorios de investigación de IBM, de un lenguaje para la especificación de
las características de las bases de datos que adoptaban el modelo relacional. A
partir de 1981, IBM comenzó a entregar sus productos relacionales y en 1983
empezó a vender DB2. En el curso de los años ochenta, numerosas compañías
(por ejemplo Oracle y Sybase, sólo por citar algunos) comercializaron productos
basados en SQL, que se convierte en el estándar industrial de hecho por lo que
respecta a las bases de datos relacionales.

Actualmente, está en marcha un proceso de revisión del lenguaje por parte de los
comités ANSI e ISO, que debería terminar en la definición de lo que en este
momento se conoce como SQL3. Las características principales de esta nueva
encarnación de SQL deberían ser su transformación en un lenguaje stand-alone
(mientras ahora se usa como lenguaje hospedado en otros lenguajes) y la
introducción de nuevos tipos de datos más complejos que permitan, por ejemplo,
el tratamiento de datos multimediales.

El DML (Data Manipulation Language, por sus siglas e inglés), lenguaje de


manipulación de datos, nos permite recuperar los datos almacenados en la base de
datos y también incluye órdenes para permitir al usuario actualizar la base de
datos añadiendo nuevos datos, suprimiendo datos antiguos o modificando datos
previamente almacenados.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 42

Todas las sentencias empiezan con un verbo (palabra reservada que indica la
acción a realizar), seguido del resto de cláusulas, algunas obligatorias y otras
opcionales que completan la frase. Todas las sentencias siguen una sintaxis
para que se puedan ejecutar correctamente.

Horizontes

 Identificar claramente el diagrama sintáctico de las consultas de selección y


de acción.

 Conocer los fundamentos básicos de DML, por ser éste un importante


lenguaje no procedural.

 Determinar las características de las consultas de selección para procesar


los datos almacenados en la base de datos.

 Diferenciar la conceptualización de consultas de selección y de acción.

Núcleos Temáticos y Problemáticos


 Componentes del lenguaje SQL.

 Sentencias de Acción.

 Sentencias de Seleccción.

 Ejemplos.

Proceso de Información

2.1 COMPONENTES DEL LENGUAJE SQL

2.1.1 Características del Lenguaje SQL

 Una sentencia SQL es como una frase (escrita en inglés) para manipular la
base de datos con la que decimos lo que queremos obtener y de donde
obtenerlo.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 43

 Es no procedimental. Usted especifica la información requerida, mas no las


operaciones o la forma de llegar a la información. Cada SGBDR tiene un
optimizador de búsquedas, el cual traduce sus cláusulas en SQL y elabora el
camino o la ruta óptima para llegar a los datos.

 Cuando se trabaja con los datos, todas las filas afectadas por los comandos se
tratan como un solo bloque, no son tratadas una por una.

 Adicionalmente, SQL permite que los resultados de una consulta sean los datos
de entrada para una nueva

2.1.2 Operadores

A lo largo de este capítulo se estudiarán las posibilidades de filtrar los registros (o


tuplas) con el fin de recuperar solamente aquellos que cumplan unas condiciones
preestablecidas.

 Operadores Lógicos
Ya están descritos en la unidad 1. Lenguaje de Definición de datos.

Operador Descripción
Es el "y" lógico. Evalúa dos condiciones y devuelve un valor de
AND
verdad sólo si ambas son ciertas.
Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de
OR
verdad si alguna de las dos es cierta.
NOT Negación lógica. Devuelve el valor contrario de la expresión.

 Operadores Relacionales
Ya están descritos en la unidad 1. Lenguaje de Definición de datos.

Operador Descripción
< Menor que
> Mayor que
<> Distinto de
<= Menor ó Igual que
>= Mayor ó Igual que
= Igual que

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 44

 Operadores Aritméticos

Operador Descripción
+ Suma
- Resta
* Producto
/ División
** ^ Exponenciación

2.1.3 Cláusulas

Las cláusulas son condiciones de modificación utilizadas para definir los datos que
desea seleccionar o manipular.

Cláusula Descripción
Utilizada para especificar la tabla de la cual se van a
FROM
seleccionar los registros
Utilizada para especificar las condiciones que deben reunir los
WHERE
registros que se van a seleccionar
Utilizada para ordenar los registros seleccionados de acuerdo
ORDER BY
con un orden específico

2.1.4 Predicados

Los predicados son condiciones que se indican en claúsula WHERE de una consulta
SQL.

Operador Descripción
BETWEEN...AND Comprueba que al valor esta dentro de un intervalo
LIKE Compara un campo con una cadena alfanumérica. LIKE
admite el uso de caracteres comodines
ALL Señala a todos los elementos de la selección de la consulta
ANY Indica que la condición se cumplirá si la comparación es cierta
para al menos un elemento del conjunto.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 45

Operador Descripción
EXISTS Devuelve un valor verdadero si el resultado de una
subconsulta devuelve resultados.
IN Comprueba si un campo se encuentra dentro de un
determinado rango. El rango puede ser una sentencia
SELECT.

2.2 CONSULTAS DE ACCION

2.2.1 Insertar

 Descripción

INSERT INTO
Permite la inserción de nuevas filas en una clase o una tabla. Se puede
insertar una fila a la vez o varias como el resultado de una consulta. Las
columnas en el resultado pueden ser listadas en cualquier orden.

 Diagrama

 Estructura

INSERT INTO table [ ( column [, ...] ) ]


{ VALUES ( expression [, ...] ) | SELECT query }

 Entrada

table
El nombre de una tabla existente.
column
El nombre de una columna en table.
expression
Una expresión o un valor válidos a asignar en column.
query
Una consulta válida. Vea la instrucción SELECT para una mejor descripción
de argumentos válidos.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 46

 Salida

INSERT oid 1
Mensaje devuelto si solo se ha insertado una fila. oid es el número OID de
la fila insertada.

INSERT 0 #
Mensaje devuelto si se ha insertado más de una fila. # es el número de filas
insertadas.

 Uso

Los siguientes ejemplos están basados en el modelo relacional de la base de


datos convocatoria factor x. Ejercicio expuesto en la unidad 1 en la cual se
obtuvo el DDL de las tablas participante, grupo, y persona.

Ejemplo No. 2.1


Insertar una tupla (o resgistro) en la tabla participante
INSERT INTO participante VALUES(‘1’,’Juan Manuel’,’false’);

Nota
El tipo de datos del atributo pa_aceptado es boolean por lo tanto recibe ‘t’
(´true’) 0 ‘f’ (´´false´) y por no tener la restricción de NOT NULL recibe
también NULL.

Ejemplo No. 2.2


En este segundo ejemplo la columna pa_aceptado se omite y entonces tendrá
el valor por defecto de NULL:
INSERT INTO participante (pa_codigo,pa_nombre) VALUES(‘g1’,’Trigal’);

Pa_codigo Pa_nombre Pa_aceptado


1 Juan Manuel false
g1 Trigal

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 47

2.2.2 Modificar

 Descripción

UPDATE
Cambia el valor de la columnas especificadas por todas las filas que
satisfacen la condición dada. Solamente necesita indicar las columnas que
serán modificadas.

Para referencias a listas se usa la misma sintaxis de SELECT. O sea, puede


sustituir un único elemento de una lista, un rango de elementos o una lista
completa con una única petición.

Debe tener permiso de escribir en la tabla para poder modificarla, así como
permiso de lectura de cualquier tabla cuyos valores sean mencionados en la
condición WHERE.

 Diagrama

 Estructura

UPDATE tabla SET columna = expresión [, ...]


[ WHERE condición ]

 Entrada

table
El nombre de una tabla existente.

Columna
El nombre de la columna en tabla.

Expresión
Una expresión válida o valor a ser asignado a la columna.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 48

Condición
Consulte la cláusula SELECT para un descripción más extensa de la cláusula
WHERE.

 Salida

UPDATE #
Mensaje obtenido si ha habido éxito. El símbolo # representa el número de
filas que han sido actualizadas. Si # es igual a 0, ninguna fila fue
actualizada.

 Uso

Los siguientes ejemplos están basados en el modelo relacional de la base de


datos convocatoria factor x. Ejercicio expuesto en la unidad 1 en la cual se
obtuvo el DDL de las tablas participante, grupo, y persona.

Tabla Participante

Pa_codigo Pa_nombre Pa_aceptado


1 Juan Manuel false
2 Luis Antonio
3 Maria José true
4 José Mario
5 Luis Fernando false
6 Martha Lucia true
7 Gloria Inelsa true
g1 Trigal
g2 Trigo Limpio
g3 Las Indomables true

Ejemplo No. 2.3


Para cambiar la palabra "false" por "true" en la columna pa_aceptado de la
tabla participante

UPDATE participante SET pa_aceptado = 'false'


WHERE pa_aceptado = 'true';

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 49

Pa_codigo Pa_nombre Pa_aceptado


1 Juan Manuel true
2 Luis Antonio
3 Maria José true
4 José Mario
5 Luis Fernando true
6 Martha Lucia true
7 Gloria Inelsa true
g1 Trigal
g2 Trigo Limpio
g3 Las Indomables true

Nota
El tipo de datos del atributo pa_aceptado es boolean por lo tanto recibe ‘t’
(‘true’) 0 ‘f’ (´false´) y por no tener la restricción de NOT NULL recibe
también NULL.

Ejemplo No. 2.4


Para cambiar el nombre del participante con código 2 por el siguiente nombre
“Anthony”

UPDATE participante SET pa_nombre = 'Anthony'


WHERE pa_codigo = '2';

Pa_codigo Pa_nombre Pa_aceptado


1 Juan Manuel true
2 Luis Antonio
3 Maria José true
4 José Mario
5 Luis Fernando true
6 Martha Lucia true
7 Gloria Inelsa true
g1 Trigal
g2 Trigo Limpio
g3 Las Indomables true

Nota
Si el atributo pa_codigo es de tipo numérico no necesita colocar el código
entre comillas.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 50

2.2.3 Eliminar

 Descripción

DELETE
Borra las filas que satisfacen la cláusula WHERE de la tabla especificada.

Si la condición (cláusula WHERE) esta ausente, el efecto es borrar todas las


filas de la tabla. El resultado es una tabla valida, pero vacía.

Para modificar la tabla usted debe poseer acceso de escritura a la misma,


así como acceso de lectura a cualquier tabla cuyos valores son leídos en la
condición.

 Diagrama

La opción tabla.* se utiliza cuando el origen está basado en varias


tablas, y sirve para indicar en qué tabla vamos a borrar.

La opción * es opcional y es la que se asume por defecto y se puede poner


únicamente cuando el origen es una sola tabla.

Nota: las entradas tabla.* o * hay motores de bases de datos que no la


soportan como PostgreSQL.

 Estructura

DELETE FROM table [ WHERE condition ]

 Entrada

table
El nombre de una tabla existente.
condition
Esta es una consulta SQL de selección la cual devuelve las filas a ser
borradas.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 51

Referirse al comando SELECT para una mayor descripción de la cláusula


WHERE.

 Salida

DELETE count
Mensaje devuelto si los items son borrados exitosamente. El valor count es
la cantidad de filas borradas.
Si count es 0, ninguna fila fue borrada.

 Uso

Los siguientes ejemplos están basados en el modelo relacional de la base de


datos convocatoria factor x. Ejercicio expuesto en la unidad 1 en la cual se
obtuvo el DDL de las tablas participante, grupo, y persona.

Tabla Participante

Pa_codigo Pa_nombre Pa_aceptado


1 Juan Manuel false
2 Luis Antonio
3 Maria José true
4 José Mario
5 Luis Fernando False
6 Martha Lucia Trae
7 Gloria Inelsa Trae
g1 Trigal
g2 Trigo Limpio
g3 Las Indomables Trae

Nota
Todos los que tienen el valor de true en el atributo pa_aceptado son los
participantes aceptados

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 52

Ejemplo No. 2.5


Eliminar todos los participantes excepto los aceptados

DELETE FROM participante WHERE pa_aceptado <> ‘true’;

Pa_codigo Pa_nombre Pa_aceptado


3 Maria José Trae
6 Martha Lucia Trae
7 Gloria Inelsa Trae
g3 Las Indomables Trae

Ejemplo No. 2.6


Borra completamente el contenido de la tabla participante

DELETE FROM participante;

2.3 CONSULTAS DE SELECCIÓN - SIMPLES

Se utilizan para indicar al motor de datos que devuelva información de las bases
de datos, esta información es devuelta en forma de conjunto de registros. Éste
conjunto de registros forma una tabla lógica, porque no se guarda en el disco sino
que está en memoria y cada vez que ejecutamos la consulta se vuelve a calcular.

2.3.1 Select

 Descripción

SELECT
Devuelve registros de una o más tablas. Los candidatos a ser seleccionados
son aquellos registros que cumplen la condición especificada con WHERE; si
se omite WHERE, se retornan todos los registros.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 53

 Diagrama

Parte Significado
Palabra clave que indica que la sentencia de SQL que queremos
SELECT
ejecutar es de selección.
Indica que queremos seleccionar todos los valores.Es el valor
ALL
por defecto y no suele especificarse casi nunca.
DISTINCT Indica que queremos seleccionar sólo los valores distintos.
Indica la tabla (o tablas) desde la que queremos recuperar los
datos. En el caso de que exista más de una tabla se denomina
FROM a la consulta "consulta combinada" o "join". En las consultas
combinadas es necesario aplicar una condición de combinación
a través de una cláusula WHERE.
Especifica una condición que debe cumplirse para que los datos
WHERE sean devueltos por la consulta. Admite los operadores lógicos
AND y OR.
Especifica la agrupación que se da a los datos. Se usa siempre
GROUP BY
en combinación con funciones agregadas.
Especifica una condición que debe cumplirse para que los datos
sean devueltos por la consulta. Su funcionamiento es similar al
HAVING de WHERE pero aplicado al conjunto de resultados devueltos
por la consulta. Debe aplicarse siempre junto a GROUP BY y la
condición debe estar referida a los campos contenidos en ella.
Presenta el resultado ordenado por las columnas indicadas. El
ORDER BY orden puede expresarse con ASC (orden ascendente) y DESC
(orden descendente). El valor predeterminado es ASC.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 54

 Estructura

SELECT [ ALL | DISTINCT ]


expression [ AS name ] [, ...]
[ FROM table [ alias ] [, ...] ]
[ WHERE condition ]
[ { UNION [ ALL ] | INTERSECT | EXCEPT } select ]
[ ORDER BY column [ ASC | DESC ] [, ...] ]
LIMIT { count | ALL } [ { OFFSET | , } start ]

 Entrada

expression
El nombre de una columna de la tabla o una expresión.

name
Especifica otro nombre para una columna o una expresión que utilice la
cláusula AS. Este nombre se utiliza principalmente como etiqueta para la
columna de salida. El nombre puede ser referenciado en cláusulas ORDER
BY.

table
El nombre de una tabla existente a la que se refiere la cláusula FROM.

alias
Un nombre alternativo para la tabla precedente table. Se utiliza para
abreviar o eliminar ambigüedades en uniones dentro de una misma tabla.

condition
Una expresión booleana que da como resultado verdadero o falso (true or
false). Consulte la cláusula WHERE.

column
El nombre de una columna de la tabla.

select
Una declaración de selección (select) exceptuando la cláusula ORDER BY.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 55

 Salida

Registros
El conjunto completo de registros (filas) que resultan de la especificación de
la consulta.

count
La cantidad de registros (filas) devueltos por la consulta.

2.3.2 Consultas Simples con la Cláusula FROM

 Estructura
La estructura básica de una consulta de selección es la siguiente:

SELECT Columnas FROM Tabla;


En donde columna es la lista de campos que se deseen recuperar y tabla es el
origen de los mismos.

 Selección de Columnas
La lista de columnas que queremos que aparezcan en el resultado es lo
que llamamos lista de selección y se especifica delante de la cláusula FROM.

Asterisco (*)

Se utiliza el asterisco * en la lista de selección para indicar 'todas las


columnas de la tabla'.

Se puede combinar el * con el nombre de una tabla (ej. oficinas.*), pero


esto se utiliza más cuando el origen de la consulta son dos tablas.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 56

Columnas de la tabla
Las columnas se pueden especificar mediante su nombre simple (nbcol) o
su nombre cualificado (nbtabla.nbcol, el nombre de la columna precedido
del nombre de la tabla que contiene la columna y separados por un punto).

 Cláusula FROM

Aliastabla

Es un nombre de alias, es como un segundo nombre que asignamos a la


tabla, si en una consulta definimos un alias para la tabla, esta se deberá
nombrar utilizando ese nombre y no su nombre real, además ese nombre
sólo es válido en la consulta donde se define. La palabra AS que se
puede poner delante del nombre de alias es opcional y es el valor por
defecto por lo que no tienen ningún efecto.

 Uso
Las siguientes consultas son basadas en el presente ejercicio. El cual es un
fragmento del modelo relacional de transporte.

La empresa de transporte tiene varias sucursales en el país, distribuidas
geográficamente en departamentos los cuales están conformados por municipios.

En cada departamento se indica la identificación, el nombre (son únicos para todo


el país), y la extensión.

De cada municipio se indica la identificación y el nombre, los cuales son únicos por
departamento pero puede existir el mismo nombre de municipio en otro
departamento.

En la empresa existe una colección de rutas. En cada ruta se indica la


identificación, la ciudad donde sale, la ciudad donde llega, y el número de horas
que dura el trayecto.
...
Nota: los tres punto (…) al comienzo y final de ejercicio indica que es mas largo y
sólo se tomo un fragmento de él.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 57

MODELO RELACIONAL DE LA BASE DE DATOS TRANSPORTE

Notación:
PK PRIMARY KEY, FK FORENIGN KEY, * UNIQUE.

DDL DE LA BASE DE DATOS TRANSPORTE

create table departamento(


dep_id varchar(10),
dep_nombre varchar(30) not null,
dep_extension float,
primary key(dep_id),
unique (dep_nombre),
check(dep_extension>=0)
);

create table municipio(


mun_id varchar(10),
mun_nombrevarchar(30) not null,
dep_id varchar(10),
primary key(mun_id),
unique (mun_nombre,dep_id),
foreign key(dep_id) references departamento(dep_id)
on update cascade on delete cascade
);

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 58

create table ruta(


rut_numero varchar(10),
rut_salida varchar(10) not null,
rut_llegada varchar(10) not null,
rut_numero_horas decimal(4,2),
primary key(rut_numero),
unique (rut_salida,rut_llegada),
foreign key(rut_salida) references municipio(mun_id)
on update cascade on delete cascade,
foreign key(rut_llegada) references municipio(mun_id)
on update cascade on delete cascade,
check(rut_salida<>rut_llegada)
);

DATOS DE LA BASE DE DATOS TRANSPORTE

Tabla departamento
Dep_id Dep_nombre Dep_extension
d1 Norte de Santander 21658
d2 Santander 30537
d3 Bolivar
d4 Tolima 23562
d5 Antioquia

Tabla municipio
Mun_id Mun_nombre Dep_id
c1_1 Pamplona d1
c2_1 Cúcuta d1
c3_1 Ocaña d1
c1_2 Bucaramanga d2
c2_2 Lebrija d2
c3_2 Barbosa d2
c4_2 Barrancabermeja d2
c1_3 Cartagena d3
c2_3 Magangué d3
c1_5 Barbosa d5

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 59

Tabla ruta
Rut_id Rut_salida Rut_llegada Rut_numero_horas
r1_1 C1_1 c2_1 1.75
r2_1 C1_1 c1_2 3.00
r1_2 C2_1 c1_2 5.00
r2_2 C2_1 c1_1 2.00
r3_2 C2_1 c4_2 7.00
r4_2 C2_1 c1_5 9.00
r1_3 C1_2 c4_2 2.00
r2_3 C1_2 c1_1 2.80

Consulta No. 2.1


Listar todos los datos de los departamentos
SELECT * FROM departamento;

SELECT departamento.* FROM departamento;

Dep_id Dep_nombre Dep_extension


d1 Norte de Santander 21658
d2 Santander 30537
d3 Bolivar
d4 Tolima 23562
d5 Antioquia

Consulta No. 2.2


Obtener el nombre y la extensión de los departamentos.

SELECT dep_nombre,dep_extension FROM departamento;

Dep_nombre Dep_extension
Norte de Santander 21658
Santander 30537
Bolivar
Tolima 23562
Antioquia

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 60

Consulta No. 2.3


Obtener el nombre y la extensión de los departamentos pero incrementando la
extensión en un 2%.

SELECT dep_nombre,dep_extension*1.02 FROM departamento;

Dep_nombre Dep_extension
Norte de Santander 22091.16
Santander 31147.74
Bolivar
Tolima 24033.24
Antioquia

2.3.3 Consultas Simples con la Cláusula ORDER BY

 Estructura
La estructura básica de una consulta de selección es la siguiente:

SELECT Columnas FROM Tabla ORDER BY nbcolumnas;


En donde columna es la lista de campos que se deseen recuperar, tabla es el
origen de los mismos y nbcolumnas son los campos por los que ordena los
registros.

 Cláusula ORDER BY

Para ordenar las filas del resultado de la consulta, tenemos la cláusula ORDER
BY.

Con esta cláusula se altera el orden de visualización de las filas de la tabla


pero en ningún caso se modifica el orden de las filas dentro de la tabla. La
tabla no se modifica.

Podemos indicar la columna por la que queremos ordenar utilizando su


nombre de columna (nbcolumna) o utilizando su número de orden que ocupa
en la lista de selección (Nºcolumna).

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 61

Por defecto el orden será ascendente (ASC)

 Uso

Consulta No. 2.4


Obtener un listado de todos los departamentos ordenados alfabéticamente por
nombre

SELECT * FROM departamento


ORDER BY dep_nombre;

SELECT dep_id,dep_nombre,dep_extension FROM departamento


ORDER BY dep_nombre;

SELECT dep_id,dep_nombre,dep_extension FROM departamento


ORDER BY 2;

Dep_id Dep_nombre Dep_extension


d5 Antioquia
d3 Bolivar
d1 Norte de Santander 21658
d2 Santander 30537
d4 Tolima 23562

Consulta No. 2.5


Obtener un listado de los nombres de los municipios junto con el código del
departamento al que pertenece el municipio, ordenar primero por nombre de
municipio alfabéticamente y luego por código de departamento
ascendentemente.

SELECT mun_nombre,dep_id FROM municipio


ORDER BY mun_nombre, dep_id;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 62

Mun_nombre Dep_id
Barbosa d2
Barbosa d5
Barrancabermeja d2
Bucaramanga d2
Cartagena d3
Cúcuta d1
Lebrija d2
Magangué d3
Ocaña d1
Pamplona d1

Consulta No. 2.6


Obtener un listado de los nombres de los municipios junto con el código del
departamento al que pertenece el municipio, ordenar primero por nombre de
municipio alfabéticamente y luego por código de departamento
descendentemente.
SELECT mun_nombre,dep_id FROM municipio
ORDER BY mun_nombre , dep_id DESC;

Mun_nombre Dep_id
Barbosa D5
Barbosa D2
Barrancabermeja d2
Bucaramanga d2
Cartagena d3
Cúcuta d1
Lebrija d2
Magangué d3
Ocaña d1
Pamplona d1

Consulta No. 2.7


Obtener un listado de los nombres de los municipios junto con el código del
departamento al que pertenece el municipio, ordenar primero por nombre de
municipio descendentemente y luego por código de departamento
descendentemente.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 63

SELECT mun_nombre,dep_id FROM municipio


ORDER BY mun_nombre DESC, dep_id DESC;

Mun_nombre Dep_id
Pamplona d1
Ocaña d1
Magangué d3
Lebrija d2
Cúcuta d1
Cartagena d3
Bucaramanga d2
Barrancabermeja d2
Barbosa d5
Barbosa d2

2.3.4 Consultas Simples con el Predicado DISTINCT/ALL

 Estructura
La estructura básica de una consulta de selección es la siguiente:

SELECT DISTINCT/ALL Columnas FROM Tabla ORDER BY


nbcolumnas;
En donde columna es la lista de campos que se deseen recuperar, tabla es el
origen de los mismos y nbcolumnas son los campos por los que ordena los
registros.

 Predicado DISTINCT

Al incluir el predicado DISTINCT en la SELECT, se eliminan del resultado las


repeticiones de filas. Si por el contrario queremos que aparezcan todas las filas
incluidas las duplicadas, podemos incluir la cláusula ALL o nada, ya que ALL es
el valor que SQL asume por defecto.

 Uso

Consulta No. 2.8


Obtener el nombre de todas las ciudades

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 64

SELECT mun_nombre FROM municipio;

Observe que el nombre del municipio Barbosa aparece dos veces.

Mun_nombre
Pamplona
Cúcuta
Ocaña
Bucaramanga
Lebrija
Barbosa
Barrancabermeja
Cartagena
Magangué
Barbosa

Si se quiere que no aparezcan registros repetidos se debe utilizar el


predicado DISTINCT

SELECT DISTINCT mun_nombre FROM municipio;

Mun_nombre
Barbosa
Barrancabermeja
Bucaramanga
Cartagena
Cúcuta
Lebrija
Magangue
Ocaña
Pamplona

2.3.5 Consultas Simples con la Cláusula WHERE

 Estructura
La estructura básica de una consulta de selección es la siguiente:
SELECT DISTINCT/ALL Columnas FROM Tabla
WHERE Condición ORDER BY nbcolumnas;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 65

En donde columna es la lista de campos que se deseen recuperar, tabla es el


origen de los mismos y nbcolumnas son los campos por los que ordena los
registros.

La cláusula WHERE selecciona únicamente las filas que cumplan la condición de


selección especificada.

 Cláusula WHERE

En la consulta sólo aparecerán las filas para las cuales la condición es


verdadera (TRUE), los valores nulos (NULL) no se incluyen por lo tanto en las
filas del resultado. La condición-de-selección puede ser cualquier condición
válida o combinación de condiciones utilizando los operadores NOT (no) AND
(y) y OR (ó).

 Uso

Consulta No. 2.9


Listar los nombres de los municipios del departamento d2.

SELECT mun_nombre FROM municipio WHERE dep_id='d2';

Mun_nombre
Bucaramanga
Lebrija
Barbosa
Barrancabermeja

Consulta No. 2.10


Listar la información de todos los departamentos cuya extensión esta
comprendida entre 20000 y 25000.

SELECT * FROM departamento


WHERE dep_extension >= 20000 AND dep_extension <= 25000;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 66

Dep_id Dep_nombre Dep_extension


d1 Norte de Santander 21658
d4 Tolima 23562

Consulta No. 2.11


Listar los nombres de los municipios del departamento d2 y d3.

SELECT mun_nombre FROM municipio


WHERE dep_id = 'd2' OR dep_id = ’d3’;

Mun_nombre
Bucaramanga
Lebrija
Barbosa
Barrancabermeja
Cartagena
Magangué

 El Predicado BETWEEN dentro de la Cláusula WHERE

Examina si el valor de la expresión está comprendido entre los dos valores


definidos por exp1 y exp2.

Consulta No. 2.12


Resolver la consulta 10, utilizando el predicado BETWEEN.

SELECT * FROM departamento WHERE dep_extension


BETWEEN 20000 AND 25000;

Dep_id Dep_nombre Dep_extension


d1 Norte de Santander 21658
d4 Tolima 23562

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 67

 El Predicado IN dentro de la Cláusula WHERE

Examina si el valor de la expresión es uno de los valores incluidos en la lista de


valores.

Consulta No. 2.13


Resolver la consulta 11, utilizando el predicado IN.

SELECT mun_nombre FROM municipio WHERE dep_id IN ('d2','d3');

Mun_nombre
Bucaramanga
Lebrija
Barbosa
Barrancabermeja
Cartagena
Magangué

Consulta No. 2.14


Listar los nombres de los municipios que no están en los departamentos d2 y
d3.

SELECT mun_nombre FROM municipio WHERE dep_id NOT IN ('d2','d3');

Mun_nombre
Pamplona
Cúcuta
Ocaña
Barbosa

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 68

 El Predicado LIKE dentro de la Cláusula WHERE

Se utiliza cuando queremos utilizar caracteres comodines para formar el valor


con el comparar.

Los comodines más usados son los siguientes:

_ representa un carácter cualquiera

% representa cero o más caracteres

Consulta No. 2.15


Lista los municipios cuyo nombre empiece por C (C seguido de cero o más
caracteres).

SELECT * FROM municipio WHERE mun_nombre LIKE 'C%';

Mun_nombre
Cartagena
Cúcuta

Consulta No. 2.16


Lista los departamentos cuyo nombre contiene Santander

SELECT * FROM departamento WHERE dep_nombre LIKE


'%Santander%';

Dep_id Dep_nombre Dep_extension


d1 Norte de Santander 21658
d2 Santander 30537

Consulta No. 2.17


Lista los municipios cuyo nombre contiene una c como tercera letra.

SELECT * FROM municipio WHERE mun_nombre LIKE '__c%';

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 69

Mun_id Mun_nombre Dep_id


c2_1 Cúcuta d1
c1_2 Bucaramanga d2

 El Predicado IS NULL dentro de la Cláusula WHERE

Examina si el valor de la columna es nulo o no.

Consulta No. 2.18


Lista los departamentos que no tienen definido la extensión.
SELECT * FROM departamento WHERE dep_extension IS NULL;

Dep_id Dep_nombre Dep_extension


d3 Bolivar
d5 Antioquia

2.4 CONSULTAS DE SELECCIÓN - MULTITABLAS

La composición de tablas consiste en concatenar filas de una tabla con filas de


otra. En este caso obtenemos una tabla con las columnas de la primera tabla
unidas a las columnas de la segunda tabla, y las filas de la tabla resultante son
concatenaciones de filas de la primera tabla con filas de la segunda tabla.

Ejemplo No. 2.7


Listar los municipios con el nombre del departamento al que pertenece, pues los
datos del municipio los tenemos en la tabla de Municipio pero el nombre del
departamento está en la tabla departamento y además queremos que
aparezcan en la misma línea; en este caso necesitamos reunir las dos tablas.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 70

2.4.1 Producto Cartesiano

 Descripción

El producto cartesiano es un tipo de composición de tablas, aplicando el


producto cartesiano a dos tablas se obtiene una tabla con las columnas de la
primera tabla unidas a las columnas de la segunda tabla, y las filas de la tabla
resultante son todas las posibles concatenaciones de filas de la primera tabla
con filas de la segunda tabla.

 Diagrama

El producto cartesiano se indica poniendo en la FROM las tablas que queremos


componer separadas por comas, podemos obtener así el producto cartesiano
de dos, o más tablas.

nbtabla
puede ser un nombre de tabla o un nombre de consulta.

Hay que tener en cuenta que el producto cartesiano obtiene todas las posibles
combinaciones de filas por lo tanto si tenemos una tabla con 100 registros, otra
tabla con 50 registros el resultado tendrá 100x50 filas, si el producto lo
hacemos de estas dos tablas con una tercera de 20 filas, el resultado tendrá

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 71

10.0000 filas (100x50x20) y estamos hablando de tablas pequeñas. Se ve


claramente que el producto cartesiano es una operación costosa sobre todo si
operamos con más de dos tablas o con tablas voluminosas.

 Uso

Ejemplo No. 2.8


Producto Cartesiano entre las tablas municipio y departamento del ejemplo
No. 7

2.4.2 Composición Interna – Producto cartesiano más Restricción

 Descripción
Es un producto cartesiano seguido de una restricción por igualdad.

A partir de las relaciones especificadas, construye una relación concatenando


cada tupla (o registro) de la primera relación con cada una de las tuplas de la
segunda, siempre que ambas tuplas satisfagan una condición dada. Por lo
general esa condición es la igualdad indicando que los valores de la clave
foránea en la relación hija deben corresponder con los valores de la clave
primaria en la relación padre.

 Uso

Consulta No. 2.19


Listar los nombres de los municipios junto con el nombre del departamento al
que pertenece.
SELECT mun_nombre, dep_nombre FROM municipio, departamento
WHERE municipio.dep_id = departamento.dep_id;

Combinamos todos los municipios con todos los departamentos pero luego
seleccionamos los que cumplan que el dep_id de la tabla municipio sea igual al

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 72

dep_id de la tabla de departamento, por lo tanto nos quedamos con los


municipios combinados con los datos del departamento correspondiente.

Donde la tabla municipio es la relación hija cuya clave foránea es el atributo


dep_id y la tabla departamento es la relación padre cuya clave primaria es el
atributo dep_id.

En la consulta se usan dos atributos con el mismo nombre pero éstos


pertenecen a diferentes. Por ello, es preciso calificar el nombre del atributo con
el nombre de la relación, a fin de evitar la ambigüedad. Esto se hace
anteponiendo el nombre de la relación al nombre del atributo y separado los
dos con un punto.

Mun_nombre Dep_nombre
Pamplona Norte de Santander
Cúcuta Norte de Santander
Ocaña Norte de Santander
Bucaramanga Santander
Lebrija Santander
Barbosa Santander
Barrancabermeja Santander
Cartagena Bolívar
Magangué Bolívar
Barbosa Antioquia

Consulta No. 2.20


Listar los nombres de los municipios junto con el nombre del departamento al
que pertenece, ordenados alfabéticamente por nombre de departamento y
luego alfabéticamente por nombre del municipio.

SELECT mun_nombre, dep_nombre FROM municipio, departamento


WHERE municipio.dep_id = departamento.dep_id
ORDER BY dep_nombre, mun_nombre;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 73

Mun_nombre Dep_nombre
Barbosa Antioquia
Cartagena Bolívar
Magangué Bolívar
Cúcuta Norte de Santander
Ocaña Norte de Santander
Pamplona Norte de Santander
Barbosa Santander
Barrancabermeja Santander
Bucaramanga Santander
Lebrija Santander

Consulta No. 2.21


Listar los nombres de los municipios junto con el nombre del departamento al
que pertenece cuya extensión esta comprendida entre 20000 y 25000,
ordenados alfabéticamente por nombre de departamento y luego
alfabéticamente por nombre del municipio.

SELECT mun_nombre, dep_nombre FROM municipio, departamento


WHERE (municipio.dep_id = departamento.dep_id)
AND (dep_extension >=20000 AND dep_extension <= 25000)
ORDER BY dep_nombre, mun_nombre;

Ó renombrando tablas

SELECT mun_nombre, dep_nombre FROM municipio m, departamento d


WHERE (m.dep_id = d.dep_id)
AND (dep_extension >=20000 AND dep_extension <= 25000)
ORDER BY dep_nombre, mun_nombre;

Ó accediendo a cada atributo con el alias

SELECT m.mun_nombre, d.dep_nombre


FROM municipio m, departamento d
WHERE (m.dep_id = d.dep_id)
AND (d.dep_extension >=20000 AND d.dep_extension <= 25000)
ORDER BY d.dep_nombre, m.mun_nombre;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 74

Mun_nombre Dep_nombre
Cúcuta Norte de Santander
Ocaña Norte de Santander
Pamplona Norte de Santander

Consulta No. 2.22


Para cada ruta, obtener su número, el nombre del municipio donde sale y el
nombre del municipio donde llega.

SELECT r.rut_numero,s.mun_nombre,ll.mun_nombre
FROM ruta R,municipio S, municipio LL
WHERE r.rut_salida = s.mun_id AND r.rut_llegada = ll.mun_id;

En este caso se necesita la tabla ruta, y dos tablas municipio. Una de las cuales
se utilizara para sacar el nombre del municipio origen y la otra para sacar el
nombre del municipio destino.

SELECT r.rut_numero,s.mun_nombre,ll.mun_nombre
FROM ruta AS R,municipio AS S, municipio AS LL
WHERE r.rut_salida = s.mun_id AND r.rut_llegada = ll.mun_id;

En la consulta, se declara los nombres de las relaciones alternativas R, S y LL,


llamados renombrados, para la relación ruta, municipio y municipio
respectivamente. El renombrado puede seguir directamente al nombre de la
relación, o pude ir después de la palabra reservada AS (como).

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 75

Rut_numero Mun_nombre Mun_nombre


R1_1 Pamplona Cúcuta
R2_1 Pamplona Bucaramanga
R1_2 Cúcuta Bucaramanga
R2_2 Cúcuta Pamplona
R3_2 Cúcuta Barrancabermeja
R4_2 Cúcuta Barbosa
R1_3 Bucaramanga Barrancabermeja
R2_3 Bucaramanga Pamplona

Ó renombrando los atributos del select

SELECT r.rut_numero AS Numero,s.mun_nombre AS Salida,


ll.mun_nombre AS LLegada
FROM ruta R,municipio S, municipio LL
WHERE r.rut_salida = s.mun_id AND r.rut_llegada = ll.mun_id;

Numero Salida Llegada


r1_1 Pamplona Cúcuta
r2_1 Pamplona Bucaramanga
r1_2 Cúcuta Bucaramanga
r2_2 Cúcuta Pamplona
r3_2 Cúcuta Barrancabermeja
r4_2 Cúcuta Barbosa
r1_3 Bucaramanga Barrancabermeja
r2_3 Bucaramanga Pamplona

Consulta No. 2.23


Para cada ruta, obtener su número, el nombre del municipio donde sale, el
nombre del municipio donde llega y cuanto tiempo dura la ruta. Para aquellas
rutas cuyo tiempo esta por debajo de 3 horas y por encima de 6 horas.

SELECT r.rut_numero AS Numero,s.mun_nombre AS Salida,


ll.mun_nombre AS LLegada, r.rut_numero_horas AS Tiempo
FROM ruta r,municipio s, municipio ll
WHERE r.rut_salida = s.mun_id AND r.rut_llegada = ll.mun_id AND
(r.rut_numero_horas<3 OR r.rut_numero_horas>6);

Son necesarios los paréntesis para definir la condición.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 76

Numero Salida Llegada Tiempo


R1_1 Pamplona Cúcuta 1.75
R2_2 Cúcuta Pamplona 2.00
R3_2 Cúcuta Barrancabermeja 7.00
R4_2 Cúcuta Barbosa 9.00
R1_3 Bucaramanga Barrancabermeja 2.00
R2_3 Bucaramanga Pamplona 2.80

2.4.3 Composición Interna - INNER JOIN

 Descripción

Permite emparejar filas de distintas tablas de forma más eficiente que con el
producto cartesiano cuando una de las columnas de emparejamiento es clave
primaria. Ya que en vez de hacer el producto cartesiano completo y luego
seleccionar la filas que cumplen la condición de emparejamiento, para cada fila
de una de las tablas busca directamente en la otra tabla las filas que cumplen
la condición, con lo cual se emparejan sólo las filas que luego aparecen en el
resultado.

 Diagrama

tabla1 y tabla2
son tabla (nombre de tabla con alias o no), de las tablas cuyos registros se
van a combinar.
Pueden ser las dos la misma tabla, en este caso es obligatorio definir al
menos un alias de tabla.

col1, col2
son las columnas de emparejamiento.

Observar que dentro de la cláusula ON los nombres de columna deben ser


nombres cualificados (llevan delante el nombre de la tabla o el alias y un
punto).

Las columnas de emparejamiento deben contener la misma clase de datos, las


dos de tipo texto, de tipo fecha etc... los campos numéricos deben ser de tipos
similares.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 77

comp
representa cualquier operador de comparación ( =, <, >, <=, >=, o <> ) y
se utiliza para establecer la condición de emparejamiento.
Se pueden definir varias condiciones de emparejamiento unidas por los
operadores AND y OR poniendo cada condición entre paréntesis

 Uso

Consulta No. 2.24


Realizar la consulta No. 2.20 empleando INNER JOIN.
SELECT mun_nombre, dep_nombre
FROM municipio INNER JOIN departamento
ON municipio.dep_id = departamento.dep_id
ORDER BY dep_nombre, mun_nombre;

Consulta No. 2.25


Realizar la consulta No. 2.23 empleando INNER JOIN.
SELECT r.rut_numero AS Numero,s.mun_nombre AS Salida,ll.
mun_nombre AS LLegada, r.rut_numero_horas as tiempo
FROM (ruta r INNER JOIN municipio s ON r.rut_salida = s.mun_id)
INNER JOIN municipio ll ON r.rut_llegada = ll.mun_id AND
(r.rut_numero_horas<3 OR r.rut_numero_horas>6);

2.4.4 Composición Externa

 Descripción

Con una composición interna sólo se obtienen las filas que tienen al menos una
fila de la otra tabla que cumpla la condición. Pues en los casos en que
queremos que también aparezcan las filas que no tienen una fila coincidente en
la otra tabla, utilizaremos el LEFT o RIGHT JOIN.

 Diagrama LEFT JOIN

La sintaxis es la misma que la del INNER JOIN, lo único que cambia es la


palabra INNER por LEFT (izquierda en inglés).

Esta operación consiste en añadir al resultado del INNER JOIN las filas de la
tabla de la izquierda que no tienen correspondencia en la otra tabla, y rellenar
en esas filas los campos de la tabla de la derecha con valores nulos.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 78

 Diagrama LEFT JOIN

La sintaxis es la misma que la del INNER JOIN, lo único que cambia es la


palabra INNER por RIGHT (derecha en inglés).

Esta operación consiste en añadir al resultado del INNER JOIN las filas de la
tabla de la derecha que no tienen correspondencia en la otra tabla, y rellenar
en esas filas los campos de la tabla de la izquierda con valores nulos.

 Uso

Consulta No. 2.26


Listar todos los departamentos junto con los municipios que tiene cada uno de
ellos, incluyendo los departamentos que no tienen ningún municipio.

SELECT dep_nombre,mun_nombre
FROM municipio RIGHT JOIN departamento
ON municipio.dep_id = departamento.dep_id;

SELECT dep_nombre,mun_nombre
FROM departamento LEFT JOIN municipio
ON municipio.dep_id = departamento.dep_id;

Dep_nombre Mun_nombre
Norte de Santander Cúcuta
Norte de Santander Ocaña
Norte de Santander Pamplona
Santander Bucaramanga
Santander Lebrija
Santander Barbosa
Santander Barrancabermeja
Bolívar Magangué
Bolívar Cartagena
Tolima
Antioquia Barbosa

El departamento Tolima no tiene registrado todavía algún municipio.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 79

2.5 FUNCIONES DE FORMATO

Las funciones de formato proveen un poderoso conjunto de herramientas para


convertir varios datetypes (date/time, int, float, numeric) a texto formateado y
convertir de texto formateado a su datetypes original.

Funciones Retorna Descripción


to_char(datetime, text) text convierte datetime a string
to_char(timestamp, text) text convierte timestamp a string
to_char(int, text) text convierte int4/int8 a string
to_char(flota, text) text convierte float4/float8 a string
to_char(numeric, text) text convierte numeric a string
to_datetime(text, text) datetime convierte string a datetime
to_date(text, text) date convierte string a date
to_timestamp(text, text) date convierte string a timestamp
to_number(text, text) numeric convierte string a numeric

Formato Descripción
HH hora del día(01-12)
HH12 hora del día(01-12)
MI minuto (00-59)
SS Segundos (00-59)
SSSS Segundos pasados la medianoche(0-86399)
Y,YYY año(4 o mas dígitos) con coma
YYYY año(4 o mas dígitos)
YYY últimos 3 dígitos del año
YY últimos 2 dígitos del año
Y último dígito del año

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 80

Formato Descripción
MONTH nombre completo del mes(9-letras) - todos los caracteres en
mayúsculas
Month nombre completo del mes(9-letras) - el primer carácter en mayúsculas
month nombre completo del mes(9-letras) - todos los caracteres en
minúsculas
MON nombre abreviado del mes(3-letras) -todos los caracteres en
mayúsculas
Mon nombre abreviado del mes(3-letras) - el primer carácter en mayúsculas
mon nombre abreviado del mes(3-letras) - todos los caracteres en
minúsculas
MM mes (01-12)
DAY nombre completo del día(9-letters) - todos los caracteres en
mayúsculas
Day nombre completo del día(9-letters) - el primer carácter en mayúsculas
day nombre completo del día(9-letters) - todos los caracteres en minúsculas
DY nombre abreviado del día(3-letters) - todos los caracteres en
mayúsculas
Dy nombre abreviado del día(3-letters) - el primer carácter en mayúsculas
dy nombre abreviado del día(3-letters) - todos los caracteres en
minúsculas
DDD día del año(001-366)
DD día del mes(01-31)
D día de la semana(1-7; SUN=1)

W semana del mes


WW número de la semana en el año

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 81

EJERCICIO

Modelo Relacional DDL


create table empleado(
emp_nss varchar(10) not null,
emp_nombre varchar(20) not null,
emp_apellido varchar(20) not null,
emp_fecha_nacimiento date,
emp_direccion varchar(30),
emp_sexo boolean,
emp_salario float,
emp_supervisor varchar(10),
primary key(emp_nss),
foreign key(emp_supervisor)
references empleado (emp_nss)
on update cascade on delete set null,
check(emp_salario>0)
);

DATOS DE LA RELACION EMPLEADO

Nss nombre apellido Fecha dirección sex salario supervisor


nacimiento o
888665555 Jaime Botello 1947-11-10 Sorgo t 550000
450,Higueras
, MX
333445555 Federico Vizcarra 1965-12-08 Valle 638, t 400000 888665555
Higueras, MX
987654321 Jazmin Valdés 1951-06-20 Bravo 291, f 430000 888665555
Belén, MX
123456789 José Silva 1975-01-09 Fresnos 731, t 300000 333445555
Higueras, MX
666884444 Ramón Nieto 1972-09-15 Espiga 875, t 380000 333445555
Heras, MX
453453453 Josefa Esparza 1982-07-31 Rosas 5631, f 250000 333445555
Higueras, MX
999887777 Alicia Zapata 1978-07-19 Catillo 3321, f 250000 987654321
Sucre, MX
987987987 Ahmed Jabbar 1979-03-29 Dalias 980, t 250000 987654321
Higueras, MX

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 82

Consulta No. 2.27


Listar el nss, el nombre, el apellido y la fecha de nacimiento de todos los
empleados.

SELECT emp_nss, emp_nombre,emp_apellido, emp_fecha_nacimiento


FROM empleado;

Emp_nss Emp_nombre Emp_apellido Emp_fecha_nacimiento


888665555 Jaime Botello 1947-11-10
333445555 Federico Vizcarra 1965-12-08
987654321 Jazmin Valdés 1951-06-20
123456789 José Silva 1975-01-09
666884444 Ramón Nieto 1972-09-15
453453453 Josefa Esparza 1982-07-31
999887777 Alicia Zapata 1978-07-19
987987987 Ahmed Jabbar 1979-03-29

Consulta No. 2.28


Listar el nss, el nombre, el apellido y el año de nacimiento de todos los
empleados.

SELECT emp_nss, emp_nombre,emp_apellido,


TO_CHAR(emp_fecha_nacimiento, 'yyyy') AS año
FROM empleado;

Emp_nss Emp_nombre Emp_apellido año


888665555 Jaime Botello 1947
333445555 Federico Vizcarra 1965
987654321 Jazmin Valdés 1951
123456789 José Silva 1975
666884444 Ramón Nieto 1972
453453453 Josefa Esparza 1982
999887777 Alicia Zapata 1978
987987987 Ahmed Jabbar 1979

Consulta No. 2.29


Listar el nss, el nombre, el apellido y la fecha de nacimiento de todos los
empleados que nacieron en el mes de julio.

SELECT emp_nss, emp_nombre,emp_apellido, emp_fecha_nacimiento


FROM empleado
WHERE TO_CHAR(emp_fecha_nacimiento,'mm')='07';

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 83

Emp_nss Emp_nombre Emp_apellido Emp_fecha_nacimiento


453453453 Josefa Esparza 1982-07-31
999887777 Alicia Zapata 1978-07-19

2.6 IMPLEMENTACIÓN EN POSTGRESQL

 Ingresar al SGBDR PostgrSQL


 Conectarse al servidor
 Elegir la base de datos empresa

 Abrir el editor para la base de datos empresa

Observe que en el titulo de la ventana esta el nombre de la base de datos


empresa

 Insertar datos a la tabla empleado

En el editor de SQL escribir las sentencias para insertar datos a la tabla:

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 84

INSERT INTO empleado


(emp_nss,emp_nombre,emp_apellido,emp_fecha_nacimiento,emp_direccion,emp_
sexo,emp_salario)
VALUES ('888665555','Jaime','Botello','11-10-1947','Sorgo 450,Higueras,
MX','t',550000);

INSERT INTO empleado VALUES ('333445555','Federico','Vizcarra','12-08-


1965','Valle 638, Higueras, MX','t',400000,'888665555');

INSERT INTO empleado VALUES ('987654321','Jazmin','Valdés','06-20-1951','Bravo


291, Belén, MX','f',430000,'888665555');

INSERT INTO empleado VALUES ('123456789','José','Silva','01-09-1975','Fresnos


731, Higueras, MX','t',300000,'333445555');

INSERT INTO empleado VALUES ('666884444','Ramón','Nieto','09-15-1972','Espiga


875, Heras, MX','t',380000,'333445555');

INSERT INTO empleado VALUES ('453453453','Josefa','Esparza','07-31-


1982','Rosas 5631, Higueras, MX','f',250000,'333445555');

INSERT INTO empleado VALUES ('999887777','Alicia','Zapata','07-19-1978','Catillo


3321, Sucre, MX','f',250000,'987654321');

INSERT INTO empleado VALUES ('987987987','Ahmed','Jabbar','03-29-


1979','Dalias 980, Higueras, MX','t',250000,'987654321');

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 85

 Ejecute el script. Si se insertaron los datos en la pestaña Data Output


informa que así fue (Query returned successfully) en otro caso no muestra
nada o indicara el error producido en la pestaña Messages.

 Consulta: Listar el nombre de pila, el apellido y el salario de los empleados que


ganan entre 280000 y 500000

En el editor de SQL escribir las sentencias para consultar datos:

SELECT emp_nombre, emp_apellido, emp_salario


FROM empleado
WHERE emp_salario > 280000 AND emp_salario < 500000;

 Ejecute el script. Si la consulta no tiene errores de sintaxis en la pestaña


Data Output informa los resultados, en otro caso no muestra nada o indicara el
error producido en la pestaña Messages.

 Consulta: Para cada empleado, obtener su nombre de pila y apellido, y el


nombre de pila y apellido de su supervisor inmediato

En el editor de SQL escribir las sentencias para consultar datos:

SELECT e.emp_nombre, e.emp_apellido, s.emp_nombre, s.emp_apellido

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 86

FROM empleado e, empleado s


WHERE s.emp_nss=e.emp_supervisor;

 Ejecute el script. Si la consulta no tiene errores de sintaxis en la pestaña


Data Output informa los resultados, en otro caso no muestra nada o indicara el
error producido en la pestaña Messages.

Proceso de Comprensión y Análisis

MODELO RELACIONAL DE LA BASE DE DATOS CONVOCATORIA FACTOR X

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 87

El ejercicio de Factor X esta planteado en la Unidad No. 1. Lenguaje de Definición


de Datos.

Basado en las restricciones definidas para cada una de las relaciones (Ver el DDL
en la unidad No. 1). Determine:

1. Plantear mínimo 5 consultas de acción sobre cada una de las relaciones (o


tablas) en un orden adecuado, de manera que al realizar una consulta de
acción puede que dependa de alguna otra consulta, es decir, si se actualiza un
registro primero debe estar almacenado en la base de datos.

2. Para cada punto plantear una consulta de selección simple dependiendo de la


estructura que debe tener y resolverla.

a. SELECT – FROM
b. SELECT – FROM – ORDER BY
c. SELECT – FROM – WHERE
d. SELECT – FROM – WHERE – ORDER BY
e. SELECT DISTINCT – FROM
f. SELECT DISTINCT – FROM – ORDER BY
g. SELECT DISTINCT – FROM – WHERE
h. SELECT DISTINCT – FROM – WHERE – ORDER BY
i. SELECT – FROM – WHERE. Aplicando el predicado BETWEEN
j. SELECT – FROM – WHERE. Aplicando el predicado IN
k. SELECT – FROM – WHERE. Aplicando el predicado LIKE
l. SELECT – FROM – WHERE. Aplicando el predicado IS NULL

3. Para cada punto plantear una consulta de selección multitabla dependiendo de


la estructura que debe tener y resolverla.

a. SELECT – FROM – WHERE


b. SELECT – FROM – WHERE – ORDER BY
c. SELECT DISTINCT – FROM – WHERE
d. SELECT DISTINCT – FROM – WHERE – ORDER BY
e. SELECT – FROM – WHERE. Aplicando el predicado BETWEEN
f. SELECT – FROM – WHERE. Aplicando el predicado IN
g. SELECT – FROM – WHERE. Aplicando el predicado LIKE
h. SELECT – FROM – WHERE. Aplicando el predicado IS NULL

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 88

Solución de Problemas
BASE DE DATOS VENTA DE PRODUCTOS

 DDL en SQL
create table persona(
pers_identificacion varchar(15),
pers_nombre varchar(20) not null,
pers_apellido varchar(20) not null,
pers_fecha_nacimiento date,
primary key(pers_identificacion)
);

create table cliente(


pers_identificacion varchar(15),
clie_direccion_barrio varchar(30),
clie_direccion_numero varchar(30),
primary key(pers_identificacion),
foreign key(pers_identificacion)references persona(pers_identificacion)
on update cascade
on delete restrict
);

create table empleado(


pers_identificacionvarchar(15),
empl_codigo varchar(15) not null,
empl_fecha_ingreso date not null,
empl_numero_hijos integer default 0 not null,
empl_salario float default 0 not null,
empl_comision float default 0,
empl_jefe varchar(15),
primary key(pers_identificacion),
unique(empl_codigo),
check(empl_numero_hijos>=0),
check(empl_salario>=0),
check(empl_comision>=0),
check(pers_identificacion<>empl_jefe),
foreign key(pers_identificacion)references persona(pers_identificacion)
on update cascade
on delete restrict,
foreign key(empl_jefe)references empleado(pers_identificacion)
on update cascade

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 89

on delete set null


);

create table factura(


fact_numero varchar(20),
fact_fecha date not null,
fact_cliente varchar(15) not null,
fact_cajero varchar(15) not null,
fact_vendedor varchar(15) not null,
fact_observacion varchar(30) default 'ninguna' not null,
primary key(fact_numero),
check(fact_cajero<>fact_vendedor),
foreign key(fact_cliente)references cliente(pers_identificacion)
on update cascade
on delete restrict,
foreign key(fact_cajero)references empleado(pers_identificacion)
on update cascade
on delete restrict,
foreign key(fact_vendedor)references empleado(pers_identificacion)
on update cascade
on delete restrict
);

create table producto(


prod_codigo varchar(15),
prod_nombre varchar(20) not null,
prod_precio float not null,
prod_porcentaje_iva float not null,
primary key(prod_codigo),
unique(prod_nombre),
check(prod_precio>0),
check(prod_porcentaje_iva>=0 and prod_porcentaje_iva<=100)
);

create table detalle(


fact_numero varchar(15),
prod_codigo varchar(15),
deta_cantidad integer not null,
primary key(fact_numero,prod_codigo),
check(deta_cantidad>0),
foreign key(fact_numero)references factura(fact_numero)
on update cascade

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 90

on delete restrict,
foreign key(prod_codigo) references producto(prod_codigo)
on update cascade
on delete restrict );

CONSULTAS

 Hallar la comisión, el nombre, el apellido y el salario de los empleados con más


de tres hijos, ordenados por comisión (desc) y luego por apellido (asc).
 Obtener los apellidos y nombres de los jefes, ordenar por apellido.
 Obtener los nombres (nombre y apellido) de los jefes que en alguno de sus
apellidos tenga el apellido 'Rico'.
 Obtener los nombres de los empleados que nunca han sido cajeros.
 Obtener los nombres de los empleados que no tienen jefe.
 Obtener, por orden alfabético (asc), los nombres (nombre y apellido) y los
salarios de los empleados cuyo salario esté comprendido entre 1300 y 2500
euros.
 Datos de los empleados que cumplen la condición anterior o tiene al menos un
hijo.
 Muestre para cada empleado, el nombre (nombre y apellido) y el numero de
meses que lleva el empleado en la empresa hasta la fecha junto con su
nombre.
 Calcule los empleados que llevan más de 30 años en la empresa. Muestre todos
los datos de cada uno de ellos.
 Hallar, por orden alfabético, los nombres (nombre y apellido) de los empleados
tales que si se les da una gratificación de 10 euros por hijo, el total de esa
gratificación no supera la centésima parte del salario.
 Hallar, por orden de código de empleado, el nombre (nombre y apellido) y el
salario total (salario mas comisión) de los empleados cuyo salario total supera
los 2500 euro mensuales.
 Obtener, por orden alfabético, los nombres (nombre y apellido) y la dirección
de los clientes que no contengan en la dirección la palabra 'Carrera' ni 'Bloque'.
 Obtener los nombres de los empleados que, o bien no depende de otro, o bien
que tiene un salario superior a 1800 euros.
 Listar todos los clientes (nombre y apellido) que realizaron compras en el mes
de septiembre de 2006.
 Obtener, por orden alfabético, los nombres (apellido y nombre) de los clientes
que no contengan en su apellido la palabra 'Rodriguez' ni en su nombre la
palabra 'Carlos'.
 Listar número de factura, nombres (apellido y nombre) del cliente, nombres
(apellido y nombre) de vendedor y nombres (apellido y nombre) de cajero
junto con su detalle (nombre del producto cantidad, precio y subtotal del

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 91

mismo). Tener en cuenta el IVA.


 Obtener los datos del producto que no se ha vendido hasta el momento.

Síntesis Creativa y Argumentativa

 Escoja alguna aplicación de base de datos que conozca bien.


 Diseñe un modelo de base de datos relacional para su aplicación.
 Declare el modelo, empleando el DDL de SQL.
 Especifique varias consultas de acción, selección y multitabla que necesite su
aplicación de base de datos en SQL.
 Implemente su base de datos.

Autoevaluación

Selección múltiple con única respuesta

1. Sentencia que permite insertar datos


A. Insert into B. Update
C. Select D. Create

2. Sentencia que permite eliminar datos


A. Drop B. Update
C. Delete from D. Select

3. Sentencia que permite recuperar datos


A. Insert into B. Update
C. Select D. Where

4. Sentencia que permite cambiar datos


A. Where B. Update
C. Select D. As

5. Cláusula para indicar que relaciones se utilizaron


A. Where B. Order by
C. From D. In

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 92

6. Cláusula para indicar que registros se afectan


A. Select B. Where
C. From D. In

7. Cláusula para indicar en que orden se presentan las tuplas (o registros)


A. Where B. Desc
C. Order By D. Asc

8. Predicado para eliminar registros repetidos en un resultado


A. All B. Delete from
C. Drop D. Distinct

9. Predicado para permite evaluar si el atributo esta con datos o sin datos
A. In B. is null
C. where D. not

10. Es una cláusula


A. In B. From
C. Between D. Like

Repaso Significativo

El lenguaje de manipulación de datos, nos permite recuperar los datos


almacenados en la base de datos y también incluye órdenes para permitir al
usuario actualizar la base de datos añadiendo nuevos datos, suprimiendo datos
antiguos o modificando datos previamente almacenados.

Todas las sentencias empiezan con un verbo (palabra reservada que indica la
acción a realizar), seguido del resto de cláusulas, algunas obligatorias y otras
opcionales que completan la frase. Todas las sentencias siguen una sintaxis para
que se puedan ejecutar correctamente.

Si queremos añadir en una tabla una fila con valores conocidos utilizamos la
sentencia INSERT INTO tabla VALUES (lista de valores).

Si los valores a insertar se encuentran en una o varias tablas utilizamos INSERT


INTO tabla SELECT ...

Para cambiar los datos contenidos en una tabla, tenemos que actualizar las filas de
dicha tabla con la sentencia UPDATE tabla SET asignación de nuevos valores.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 93

Para eliminar filas de una tabla se utiliza la sentencia DELETE FROM tabla.

Para recuperar los datos contenidos en una tabla o tablas se utiliza la sentencia
SELECT

Con la cláusula FROM podemos indicar que tablas se sacaran los datos para
procesarlos.

Con la cláusula WHERE podemos indicar a qué filas afecta la actualización o el


borrado o la consulta.

Para ordenar las filas del resultado de la consulta, tenemos la cláusula ORDER BY.

Al incluir el predicado DISTINCT en la SELECT, se eliminan del resultado las


repeticiones de filas. Si por el contrario queremos que aparezcan todas las filas
incluidas las duplicadas, podemos incluir la cláusula ALL o nada, ya que ALL es el
valor que SQL asume por defecto.

El predicado IN dentro de la cláusula WHERE, examina si el valor de la expresión


es uno de los valores incluidos en la lista de valores.

El Predicado BETWEEN dentro de la cláusula WHERE, examina si el valor de la


expresión está comprendido entre dos valores.

El predicado LIKE dentro de la cláusula WHERE, se utiliza cuando queremos utilizar


caracteres comodines para formar el valor con el comparar.

El predicado IS NULL dentro de la cláusula WHERE, examina si el valor de la


columna es nulo o no.

El producto cartesiano se indica poniendo en la FROM las tablas que queremos


componer separadas por comas, podemos obtener así el producto cartesiano de
dos, o más tablas.

La composición es un producto cartesiano seguido de una restricción por igualdad.

INNER JOIN Permite emparejar filas de distintas tablas de forma más eficiente que
con el producto cartesiano cuando una de las columnas de emparejamiento es
clave primaria.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 94

Bibliografía Sugerida

GROFF, James R. , WEINBERG, Paul N. Aplique SQL. McGrawHill. 1991

ELMASRI / NAVATHE. Sistemas de Bases de Datos. Conceptos Fundamentales.


Pearson Educación. 2000

CASTAÑO, Miguel. Diseño de Base de Datos – Problemas Resueltos. AlfaOmega.


2001

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 95

UNIDAD 3: LENGUAJE DE DEFINICION


DE DATOS II
Descripción Temática

Muchas peticiones de información no requieren el nivel de detalle proporcionado


por las consultas SQL descritas en la Unidad 2. Lenguajes de Manipulación de
Datos I. Hay peticiones que solicitan un único valor o un pequeño número de
valores que resumen los contenidos de las bases de datos. SQL soporta estas
peticiones de datos de sumario mediante funciones de columna y mediante las
cláusulas GROUP BY y HAVING de la sentencia SELECT que permiten resumir filas.

La característica de las subconsultas de SQL permite utilizar los resultados de una


consulta como parte de otra. La capacidad de utilizar una consulta dentro de otra
fue la razón original para la palabra “estructurada” en el nombre Lenguaje de
Consultas Estructuradas (Structured Query Language – SQL). Las características
de composición son menos conocidas que la característica de composición de SQL,
pero juega un papel importante por tres (3) razones:

 Una sentencia SQL con un subconsulta es frecuentemente el modo más natural


de expresar una consulta, ya que se asemeja más estrechamente a la
descripción de la consulta en lenguaje natural.
 Las subconsultas hacen más fácil la escritura de sentencia SELECT, ya que
permiten descomponer una consulta en partes (la consulta y sus subconsultas)
y luego recomponer las partes.
 Hay algunas consultas que no pueden ser expresadas en el lenguaje SQL sin
utilizar una subconsulta.

Esta unidad describe las subconsultas y cómo se utilizan en las cláusulas WHERE y
HAVING de una sentencia SQL.

Los ejemplos de esta unidad están basados en el modelo relacional de la base de


datos de transporte. Ejercicio expuesto en la unidad 2. Lenguaje de manipulación
de Datos I.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 96

Horizontes
 Identificar claramente los diagramas sintácticos de las consultas agrupadas
y subconsultas.

 Conocer los fundamentos básicos de DML, por ser éste un importante


lenguaje no procedural.

 Determinar las características de las consultas agrupadas y subconsultas


para procesar los datos almacenados en la base de datos.

 Diferenciar la conceptualización de consultas agrupadas de las no


agrupadas.

Núcleos Temáticos y Problemáticos


 Consultas sumarias.

 Subconsulta.

 Ejemplo.

Proceso de Información

3.1 FUNCIONES DE COLUMNA

Una función de columna se aplica a una columna y obtiene un valor que resume el
contenido de la columna.

3.1.1 Función COUNT

 Descripción

Calcula el número de registros devueltos por una consulta.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 97

 Estructura

COUNT(<expr>)

En donde expr contiene el nombre del campo que desea contar. Los operandos
de expr pueden incluir el nombre de un campo de una tabla, una constante o
una función (siempre y cuando no sea otras de las funciones de columnas de
SQL). Puede contar cualquier tipo de datos incluso texto.

Aunque expr puede realizar un cálculo sobre un campo, Count simplemente


cuenta el número de registros sin tener en cuenta qué valores se almacenan en
los registros. La función Count no cuenta los registros que tienen campos null a
menos que expr sea el carácter comodín asterisco (*). Si utiliza un asterisco,
Count calcula el número total de registros, incluyendo aquellos que contienen
campos null. Count(*) es considerablemente más rápida que Count(Campo).

 Uso

Consulta No. 3.1


Obtener cuantos departamentos hay registrados.

SELECT COUNT(*) AS total FROM departamento;

SELECT COUNT(dep_id) AS total FROM departamento;

SELECT COUNT(dep_nombre) AS total FROM departamento;

Total
5

Nota
En esta consulta no se puede hacer referncia con el atributo dep_extension
dentro de la function count porque solo contaria los que tienen valor.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 98

Consulta No. 3.2


Determine cuantos departamentos tienen registrado la extensión.

SELECT COUNT(dep_extension) AS total FROM departamento;

Total
3

Consulta No. 3.3


Determine cuantos departamentos no tienen registrado la extensión.

SELECT COUNT(*) - COUNT(dep_extension) AS total


FROM departamento;

Total
2

3.1.2 Función SUM

 Descripción

Devuelve la suma del conjunto de valores contenido en un campo específico de


una consulta. Los datos que se suman deben ser de tipo numérico.

 Estructura

SUM(<expr>)

En donde expr respresenta el nombre del campo que contiene los datos que
desean sumarse o una expresión que realiza un cálculo utilizando los datos de
dichos campos. Los operandos de expr pueden incluir el nombre de un campo
de una tabla, una constante o una función (siempre y cuando no sea otras de
las funciones de columna de SQL).

 Uso

Consulta No. 3.4


Se desea saber el acumulado de las extensiones de los departamentos.

SELECT SUM(dep_extension) AS total FROM departamento;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 99

Total
75757

3.1.3 Función MIN

 Descripción

Devuelven el mínimo de un conjunto de valores contenidos en un campo


especifico de una consulta.

Los valores de la columna pueden ser de tipo numérico, texto o fecha. El


resultado de la función tendrá el mismo tipo de dato que la columna. Si la
columna es de tipo numérico MIN() devuelve el valor menor contenido en la
columna, si la columna es de tipo texto MIN() devuelve el primer valor en
orden alfabético, y si la columna es de tipo fecha, MIN() devuelve la fecha más
antigua.

 Estructura

MIN(<expr>)

En donde expr es el campo sobre el que se desea realizar el cálculo. Expr


pueden incluir el nombre de un campo de una tabla, una constante o una
función (siempre y cuando no sea otras de las funciones de columna de SQL)

 Uso

Consulta No. 3.5


Obtener la mínima extensión registrada.

SELECT MIN(dep_extension) AS total FROM departamento;

Total
21658

Consulta No. 3.6


Obtener el mínimo tiempo que dura el recorrido de una ruta.

SELECT MIN(rut_numero_horas) AS total FROM ruta;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 100

Total
1.75

3.1.4 Función MAX

 Descripción

Devuelven el máximo de un conjunto de valores contenidos en un campo


especifico de una consulta.

Los valores de la columna pueden ser de tipo numérico, texto o fecha. El


resultado de la función tendrá el mismo tipo de dato que la columna. Si la
columna es de tipo numérico MAX() devuelve el valor mayor contenido en la
columna, si la columna es de tipo texto MAX() devuelve el último valor en
orden alfabético, y si la columna es de tipo fecha, MAX() devuelve la fecha más
reciente.

 Estructura

MAX(<expr>)

En donde expr es el campo sobre el que se desea realizar el cálculo. Expr


pueden incluir el nombre de un campo de una tabla, una constante o una
función (siempre y cuando no sea otras de las funciones de columna de SQL)

 Uso

Consulta No. 3.7


Obtener la máxima extensión registrada.

SELECT MAX(dep_extension) AS total FROM departamento;

Total
30537

Consulta No. 3.8


Obtener el máximo tiempo que dura el recorrido de una ruta.

SELECT MAX(rut_numero_horas) AS total FROM ruta;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 101

Total
9.0

3.1.5 Función AVG

 Descripción

Calcula el promedio (la media aritmética) de los valores indicados en el


argumento, también se aplica a datos numéricos, y en este caso el tipo de dato
del resultado puede cambiar según las necesidades del sistema para
representar el valor del resultado.

 Estructura

AVG(<expr>)

En donde expr es el campo sobre el que se desea realizar el cálculo. Expr


pueden incluir el nombre de un campo de una tabla, una constante o una
función (siempre y cuando no sea otras de las funciones de columna de SQL)

 Uso

Consulta No. 3.9


Obtener el promedio del tiempo que dura el recorrido de todas las rutas que
salen de Cúcuta.

SELECT AVG(rut_numero_horas) AS total


FROM ruta r, municipio m
WHERE r.rut_salida = m.mun_id AND m.mun_nombre = 'Cúcuta';

Total
5.75

Nota
Recuerde cuando hay más de una relación (o tabla) en la cláusula FROM se
debe destruir el producto cartesiano.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 102

3.2 CONSULTAS SUMARIAS

 Descripción

En la mayoría de los motores de bases de datos relacionales, se puede definir


un tipo de consultas cuyas filas resultantes son un resumen de las filas de la
tabla origen.

 Estructura

SELECT [ALL | DISTINCT ]


<nombre_campo> [{,<nombre_campo>}]
[{,<funcion_agregado>}]
FROM <nombre_tabla>|<nombre_vista>
[{,<nombre_tabla>|<nombre_vista>}]
[WHERE <condicion> [{ AND|OR <condicion>}]]
[GROUP BY <nombre_campo> [{,<nombre_campo >}]]
[HAVING <condicion>[{ AND|OR <condicion>}]]
[ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC]
[{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]

 Diagrama

Introducen dos nuevas cláusulas a la sentencia SELECT, la cláusula GROUP BY


y la cláusula HAVING, son cláusulas que sólo se pueden utilizar en una consulta

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 103

agregada, se tienen que escribir entre la cláusula WHERE y la cláusula ORDER


BY.

3.2.1 La cláusula GROUP BY

Una consulta con una cláusula GROUP BY se denomina consulta agrupada ya que
agrupa los datos de la tabla origen y produce una única fila resumen por cada
grupo formado. Las columnas indicadas en el GROUP BY se llaman columnas de
agrupación.

 Diagrama

 Uso

Consulta No. 3.10


Determinar el nombre del departamento junto con la cantidad de municipios
que tiene registrados cada uno de ellos.

SELECT dep_nombre, COUNT(d.dep_id) AS total_muncipios


FROM municipio m, departamento d
WHERE m.dep_id = D.dep_id
GROUP BY dep_nombre;

dep_nombre total_muncipios
Antioquia 1
Santander 4
Norte de Santander 3
Bolivar 2

Nota
El atributo dep_nombre que forman parte de la lista de selección está por
fuera de una función agregada por lo tanto, tiene que ir también en la
cláusula GROUP BY.

Consulta No. 3.11


Determinar el nombre del departamento junto con la cantidad de municipios
que tiene registrados cada uno de ellos, incluyendo los departamentos que no
tienen municipios.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 104

SELECT dep_nombre, count(mun_nombre) AS total_municipios


FROM municipio m RIGHT JOIN departamento d
ON m.dep_id = D.dep_id
GROUP BY dep_nombre;

dep_nombre total_muncipios
Antioquia 1
Santander 4
Tolima 0
Norte de Santander 3
Bolivar 2

Consulta No. 3.12


Determinar el nombre del municipio junto con el nombre del departamento al
que pertenece cada municipio y cuantas rutas salen de cada uno de ellos.

SELECT dep_nombre, mun_nombre, COUNT(d.dep_id) AS total_rutas


FROM municipio m, departamento d, ruta r
WHERE m.dep_id = d.dep_id AND r.rut_salida=m.mun_id
GROUP BY dep_nombre, mun_nombre;

dep_nombre mun_nombre total_rutas


Norte de Santander Cúcuta 4
Norte de Santander Pamplona 2
Santander Bucaramanga 2

Nota
El atributo dep_nombre y dep_municipio que forman parte de la lista de
selección están por fuera de una función agregada por lo tanto, tiene que ir
también en la cláusula GROUP BY.

3.2.2 La cláusula HAVING

La cláusula HAVING nos permite seleccionar filas de la tabla resultante de una


consulta agregada.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 105

 Diagrama

Para la condición de selección se pueden utilizar los mismos tests de


comparación descritos en la cláusula WHERE, también se pueden escribir
condiciones compuestas (unidas por los operadores OR, AND, NOT), pero
existe una restricción.

En la condición de selección sólo pueden aparecer:


 Valores constantes
 Funciones de columna
 columnas de agrupación (columnas que aparecen en la cláusula GROUP BY)
o cualquier expresión basada en las anteriores.

 Uso

Consulta No. 3.13


Determinar el nombre del departamento junto con la cantidad de municipios
que tiene registrados cada uno de ellos. Solamente para aquellos que tienen
más de 2 municipios.

SELECT dep_nombre, COUNT(d.dep_id) AS total_municipios


FROM municipio m, departamento d
WHERE m.dep_id = D.dep_id
GROUP BY dep_nombre
HAVING count(d.dep_id)>2;

Dep_nombre Total_municipios
Santander 4
Norte de Santander 3

Nota
Como la condición depende del número de municipios y los cuales se
obtuvieron por una función agregada, entonces no se puede utilizar WHERE
por que en él no se puede colocar condiciones con funciones agregadas.
Para colocar funciones agregadas en una condición se debe utilizar la
cláusula HAVING.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 106

3.3 SUBCONSULTAS

Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia
SELECT que llamaremos consulta principal.

Se puede encontrar en la lista de selección, en la cláusula WHERE o en la cláusula


HAVING de la consulta principal.

Una subconsulta tiene la misma sintaxis (o estructura) que una sentencia SELECT
normal exceptuando que aparece encerrada entre paréntesis.

Tiene las siguientes restricciones:


 No puede contener la cláusula ORDER BY
 No puede ser la UNION de varias sentencias SELECT
 Si la subconsulta aparece en la lista de selección, o esta asociada a un
operador igual "=" solo puede devolver un único registro.

Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se


ejecuta por cada fila de la consulta principal. Se aconseja no utilizar campos
calculados en las subconsultas, ralentizan la consulta.

Las consultas que utilizan subconsultas suelen ser más fáciles de interpretar por el
usuario.

3.3.1 Referencias Externas

Una referencia externa es un nombre de columna que estando en la subconsulta,


no se refiere a ninguna columna de las tablas designadas en la FROM de la
subconsulta sino a una columna de las tablas designadas en la FROM de la
consulta principal. Como la subconsulta se ejecuta por cada fila de la consulta
principal, el valor de la referencia externa irá cambiando.

 Uso

Consulta No. 3.14


Realizar la Consulta No. 3.11

SELECT dep_nombre,
(SELECT COUNT(m.dep_id) FROM municipio m
WHERE m.dep_id = d.dep_id) AS total_municipios
FROM departamento d;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 107

Dep_nombre Total_municipios
Norte de Santander 3
Santander 4
Bolivar 2
Tolima 0
Antioquia 1

La consulta principal es SELECT … FROM departamento d;


La subconsulta es (SELECT COUNT(m.dep_id) FROM municipio m WHERE
m.dep_id = d.dep_id). En esta subconsulta tenemos una referencia externa
( d.dep_id ) es un campo de la tabla departamento (origen de la consulta
principal).

¿Qué pasa cuando se ejecuta la consulta principal?

- Se coge el primer departamento y se calcula la subconsulta sustituyendo


d.dep_id por el valor que tiene en el primer departamento. La
subconsulta obtiene la cantidad de municipios que tiene el departamento
del dep_id = ‘d1’

- Se coge el segundo departamento y se calcula la subconsulta con dep_id


‘d2’ (dep_id del segundo departamento)... y así sucesivamente hasta
llegar al último departamento.

Nota
La subconsulta aparece en la lista de selección, por lo tanto, solo puede
devolver un único registro. Si llega a devolver más de un registro se
produce un ERROR.

3.3.2 Anidar Subconsultas

Las subconsultas pueden anidarse de forma que una subconsulta aparezca en la


cláusula WHERE de otra subconsulta que a su vez forma parte de otra consulta
principal. En la práctica, una consulta consume mucho más tiempo y memoria
cuando se incrementa el número de niveles de anidamiento. La consulta resulta
también más difícil de leer , comprender y mantener cuando contiene más de uno
o dos niveles de subconsultas.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 108

 Uso

Consulta No. 3.15


Obtener el nombre de los departamentos de donde salen las rutas.

SELECT d.dep_nombre
FROM departamento d
WHERE d.dep_id IN ( SELECT m.dep_id
FROM municipio m
WHERE m.mun_id IN ( SELECT r.rut_salida
FROM ruta r
)
);

Dep_nombre
Norte de Santander
Santander

En esta consulta , por cada linea de municipio se calcula la subconsulta de


ruta, y esto se repite por cada departamento, en el caso de tener 5 filas de
departamentos y 10 filas de municipios, la subconsulta más interna se
ejecutaría 50 veces (5 x 10).

Nota
El predicado IN, examina si el valor de la expresión es uno de los valores
incluidos en la lista de valores producida por la subconsulta. La subconsulta
debe generar una única columna y las filas que sean. Si la subconsulta no
produce ninguna fila, el test da falso.

3.3.3 Subconsultas en la cláusula FROM

En la cláusula FROM se puede encontrar una sentencia SELECT encerrada entre


paréntesis pero más que subconsulta sería una consulta ya que no se ejecuta para
cada fila de la tabla origen sino que se ejecuta una sola vez al principio, su
resultado se combina con las filas de la otra tabla para formar las filas origen de la
SELECT primera y no admite referencias externas.

En la cláusula FROM vimos que se podía poner un nombre de tabla o un nombre


de consulta, pues en vez de poner un nombre de consulta se puede poner

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 109

directamente la sentencia SELECT correspondiente a esa consulta encerrada entre


paréntesis.

 Uso

Consulta No. 3.16


Obtener el número de ruta que más dura el recorrido junto con su tiempo.

SELECT rut_numero, rut_numero_horas


FROM ruta r,
(SELECT MAX(rut_numero_horas) AS mx
FROM ruta) AS valor
WHERE rut_numero_horas = valor.mx;

Rut_numero Rut_numero_horas
r4_2 9.0

Nota
La consulta principal está formada por dos relaciones: ruta la cual esta
renombrada con r y la subconsulta renombrada con valor. Para evitar el
producto cartesiano se destruye en el WHERE, ya que la subconsulta puede
devolver más de una tupla (o resgistro).

3.3.4 Subconsulta en las cláusulas WHERE y HAVING

Se suele utilizar subconsultas en las cláusulas WHERE o HAVING cuando los datos
que queremos visualizar están en una tabla pero para seleccionar las filas de esa
tabla necesitamos un dato que está en otra tabla.

 Uso

Consulta No. 3.17


Realizar la Consulta No. 3.16

SELECT rut_numero , rut_numero_horas


FROM ruta
WHERE rut_numero_horas = (
SELECT MAX(rut_numero_horas) FROM
ruta);

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 110

Rut_numero Rut_numero_horas
r4_2 9.0

Nota
El test de comparación con subconsulta, es el equivalente al test de
comparación simple. Se utiliza para comparar un valor de la fila que se está
examinado con un único valor producido por la subconsulta. La subconsulta
debe devolver una única columna, sino se produce un error.

Si la subconsulta no produce ninguna fila o devuelve el valor nulo, el test


devuelve el valor nulo, si la subconsulta produce varias filas, SQL devuelve
una condición de error.

Consulta No. 3.18


Obterne los nombre de los departamentos que no tienen registrado municipio.

SELECT dep_nombre
FROM departamento
WHERE dep_id NOT IN (SELECT dep_id FROM municipio);

Dep_nombre
Tolima

Nota
El predicado IN, examina si el valor de la expresión es uno de los valores
incluidos en la lista de valores producida por la subconsulta. La subconsulta
debe generar una única columna y las filas que sean. Si la subconsulta no
produce ninguna fila, el test da falso.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 111

Consulta No. 3.19


Realizar la consulta No. 3.18 con el predicado EXISTS

SELECT dep_nombre
FROM departamento d
WHERE NOT EXISTS (SELECT *
FROM municipio m
WHERE m.dep_id=d.dep_id);

Dep_nombre
Tolima

Nota
El predicado EXISTS, examina si la subconsulta produce alguna fila de
resultados.

Si la subconsulta contiene filas, el test adopta el valor verdadero, si la


subconsulta no contiene ninguna fila, el test toma el valor falso, nunca
puede tomar el valor nulo.

Con este test la subconsulta puede tener varias columnas, no importa ya


que el test se fija no en los valores devueltos sino en si hay o no fila en la
tabla resultado de la subconsulta.

Cuando se utiliza el test de existencia en la mayoría de los casos habrá que


utilizar una referencia externa. Si no se utiliza una referencia externa la
subconsulta devuelta siempre será la misma para todas las filas de la
consulta principal y en este caso se seleccionan todas las filas de la consulta
principal (si la subconsulta genera filas) o ninguna (si la subconsulta no
devuelve ninguna fila)

3.4 IMPLEMENTACIÓN EN POSTGRESQL

 Ingresar al SGBDR PostgrSQL


 Conectarse al servidor
 Elegir la base de datos empresa

 Abrir el editor para la base de datos empresa

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 112

Observe que en el titulo de la ventana esta el nombre de la base de datos


empresa

 Consulta: Obtener la suma de los salarios de todos los empleados, el salario


máximo, el salario mínimo y el salario medio.

En el editor de SQL escribir las sentencias para consultar datos:

SELECT SUM(emp_salario), MAX(emp_salario), MIN(emp_salario),


AVG(emp_salario) FROM empleado;

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 113

 Ejecute el script. Si la consulta no tiene errores de sintaxis en la pestaña


Data Output informa los resultados, en otro caso no muestra nada o indicara el
error producido en la pestaña Messages.

 Consulta: Obtener el nombre de pila y el apellido de los supervisores junto con


la cantidad de empleados que tiene a cargo.

En el editor de SQL escribir las sentencias para consultar datos:

SELECT s.emp_nombre, s.emp_apellido, COUNT(*)


FROM empleado e, empleado s
WHERE s.emp_nss=e.emp_supervisor
GROUP BY s.emp_nombre, s.emp_apellido;

 Ejecute el script. Si la consulta no tiene errores de sintaxis en la pestaña


Data Output informa los resultados, en otro caso no muestra nada o indicara el
error producido en la pestaña Messages.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 114

Proceso de Comprensión y Análisis

MODELO RELACIONAL DE LA BASE DE DATOS CONVOCATORIA FACTOR X

El ejercicio de Factor X esta planteado en la Unidad No. 1. Lenguaje de Definición


de Datos.

Basado en las restricciones definidas para cada una de las relaciones (Ver el DDL
en la unidad No. 1). Determine:

1 Para cada punto plantear una Consulta que utilice la función de columna AVG
ó MIN ó MAX ó SUM ó COUNT dependiendo de la estructura que debe tener y
resolverla.

a. SELECT – FROM
b. SELECT – FROM – ORDER BY
c. SELECT – FROM – WHERE
d. SELECT – FROM – WHERE – ORDER BY

2 Para cada punto plantear una Consulta Sumatoria que utilice la función de
columna AVG ó MIN ó MAX ó SUM ó COUNT dependiendo de la estructura
que debe tener y resolverla.

a. SELECT – FROM – GROUP BY


b. SELECT – FROM – GROUP BY – ORDER BY
c. SELECT – FROM – WHERE – GROUP BY
d. SELECT – FROM – WHERE – GROUP BY – ORDER BY
e. SELECT – FROM – GROUP BY – HAVING

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 115

f. SELECT – FROM – GROUP BY – HAVING – ORDER BY


g. SELECT – FROM – WHERE – GROUP BY – HAVING
h. SELECT – FROM – WHERE – GROUP BY – HAVING – ORDER BY

4. Para cada punto plantear una subconsulta dependiendo de la estructura que


debe tener y resolverla.

a. SELECT <campos>, subconsulta FROM


b. SELECT <campos>, subconsulta FROM – ORDER BY
c. SELECT – FROM <tablas>, subconsulta WHERE
d. SELECT – FROM <tablas>, subconsulta WHERE - ORDER BY
e. SELECT – FROM – WHERE expresión <operador de relación> subconsulta
f. SELECT – FROM – WHERE expresión <operador de relación> subconsulta
ORDER BY
g. SELECT – FROM – WHERE expresión IN subconsulta
h. SELECT – FROM – WHERE expresión IN subconsulta ORDER BY
i. SELECT – FROM – WHERE expresión NOT IN subconsulta
j. SELECT – FROM – WHERE expresión NOT IN subconsulta ORDER BY
k. SELECT – FROM – WHERE EXISTS subconsulta
l. SELECT – FROM – WHERE EXISTS subconsulta ORDER BY
m. SELECT – FROM – WHERE NOT EXISTS subconsulta
n. SELECT – FROM – WHERE NOT EXISTS subconsulta ORDER BY
o. SELECT – FROM <tablas>, subconsulta WHERE – GROUP BY
p. SELECT – FROM <tablas>, subconsulta WHERE – GROUP BY – ORDER BY
q. SELECT – FROM – GROUP BY – HAVING función columna <operador de
relación> subconsulta
r. SELECT – FROM – GROUP BY – HAVING función columna <operador de
relación> subconsulta ORDER BY
s. SELECT – FROM – WHERE – GROUP BY – HAVING función columna <operador
de relación> subconsulta
t. SELECT – FROM – WHERE – GROUP BY – HAVING función columna <operador
de relación> subconsulta ORDER BY

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 116

Solución de Problemas
BASE DE DATOS VENTA DE PRODUCTOS

 DDL en SQL
create table persona(
pers_identificacion varchar(15),
pers_nombre varchar(20) not null,
pers_apellido varchar(20) not null,
pers_fecha_nacimiento date,
primary key(pers_identificacion)
);

create table cliente(


pers_identificacion varchar(15),
clie_direccion_barrio varchar(30),
clie_direccion_numero varchar(30),
primary key(pers_identificacion),
foreign key(pers_identificacion)references persona(pers_identificacion)
on update cascade
on delete restrict
);

create table empleado(


pers_identificacionvarchar(15),
empl_codigo varchar(15) not null,
empl_fecha_ingreso date not null,
empl_numero_hijos integer default 0 not null,
empl_salario float default 0 not null,
empl_comision float default 0,
empl_jefe varchar(15),
primary key(pers_identificacion),
unique(empl_codigo),
check(empl_numero_hijos>=0),
check(empl_salario>=0),
check(empl_comision>=0),
check(pers_identificacion<>empl_jefe),
foreign key(pers_identificacion)references persona(pers_identificacion)
on update cascade
on delete restrict,
foreign key(empl_jefe)references empleado(pers_identificacion)

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 117

on update cascade
on delete set null
);

create table factura(


fact_numero varchar(20),
fact_fecha date not null,
fact_cliente varchar(15) not null,
fact_cajero varchar(15) not null,
fact_vendedor varchar(15) not null,
fact_observacion varchar(30) default 'ninguna' not null,
primary key(fact_numero),
check(fact_cajero<>fact_vendedor),
foreign key(fact_cliente)references cliente(pers_identificacion)
on update cascade
on delete restrict,
foreign key(fact_cajero)references empleado(pers_identificacion)
on update cascade
on delete restrict,
foreign key(fact_vendedor)references empleado(pers_identificacion)
on update cascade
on delete restrict
);

create table producto(


prod_codigo varchar(15),
prod_nombre varchar(20) not null,
prod_precio float not null,
prod_porcentaje_iva float not null,
primary key(prod_codigo),
unique(prod_nombre),
check(prod_precio>0),
check(prod_porcentaje_iva>=0 and prod_porcentaje_iva<=100)
);

create table detalle(


fact_numero varchar(15),
prod_codigo varchar(15),
deta_cantidad integer not null,
primary key(fact_numero,prod_codigo),
check(deta_cantidad>0),
foreign key(fact_numero)references factura(fact_numero)

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 118

on update cascade
on delete restrict,
foreign key(prod_codigo) references producto(prod_codigo)
on update cascade
on delete restrict );

CONSULTAS

 Listar número de factura y total de la factura.


 Determine que facturas tiene un total superior a 500 euros. (Número de factura
y monto)
 De cada factura indicar el número de la factura y cuantos productos se
vendieron.
 De cada factura indicar el número de la factura y cuantas unidades se
vendieron en general (no indicar el producto).
 Que producto es el más vendido.
 De cada factura indicar el número de la factura y nombre del producto con
menos unidades vendidas junto con la cantidad.
 Total de facturas hasta la fecha.
 Total de facturas por cada fecha. (fecha y cantidad)
 Total de facturas por cada año. (año y cantidad)
 Total recaudado hasta la fecha por las facturas.
 Total recaudado hasta la fecha por cada año. (año y total)
 Total recaudado hasta la fecha por cada mes del año. (mes-año y total)
 Obtener el precio del producto más costoso.
 Obtener el nombre del producto más costoso junto con su precio.
 Calcular el promedio general de las edades (en años) de los clientes.
 Determine que clientes (apellido y nombre) cuya edad esta por encima del
promedio general de edades de clientes.
 Indicar el código, nombre y apellido del vendedor y cuantas ventas (facturas) a
realizado en la empresa.
 indicar el código, nombre y apellido del vendedor y cuantas ventas (facturas) a
realizado en el presenté mes.
 Obtener el nombre del producto menos costoso junto con su precio.
 Determine que clientes tiene más de tres facturas.
 Indicar el número de la factura en la que más se recaudo junto con el nombre
del vendedor (nombre y apellido) y de cuanto fue el recaudo.

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 119

Síntesis Creativa y Argumentativa

MODELO RELACIONAL DE LA BASE DE DATOS VIDEO TIENDA

 Declare el modelo, empleando el DDL de SQL.


 Especifique varias consultas sumarias y subconsultas que necesite su aplicación
de base de datos en SQL.
 Implemente su base de datos.

Autoevaluación
Complete

1. ¿Qué función calcula el valor promedio de una expresión o columna?


_______________________________
2. ¿Qué función encuentra el valor mayor en una expresión o una columna?
_______________________________

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 120

3. ¿Qué función calcula el total de una expresión o columna?


_______________________________
4. ¿Qué función encuentra el valor más pequeño en una expresión o columna?
_______________________________
5. ¿Qué función cuenta el número de valores en una expresión o columna?
_______________________________
6. ¿Qué cláusula selecciona los grupos de filas que construyen a los resultados de
consultas sumarias? _______________________________
7. ¿Qué cláusula genera múltiples filas de resultados, cada una resumiendo las
filas de un grupo particular? _______________________________
8. ¿Qué Predicado comprueba si una subconsulta devuelve algún valor?
_______________________________
9. ¿Qué predicado compara el valor del test con el conjunto de valores devuelto
por una subconsulta? _______________________________
10. Cuando aparece una subconsulta en la cláusula _________________, los
resultados de la subconsulta se utilizan para seleccionar los grupos de filas que
contribuyen con datos a los resultados de la consulta.
11. Cuando aparece una subconsulta en la cláusula _________________, los
resultados de la subconsulta se utilizan para seleccionar las filas individuales
que contribuyen a los datos de los resultados de la consulta.

Repaso Significativo

SQL permite resumir datos de base de datos mediante un conjunto de funciones


de columna. Una función de columna SQL acepta una columna entera de datos
como argumentos y produce un único dato que resume la columna.

Las funciones de columna pueden calcular el promedio, la suma, el valor mínimo y


el valor máximo de una columna, contar el número de valores de datos de una
columna o contar el número de filas de los resultados de la consulta.

El argumento de una función columna puede ser un solo nombre de columna o


puede ser una expresión SQL.

Las consultas sumarias utilizan funciones de columna SQL para condensar una
columna de valores en un único valor que resume la columna.

Una subconsulta es una consulta que aparece dentro de la cláusula WHERE o


HAVING de otra sentencia SQL. En la cláusula WHERE, ayudan a seleccionar las
filas individuales que aparecen en los resultados de la consulta. En la cláusula

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 121

HAVING, ayudan a seleccionar los grupos de filas que aparecen en los resultados
de la consulta. Las subconsultas proporcionan un modo eficaz y natural de manejar
las peticiones de consultas que se expresan en términos de los resultados de otras
consultas.

Bibliografía Sugerida

GROFF, James R. , WEINBERG, Paul N. Aplique SQL. McGrawHill. 1991

ELMASRI / NAVATHE. Sistemas de Bases de Datos. Conceptos Fundamentales.


Pearson Educación. 2000

CASTAÑO, Miguel. Diseño de Base de Datos – Problemas Resueltos. AlfaOmega.


2001

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia


Administración de Base de Datos II 122

BIBLIOGRAFÍA GENERAL
GROFF, James R. , WEINBERG, Paul N. Aplique SQL. McGrawHill. 1991

ELMASRI / NAVATHE. Sistemas de Bases de Datos. Conceptos Fundamentales.


Pearson Educación. 2000

CASTAÑO, Miguel. Diseño de Base de Datos – Problemas Resueltos. AlfaOmega.


2001

Date, C.J. Introdución a los sistemas de Base de Datos. Pretice Hall. 2001

Korth. Introducción a las Bases de Datos. McGrawHill. 2001

Sitios web General

Curso de SQL [en línea]. Aula Clic. Abril. 2001. [citado 4 agosto. 2007]. Disponible
en [http://www.aulaclic.es/sql/index.htm]

HERRARTE SÁNCHEZ, Pedro. Tutorial SQL [en línea]. devjoker. Octubre. 2005.
[citado 4 agosto. 2007]. Disponible en
[http://www.devjoker.com/asp/indice_contenido.aspx?co_grupo=csql]

Tutorial SQL [en línea]. quidel. [citado 4 agosto. 2007]. Disponible en


[http://quidel.inele.ufro.cl/~pvalenzu/tutoriales/sql/sql.html]

Tutorial de SQL: Guía de Referencia de SQL [en línea]. 1keydata. [citado 4 agosto.
2007]. Disponible en [http://sql.1keydata.com/es/]

Casares, Claudio. Curso de SQL [en línea]. Programación en Castellano. Enero.


2003. [citado 4 agosto. 2007]. Disponible en
[http://www.programacion.net/tutorial/sql/]

Manual del Usuario de PosgreSQL [en línea]. PostgreSQL. [citado 4 agosto.


2007]. Disponible en [http://www.postgresql.org]

Arenas Valencia, Wilson. Problemas de mer y mere [en línea]. Universidad


Tecnológica de Pereira. [citado 4 agosto. 2007]. Disponible en
[http://www.utp.edu.co/~warenas/diseno.pdf]

UNIVERSIDAD DE PAMPLONA – Centro de Educación virtual y a Distancia

Você também pode gostar