Sie sind auf Seite 1von 34

Alumnos:

Bravo Garca Emmanuel.


De Luna Martn Eutiquio.
Puebla Valencia Jess.
Ramrez Gervacio Daniel.
Velasco Velzquez Germn.
Profesora:
Mara Teresa De Len.
Unidad 6 Lenguaje SQL

Ingeniera En sistemas
computacionales (i.s.c)

Contenido
6.1 Introduccin al lenguaje SQL......................................................................................................... 1
6.2 Definicin de datos ....................................................................................................................... 3
6.3 Estructura bsica de las consultas................................................................................................. 4
Predicados y conectores ..................................................................................................................... 6
Comparacin de conjuntos ................................................................................................................. 8
6.4 Operaciones sobre conjuntos ....................................................................................................... 9
UNION ................................................................................................................................................. 9
EXCEPT............................................................................................................................................... 10
INTERSECT ......................................................................................................................................... 10
6.5 Funciones de agregacin ............................................................................................................. 12
6.6 Valores nulos SQL ........................................................................................................................ 14
6.7 Consultas anidadas ...................................................................................................................... 17
6.8 Consultas complejas .................................................................................................................... 18
El producto cartesiano ...................................................................................................................... 20
El INNER JOIN .................................................................................................................................... 21
6.9 Vistas ........................................................................................................................................... 24
Creacin de vistas.............................................................................................................................. 24
6.10 Modificacin de las bases de datos........................................................................................... 27
BORRADO .......................................................................................................................................... 27
Uso de funciones de agregacin en una sub consulta de borrado. .................................................. 28
INSERCIN ......................................................................................................................................... 28
Conclusiones Personales ................................................................................................................... 31

6.1 Introduccin al lenguaje SQL


El SQL es el lenguaje estndar ANSI/ISO de definicin, manipulacin y control
de bases de datos relacionales. Es un lenguaje declarativo: slo hay que indicar
qu se quiere hacer. En cambio, en los lenguajes procedimentales es necesario
especificar cmo hay que hacer cualquier accin sobre la base de datos. El SQL
es un lenguaje muy parecido al lenguaje natural; concretamente, se parece al
ingls, y es muy expresivo. Por estas razones, y como lenguaje estndar, el SQL
es un lenguaje con el que se puede acceder a todos los sistemas relacionales
comerciales.
Empezamos con una breve explicacin de la forma en que el SQL ha llegado a ser
el lenguaje estndar de las bases de datos relacionales:
Al principio de los aos setenta, los laboratorios de investigacin Santa Teresa
de IBM empezaron a trabajar en el proyecto System R. El objetivo de este
proyecto era implementar un prototipo de SGBD relacional; por lo tanto, tambin
necesitaban investigar en el campo de los lenguajes de bases de datos relacionales.
A mediados de los aos setenta, el proyecto de IBM dio como resultado un primer
lenguaje denominado SEQUEL (Structured English Query Language), que por
razones legales se denomin ms adelante SQL (Structured Query Language). Al
final de la dcada de los setenta y al principio de la de los ochenta, una vez
finalizado el proyecto System R, IBM y otras empresas empezaron a utilizar el
SQL en sus SGBD relacionales, con lo que este lenguaje adquiri una gran
popularidad.
En 1982, ANSI (American National Standards Institute) encarg a uno de sus comits
(X3H2) la definicin de un lenguaje de bases de datos relacionales. Este comit,
despus de evaluar diferentes lenguajes, y ante la aceptacin comercial del SQL, eligi
un lenguaje estndar que estaba basado en ste prcticamente en su totalidad. El
SQL se convirti oficialmente en el lenguaje estndar de ANSI en el ao 1986, y de
ISO (International Standards Organization) en 1987. Tambin ha sido adoptado como
lenguaje estndar por FIPS (Federal Information Processing Standard), Unix X/Open
y SAA (Systems Application Architecture) de IBM.
En el ao 1989, el estndar fue objeto de una revisin y una ampliacin que dieron
lugar al lenguaje que se conoce con el nombre de SQL1 o SQL89. En el ao
1992 el estndar volvi a ser revisado y ampliado considerablemente para cubrir
carencias de la versin anterior. Esta nueva versin del SQL, que se conoce con
el nombre de SQL2 o SQL92.
Aunque aparezca slo la sigla SQL, siempre nos estaremos refiriendo al SQL92,
ya que ste tiene como subconjunto el SQL89; por lo tanto, todo lo que era vlido
en el caso del SQL89 lo continuar siendo en el SQL92.
1

De hecho, se pueden distinguir tres niveles dentro del SQL92:


El nivel introductorio (entry), que incluye el SQL89 y las definiciones de clave
primaria y clave fornea al crear una tabla.
El concepto de clave primaria y su importancia en una relacin o tabla se ha visto
en la unidad El modelo relacional y el lgebra relacional.
El nivel intermedio (intermediate), que, adems del SQL89, aade algunas
ampliaciones del SQL92.
El nivel completo (full), que ya tiene todas las ampliaciones del SQL92.
El modelo relacional tiene como estructura de almacenamiento de los datos las
relaciones. La intensin o esquema de una relacin consiste en el nombre que
hemos dado a la relacin y un conjunto de atributos. La extensin de una relacin
es un conjunto de tuplas.
Hablaremos de tablas en lugar de relaciones.
Hablaremos de columnas en lugar de atributos.
Hablaremos de filas en lugar de tuplas.
Sin embargo, a pesar de que la nomenclatura utilizada sea diferente, los conceptos
son los mismos.
Para utilizar SQL desde un lenguaje de programacin necesitaremos sentencias
especiales que nos permitan distinguir entre las instrucciones del lenguaje de
programacin y las sentencias de SQL. La idea es que trabajando bsicamente
con un lenguaje de programacin anfitrin se puede cobijar SQL como si fuese
un husped. Por este motivo, este tipo de SQL se conoce con el nombre de SQL
hospedado. Para trabajar con SQL hospedado necesitamos un precompilador
que separe las sentencias del lenguaje de programacin de las del lenguaje de
bases de datos. Una alternativa a esta forma de trabajar son las rutinas
SQL/CLI* (SQL/Call-Level Interface), que resolviendo tambin el problema de
acceder a SQL desde un lenguaje de programacin, no necesitan precompilador.

