RosarioDariel Unidad 3

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 21

República dominicana.

Universidad Autónoma De Santo Domingo.


(UASD)
Centro Uasd Bonao.

TEMA.

Control de Lectura Cap. 8

Sustentado por:

Dariel A. Rosario Sosa 100197530

Maestro:

Erick Minor Cordero

Fecha:
30/02/2020
Índices

Introducción.............................................................................................................................3
1.1.1 Conceptos de esquema y catálogo en SQL........................................................4
1.1.2 El comando CREATE TABLE de SQL...................................................................5
1.1.3 Tipos de datos y dominios en SQL.......................................................................6
2. Especificación de restricciones en SQL.......................................................................9
2.1 Especificación de restricciones de atributo y valores predeterminados de
atributo.................................................................................................................................10
2.2 Especificación de las restricciones de clave y de integridad referencial.....10
2.3 Asignación de nombres a las restricciones.........................................................12
2.4 Especificación de restricciones en las tuplas utilizando CHECK...................12
3. Sentencias de SQL para cambiar el esquema...........................................................13
3.1 Comando DROP..........................................................................................................13
3.2 Comando ALTER........................................................................................................14
4. Consultas básicas en SQL.............................................................................................15
4.1 Estructura SELECT-FROM-WHERE de las consultas básicas de SQL..........16
5. Sentencias INSERT, DELETE y UPDATE de SQL......................................................17
5.1 Comando INSERT.......................................................................................................17
Conclusión..............................................................................................................................20
Bibliografías...........................................................................................................................21
Introducción
El nombre SQL significa Lenguaje de consulta estructurado (Structured Query
Language). Originalmente, SQL se denominaba SEQUEL (Structured English
QUEry Language) y fue diseñado e implementado por IBM Research a modo
de interfaz para un sistema de base de datos relacional conocido como
SYSTEM R. SQL es ahora el lenguaje estándar de los DBMSs relacionales
comerciales.

Un esfuerzo conjunto llevado a cabo por el Instituto nacional americano de


normalización (ANSI, American National Standards Institute) y la Organización
internacional para la normalización (ISO, International Standards Organization)
llevó a una versión estándar de SQL (ANSI 1986), denominada SQL-86 o
SQL1.

A continuación, se desarrolló un estándar revisado y mucho más amplio, SQL2


(también conocido como SQL-92). El siguiente estándar fue SQL99. Se han
propuesto otros estándares, como SQL3, pero no han gozado de suficiente
respaldo por parte de la industria. Intentaremos cubrir en lo posible la última
versión de SQL. SQL es un lenguaje de bases de datos global: cuenta con
sentencias para definir datos, consultas y actualizaciones.

Por tanto, se comporta como DDL y como DML. Además, dispone de


características para definir vistas en la base de datos, especificar temas de
seguridad y autorización, definir restricciones de integridad, y especificar
controles de transacciones. También tiene reglas para incrustar sentencias de
SQL en un lenguaje de programación de propósito general, como Java,
COBOL o C/C++.1 Como la especificación del estándar SQL sigue creciendo,
con más funciones en cada nueva versión del estándar, el último estándar,
SQL-99, está dividido en una especificación central (o núcleo) más unos
paquetes especializados opcionales. Se supone que todos los desarrolladores
de DBMSs compatibles con SQL-99 implementan dicho núcleo.

Los paquetes pueden implementarse como módulos opcionales que pueden


adquirirse independientemente para determinadas aplicaciones de bases de
datos; por ejemplo, para el minado de datos, datos espaciales, datos
meteorológicos, datos de almacenamiento, procesamiento analítico online
(OLAP), datos multimedia, etcétera. Ofreceremos un resumen de algunos de
estos paquetes (y dónde se explican en este libro) al final del presente capítulo.

1.1 Definición de datos y tipos de datos de SQL


SQL utiliza los términos tabla, fila y columna para los términos relación, tupla y
atributo del modelo relacional formal, respectivamente. Utilizaremos todos
estos términos indistintamente. El principal comando de SQL para definir datos
es la sentencia CREATE, que se utiliza para crear esquemas, tablas
(relaciones) y dominios (así como otras estructuras, como vistas, aserciones y
triggers).

1.1.1 Conceptos de esquema y catálogo en SQL

Las versiones anteriores de SQL no incluían el concepto de esquema de


base de datos relacional; todas las tablas (relaciones) estaban consideradas
como parte del mismo esquema. El concepto de esquema SQL se incorporó
por primera vez en SQL2 para agrupar las tablas y otras estructuras
pertenecientes a la misma aplicación de base de datos. Un esquema SQL se
identifica con un nombre de esquema e incluye un identificador de autorización
para indicar el usuario o la cuenta propietaria del esquema, así como unos
descriptores para cada elemento. Los elementos del esquema son las tablas,
las restricciones, las vistas, los dominios y otras estructuras (como la concesión
de autorización), que describen el esquema.