6.2 Definicin de datos


El DDL, lenguaje de definicin de datos. Es la parte del SQL que ms vara de un
sistema a otro ya que esa rea tiene que ver con cmo se organizan internamente
los datos y eso, cada sistema lo hace de una manera u otra.
Un lenguaje de definicin de datos (Data Definition Language, DDL por sus siglas
en ingls) es un lenguaje proporcionado por el sistema de gestin de base de datos
que permite a los usuarios de la misma llevar a cabo las tareas de definicin de las
estructuras que almacenarn los datos as como de los procedimientos o funciones
que permitan consultarlos.
Un Data Definition Language o Lenguaje de descripcin de datos (DDL) es un
lenguaje de programacin para definir estructuras de datos. El trmino DDL fue
introducido por primera vez en relacin con el modelo de base de datos CODASYL,
donde el esquema de la base de datos ha sido escrito en un lenguaje de descripcin
de datos que describe los registros, los campos, y "conjuntos" que conforman el
usuario modelo de datos. Ms tarde fue usado para referirse a un subconjunto de
SQL, pero ahora se utiliza en un sentido genrico para referirse a cualquier lenguaje
formal para describir datos o estructuras de informacin, como los esquemas XML.
A diferencia de muchos lenguajes de descripcin de datos, SQL utiliza una coleccin
de verbos imperativo cuyo efecto es modificar el esquema de la base de datos,
aadiendo, cambiando o eliminando las definiciones de tablas y otros objetos. Estas
declaraciones se pueden mezclar libremente con otras sentencias SQL, por lo que
el DDL no es realmente una lengua independiente. La declaracin ms comn es
CREATE TABLE, que se utiliza para Crear una tabla nueva. El lenguaje de
programacin SQL, el ms difundido entre los gestores de bases de datos, admite
las siguientes sentencias de definicin: CREATE (crear), DROP (borrar) y ALTER
(actualizar, modificar), cada una de las cuales se puede aplicar a las tablas, vistas,
procedimientos almacenados y triggers de la base de datos.

6.3 Estructura bsica de las consultas


La estructura bsica de una expresin para consulta SQL consta de tres clusulas:
SELECT
FROM
WHERE
La clusula SELECT se usa para listar los atributos que se desean en el resultado
de una consulta, es un modo literal de decir seleccionar
La clusula FROM lista las relaciones que se van a examinar en la evaluacin de la
expresin es un modo literal de decir de
La clusula WHERE costa de un predicado que implica atributos de las relaciones
que aparecen en la clusula FROM. Es un modo literal de decir donde
Una consulta bsica en SQL tiene la forma: (seleccionar, de, donde)
SELECT A1, A2, A3
FROM r1,r2, r3
WHERE A1=Federico ;
Donde A1 = atributo o campo de la tabla, si se pone * o la palabra ALL se
seleccionar todo.
r1 = relacin ( Tabla )
A1=Federico = predicado o condicin
Ejemplo 2: Seleccionar todos los nombres de las personas que tengan el apellido
MARQUESI de la tabla persona
SELECT nombre
FROM persona
WHERE apellido = " MARQUESI";

El resultado de una consulta es por supuesto otra relacin. Si se omite la clusula


WHERE, el predicado P es verdadero. La lista A1, A2,..., An puede sustituirse por
un asterisco (*) para seleccionar todos los atributos de todas las relaciones que
aparecen en la clusula FROM, aunque no es conveniente elegir esta ultima opcin
salvo que sea necesario pues desperdiciamos mucho tiempo en obtenerlo
Alias: Es posible renombrar los atributos y las relaciones, a veces por conveniencia
y otras veces por ser necesario, para esto usamos la clusula AS como en el
siguiente ejemplo.
Ejemplo 2.2
SELECT P.nombre AS [PRIMER NOMBRE]
FROM persona P
WHERE apellido = "MARQUESI"

En este ejemplo cabe destacar un par de cosas. Cuando nos referimos a un atributo
como es el caso de nombre, podemos referirnos a este usando la relacin (o el alias
en este ejemplo) a la que pertenece el atributo seguido de un punto seguido del
atributo <P.nombre>, a veces esta notacin ser necesaria para eliminar
ambigedades. Los corchetes los usamos cuando usamos espacios en blancos o
el carcter () en el nombre de atributo o alias.
Usar alias en los atributos nos permite cambiar el nombre de los atributos de la
respuesta a la consulta.
Cuando asociamos un alias con una relacin decimos que creamos una variable de
tupla. Estas variables de tuplas se definen en la clusula FROM despus del nombre
de la relacin.
En las consultas que contienen subconsultas, se aplica una regla de mbito a las
variables de tupla. En una subconsulta est permitido usar solo variables de tupla
definidas en la misma subconsulta o en cualquier consulta que tenga la subconsulta.