El esquema se crea con la sentencia CREATE SCHEMA, que puede


incluir las definiciones de todos sus elementos. Como alternativa, puede
asignarse un nombre y un identificador de autorización al esquema, y definir los
elementos más tarde. Por ejemplo, la siguiente sentencia crea el esquema
EMPRESA, propiedad del usuario cuyo identificador de autorización es
‘Jperez’. CREATE SCHEMA EMPRESAAUTHORIZATION Jperez; En general,
no todos los usuarios están autorizados a crear esquemas y elementos de
esquema.

El privilegio de crear esquemas, tablas y otras estructuras debe ser


otorgado explícitamente por el administrador del sistema o DBA a las cuentas
de usuario pertinentes. Además del concepto de esquema, SQL2 utiliza el
concepto de catálogo, que es una colección de esquemas bajo un nombre, en
un entorno SQL. Un entorno SQL es básicamente una instalación de un
RDBMS compatible con SQL en un computador. 2 Un catálogo siempre
contiene un esquema especial denominado INFORMATION_SCHEMA, que
proporciona información sobre todos los esquemas del catálogo y todos los
descriptores de elemento de esos esquemas. Las restricciones de integridad,
como la integridad referencial, se pueden definir entre las relaciones sólo si
existen en los esquemas del mismo catálogo. Los esquemas del mismo
catálogo también pueden compartir ciertos elementos, como las definiciones de
dominio.

1.1.2 El comando CREATE TABLE de SQL

El comando CREATE TABLE se utiliza para especificar una nueva


relación, asignándole a esta última un nombre y sus atributos y restricciones
iniciales. Primero se especifican los atributos, a cada uno de los cuales se le
asigna un nombre, un tipo de datos para especificar su dominio de valores, y
cualesquiera restricciones de atributo, como NOT NULL. Las restricciones de
clave, integridad de entidad e integridad referencial, pueden especificarse con
la sentencia CREATE TABLE después de haber declarado los atributos, o
pueden añadirse más tarde con el comando ALTER TABLE.

SQL también incluye el concepto de grupo (cluster) de catálogos dentro


de un entorno, pero no está claro si se requieren muchos niveles de
anidamiento en la mayoría de las aplicaciones.

Normalmente, el esquema SQL en el que se declaran las relaciones se


especifica implícitamente en el entorno en el que se ejecuta la sentencia
CREATE TABLE. De forma alternativa, podemos adjuntar explícitamente el
nombre del esquema al nombre de la relación, separándolos con un punto. Por
ejemplo, al escribir CREATE TABLE EMPRESA.EMPLEADO . . . en lugar de
CREATE TABLE EMPLEADO, podemos conseguir explícitamente (y no
implícitamente) que la tabla EMPLEADO forme parte del esquema EMPRESA.

Las relaciones declaradas mediante sentencias CREATE TABLE se


denominan tablas base (o relaciones base); esto significa que el DBMS crea y
almacena como un fichero la relación y sus tuplas. Las relaciones base se
distinguen de las relaciones virtuales, que se crean con CREATE VIEW
(consulte la Sección 8.8), en que pueden o no corresponder a un fichero físico
real. En SQL, los atributos de una tabla base están considerados como
ordenados en la secuencia en que se especificaron en la sentencia CREATE
TABLE.

No obstante, no se considera que las filas (tuplas) estén ordenadas


dentro de una relación. En la Figura 8.1 hay algunas claves externas (foreign
keys) que pueden provocar errores porque o bien se especifican a través de
referencias circulares, o porque se refieren a una tabla que todavía no se ha
creado. Por ejemplo, la foreign key SuperDni de la tabla EMPLEADO es una
referencia cruzada porque se refiere a la propia tabla. La foreign key Dno de la
tabla EMPLEADO se refiere a la tabla DEPARTAMENTO, que todavía no se ha
creado. Para tratar con este tipo de problema, estas restricciones pueden
omitirse de la sentencia CREATE TABLE inicial, y añadirse más tarde con la
sentencia ALTER TABLE (consulte la Sección 8.3.2).

1.1.3 Tipos de datos y dominios en SQL

Los tipos de datos básicos disponibles para los atributos son numéricos,
cadena de caracteres, cadena de bits, booleano, fecha y hora.

„ El tipo de datos numéricos incluye los números enteros de varios