Predicados y conectores
Los conectores lgicos en SQL son:
AND
OR
NOT
La lgica de estos conectores es igual que en cualquier lenguaje de programacin
y sirven para unir predicados.
Las operaciones aritmticas en SQL son:
+ (Suma)
- (Resta)
* (Multiplicacin)
/ (Divisin)
Tambin incluye el operador de comparacin BETWEEN, que se utiliza para valores
comprendidos entre
Ejemplo: Encontrar todos los nombres y dni de las personas cuyos dni sea mayor
que 26 millones y menor a 28 millones
SELECT nombre, dni
FROM persona
WHERE dni BETWEEN 26000000 and 28000000
Anlogamente podemos usar el operador de comparacin NOT BETWEEN.
SQL tambin incluye un operador de seleccin para comparaciones de cadena de
caracteres. Los modelos se describen usando los caracteres especiales:
El carcter (%) es igual a cualquier sub cadena.
El operador (_) es igual a cualquier carcter.
Estos modelos se expresan usando el operador de comparacin LIKE. Un error muy
frecuente es tratar de utilizar los modelos mediante el operador de igualdad (=) lo
cual es un error de sintaxis.
Ejemplo: encontrar los nombres que comiencen con la letra p o el nombre tenga
exactamente 6 caracteres de la relacin persona
SELECT nombre.
FROM persona.
WHERE (nombre LIKE "P%") OR (nombre LIKE "_ _ _ _ _ _")
6

SQL incluye las operaciones de conjuntos UNION, INTERSECT, MINUS, que


operan sobre relaciones y corresponden a las operaciones del lgebra unin,
interseccin y resta de conjuntos respectivamente. Para realizar esta operacin de
conjuntos debemos tener sumo cuidado que las relaciones tengan las mismas
estructuras.
Incorporemos ahora una nueva relacin, llamada jugadores que representa las
personas que juegan al ftbol, sus atributos sern DNI, puesto y nro_camiseta.
Supongamos que esta nueva tabla est conformada de la siguiente manera
Ejemplo: Obtener todos los nombres de la relacin persona cuyos apellidos sean
Marquesi o Serrat.
SELECT nombre
FROM PERSONA
WHERE apellido = "MARQUESI"
UNION
SELECT nombre
FROM PERSONA
WHERE apellido = "SERRAT"
Obtener todos los DNI de los que juegan al ftbol y, adems, estn en la lista de la
relacin persona
SELECT dni
FROM persona
INTERSECT
SELECT dni
FROM jugadores
Por omisin, la operacin de union elimina las tuplas duplicadas. Para retener
duplicados se debe escribir UNION ALL en lugar de UNION.
El conector IN prueba si se es miembro de un conjunto, donde el conjunto es una
coleccin de valores producidos en lo general por una clusula SELECT.
Anlogamente el conector NOT IN prueba la no pertenencia al conjunto
Ejemplo: Encontrar los nombres de las personas que juegan al ftbol y, adems, se
encuentran en la relacin persona
SELECT nombre, apellido
FROM persona
WHERE dni IN
(SELECT dni FROM jugadores)
7

Es posible probar la pertenencia de una relacin arbitraria SQL usa la notacin de


elementos <v1,v2,...,vn> para representar una tupla de elementos de n que contiene
los valores v1,v2,...,vn.

Comparacin de conjuntos
En conjuntos la frase << mayor que algn >> se representa en SQL por (>SOME),
tambin podra entenderse esto como << mayor que el menor de >>, su sintaxis es
igual que la del conector IN. SQL tambin permite las comparaciones (>SOME),
(=SOME) (>=SOME), (<=SOME) y (<>SOME).
Tambin existe la construccin (>ALL), que corresponde a la frase << mayor que
todos >>. Al igual que el operador SOME, puede escribirse (>ALL), (=ALL) (>=ALL),
(<=ALL) y (<>ALL).
En ocasiones podramos querer comparar conjuntos para determinar si un conjunto
contiene los miembros de algn otro conjunto. Tales comparaciones se hacen
usando las construcciones CONTAINS y NOT CONTAINS

6.4 Operaciones sobre conjuntos


SQL permite tres tipos de operaciones con conjuntos:

UNION, disponible en todas las versiones SQL Server.


EXCEPT, nuevo en SQL Server 2005.
INTRESECT, nuevo en SQL Server 2005.

Para utilizar operaciones de conjuntos debemos cumplir una serie de normas:

Las consultas a unir deben tener el mismo nmero de campos, y adems los
campos deben ser del mismo tipo.
Slo puede haber una nica clausula ORDER BY al final de la sentencia
SELECT.

UNION
UNION devuelve la suma de dos o ms conjuntos de resultados. El conjunto
obtenido como resultado de UNION tiene la misma estructura que los conjuntos
originales. El siguiente ejemplo muestra el uso de UNION
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento
FROM EMPLEADOS
UNION
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento
FROM CLIENTES
Cuando realizamos una consulta con UNION internamente se realiza una
operacin DISTINCT sobre el conjunto de resultados final. Si queremos obtener
todos los valores debemos utiliza UNION ALL.
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento
FROM EMPLEADOS
UNION ALL
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento
FROM CLIENTES
9

EXCEPT
EXCEPT devuelve la diferencia (resta) de dos o ms conjuntos de resultados. El
conjunto obtenido como resultado de EXCEPT tiene la misma estructura que los
conjuntos originales.
El siguiente ejemplo muestra el uso de EXCEPT

SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento


FROM EMPLEADOS
EXCEPT
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento
FROM CLIENTES
El uso de EXCEPT, como norma general, es mucho ms rpido que
utilizar condiciones NOT IN o EXISTS en la clusula WHERE.

INTERSECT
Devuelve la interseccin entre dos o ms conjuntos de resultados en uno. El
conjunto obtenido como resultado de INTERSECT tiene la misma estructura que
los conjuntos originales.
El siguiente ejemplo muestra el uso de INTERSECT
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento
FROM EMPLEADOS
INTERSECT
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento
FROM CLIENTES

10

11

6.5 Funciones de agregacin


El SQL nos ofrece las siguientes funciones de agregacin para efectuar varias
operaciones sobre los datos de una base de datos:
Funcin
Descripcin
COUNT Nos da el nmero total de filas
seleccionadas
Suma los valores de una columna
SUM
Nos da el valor mnimo de una
MIN
columna
Nos da el valor mximo de una
MAX
columna
Calcula el valor medio de una
AVG
columna

En general, las funciones de agregacin se aplican a una columna, excepto la


funcin de agregacin COUNT, que normalmente se aplica a todas las columnas de
la tabla o tablas seleccionadas. Por lo tanto, COUNT (*) contar todas las filas de la
tabla o las tablas que cumplan las condiciones. Si se utilizase COUNT (distinct
columna), slo contara los valores que no fuesen nulos ni repetidos, y si se
utilizase COUNT(columna), slo contara los valores que no fuesen nulos.
Ejemplo de utilizacin de la funcin COUNT (*)
Veamos un ejemplo de uso de la funcin COUNT, que aparece en la clusula
SELECT, para hacer la consulta Cuntos departamentos estn ubicados en la
ciudad de Lleida?:
SELECT COUNT (*) AS numero_dep
FROM departamentos
WHERE ciudad_dep = Lleida;

numero_dep
1

La respuesta a esta consulta sera la que aparece reflejada en la tabla que


encontraris en el margen.
COUNT
Regresa la cuneta de todos los valores del SELECT. Tambin se puede usar la
opcin DISTINCT para solamente contar los valores distintos.
COUNTBIG
Igual que COUNT, pero regresa un BIGINT.
12

AVG
Regresa el promedio de todos los valores del SELECT. Tambin se puede usar la
opcin DISTINCT para calcular el promedio de los valores distintos.
MIN
Regresa el valor mnimo de todos los valores del SELECT.
MAX
Regresa el Valor mximo de todos los valores del SELECT.
SUM
Regresa la suma de todos los valores del SELECT.
STDEV
Regresa la desviacin estndar de una muestra de todos los valores del SELECT.
STDEVP
Regresa la desviacin estndar de todos los valores del SELECT.
VAR
Regresa la variacin de una muestra de todos los valores del SELECT
VARP
Regresa la variacin de todos los valores del SELECT.
GROUPING
Usado con el GROUP BY y ROLLUP, se puede ver el nivel de los resultados
CHECKSUM AGG
Regresa la suma de verificacin de todos los valores del SELECT.

13

6.6 Valores nulos SQL


Null (nulo) es un marcador especial usado en el lenguaje de consulta estructurado
(SQL) para indicar que no existe un valor dentro de una base de datos. Introducido
por el creador del modelo relacional de bases de datos E. F. Codd, su funcin es la
de solventar el requisito de que los sistemas de gestin relacionales de base de
datos (en ingls: Database management system, abreviado DBMS) verdaderos
puedan representar informacin desconocida o no aplicable. Asimismo, Codd
tambin introdujo el uso de la letra griega omega () en minscula para representar
el Null en la teora de la teora de las bases de datos. NULL es tambin una palabra
reservada en el lenguaje SQL para identificar el marcador especial Null.
Null ha sido un foco de controversia y una fuente de debate debido a su asociacin
a la lgica ternaria (en ingls: Three-Valued Logic, abreviado 3VL), a sus
restricciones de uso en SQL y a la dificultad de su manejo en SQL. Aunque las
funciones especiales y predicados sirven para manejar eficazmente el Nulls, la
competencia opina que resolver este tipo de cuestiones aade complejidades y
contradicciones innecesarias dentro del modelo relacional de bases de datos.
"null" significa "dato desconocido" o "valor inexistente". No es lo mismo que un valor
"0", una cadena vaca o una cadena literal "null".
A veces, puede desconocerse o no existir el dato correspondiente a algn campo
de un registro. En estos casos decimos que el campo puede contener valores nulos.
Por ejemplo, en nuestra tabla de libros, podemos tener valores nulos en el campo
"precio" porque es posible que para algunos libros no le hayamos establecido el
precio para la venta.
En contraposicin, tenemos campos que no pueden estar vacos jams.
Veamos un ejemplo. Tenemos nuestra tabla "libros". El campo "titulo" no debera
estar vaco nunca, igualmente el campo "autor". Para ello, al crear la tabla, debemos
especificar que dichos campos no admitan valores nulos:
create table libros(
titulo varchar(30) not null,
autor varchar(20) not null,
editorial varchar(15) null,
precio float
);
14