tamaños (INTEGER o INT, y SMALLINT) así como los números en coma
flotante (reales) de distintas precisiones (FLOAT o REAL, y
DOUBLEPRECISION). Los números se pueden declarar utilizando
DECIMAL(i,j)[o DEC(i,j)o NUMERIC(i,j)], donde i, la precisión, es el número
total de dígitos decimales y j, la escala, es el número de dígitos después del
punto decimal. El valor predeterminado para la escala es cero, mientras que la
precisión predeterminada se define en la implementación.

„ El tipo de datos cadena de caracteres puede ser de longitud fija


[CHAR(n) o CHARACTER(n), donde n es la cantidad de caracteres] o de
longitud variable [VARCHAR(n)o CHAR VARYING(n)o
CHARACTERVARYING(n), donde n es la cantidad máxima de caracteres]. Al
especificar un valor de cadena literal, se coloca entre comillas simples
(apóstrofes) y distingue entre minúsculas y mayúsculas.

En el caso de las cadenas de longitud fija, las cadenas más cortas se


rellenan con caracteres en blanco por la derecha. Por ejemplo, si el valor
‘Pérez’ corresponde a un atributo de tipo CHAR (10), se rellena con cinco
caracteres en blanco para convertirse en ‘Pérez ‘, si es necesario. Los blancos
de relleno normalmente se ignoran cuando se comparan cadenas.

En las comparaciones, las cadenas se consideran ordenadas


alfabéticamente (o lexicográficamente); si una cadena cad1 aparece antes que
otra cadena cad2en orden alfabético, entonces se considera que cad1es menor
que cad2.

También existe un operador de concatenación representado por || (doble


barra vertical) que permite concatenar dos cadenas en SQL. Por ejemplo,
‘abc’|| ‘XYZ’ da como resultado una sola cadena, ‘abcXYZ’. En SQL-99 hay otro
tipo de datos denominado CHARACTER LARGE OBJECTo CLOB, destinado a
especificar columnas que tienen valores de texto más largos, como los
documentos.

„ El tipo de datos cadena de bits es de longitud fija n[BIT(n)] o de


longitud variable [BITVARYING(n)], donde n es la cantidad máxima de bits. El
valor predeterminado para n, que es la longitud de una cadena de caracteres o
de una cadena de bits, es 1. Las cadenas de bits literales se escriben entre
comillas simples pero precedidas por una B para distinguirlas de las cadenas
de caracteres; por ejemplo, B‘10101’.

En SQL-99 existe otro tipo de datos denominado BINARY LARGE


OBJECT o BLOB destinado a especificar las columnas que tienen valores
binarios más grandes, como las imágenes. „ Un tipo de datos booleano tiene
los valores tradicionales TRUE o FALSE. En SQL, debido a la presencia de los
valores NULL, se utiliza una lógica de tres valores, que permite un tercer valor:
UNKNOWN. En la Sección 8.5.1 explicaremos la necesidad de UNKNOWN y
de la lógica de tres valores.

„ En SQL2 se añadieron dos nuevos tipos de datos, fecha y hora. El tipo


de datos DATE tiene diez posiciones y sus componentes son AÑO, MES y DÍA
según la forma AAAA-MM-DD. El tipo de datos TIME tiene al menos ocho
posiciones, con los componentes HORAS, MINUTOS y SEGUNDOS en la
forma HH:MM: SS. La implementación de SQL sólo debe permitir las fechas y
las horas válidas. La comparación < (menor que) se puede utilizar con fechas y
horas (una fecha anterior se considera que es más pequeña que una fecha
posterior, y lo mismo pasa con las horas). Los valores literales se representan
mediante cadenas entre comillas simples precedidas por la palabra clave DATE
o TIME; por ejemplo, DATE ‘2002-09-27’ o TIME ‘09:12:47’. Además, un tipo de
datos TIME(i), especifica i + 1 posiciones adicionales para TIME (una posición
para un carácter separador adicional, e i posiciones para especificar las
fracciones decimales de un segundo). Un tipo de datos TIME WITH TIME
ZONE incluye seis posiciones adicionales para especificar el desplazamiento
respecto a la zona horaria universal estándar, y que puede variar desde +13:00
a –12:59 en unidades de HORAS: MINUTOS. Si no se incluye WITH TIME
ZONE, el valor predeterminado es la zona horaria local para la sesión de SQL.
„ Un tipo de datos marca de tiempo (TIMESTAMP) incluye los campos DATE y
TIME, más un mínimo de seis posiciones para las fracciones decimales de
segundos y un calificador WITH TIME ZONE opcional. Los valores literales se
representan como cadenas entre comillas simples precedidas por la palabra
clave TIMESTAMP, con un espacio en blanco entre la fecha y la hora; por
ejemplo, TIMESTAMP ‘2002-09-27 09:12:47 648302’.