Para especificar que un campo no admita valores nulos, debemos colocar "not null"
luego de la definicin del campo.
En el ejemplo anterior, los campos "editorial" y "precio" si admiten valores nulos.
Cuando colocamos "null" estamos diciendo que admite valores nulos (caso del
campo "editorial"); por defecto, es decir, si no lo aclaramos, los campos permiten
valores nulos (caso del campo "precio").
Si ingresamos los datos de un libro, para el cual an no hemos definido el precio
podemos colocar "null" para mostrar que no tiene precio:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Emece',null);
Note que el valor "null" no es una cadena de caracteres, no se coloca entre comillas.
Entonces, si un campo acepta valores nulos, podemos ingresar "null" cuando no
conocemos el valor.
Tambin podemos colocar "null" en el campo "editorial" si desconocemos el nombre
de la editorial a la cual pertenece el libro que vamos a ingresar:
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais','Lewis Carroll',null,25);
Si intentamos ingresar el valor "null" en campos que no admiten valores nulos (como
"titulo" o "autor"), SQL Server no lo permite, muestra un mensaje y la insercin no
se realiza; por ejemplo:
insert into libros (titulo,autor,editorial,precio)
values(null,'Borges','Siglo XXI',25);
Para ver cules campos admiten valores nulos y cules no, podemos emplear el
procedimiento almacenado "sp_columns" junto al nombre de la tabla. Nos muestra
mucha informacin, en la columna "IS_NULLABLE" vemos que muestra "NO" en los
campos que no permiten valores nulos y "YES" en los campos que si los permiten.
Para recuperar los registros que contengan el valor "null" en algn campo, no
podemos utilizar los operadores relacionales vistos anteriormente: = (igual) y <>
(distinto); debemos utilizar los operadores "is null" (es igual a null) y "is not null" (no
es null):

15

select * from libros


where precio is null;
La sentencia anterior tendr una salida diferente a la siguiente:
select * from libros
where precio=0;
Con la primera sentencia veremos los libros cuyo precio es igual a "null"
(desconocido); con la segunda, los libros cuyo precio es 0.
Igualmente para campos de tipo cadena, las siguientes sentencias "select" no
retornan los mismos registros:
select * from libros where editorial is null;
select * from libros where editorial='';
Con la primera sentencia veremos los libros cuya editorial es igual a "null", con la
segunda, los libros cuya editorial guarda una cadena vaca.
Entonces, para que un campo no permita valores nulos debemos especificarlo luego
de definir el campo, agregando "not null". Por defecto, los campos permiten valores
nulos, pero podemos especificarlo igualmente agregando "null".

16

6.7 Consultas anidadas


Una consulta anidada, como su nombre indica, es aquella que est contenida
dentro de otra. Los resultados de una la consulta anidada se utilizan como valores
de comparacin de la clusula WHERE de la consulta que la anida. Se evaluar
antes la sentencia SELECT anidada y una vez obtenido el valor o conjunto de
valores se evaluar la otra. El formato es el siguiente:
SELECT col1, col1, ... , coln
FROM tabla1
WHERE col <operador lgico>
(SELECT col
FROM tabla2
WHERE condiciones);
Se deben tener en cuenta los siguientes aspectos para ejecutar este tipo de
sentencias:
-La tabla de la sentencia SELECT anidada no tiene por qu ser la misma que la de
la sentencia SELECT que la anida.
- El tipo de datos de la 'col' de la sentencia SELECT superior y de la 'col' de la
anidada debe ser el mismo.
- Siempre se seleccionarn el mismo nmero de columnas de la sentencia
SELECT anidada que el de columnas que forman parte de la clusula WHERE en
la superior.
- Las filas devueltas por la consulta anidada deben corresponderse con el tipo de
operador lgico indicado. Si el operador lgico es '=' la sentencia SELECT anidada
solo podr devolver una nica fila.

17

6.8 Consultas complejas


El SQL soporta dos grupos de consultas multitabla:
- la unin de tablas.
- la composicin de tablas.
La unin de tablas
Esta operacin se utiliza cuando tenemos dos tablas con las mismas columnas y
queremos obtener una nueva tabla con las filas de la primera y las filas de la
segunda. En este caso la tabla resultante tiene las mismas columnas que la
primera tabla (que son las mismas que las de la segunda tabla).
Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de
datos o tablas lgicas (resultados de una consulta), esto nos permite utilizar la
operacin con ms frecuencia ya que pocas veces tenemos en una base de datos
tablas idnticas en cuanto a columnas. El resultado es siempre una tabla lgica.
Por ejemplo queremos en un slo listado los productos cuyas existencias sean
iguales a cero y tambin los productos que aparecen en pedidos del ao 90. En este
caso tenemos unos productos en la tabla de productos y los otros en la tabla de
pedidos, las tablas no tienen las mismas columnas no se puede hacer una unin de
ellas pero lo que interesa realmente es el identificador del producto (id fab, id
producto), luego por una parte sacamos los cdigos de los productos con
existencias cero (con una consulta), por otra parte los cdigos de los productos que
aparecen en pedidos del ao 90 (con otra consulta), y luego unimos estas dos tablas
lgicas.
El operador que permite realizar esta operacin es el operador UNION.

18

La composicin de tablas
La composicin 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.
El ejemplo anterior quedara de la siguiente forma con la composicin:

A diferencia de la unin la composicin permite obtener una fila con datos de las
dos tablas, esto es muy til cuando queremos visualizar filas cuyos datos se
encuentran en dos tablas.
Existen distintos tipos de composicin, aprenderemos a utilizarlos todos y a elegir
el tipo ms apropiado a cada caso.
Los tipos de composicin de tablas son:

El producto cartesiano
El INNER JOIN

19

El producto cartesiano
El producto cartesiano es un tipo de composicin 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.
La sintaxis es la siguiente:

* 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, tres, o ms tablas.
* nb tabla puede ser un nombre de tabla o un nombre de consulta. Si todas las
tablas estn en una base de datos externa, aadiremos la clusula IN
basedatosexterna despus de la ltima tabla. Pero para mejorar el rendimiento y
facilitar el uso, se recomienda utilizar una tabla vinculada en lugar de la clusula IN.
* Se puede componer una tabla consigo misma, en este caso
es obligatorio utilizar un nombre de alias por lo menos para una de las dos.
Ejemplo:
SELECT*
FROM [existencias cero],[pedidos 90]
Obtenemos la siguiente tabla:

20

El INNER JOIN
El INNER JOIN es otro tipo de composicin de tablas, permite emparejar filas de
distintas tablas de forma ms eficiente que con el producto cartesiano cuando una
de las columnas de emparejamiento est indexada. Ya que en vez de hacer el
producto cartesiano completo y luego seleccionar la filas que cumplen la condicin
de emparejamiento, para cada fila de una de las tablas busca directamente en la
otra tabla las filas que cumplen la condicin, con lo cual se emparejan slo las filas
que luego aparecen en el resultado.
La sintaxis es la siguiente:

Ejemplo:
SELECT*
FROM pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie
* tabla1 y tabla2 son especificaciones de tabla (nombre de tabla con alias o no,
nombre de consulta guardada), 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 clusula ON los nombres de columna deben
ser nombres cualificados (lleva adelante el nombre de la tabla 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 numricos deben ser de tipos
similares. Por ejemplo, se puede combinar campos Auto Numrico y Long puesto
que son tipos similares, sin embargo, no se puede combinar campos de tipo Simple
y Doble. Adems las columnas no pueden ser de tipo Memo ni OLE.
* comp representa cualquier operador de comparacin ( =, <, >, <=, >=, o <> ) y
se utiliza para establecer la condicin de emparejamiento.
*Se pueden definir varias condiciones de emparejamiento unidas por los
operadores AND y OR poniendo cada condicin entre parntesis. Ejemplo:

21

SELECT
*
FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab)
AND (pedidos.producto = productos.idproducto);
El LEFT / RIGHT JOIN
El LEFT JOIN y RIGHT JOIN son otro tipo de composicin de tablas, tambin
denominada composicin externa. Son una extensin del INNER JOIN.
Las composiciones vistas hasta ahora (el producto cartesiano y el INNER JOIN)
son composiciones internas ya que todos los valores de las filas del resultado son
valores que estn en las tablas que se combinan.
La sintaxis del LEFT JOIN es la siguiente:

Esta operacin consiste en aadir 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.
Ejemplo:
SELECT *
FROM empleados
oficinas.oficina;

LEFT

JOIN

oficinas

ON

empleados.oficina

Con el ejemplo anterior obtenemos una lista de los empleados con los datos de su
oficina, y el empleado 110 que no tiene oficina aparece con sus datos normales y
los datos de su oficina a nulos.
La sintaxis del RIGHT JOIN es la siguiente:

Esta operacin consiste en aadir 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.

22

Ejemplo:
SELECT
FROM empleados
oficinas.oficina;

RIGHT

JOIN

oficinas

ON

empleados.oficina

*
=

Con el ejemplo anterior obtenemos una lista de los empleados con los datos de su
oficina, y adems aparece una fila por cada oficina que no est asignada a ningn
empleado con los datos del empleado a nulos.
Una operacin LEFT JOIN o RIGHT JOIN se puede anidar dentro de una
operacin INNER JOIN, pero una operacin INNER JOIN no se
puede anidar dentro de LEFT JOIN o RIGHT JOIN.

23

6.9 Vistas
En el modelo de datos relacional la forma de guardar la informacin no es la mejor
para ver los datos
Una vista es una consulta, que refleja el contenido de una o ms tablas, desde la
que se puede acceder a los datos como si fuera una tabla.
Dos son las principales razones por las que podemos crear vistas.
Seguridad, nos pueden interesar que los usuarios tengan acceso a una parte de la
informacin que hay en una tabla, pero no a toda la tabla.
Comodidad, como hemos dicho el modelo relacional no es el ms comodo para
visualizar los datos, lo que nos puede llevar a tener que escribir complejas
sentencias SQL, tener una vista nos simplifica esta tarea.
Las vistas no tienen una copia fsica de los datos, son consultas a los datos que hay
en las tablas, por lo que si actualizamos los datos de una vista, estamos
actualizando realmente la tabla, y si actualizamos la tabla estos cambios sern
visibles desde la vista.
Nota: No siempre podremos actualizar los datos de una vista, depender de la
complejidad de la misma (depender de si el conjunto de resultados tiene acceso a
la clave principal de la tabla o no), y del gestor de base de datos. No todos los
gestores de bases de datos permiten actualizar vistas, ORACLE, por ejemplo, no lo
permite, mientras que SQL Server s.

Creacin de vistas.

Para crear una vista debemos utilizar la sentencia CREATE VIEW,


debiendo proporcionar un nombre a la vista y una sentencia SQLSELECT vlida.

CREATE VIEW <nombre_vista>


AS
(<sentencia_select>);

24

Ejemplo: Crear una vista sobre nuestra tabla alquileres, en la que se nos muestre el
nombre y apellidos del cliente en lugar de su cdigo.

CREATE VIEW vAlquileres


AS
(
SELECT nombre,
apellidos,
matricula
FROM tAlquileres,
tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo )
)