„ Otro tipo de datos relacionado con DATE, TIME y TIMESTAMP es


INTERVAL, que permite especificar un intervalo (un valor relativo que puede
utilizarse para incrementar o reducir el valor absoluto de una fecha, una hora o
una marca de tiempo). Los intervalos están cualificados para ser intervalos
AÑO/MES o intervalos DÍA/HORA.

„ El formato de DATE, TIME y TIMESTAMP se puede considerar como


un tipo especial de cadena. Por tanto, se pueden utilizar normalmente en
comparaciones de cadena si se convierten en las cadenas equivalentes.

En el caso de caracteres no alfabéticos hay un orden definido. Las cadenas de


bits cuya longitud es un múltiplo de 4 se pueden especificar en notación
hexadecimal, donde la cadena literal va precedida por una X y cada carácter
hexadecimal representa 4 bits.

Es posible especificar directamente el tipo de datos de cada atributo, como en


la Figura 8.1; alternativamente, se puede declarar un dominio, y el nombre del
dominio se puede utilizar con la especificación del atributo. Esto hace más fácil
cambiar el tipo de datos de un dominio que es utilizado por numerosos
atributos de un esquema, y mejorar la legibilidad de este último. Por ejemplo,
podemos crear un dominio TIPO_DNI con la siguiente sentencia: CREATE
DOMAIN TIPO_DNI AS CHAR (9); En la Figura 8.1 podemos utilizar TIPO_DNI
en lugar de CHAR(9) para los atributos Dni y SuperDni de Empleado,
DniDirector de Departamento, DniEmpleado de TRABAJA_EN y DniEmpleado
de SUBORDINADO. Un dominio también puede tener una especificación
predeterminada opcional a través de una cláusula DEFAULT, como explicamos
más adelante para los atributos. Los dominios no están disponibles en muchas
implementaciones de SQL.
2. Especificación de restricciones en SQL
Esta sección describe las restricciones básicas que se pueden
especificar en SQL como parte de la creación de una tabla. Entre ellas
podemos citar las restricciones de clave y de integridad referencial, así como
las restricciones en los dominios de atributo y NULLs y en las tuplas
individuales dentro de una relación.

2.1 Especificación de restricciones de atributo y valores


predeterminados de atributo

Como SQL permite NULL como valor de atributo, es posible especificar


una restricción NOT NULL si no se permite NULL para un atributo en particular.
Esto siempre se especifica implícitamente para los atributos que forman parte
de la clave principal de cada relación, pero puede especificarse para cualquier
otro atributo para cuyo valor se exige que no sea NULL.

También es posible definir un valor predeterminado para un atributo


añadiendo la cláusula DEFAULT <valor> a su definición. El valor
predeterminado se incluye en cualquier tupla nueva si no se proporciona un
valor explícito para ese atributo. La Figura 8.2 ilustra un ejemplo de cómo
especificar un director predeterminado para un departamento nuevo y un
departamento predeterminado para un empleado nuevo. Si no se especifica
una cláusula predeterminada, el valor predeterminado es NULL para los
atributos que no tienen la restricción NOT NULL. Otro tipo de restricción puede
ser restringir los valores de atributo o dominio con la cláusula CHECK a
continuación de la definición de un atributo o dominio.6 Por ejemplo, suponga
que los números de departamento están restringidos a número enteros entre 1
y 20; entonces, podemos cambiar la declaración de atributo de NumeroDpto en
la tabla DEPARTAMENTO a lo siguiente: NumeroDpto INT NOT NULL CHECK
(NumeroDpto > 0 AND NumeroDpto < 21); La cláusula CHECK también se
puede utilizar en combinación con la sentencia CREATE DOMAIN. Por
ejemplo, podemos escribir la siguiente sentencia: CREATE DOMAIN NUM_D
AS INTEGER CHECK (NUM_D > 0 AND NUM_D < 21);

2.2 Especificación de las restricciones de clave y de integridad


referencial
Como las restricciones de clave e integridad referencial son muy
importantes, hay cláusulas especiales para la sentencia CREATE TABLE.

La cláusula PRIMARYKEYespecifica uno o más atributos que


constituyen la clave principal de una relación. Si una clave principal sólo tiene
un atributo, la cláusula puede seguir al atributo directamente. Por ejemplo, la
clave principal de DEPARTAMENTO se puede especificar como sigue:
NumeroDpto INT PRIMARY KEY;

Las restricciones de clave y de integridad referencial no se incluían en