Si queremos, modificar la definicin de nuestra vista podemos utilizar la


sentencia ALTER VIEW, de forma muy parecida a como lo hacamos con las tablas.
En este caso queremos aadir los campos fx_alquiler y fx_devolucion a la vista.

ALTER VIEW vAlquileres


AS
(
SELECT nombre,
apellidos,
matricula,
fx_alquiler,
fx_devolucion
FROM tAlquileres,
tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo )
)

Por ltimo podemos eliminar la vista a travs de la sentencia DROP VIEW. Para
eliminar la vista que hemos creado anteriormente se utilizara:

DROP VIEW vAlquileres;

Una vista se consulta como si fuese una tabla.


Sinnimos
Un sinnimo es un nombre alternativo que identifica una tabla en la base de datos.
Con un sinnimo se pretende normalmente simplificar el nombre original de la tabla,
aunque tambin se suelen utilizar para evitar tener que escribir el nombre del
propietario de la tabla.
25

No todas las bases de datos soportan los sinnimos.


Para crear un sinnimo hay que utilizar la sentencia CREATE
SYNONYM especificando el nombre que deseamos utilizar como sinnimo y la tabla
para la que estamos creando el sinnimo.

CREATE SYNONYM <nombre_sinonimo>


FOR <nombre_tabla>;

Ejemplo: El siguiente ejemplo crea el sinnimo Coches para la tabla tCoches.

CREATE SYNONYM Coches


FOR tCoches;

Para eliminar el sinnimo creado debemos emplear la sentencia DROP SYNONYM.

DROP SYNONYM Coches;

26

6.10 Modificacin de las bases de datos


SQL posee comandos destinados tambin para modificar la base de datos, entre
estos se tienen operaciones de borrado, insercin y actualizacin.

BORRADO
La operacin de borrado se expresa de igual manera que una consulta. Se pueden
borrar slo tuplas completas, es decir, no se pueden borrar valores de atributos
concretos.
La expresin SQL relacionada con el borrado es:
delete from r where p
Donde r es una relacin y p es una condicin lgica que determina las tuplas a ser
eliminadas de r, si la condicin p es omitida, se eliminan todas la tuplas de r.
Hay que sealar que una orden delete opera slo sobre una relacin. Si se desea
borrar tuplas de varias relaciones, se deber utilizar una orden delete por cada
relacin. El predicado de la clusula where puede ser tan complicado como el where
de cualquier clusula select, o tan simple como una clusula where vaca.
Ejemplo: Borrar todas las tuplas de la relacin Prstamo (Los sistemas bien
diseados requerirn una confirmacin del usuario antes de ejecutar una consulta
como esta).
Solucin: delete from Prstamo
Ejemplo: Borrar todas las cuentas de la Sucursal Subtiava
Solucin: delete from Cuenta where nombre_sucursal=Subtiava
Ejemplo: Borrar todas las cuentas de la Sucursal Subtiava
Solucin: delete from Cuenta where nombre_sucursal=Subtiava
Ejemplo: Borrar todos los prstamos en los que el monto del prstamo est entre
C$ 5,000 y
C$ 10,000 crdobas.
Solucin: delete from Prestamo where importe between 5000 and 10000
Ejemplo: Borrar las cuentas de todas las sucursales de Granada

27

En este caso la solucin se genera mediante una sub consulta que muestra los
nombres de las sucursales ubicadas en Masaya. De modo que la expresin SQL
requerida es:

Solucin:
delete
from Cuenta where nombre_sucursal
nombre_sucursal from Sucursal where ciudad_sucursal = Granada)