las versiones anteriores de SQL. En algunas de esas implementaciones, las
claves se especificaban implícitamente en el nivel interno mediante el comando
CREATE INDEX.

La cláusula UNIQUE especifica claves (secundarias) alternativas, como


se ilustraba en la declaración de las tablas DEPARTAMENTO y PROYECTO
de la Figura 8.1. La integridad referencial se especifica mediante la cláusula
FOREIGN KEY.

Una restricción de integridad referencial se puede violar cuando se


insertan o eliminan tuplas o cuando se modifica el valor de un atributo de la
foreign key o de la clave principal. La acción predeterminada que SQL toma en
caso de una violación de la integridad es rechazarla operación de actualización
que provocaría tal violación.

Sin embargo, el diseñador del esquema puede especificar una acción


alternativa si se viola la integridad referencial añadiendo una cláusula de acción
de activación referencial a cualquier restricción de foreign key.

Las opciones son SET NULL, CASCADE y SET DEFAULT. Una opción
debe cualificarse con ON DELETE u ON UPDATE.

Esto significa que, si se elimina la tupla de un empleado supervisor, el


valor de SuperDni se establece automáticamente a NULL en todas las tuplas
de empleado que hacían referencia a la tupla de empleado borrada.

Por el contrario, si se actualiza el valor Dnide un empleado supervisor


(por ejemplo, porque se introdujo incorrectamente), entonces el valor nuevo se
actualiza en cascada para el SuperDni de todas las tuplas de empleado que
hacen referencia a la tupla de empleado actualizada.8 En general, la acción
tomada por el DBMS para SETNULL o SETDEFAULT es la misma tanto para
ON DELETE como para ON UPDATE: el valor de los atributos de referencia
afectados se cambia a NULL para SETNULL y al valor predeterminado
especificado para SETDEFAULT. La acción para CASCADE ON DELETE es
eliminar todas las tuplas referenciadas, mientras que la acción para CASCADE
ON UPDATE es cambiar el valor de la foreign key por el valor de la clave
principal (nueva) actualizada en todas las tuplas referenciadas.

Es responsabilidad del diseñador de la base de datos elegir la acción


apropiada y especificarla en el esquema de la base de datos. Como regla
general, la opción CASCADE es adecuada para las relaciones “de relación”
(consulte la Sección 7.1), como TRABAJA_EN; para las relaciones que
representan atributos multivalor, como LOCALIZACIONES_DPTO; y para las
relaciones que representan tipos de entidad débiles, como SUBORDINADO.

2.3 Asignación de nombres a las restricciones

La Figura 8.2 también ilustra cómo puede asignarse un nombre de


restricción a una restricción, con la palabra clave CONSTRAINT. Los nombres
de todas las restricciones dentro de un esquema particular deben ser únicos.

El nombre de una restricción se utiliza para identificar una restricción


particular en caso de que la restricción tenga que eliminarse más tarde y
sustituirse por otra restricción, como se explica en la Sección 8.3. La
asignación de nombres a las restricciones es opcional.

2.4 Especificación de restricciones en las tuplas utilizando CHECK

Además de las restricciones de clave y de integridad referencial, que se


especifican mediante palabras claves especiales, se pueden indicar otras
restricciones de tabla mediante cláusulas CHECK adicionales al final de una
sentencia CREATE TABLE.

Estas restricciones se pueden denominar basadas en tuplas porque se


aplican individualmente a cada tupla y se comprueban siempre que se inserta o
modifica una tupla. Por ejemplo, suponga que la tabla DEPARTAMENTO de la
Figura 8.1 tiene un atributo adicional FechaCreaciónDpto, que almacena la
fecha en que se creó el departamento. Después, podríamos añadir la siguiente
cláusula CHECK al final de la sentencia CREATE TABLE para la tabla
DEPARTAMENTO para garantizar que la fecha de inicio de un director es
posterior a la fecha de creación del departamento.

La foreign key SuperDni de la tabla EMPLEADO es una referencia


circular y, por tanto, es posible que tenga que añadirse más tarde como una
restricción con nombre utilizando la sentencia ALTER TABLE, como
explicamos al final de la Sección 8.1.2.

3. Sentencias de SQL para cambiar el esquema


En esta sección ofrecemos una panorámica de los comandos de
evolución del esquema de SQL, que se pueden utilizar para alterar un esquema
añadiendo o eliminando tablas, atributos, restricciones y otros elementos del
esquema.

3.1 Comando DROP

El comando DROP se puede utilizar para eliminar los elementos con


nombre del esquema, como tablas, dominios o restricciones. También puede
eliminar un esquema. Por ejemplo, si ya no se necesita un esquema entero, se
puede utilizar el comando DROP SCHEMA. Hay dos opciones de
comportamiento para estas eliminaciones: CASCADE y RESTRICT. Por
ejemplo, para eliminar el esquema de la base de datos EMPRESA y todas sus
tablas, dominios y otros elementos, se utiliza la opción CASCADE de este
modo: DROP SCHEMA EMPRESACASCADE; Si se opta por RESTRICT en
lugar de CASCADE, el esquema sólo se elimina si no contiene elementos; en
caso contrario, el comando DROP no se ejecutará.

Si ya no se necesita una relación base dentro de un esquema, la


relación y su definición se pueden eliminar con el comando DROPTABLE. Por
ejemplo, si ya no queremos hacer un seguimiento de los subordinados de los
empleados en la base de datos EMPRESA de la Figura 8.1, podemos librarnos
de la relación SUBORDINADO ejecutando el siguiente comando: DROP
TABLE SUBORDINADO CASCADE; Si se elige la opción RESTRICT en lugar
de CASCADE, la tabla sólo se elimina si no se hace referencia a ella en
ninguna restricción (por ejemplo, desde las definiciones de foreign key de otra
relación) o vista.

Con la opción CASCADE, todas estas restricciones y vistas que hacen


referencia a la tabla se eliminan automáticamente del esquema, junto con la
propia tabla. El comando DROPTABLE no sólo elimina todos los registros de la
tabla, sino también la definición de la tabla del catálogo.

Si se desea eliminar los registros, pero manteniendo la definición de la


tabla para un uso futuro, entonces hay que utilizar el comando DELETE en
lugar de DROP TABLE. El comando DROP también se puede utilizar para
eliminar otros tipos de elementos con nombre del esquema, como las
restricciones o los dominios.

3.2 Comando ALTER


La definición de una tabla base o de otros elementos con nombre del
esquema se puede cambiar con el comando ALTER. Para las tablas base, las
posibles acciones de alteración incluyen la adición o eliminación de una
columna (atributo), el cambio de la definición de una columna, y la adición o
eliminación de restricciones. Por ejemplo, para añadir a las relaciones base
EMPLEADO del esquema EMPRESA un atributo que sirva para hacer un
seguimiento de los trabajos de los empleados, podemos usar este comando:
ALTER TABLE EMPRESA.EMPLEADO ADD COLUMN Trabajo VARCHAR
(12);

Todavía debemos introducir un valor para el atributo nuevo, Trabajo, por


cada tupla EMPLEADO. Lo podemos hacer especificando una cláusula
predeterminada o utilizando el comando UPDATE (consulte la Sección 8.6). Si
no especificamos una cláusula predeterminada, el atributo nuevo tendrá NULL
en todas las tuplas de la relación inmediatamente después de haberse
ejecutado el comando; por tanto, la restricción NOT NULL no está permitida en
este caso. Para eliminar una columna, debemos elegir CASCADE o RESTRICT
como comportamiento de eliminación.
En el caso de CASCADE, todas las restricciones y vistas que hacen
referencia a la columna se eliminarán automáticamente del esquema, junto con
la columna. Si optamos por RESTRICT, el comando es satisfactorio sólo si no
hay vistas o restricciones (u otros elementos) que hagan referencia a la
columna. Por ejemplo, el siguiente comando elimina el atributo Dirección de la
tabla base EMPLEADO: ALTER TABLE EMPRESA.EMPLEADO DROP
COLUMN Dirección CASCADE; También es posible alterar la definición de una
columna eliminando una cláusula predeterminada existente o definiendo una
nueva cláusula predeterminada.

Los siguientes ejemplos sirven como explicación: ALTER TABLE


EMPRESA.DEPARTAMENTO ALTER COLUMN DniDirector DROP DEFAULT;
ALTER TABLE EMPRESA.DEPARTAMENTO ALTER COLUMN DniDirector
SET DEFAULT ‘333445555’; También se pueden cambiar las restricciones
especificadas en una tabla añadiendo o eliminando una restricción. Para ser
eliminada, la restricción debe contar con un nombre asignado durante su
definición. Por ejemplo, para eliminar la restricción SUPERFKEMP de la
relación EMPLEADO escribimos: ALTER TABLE EMPRESA.EMPLEADO
DROP CONSTRAINT SUPERFKEMP CASCADE; Una vez hecho esto,
podemos redefinir una restricción de sustitución añadiendo, si es necesario,
una restricción nueva a la relación.

Esto se consigue utilizando la palabra clave ADD en la sentencia ALTER