in (select

En este borrado se se selecciona primero todas las sucursales con sede en Granada
y a continuacin borra todas las tuplas Cuenta pertenecientes a esas sucursales.

Uso de funciones de agregacin en una sub consulta de borrado.


Ejemplo: Borrar todas las cuentas cuyos saldos sean inferiores a la media del banco
Solucin: delete from Cuenta where saldo < << <(select avg (saldo) from Cuenta)
La orden delete comprueba primero que cada tupla de la relacin Cuenta para
comprobar si la cuenta tiene un saldo inferior a la media del banco. A continuacin
se borran todas las tuplas que no cumplan la condicin anterior, es decir, las que
representan una cuenta con un saldo menor que la media. Es importante realizar
todas las comprobaciones antes de llevar a cabo ningn borrado.

INSERCIN
El comando SQL encargado de realizar la insercin de una o ms tuplas en una
relacin es el comando insert, este tiene dos variantes:
Una para insertar una sola tupla indicando los valores de los atributos de forma
explcita, la forma general en este caso es insert into r values (tupla a insertar) en el
caso de que se respete el orden de los atributos en la relacin r,
En caso de que la tupla a insertar no respete ese orden, el nombre de los atributos
se debe listar tambin en el comando insert.
Para insertar datos en una relacin, o bien se especifica la tupla que se desea
insertar o se formula una consulta cuyo resultado sea el conjunto de tuplas que se
desean insertar.
Obviamente, los valores de los atributos de las tuplas que se inserten deben
pertenecer al dominio de los atributos. De igual manera, las tuplas insertadas
debern ser de la aridad correcta.
28

La instruccin insert ms sencilla corresponde a la de insercin de una tupla.


Ejemplo: Insertar en la base los datos asociados a la cuenta C?0045 en la Sucursal
Lon y que tiene como saldo C$ 6000.00
Solucin Caso 1: insert into Cuenta values ( C?0045, Len, 6000)
En este ejemplo los valores se especifican en el mismo orden en que los atributos
se listan en el esquema de la relacin Cuenta. Para beneficio de los usuarios que
no pueden recordar el orden de los atributos se especifican en la clusula insert.
Solucin Caso 2: insert into Cuenta (nombre_sucursal, numero_cuenta, saldo)
values
(Len,C?0045,6000)
Solucin: insert into Cuenta (numero_cuenta, nombre_sucursal, saldo) values
(C?
0045,Len,6000)
El efecto es similar al ejemplo anterior con la diferencia de que se han listado
explcitamente, los nombres de los atributos, esto debido a que en la clusula
values no se ha guardado el orden que estos tienen en la estructura de la tabla.
Generalmente se desea insertar las tuplas que resultan de una consulta.
Ejemplo: Si a todos los clientes que tienen un prstamo en la sucursal Subtiava se
les quisiera regalar, como gratificacin una cuenta de ahorro con C$ 5000.00 por
cada cuenta de prstamo que posee.
Solucin: insert into Cuenta select nombre_sucursal,numero_prestamo, 1000
from
Prestamo where nombre_sucursal = Subtiava
La instruccin select se evala primero, produciendo un conjunto de tuplas que a
continuacin se insertan en la relacin Cuenta. Cada tupla tiene un
nombre_sucursal (Subtiava), un numero_prestamo (que sirve como nmero para la
nueva cuenta) y un saldo inicial de la cuenta (C$ 1000).
Es necesario aadir tuplas a la relacin Impositor, a travs de la siguiente consulta:
Solucin: insert into Impositor select nombre_cliente, numero_prestamo from
Prestatario,
Prestamo
where
Prestatario.numero_prestamo
Prstamo.numero_prestamo and nombre_sucursal = Subtiava

=
29

Esta consulta inserta en la relacin Impositor una tupla (nombre_cliente,


numero_prestamo) por cada nombre_cliente que posea un prstamo en la sucursal
Subtiva, con nmero de prstamo numero_prestamo.

30

Conclusiones Personales

Bravo Garca Emmanuel:


Es fundamental que como desarrollador de bases de datos, conozca el
funcionamiento interno de SQL Server para que las consultas que usted codifica
sean eficientes en SQL Server. La figura de Desarrollador de Bases de Datos (DBD)
es una figura en extincin en estos das en los que se tiende a entender la base de
datos como un simple repositorio de informacin.

De Luna Martn Eutiquio:


Podemos concluir el proceso de normalizacin cuando analizando nuestras tablas
comprobamos que somos capaces de realizar una actualizacin sin tener que
cambiar ms de un dato para cada actualizacin.
Mencionar que el proceso de normalizacin ha ido evolucionando, los
investigadores de bases de datos han incluido dos formas normales a las tres que
hemos explicado, la forma normal D y E.
Estas dos ltimas formas pertenecen a la normalizacin avanzada, y no son
aplicables a la mayora de las bases de datos, ya que es muy difcil alcanzar un
nivel de complejidad tan alto como para tener que aplicarlas. Incluso se aconseja a
los diseadores que revisen sus estructuras cuando es necesario aplicar las
formas normales D y E, ya que posiblemente si son necesarias es porque el
desarrollador a cometido errores en su diseo.

Puebla Valencia Jess:


La importancia principal de las multibase de datos y ms concretamente de las
bases de datos federadas fuertemente acopladas radica principalmente en su biprocesamiento. Es decir, en su capacidad de atender consultas globales, al mismo
tiempo que permite que las bases de datos componentes sigan atendiendo a sus
aplicaciones locales.

Ramrez Gervacio Daniel:


SQL nos permite ingresar comandos o sentencias de tal manera que
podemos administrar o crear una base de datos esta variedad de comandos nos
permite generar informacin datos desde la creacin , modificacin o
mantenimiento a tablas las cuales tambin nos permiten recuperar datos o
31

importarlas de varias maneras es difcil imaginar hoy en da la concentracin u


informacin sin base de datos las pequeas o grandes industrias tiene como
base de su sistema informacin la construccin de bases de datos con las que
podemos tener una gran versatilidad.

Velasco Velzquez Germn:


Es especialmente interesante que el lenguaje SQL sea declarativo y, por tanto resulta muy natural
su manejo y aprendizaje porque no hay que especificar cada accin que se lleva a cabo en una
base de datos. En este trabajo se muestran las sentencias ms utilizadas del lenguaje estndar
ANSI/ISO SQL92 de definicin, manipulacin y control de bases de datos relacionales. SQL es un
lenguaje muy potente, las sentencias y opciones utilizadas seguramente pueden ser muy
numerosas, por lo menos ms que las de los sistemas relacionales.
Conociendo el SQL92 podemos trabajar con cualquier sistema relacional comercial; slo
tendremos que dedicar unas cuantas horas a ver qu variaciones se dan con respecto al estndar.
Creo que es importante recopilar la creacin de una base de datos con SQL:
1. En primer lugar, tendremos que dar nombre a la base de datos, con la sentencia CREATE
DATABASE, si la hay, o con CREATE SCHEMA.
2. A continuacin definiremos las tablas, los dominios, las aserciones y las vistas que
formarn nuestra base de datos.
3. Una vez definidas las tablas, que estarn completamente vacas, se debern llenar con
la sentencia INSERT INTO.
Cuando la base de datos tenga un conjunto de filas, la podremos manipular, ya sea
actualizando filas o bien haciendo consultas. Adems, podemos usar todas las sentencias
de control que se vieron.

32