TABLE seguida por la restricción nueva, que puede o no tener nombre, y que
puede ser de cualquiera de los tipos de restricción de tabla explicados. Las
subsecciones anteriores han ofrecido una panorámica de los comandos de
evolución del esquema de SQL.

Hay otros muchos detalles y opciones, por lo que instamos al lector a


consultar los documentos citados en la sección “Bibliografía seleccionada”, al
final de este capítulo. Las dos secciones siguientes explican las capacidades
de consulta de SQL.

4. Consultas básicas en SQL


SQL tiene una sentencia básica para recuperar información de una base
de datos: SELECT. Esta sentencia no tiene relación con la operación
SELECCIÓN del álgebra relacional, que explicamos en el Capítulo 6. En SQL
hay muchas opciones y versiones de la sentencia SELECT, por lo que
introduciremos sus características gradualmente.

4.1 Estructura SELECT-FROM-WHERE de las consultas básicas de


SQL

Las consultas en SQL pueden ser muy complejas. Empezaremos con las
sencillas e iremos progresando, paso a paso, hasta las más complejas. La
forma básica de la sentencia SELECT, denominada en ocasiones mapeado o
bloque select-from-where, está formada por las cláusulas SELECT, FROM y
WHERE y tiene la siguiente forma: SELECT <lista de atributos> FROM <lista
de tablas> WHERE <condición>; donde:

„ <lista de atributos> es una lista de los atributos cuyos valores serán


recuperados por la consulta.

„ <lista de tablas> es una lista de las relaciones necesarias para


procesar la consulta.

„ <condición> es una expresión condicional (booleana) que identifica las


tuplas que la consulta recuperará. En SQL, los operadores básicos para
comparar lógicamente los valores de los atributos entre sí y con constantes
literales son =, <, <=, >, >= y <>, que se corresponden con los operadores =, <,
?, >, ? y ? del álgebra relacional, respectivamente, y con los operadores =, <,
<=, >, >= y != del lenguaje de programación C/C++. La diferencia principal es el
operador no igual. SQL tiene muchos operadores de comparación adicionales
que iremos presentando a medida que los necesitemos. Vamos a ilustrar la
sentencia SELECT básica con algunas consultas de ejemplo.

Recuperar la fecha de nacimiento y la dirección del empleado (o


empleados) cuyo nombre sea José Pérez Pérez. C0: SELECT FechaNac,
Dirección FROM EMPLEADO WHERE Nombre=‘José’AND
Apellido1=‘Pérez’AND Apellido2=‘Pérez’; Esta consulta sólo implica a la
relación EMPLEADO que se especifica con la cláusula FROM. La consulta
selecciona las tuplas de EMPLEADO que satisfacen la condición de la cláusula
WHERE; después, proyecta el resultado en los atributos FechaNac y Dirección
enumerados en la cláusula SELECT. C0 es parecida a la siguiente expresión
escrita en álgebra relacional, excepto que no se eliminan los duplicados, si los
hay:

FechaNac, Dirección(

Nombre=‘José’AND Apellido1=‘Pérez’AND Apellido2=‘Pérez’


(EMPLEADO)) Por tanto, una consulta SQL sencilla con una sola relación en la
cláusula FROM es similar a una pareja de operaciones SELECCIÓN-
PROYECTO del álgebra relacional. La cláusula SELECT de SQL especifica los
atributos de proyección y la cláusula WHERE especifica la condición de
selección. La única diferencia es que en la consulta SQL podemos obtener
tuplas duplicadas en el resultado porque no se implementa la restricción de que
una relación es un conjunto.

Una tabla SQL con una clave está restringida a ser un conjunto, ya que
el valor de la clave debe ser distinto en cada tupla.10 Si queremos eliminar las
tuplas duplicadas del resultado de una consulta SQL, utilizamos la palabra
clave DISTINCT en la cláusula SELECT, lo que significa que sólo las tuplas
distintas deben permanecer en el resultado. En general, una consulta con
SELECTDISTINCT elimina los duplicados, mientras que una consulta con
SELECTALL no lo hace. Especificar SELECT sin ALL ni DISTINCT (como en
nuestros anteriores ejemplos) es equivalente a SELECT ALL. Por ejemplo, C11
recupera el sueldo de los empleados; si varios empleados tienen el mismo
sueldo, ese valor aparecerá varias veces en el resultado de la consulta.

5. Sentencias INSERT, DELETE y UPDATE de SQL


En SQL se pueden utilizar tres comandos para modificar la base de
datos: INSERT, DELETE y UPDATE.

5.1 Comando INSERT

En su formato más sencillo, INSERT se utiliza para añadir una sola tupla
a una relación. Debemos especificar el nombre de la relación y una lista de
valores para la tupla. Los valores deben suministrarse en el mismo orden en el
que se especificaron los atributos correspondientes en el comando CREATE
TABLE.

Una segunda forma de la sentencia INSERT permite especificar


explícitamente los nombres de los atributos que se corresponden con los
valores suministrados en el comando INSERT. Esto resulta útil si la relación
tiene muchos atributos y sólo vamos a asignar valores a unos cuantos en la
tupla nueva. Sin embargo, los valores deben incluir todos los atributos con la
especificación NOT NULL y ningún valor predeterminado.

Los atributos que permiten los valores NULL o DEFAULT son los que se
pueden omitir. Por ejemplo, para introducir una tupla para un nuevo
EMPLEADO del que únicamente conocemos los atributos Nombre, Apellido1,
Dno y Dni, podemos utilizar U1A: U1A: INSERT INTO EMPLEADO (Nombre,
Apellido1, Dno, Dni) VALUES ( ‘Ricardo’, ‘Roca’, 4, ‘653298653’ ); Los atributos
no especificados en U1A se establecen a DEFAULT o a NULL, y los valores se
suministran en el mismo orden que los atributos enumerados en el propio
comando INSERT.

También es posible insertar con un solo comando INSERT varias tuplas


separadas por comas. Los valores de los atributos que constituyen cada tupla
se encierran entre paréntesis. Un DBMS que implementa completamente SQL-
99 debe soportar e implementar todas las restricciones de integridad que se
pueden especificar en el DDL.

Sin embargo, algunos DBMSs no incorporan todas las restricciones, al


objeto de mantener toda la eficacia del DBMS y debido a la complejidad de
implementar todas las restricciones. Si un sistema no soporta alguna restricción
(por ejemplo, la integridad referencial), el usuario o el programador tendrá que
implementar la restricción. Por ejemplo, si ejecutamos el comando de U2 sobre
la base de datos de la Figura 5.6, un DBMS que no soporte la integridad
referencial realizará la inserción, aunque no exista una tupla DEPARTAMENTO
con NumeroDpto=2.

Es responsabilidad del usuario comprobar que no se violan las


restricciones cuyas comprobaciones no están implementadas por el DBMS. Sin
embargo, el DBMS debe implementar comprobaciones para hacer cumplir
todas las restricciones de integridad SQL que soporta.

Un DBMS que implementa NOT NULL rechazará un comando INSERT


en el que un atributo declarado como NOT NULL no tenga un valor; por
ejemplo, U2A se rechazaría porque no se suministra un valor para Dni. U2:
INSERT INTO EMPLEADO (Nombre, Apellido1, Dni, Dno) VALUES (‘Casimiro’,
‘García’, ‘980760540’, 2); (U2 será rechazada si la comprobación de la
integridad referencial es proporcionada por el DBMS.) U2A: INSERT INTO
EMPLEADO (Nombre, Apellido1, Dno) VALUES ( ‘Casimiro’, ‘García’, 5 );
(U2Aes rechazada si la comprobación NOT NULL es proporcionada por el
DBMS.) Una variación del comando INSERT inserta varias tuplas en una
relación, en combinación con la creación y la carga de la relación con el
resultado de una consulta. Por ejemplo, para crear una tabla temporal con el
nombre, el número de empleados y el total de sueldos por cada departamento,
podemos escribir las sentencias de U3Ay U3B: U3A: CREATE TABLE
INFO_DEPTS (NombreDeDpto VARCHAR(15),
Conclusión

En este capítulo hemos presentado el lenguaje de bases de datos SQL.


Este lenguaje y sus variaciones se han implementado como interfaces en
muchos DBMSs relacionales comerciales, como Oracle, DB2 y SQL/DS de
IBM, SQLServer y ACCESS de Microsoft, SYBASE, INFORMIX, Rdb de
Digital18 e INGRES.

Algunos sistemas OpenSource también proporcionan SQL, como


MySQL.

La versión original de SQLse implementó en el DBMS experimental


denominado SYSTEM R, que fue desarrollado por IBM Research. SQLestá
diseñado como un lenguaje global que incluye sentencias para la definición de
datos, consultas, actualizaciones, especificación de restricciones y definición de
vistas.

Hemos explicado muchas de ellas en secciones independientes de este


capítulo. En la última sección vimos las características adicionales que se
explican en otras partes del libro. Nos hemos centrado en el estándar SQL-99.
Bibliografías

RAMEZ ELMASRI y SHAMKANTB. NAVATHE, Fundamentos de Sistemas de


Bases de Datos Quinta Edición

También podría gustarte