Documente Academic
Documente Profesional
Documente Cultură
Instructor
Aclarar el funcionamiento en todos los aspectos de las Bases de datos relacionales y la Gestin de las mismas
Comprender los lenguajes que conforman las Bases de Datos (DDL, DML, DCL)
Objetivos Especficos: Especificando un poco ms los objetivos de este material, podemos declarar que el alumno
conseguir entender el funcionamiento y estructura para saber como aprovechar todas las capacidades de este tipo de
bases de datos en la creacin de programas informticos de cualquier nivel aprender la utilizacin de las bases de datos
de SQL SERVER de cara a la programacin.
Estudiar el funcionamiento de las mismas, para una mejor base de cara a la utilizacin de sentencias SQL y de bases de
datos de mayor complejidad.
Formacin especfica muy demandada y valorada en el mercado de trabajo para los profesionales de la informtica.
Asentar los pilares de la programacin no slo habitual, sino tambin para intranets, aprovechando las funcionalidades
de las bases de datos con respecto a las tecnologas de programacin para la web.
Metodologa: El material se desarrollar completamente presencial, dotados de su material de apoyo, el cual tendr
como soporte su material prctico, para poder darle seguimiento a los temas expuestos en el aula, prcticas de
autoevaluacin y completa ayuda y asesoramiento por medio de Tutor.
2
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
ndice de Contenido
Unidad 1. Introduccin
Qu es una Base de Datos?
Qu es un Sistema de Gestin de Bases de Datos?
Gestor de Base de Datos
Diccionario de la Bases de Datos?
Lenguajes
Administrador de la Base de Datos
Usuarios de la Base de Datos
Qu es el SQL?
Caractersticas del lenguaje
Qu podemos hacer con SQL?
Datos Variables
Tablas de los ejemplos y ejercicios
5
5
5
5
5
6
6
6
6
7
8
8
11
15
15
15
16
17
17
18
19
19
20
20
21
21
22
22
23
25
27
27
28
31
34
34
35
36
37
39
40
43
45
47
48
49
50
51
53
3
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
54
54
54
54
56
56
59
61
63
64
83
83
83
84
86
87
89
90
91
93
95
96
96
97
97
97
103
Unidad 8. Vistas
Creacin y utilizacin de Vistas
Eliminacin de Vistas
104
104
107
108
113
114
4
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Unidad 1. Introduccin
Qu es una Base de Datos?
Una base de datos est constituida por un conjunto de informacin relevante para una empresa o
entidad, junto con los procedimientos para almacenar, controlar, gestionar y administrar esa
informacin.
Adems, la informacin contenida en una base de datos cumple una serie de requisitos o
caractersticas:
Una base de datos estar organizada de forma que se cumplan los requisitos para que la informacin
se almacene con las mnimas redundancias, con capacidad de acceso para diferentes usuarios pero
con un control de seguridad y privacidad. Debe tener mecanismos que permitan recuperar la
informacin en caso de prdida y la capacidad de adaptarse fcilmente a nuevas necesidades de
almacenamiento.
5
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
El sistema gestor ha de proporcionar lenguajes que permitan definir la estructura de los datos,
almacenar la informacin y recuperarla. Podrn utilizar estos lenguajes los usuarios y lo
administradores de la base de datos. Estos lenguajes son:
Lenguaje de definicin de datos (DDL)
Para definir la estructura con la que almacenaremos los datos.
Lenguaje de manipulacin de datos (DML)
Para aadir, modificar o eliminar datos, as como recuperar la informacin
almacenada.
Lenguaje de control de datos (DCL)
Para controlar el acceso a la informacin y la seguridad de los datos.
Permiten limitar y controlar los accesos a la informacin almacenada. De
esta tarea se ocupa el administrador de la base de datos.
ADMINISTRADOR DE LA BASE DE DATOS
Es una persona o grupo de personas responsables de la seguridad y la eficiencia de todos
los componentes del sistema de bases de datos. Deben conocer el sistema tanto a nivel
fsico como lgico y a todos los usuarios que interaccionan con l.
USUARIOS DE LA BASE DE DATOS
Tradicionalmente considerados como un componente ms de los sistemas gestores de bases de
datos, debido a que estos fueron los primeros en considerarlos una parte importante para el correcto
funcionamiento del sistema. Pueden ser usuarios terminales (usuarios no especializados que
interaccionan con la base de datos), usuarios tcnicos (usuarios que desarrollan programas de
aplicacin para ser utilizados por otros) y usuarios especializados (usuarios que utilizan el sistema
gestor de la base de datos como una herramienta de desarrollo dentro de otros sistemas ms
complejos).
Qu es el SQL?
El SQL (Structured query language), lenguaje de consulta estructurado, es un lenguaje
surgido de un proyecto de investigacin de IBM para el acceso a bases de datos relacionales.
Actualmente se ha convertido en un estndar de lenguaje de bases de datos, y la mayora de
los sistemas de bases de datos lo soportan, desde sistemas para ordenadores personales,
hasta grandes ordenadores.
Por supuesto, a partir del estndar cada sistema ha desarrollado su propio SQL que puede
variar de un sistema a otro, pero con cambios que no suponen ninguna complicacin para
alguien que conozca un SQL concreto, como el que vamos a ver aqu correspondiente al SQL
SERVER.
Como su nombre indica, el SQL nos permite realizar consultas a la base de datos. Pero el
nombre se queda corto ya que SQL adems realiza funciones de definicin, control y gestin
de la base de datos. Las sentencias SQL se clasifican segn su finalidad dando origen a tres
lenguajes o mejor dicho sublenguajes:
DDL (Data Definition Language), lenguaje de definicin 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 ms varia de un sistema a otro)
DCL (Data Control Language), lenguaje de control de datos, contiene elementos tiles
para trabajar en un entorno multiusuario, en el que es importante la proteccin de los
datos, la seguridad de las tablas y el establecimiento de restricciones en el acceso, as
como elementos para coordinar la comparticin de datos por parte de usuarios
concurrentes, asegurando que no interfieren unos con otros.
6
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
7
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Las palabras que aparecen en maysculas son palabras reservadas se tienen que poner tal cual
y no se pueden utilizar para otro fin, por ejemplo, en el diagrama de la figura tenemos las
palabras reservadas SELECT, ALL, DISTINCT, FROM, WHERE.
Las palabras en minsculas son variables que el usuario deber sustituir por un dato concreto.
En el diagrama tenemos nbcolumna, expresion-tabla y condicion-de-busqueda.
Una sentencia vlida se construye siguiendo la lnea a travs del diagrama hasta el punto que
marca el final. Las lneas se siguen de izquierda a derecha y de arriba abajo. Cuando se
quiere alterar el orden normal se indica con una flecha.
Cmo se interpretara el diagrama sintctico de la figura?
Hay que empezar por la palabra SELECT, despus puedes poner ALL o bien DISTINCT o
nada, a continuacin un nombre de columna, o varios separados por comas, a continuacin la
palabra FROM y una expresin-tabla, y por ltimo de forma opcional puedes incluir la clusula
WHERE con una condicin-de-bsqueda.
Por ejemplo:
SELECT ALL col1,col2,col3 FROM mitabla
SELECT col1,col2,col3 FROM mitabla
SELECT DISTINCT col1 FROM mitabla
SELECT col1,col2 FROM mitabla WHERE col2 = 0
Todas estas sentencias se podran escribir y no daran lugar a errores sintcticos
Cuando una palabra opcional est subrayada, esto indica que ese es el valor por defecto (el
valor que se asume si no se pone nada). En el ejemplo anterior las dos primeras sentencias son
equivalentes (en el diagrama ALL aparece subrayada).
Datos variables
Las columnas de la base de datos almacenan valores que tendrn diferentes valores en cada fila.
Estos datos se definen indicando su nombre (NombreColumna) y el tipo de datos que almacenarn.
La forma de almacenarlos no es la misma para todos, por lo tanto una parte importante de la
definicin de un dato es la especificacin de su tipo. Al indicar el tipo de datos se suele indicar
tambin el tamao.
8
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
La cantidad de tipos de datos posibles es muy extensa, quedando la enumeracin completa fuera de
los objetivos de este curso. A continuacin se indican algunos de los tipos de datos ms utilizados
suficientes para este curso (para mayor detalle consultar el manual).
. DENY
GRANT
. REVOKE Eliminar todos los permisos
-
Elementos de sintaxis:
Directivas de procesos por lotes
-
Comentarios en SQL:
-
Tablas en SQL:
9
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
SP_HELP EMPLEADOS
10
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
11
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
SP_HELP DEPARTAMENTOS
SP_HELP PRODUCTOS
12
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
SP_HELP CLIENTES
13
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
SP_HELP PEDIDOS
14
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
15
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Una especificacin de tabla puede ser el nombre de una consulta guardada (las que aparecen en
la ventana de base de datos), o el nombre de una tabla que a su vez puede tener el siguiente
formato:
En una SELECT podemos utilizar tablas que no estn definidas en la base de datos
(siempre que tengamos los permisos adecuados claro), si la tabla no est en la base
de datos activa, debemos indicar en qu base de datos se encuentra con la clusula
IN.
Seleccin de columnas
Utilizacin del *
Se utiliza el asterisco * en la lista de seleccin para indicar 'todas las columnas de la tabla'.
Tiene dos ventajas:
Evitar nombrar las columnas una a una (es ms corto).
Si aadimos una columna nueva en la tabla, esta nueva columna saldr sin tener que modificar
la consulta.
Se puede combinar el * con el nombre de una tabla (ej. oficinas.*), pero esto se utiliza ms
cuando el origen de la consulta son dos tablas.
SELECT * FROM departamentos
o bien
SELECT dnombre.* FROM departamentos --Lista todos los datos de los departamentos
16
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Alias de columna.
Cuando se visualiza el resultado de la consulta, normalmente las columnas toman el nombre que
tiene la columna en la tabla, si queremos cambiar ese nombre lo podemos hacer definiendo un
alias de columna mediante la clusula AS ser el nombre que aparecer como ttulo de la
columna.
Ejemplo:
SELECT apellido as nombre, oficio as cargo, fecha_alta [fecha de entrada]
FROM empleados
Columnas calculadas.
Adems de las columnas que provienen directamente de la tabla origen, una consulta SQL
puede incluir columnas calculadas cuyos valores se calculan a partir de los valores de los datos
almacenados.
Para solicitar una columna calculada, se especifica en la lista de seleccin una expresin en vez
de un nombre de columna. La expresin puede contener sumas, restas, multiplicaciones y
divisiones, concatenacin +, parntesis y tambin funciones predefinidas).
Ejemplos:
17
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Para ordenar las filas del resultado de la consulta, tenemos la clusula ORDER BY.
Con esta clusula se altera el orden de visualizacin de las filas de la tabla pero en ningn
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 nmero de orden que ocupa en la lista de seleccin (Ncolumna).
Ejemplo:
SELECT apellido, oficio, salario
FROM empleados
ORDER BY oficio
es equivalente a
SELECT apellido, oficio, salario
FROM empleados
ORDER BY 2
Por defecto el orden ser ascendente (ASC) (de menor a mayor si el campo es numrico, por
orden alfabtico si el campo es de tipo texto, de anterior a posterior si el campo es de tipo
fecha/hora.
SELECT apellido, oficio, salario
FROM empleados
ORDER BY apellido -- Obtiene un listado alfabtico de los empleados
Si queremos podemos alterar ese orden utilizando la clusula DESC (Descendente), en este
caso el orden ser el inverso al ASC.
Ejemplos:
SELECT apellido, oficio, salario
FROM empleados
ORDER BY oficio desc
es equivalente a
SELECT apellido, oficio, salario
FROM empleados
ORDER BY 2 desc
Tambin podemos ordenar por varias columnas, en este caso se indican las columnas
separadas por comas.
Se ordenan las filas por la primera columna de ordenacin, para un mismo valor de la primera
columna, se ordenan por la segunda columna, y as sucesivamente.
18
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
La clusula DESC o ASC se puede indicar para cada columna y as utilizar una ordenacin
distinta para cada columna. Por ejemplo ascendente por la primera columna y dentro de la
primera columna, descendente por la segunda columna.
Ejemplos:
SELECT apellido, oficio, salario
FROM empleados
ORDER BY oficio,apellido
es equivalente a
SELECT apellido, oficio, salario
FROM empleados
ORDER BY 1,2 desc
Tambin podemos utilizar
SELECT apellido, oficio, salario
FROM empleados
ORDER BY 1,apellido des
Seleccin de filas
A continuacin veremos las clusulas que nos permiten indicar qu filas queremos visualizar.
19
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
En este caso el valor 7698 aparecer una sola vez ya que le decimos que liste los distintos
valores de directores
La clusula TOP
La clusula TOP permite sacar las n primeras filas de la tabla origen. No elige entre valores
iguales, si pido los 25 primeros valores pero el que hace 26 es el mismo valor que el 25,
entonces devolver 26 registros en vez de 25 (o los que sea). Siempre se guia por la columna
de ordenacin, la que aparece en la clusula ORDER BY o en su defecto la clave principal de
la tabla.
Por ejemplo queremos saber los dos empleados ms antiguos de la empresa.
SELECT TOP 2 emp_no, apellido fecha_alta
FROM empleados
Order by fecha_alta
La clusula WHERE
La clusula WHERE selecciona nicamente las filas que cumplan la condicin de seleccin
especificada.
En la consulta slo aparecern las filas para las cuales la condicin es verdadera (TRUE), los
valores nulos (NULL) no se incluyen por lo tanto en las filas del resultado. La condicin de
seleccin puede ser cualquier condicin vlida o combinacin de condiciones utilizando
los operadores NOT (no) AND (y) y OR ().
Para empezar veamos un ejemplo sencillo:
SELECT apellido
FROM empleados
WHERE dep_no = 10
SELECT nombre
FROM empleados
WHERE dep_no = 10 AND salario > 2500
20
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
test de comparacin
test de rango
test de pertenencia a un conjunto
test de valor nulo
test de correspondencia con patrn
= igual que
<>distinto de
< menor que
<= menor o igual
> mayor que
>= mayor o igual
21
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ejemplo:
SELECT emp_no, dep_no,apellido, oficio,comision
FROM empleados
Where comision is null
SELECT emp_no, dep_no,apellido, oficio,comision
FROM empleados
Where comision is not null
22
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
COMODINES
% Cualquier nmero de caracteres
_ Para un carcter individual
[ ] Para un conjunto de caracteres que est dentro del corchete
[ ^ ] Que el carcter individual que no est dentro del corchete
EJEMPLO: LIKE %een Muestra todos los caracteres que acaben con een
EJEMPLO: LIKE %een% Muestra todos los caracteres que contengan een en
ese orden
EJEMPLO: LIKE _en Muestra todos los caracteres que contenga tres letras y
acaben en en
EJEMPLO: LIKE [CK% ] Muestra todos los caracteres que empiecen por C o K
EJEMPLO: LIKE [S-V]ing Nombre de 4 letras cuya primera letra estuviera
entre S o V y acabe en ing
EJEMPLO: LIKE M[^c]% Todos los que empiecen por M y segunda letra no
sea una c. No hay limite de caracteres.
5. Mostrar todos los empleados cuyo apellido comience entre las letras E y
F.
select * from empleados where apellido like '[E-F]%'
24
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
10. Mostrar todos los que empiecen por la A y cuya cuarta letra no est
comprendida entre A G
select * from empleados where apellido like 'A__[^a-g]%'
Utilizacin de alias
Usar alias para una tabla es opcional cuando su finalidad consiste en simplificar su nombre original, y
obligatorio en consultas cuya sintaxis lo requiera (ms adelante lo utilizaremos)
Usar alias para las columnas puede ser necesario porque los ttulos o cabeceras que muestra la
salida de una consulta para las columnas seleccionadas, se corresponden con los nombres de las
columnas de las tablas o las expresiones y esto no siempre es muy visual. Para mejorar su legibilidad
y esttica se utilizan los alias de columna. Tambin puede ser utilizado, en algunos casos, para
renombrar la columna y utilizar este nombre posteriormente
25
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
FUNCIONES PREDEFINIDAS
26
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Funciones predefinidas
Son funciones incorporadas por el gestor y son muy utilizadas en SQL y dan mucha potencia al
lenguaje. Estas funciones predefinidas devuelven un valor dependiendo del valor de un argumento
que se pasa en la llamada.
Cabe subrayar que las funciones no modifican los valores del argumento, indicado entre parntesis,
sino que devuelven un valor creado a partir de los argumentos que se le pasan en la llamada, y ese
valor puede ser utilizado en cualquier parte de una sentencia SQL.
Existen muchas funciones predefinidas para operar con todo tipo de datos. A continuacin se indican
las funciones predefinidas ms utilizadas.
Vamos a ver estas funciones agrupadas segn el tipo de datos con los que operan y/o el tipo de datos
que devuelven.
Nota: estas funciones pueden variar segn el sistema gestor que se utilice.
Funciones Matemticas
Funciones de cadena
Funciones de fecha
FUNCIONES MATEMATICAS
ABS
Es el valor Absoluto
Select ABS(-4) as 'VALOR ABSOLUTO'-->4
POWER
Devuelve el valor de la expresin indicada elevada a la potencia especificada.
Select POWER(3,2) as '3 ELEVADO A 2'-->9
ROUND
Devuelve una expresin numrica, redondeada a la longitud o precisin especificada.
Round(Numero, Redondeo del Nmero)
ROUND siempre devuelve un valor. Si length es un valor negativo y mayor que el
nmero de dgitos anteriores al separador decimal, ROUND devuelve 0.
Select ROUND(123.4567,2)-->123.4600
Select ROUND(123.4567,-2)-->100.0000
Select ROUND(123.4567,0)-->123.0000
Select ROUND(123.4567,-3)--->0
27
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
SQUARE
Devuelve el cuadrado de la expresin especificada.
Select SQUARE(4) as Cuadrado-->16.0
SQRT
Devuelve la raz cuadrada de la expresin especificada.
Select SQRT(4) as [RAIZ CUADRADA]-->2.0
FUNCIONES DE CADENA
ASCII
Devuelve el cdigo ASCII del carcter ms a la izquierda de una expresin de
caracteres.
Select ASCII('A')-->65
Select ASCII('a')-->97
Select ascii('aula')-->97
CHAR
Una funcin de cadena que convierte un cdigo ASCII int en un carcter.
select char(65)-->A
select char(97)-->a
CHARINDEX
Devuelve la posicin inicial de la expresin especificada en una cadena de caracteres.
CHARINDEX ( expression1 , expression2 [ , start_location ] )
Argumentos
expression1
Es una expresin que contiene la secuencia de caracteres que se desea buscar.
Expression1 es una expresin del tipo de cadenas cortas de caracteres.
Expression2
Es una expresin, normalmente una columna,
en la que se busca la cadena especificada.
Expression2 es de la categora del tipo de datos cadena de caracteres.
start_location
Es la posicin del carcter de expression2 en el que se empieza la bsqueda de expression1.
Si no se especifica start_location, es un nmero negativo o es cero,
la bsqueda empieza al principio de la cadena expression2.
28
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nmero de
caracteres especificado a partir de la izquierda
select left('murcielago',5)-->murci
RIGHT
Devuelve la parte de una cadena de caracteres que
comienza en el nmero de caracteres especificado
en integer_expression a partir de la derecha.
select right('hola que tal',5)-->e tal
LEN
Cuenta el nmero de caracteres que se incluyen en la cadena.
select len('murcielago')-->10
LOWER
Convierte a Minsculas la cadena especificada
select lower('MurcIELaGO') as [minusculas]-->murcielago
UPPER
Convierte a Maysculas la cadena especificada
select upper('murcielago') as [MAYUSCULAS]-->MURCIELAGO
RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha
respectivamente.
select Rtrim (' murcielago
') AS [SIN ESPACIOS]-->murcielago
select Ltrim (' murcielago
') AS [SIN ESPACIOS]-->murcielago
select ltrim(rtrim(' hola '))+'.'
REPLACE
Reemplaza por una tercera expresin todas las apariciones
de la segunda expresin de cadena proporcionada en la primera expresin de cadena
29
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
SPACE
Coloca el nmero de espacios que se le indiquen para entre una cadena
de caracteres.
select 'hola'+space(5)+'que tal'-->hola
que tal
SUBSTRING
Devuelve parte de una expresin de caracteres, binaria, de texto o de imagen.
Sintaxis:
SUBSTRING (Expresin , Comienzo , Duracin )
Argumentos
expression
Es una cadena de caracteres, cadena binaria, texto, imagen,
columna o expresin que incluye una columna.
No deben usarse expresiones que incluyan funciones de agregado.
start
Es un entero que especifica el punto en que comienza la subcadena.
length
Es un entero que especifica la longitud de la subcadena
(el nmero de caracteres o bytes que se devuelven).
select substring('murcielago',3,5)-->rciel
select substring('murcielago',3,len('murcielago'))-->rciel
REVERSE
Devuelve invertida una expresin de carcter.
select reverse('hola')
REPLICATE
Repite una expresin de caracteres un nmero especificado de veces.
select replicate('murcielago',5)
replicate, replicate, replicate, replicate, replicate
STUFF
Elimina el nmero de caracteres especificado e inserta
otro conjunto de caracteres en un punto de inicio indicado.
Select STUFF('Murcielago', 2, 3, 'ijklmn') Mijklmnielago
30
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
FUNCIONES DE FECHA
Parte de la fecha
Abreviaturas
Year
yy, yyyy
Quarter
qq, q
Month
mm, m
Dayofyear
dy, y
Day
dd, d
Week
wk, ww
Hour
Hh
Minute
mi, n
Second
ss, s
Millisecond
Ms
GetDate()
select getdate() Funcion que recupera la fecha actual del sistema.
Convert, Cast
Convierten explcitamente una expresin de un tipo de datos en otro. CAST y
CONVERT proporcionan funciones similares.
Convert(Tipodedatosdestino, Origen, Estilo)
o Tiposdedatosdestino: Siempre ha de ser tipo carcter
o Origen: Puede ser tipo fecha, numrico o moneda.
o Estilo: Opcional. Es un cdigo que indica el formato en el que
devuelve la cadena de caracteres.
Sintaxis:
Convert(TipoDato,Dato)
Cast (Dato as TipoDato)
Ejemplo:
declare @n int,@palabra nvarchar(10)
set @n = 1
set @palabra ='Nmero'
print convert(nvarchar(2),@n) + ' ' + @palabra
print cast(@n as nvarchar(2)) + ' ' + @palabra
31
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
while (@n<11)
begin
print convert(nvarchar(2),@n) + ' ' + @palabra
print cast(@n as nvarchar(2)) + ' ' + @palabra
set @n = @n + 1
end
DateName
Devuelve una cadena de caracteres que representa la parte de la fecha
especificada de la fecha especificada
Los calculos para las horas no son exactos cuando se trata de
SmallDateTime, por lo que devuelve 0.
select datename(month,fecha_alta) as 'Nombre mes' from empleados where
emp_no = 7867
diciembre
select datename(m,fecha_alta) as 'Nombre mes' from empleados where emp_no = 7867
diciembre
select datename(week,fecha_alta) as 'Numero Semana' from empleados where emp_no =
7867 51
select datename(week,fecha_alta) as 'Numero Semana' from empleados where emp_no =
7867 51
select datename( weekday,fecha_alta) as 'Dia Semana' from empleados where emp_no=7867
miercoles
select datename(dw,fecha_alta) as 'Dia Semana' from empleados where emp_no=7867
miercoles
Horas:
select datename(mi,fecha_alta) as 'Minutos' from empleados where emp_no = 7867
select datename( minute,getdate()) as 'minutos'
select datename( mi,getdate()) as 'minutos'
select datename( hh,fecha_alta) as 'hora' from empleados where emp_no = 7867
select datename( hour,getdate()) as 'hora'-->17
select datename( hh,getdate()) as 'hora'-->17
32
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
DatePart
Devuelve la parte de la fecha u hora indicada. Sintaxis:
Datepart(Valoradevolver, fecha)
select datepart(mm,fecha_alta) as 'Mes',apellido from emp-->11
select datepart(hh,getdate()) as 'Hora'-->17
select datepart(mi,getdate()) as 'Minutos'-->54
Nombres de Fechas
Day(fecha)
Devuelve un INT, equivale a datepart
select day(getdate()) as dia-->12
select datepart(dd,getdate())-->12
select month(getdate())-->7
select datepart(mm,getdate())-->7
select year(getdate())-->2002
select year(fecha_alt) from emp where emp_no = 7867
select datediff(yyyy,fecha_alt,getdate()) as Diferencia from emp where emp_no = 7867
DateAdd
DateAdd( datepart , number, date )
Aade un nmero a la fecha puesta
DatePart es el formato de lo que queremos aadir.
Number es el nmero que queremos incrementar la fecha expuesta.
select convert(datetime,'1-1-02')
select dateadd(dd,7,'1-1-02')
DateDiff
Devuelve la diferencia entre dos fechas en el intervalo que le indiquemos.
Sintaxis:
DateDiff (DatoqueDevuelve, Fecha1, Fecha2)
o Datoquedevuelve: Indicamos como queremos que haga la
comparacin y el tipo de dato que nos devolver, aos, das,
minutos etc.
select datediff(yyyy,fecha_alt,getdate()) as 'Diferencia' from emp where emp_no = 7867
33
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
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).
Por ejemplo tenemos una tabla de libros nuevos y una tabla de libros antiguos y queremos una
lista con todos los libros que tenemos. En este caso las dos tablas tienen las mismas
columnas, lo nico que vara son las filas, adems queremos obtener una lista de libros (las
columnas de una de las tablas) con las filas que estn tanto en libros nuevos como las que
estn en libros antiguos, en este caso utilizaremos este tipo de operacin.
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 union de ellas pero lo que interesa realmente es el
identificador del producto (idfab,idproducto), 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.
34
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
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.
Por ejemplo queremos listar los pedidos con el nombre del representante que ha hecho el
pedido, pues los datos del pedido los tenemos en la tabla de pedidos pero el nombre del
representante est en la tabla de empleados y adems queremos que aparezcan en la misma
lnea; en este caso necesitamos componer las dos tablas (Nota: en el ejemplo expuesto a
continuacin, hemos seleccionado las filas que nos interesan).
Inner Join: Indica que combine los campos con resultados comunes
Full Join: Indica que combine todos los campos aunque los resultados
sean diferentes.
35
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
El operador UNION
Como ya hemos visto en la pgina anterior, el operador UNION sirve para obtener a partir de
dos tablas con las mismas columnas, una nueva tabla con las filas de la primera y las filas
de la segunda.
La sintaxis es la siguiente
Consulta puede ser un nombre de tabla, un nombre de consulta (en estos dos casos el
nombre debe estar precedido de la palabra TABLE), o una sentencia SELECT completa (en
este caso no se puede poner TABLE). La sentencia SELECT puede ser cualquier sentencia
SELECT con la nica restriccin de que no puede contener la clusula ORDER BY.
Despus de la primera consulta viene la palabra UNION y a continuacin la segunda consulta.
La segunda consulta sigue las mismas reglas que la primera consulta.
Las dos consultas deben tener el mismo nmero de columnas pero las columnas
pueden llamarse de diferente forma y ser de tipos de datos distintos.
Por defecto la unin no incluye filas repetidas, si alguna fila est en las dos tablas,
slo aparece una vez en el resultado.
Si queremos que aparezcan todas las filas incluso las repeticiones de filas, incluimos la
palabra ALL (todo en ingls).
El empleo de ALL tienen una ventaja, la consulta se ejecutar ms rpidamente. Puede que
la diferencia no se note con tablas pequeas, pero si tenemos tablas con muchos registros
(filas) la diferencia puede ser notable.
Tambin podemos indicar que queremos el resultado ordenado por algn criterio, en
este caso se incluye la clusula ORDER BY que ya vimos en el tema anterior. La
clusula ORDER BY se escribe despus de la ltima consulta, al final de la sentencia;
para indicar las columnas de ordenacin podemos utilizar su nmero de orden o el
36
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
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:
Hay que tener en cuenta que el producto cartesiano obtiene todas las posibles
combinaciones de filas por lo tanto si tenemos dos tablas de 100 registros cada
una, el resultado tendr 100x100 filas, si el producto lo hacemos de estas dos tablas
con una tercera de 20 filas, el resultado tendr 200.000 filas (100x100x20) y
estamos hablando de tablas pequeas. Se ve claramente que el producto cartesiano
es una operacin costosa sobre todo si operamos con ms de dos tablas o con
tablas voluminosas.
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.
Por ejemplo: SELECT * FROM empleados, empleados emp
En este ejemplo obtenemos el producto cartesiano de la tabla de empleados con ella misma.
Todas las posibles combinaciones de empleados con empleados.
SELECT *
FROM empleados,departamentos
37
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Se observa que tenemos las dos filas de la primera consulta combinadas con las dos filas de la
segunda.
SELECT *
FROM empleados,departamentos
WHERE empleados_dep_no=departamentos.dep_no
Combinamos todos los empleados con todos los departamentos pero luego seleccionamos
los que cumplan que el cdigo del departamento de la tabla de departamentos sea igual al
cdigo del empleado de la tabla de empleados, por lo tanto nos quedamos con los
empleados combinados con los datos del departamento correspondiente.
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
38
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ejemplo:
SELECT *
FROM empleados e INNER JOIN departamentos d ON e.dep_no = d.dep_no
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.
Observar que dentro de la clusula ON los nombres de columna deben ser nombres
cualificados (llevan delante el nombre de la tabla y un punto).
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
R poniendo cada condicin entre parntesis. Ejemplo:
SELECT
*
FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab) AND
(pedidos.producto = productos.idproducto)
Se pueden combinar ms de dos tablas
En este caso hay que sustituir en la sintaxis una tabla por un INNER JOIN completo.
Por ejemplo:
SELECT *
FROM (pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie) INNER JOIN
empleados ON pedidos.rep = empleados.numemp
En vez de tabla1 hemos escrito un INNER JOIN completo, tambin podemos escribir:
SELECT *
FROM clientes INNER JOIN (pedidos INNER JOIN empleados ON pedidos.rep =
empleados.numemp) ON pedidos.clie = clientes.numclie
39
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
La descripcin de la sintaxis es la misma que la del INNER JOIN (ver pgina anterior), lo nico
que cambia es la palabra INNER por LEFT (izquierda en ingls).
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:
40
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
SELECT *
FROM empleados LEFT JOIN oficinas ON empleados.oficina = oficinas.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:
La sintaxis es la misma que la del INNER JOIN (ver pgina anterior), lo nico que cambia es la
palabra INNER por RIGHT (derecha en ingls).
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.
Ejemplo:
SELECT *
FROM empleados RIGHT JOIN oficinas ON empleados.oficina = oficinas.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. Los anidamientos de JOIN de distinta naturaleza no funcionan siempre, a veces
depende del orden en que colocamos las tablas, en estos casos lo mejor es probar y si no
permite el anudamiento, cambiar el orden de las tablas ( y por tanto de los JOINs) dentro de la
clusula FROM.
select apellido,oficio,dnombre
41
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
from emp
inner join dept
on emp.dept_no=dept.dept_no
order by dept.dnombre
select apellido,oficio,dnombre
from empleados
full join departamentos
on empleados.dep_no=
departamentos.dep_no
order by dep.dnombre
El empleado Serra tiene el nombre del departamento con el valor null porque no
tiene ningn departamento asociado y nosotros en la consulta le estamos
diciendo que seleccione los empleados aunque no tengan departamento
asociado, ponemos como principal la tabla de la izquierda (EMPLEADOS).
select apellido,oficio,dnombre
from empleados
right outer join departamentos
on empleados.dep_no=
departamentos.dep_no
order by departamentos.dnombre
43
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
select apellido,oficio,dnombre
from empleados
cross join departamentos
Realiza un producto cartesiano combinando
todos los empleados con todos los
departamentos.
44
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Podremos usar tantos inner join como queramos en nuestras consultas, pero
habr que tener cuidado a la hora de realizar las combinaciones para que no
salgan productos cartesianos en la consulta.
Esta consulta devuelve el nombre del empleado, el nombre de la sala donde
trabaja, el nombre del hospital y el nmero de camas.
45
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
46
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
47
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
48
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Las detallaremos en las pgina siguientes del tema, primero vamos a introducir otro concepto
relacionado con las consultas de agrupacion, las funciones de columna.
Funciones de columna
COUNT( { * | expresin } )
MAX(expresin)
MIN(expresin r)
STDDEV(expresin r)
SUM(expresin)
Suma de expresin
VARIANCE(expresin r)
AVG(expr)
Ejemplo:
49
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
4649.50
La clusula GROUP BY
Hasta ahora las consultas de resumen que hemos visto utilizan todas las filas de la tabla y
producen una nica fila resultado.
Se pueden obtener subtotales con la clusula GROUP BY. Una consulta con una clusula
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 agrupacin.
50
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ejemplo:
10 |
20 |
30 |
3266.833333 |
2375.000000 |
2137.530029 |
La clusula HAVING
51
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ejemplo:
2. Seleccionar los oficios que tengan dos o ms empleados, cuyo salario supere
los 1400 euros.
SELECT oficio, COUNT(*)
FROM empleados
WHERE salario > 1400
GROUP BY oficio
HAVING COUNT(*) >= 2;
52
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Una consulta se convierte en consulta de agrupacin en cuanto aparece GROUP BY, HAVING
o una funcin de columna.
En una consulta de agrupacin, la lista de seleccin y la clusula HAVING slo pueden contener:
o
o
valores constantes
funciones de columna
columnas de agrupacin (columnas que aparecen en la clusula GROUP BY)
53
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
CREATE TABLE
La sentencia CREATE TABLE sirve para crear la estructura de una tabla no para rellenarla
con datos, nos permite definir las columnas que tiene y ciertas restricciones que deben
cumplir esas columnas.
La sintaxis es la siguiente
TIPOS DE DATOS
-
Numricos:
Enteros int, tinyint, smallint, bigint
Decimales numeric, decimal, money, smallmoney
Coma Flotante float, real
Fechas:
datetime 0,333 s
smalldatetime 1 minuto
Caracteres:
Ancho fijo: char, nchar
Ancho Variable: varchar, nvarchar
Texto e Imagen:
Text
Ntext
54
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Rowversion
Binario:
Binary, varbinary Valores tipo byte
Bit Un solo bit (1 o ninguno)
Identificadores Unicos:
Representa un identificador global nico (GUID)
Si queremos que no se repita el dato en la base de datos, usamos
este identificador
IDENTITY
Uniqueidentifier
55
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
RESTRICCION
Una restriccin consiste en la definicin de una caracterstica adicional que tiene una
columna o una combinacin de columnas, suelen ser caractersticas como valores no nulos
(campo requerido), definicin de ndice sin duplicados, definicin de clave principal y definicin
de clave fornea (clave ajena o externa, campo que sirve para relacionar dos tablas entre s).
restriccin1: una restriccin de tipo 1 es una restriccin que aparece dentro de la definicin
de la columna despus del tipo de dato y afecta a una columna, la que se est definiendo.
restriccin2: una restriccin de tipo 2 es una restriccin que se define despus de definir
todas las columnas de la tabla y afecta a una columna o a una combinacin de columnas.
Para escribir una sentencia CREATE TABLE se empieza por indicar el nombre de la tabla que
queremos crear y a continuacin entre parntesis indicamos separadas por comas las
definiciones de cada columna de la tabla, la definicin de una columna consta de su nombre,
el tipo de dato que tiene y podemos aadir si queremos una serie de especificaciones que
debern cumplir los datos almacenados en la columna, despus de definir cada una de las
columnas que compone la tabla se pueden aadir una serie de restricciones, esas
restricciones son las mismas que se pueden indicar para cada columna pero ahora pueden
afectar a ms de una columna por eso tienen una sintaxis ligeramente diferente.
RESTRICCION TIPO 1
Una restriccin de tipo 1 se utiliza para indicar una caracterstica de la columna que estamos
definiendo, tiene la siguiente sintaxis:
La clusula NOT NULL indica que la columna no podr contener un valor nulo, es decir que
se deber rellenar obligatoriamente y con un valor vlido (equivale a la propiedad requerido S
de las propiedades del campo).
La clusula CONSTRAINT sirve para definir una restriccin que se podr eliminar cuando
queramos sin tener que borrar la columna. A cada restriccin 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 fornea.
La clusula PRIMARY KEY se utiliza para definir la columna como clave principal de la tabla.
Esto supone que la columna no puede contener valores nulos ni pueden haber valores
56
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
duplicados en esa columna, es decir que dos filas no pueden tener el mismo valor en esa
columna.
En una tabla no pueden haber varias claves principales, por lo que no podemos incluir la
clusula PRIMARY KEY ms de una vez, en caso contrario la sentencia da un error. No hay
que confundir la definicin de varias claves principales con la definicin de una clave principal
compuesta por varias columnas, esto ltimo s est permitido y se define con una restriccin de
tipo 2.
La clusula UNIQUE sirve para definir un ndice nico sobre la columna. Un ndice nico es
un ndice que no permite valores duplicados, es decir que si una columna tiene definida un
restriccin de UNIQUE no podrn haber dos filas con el mismo valor en esa columna. Se suele
emplear para que el sistema compruebe el mismo que no se aaden valores que ya existen,
por ejemplo si en una tabla de clientes queremos asegurarnos que dos clientes no puedan
tener el mismo D.N.I. y la tabla tiene como clave principal un cdigo de cliente, definiremos la
columna dni con la restriccin de UNIQUE.
La clusula NOT NULL indica que la columna no puede contener valores nulos, cuando
queremos indicar que una columna no puede contener el valor nulo lo podemos hacer sin
poner la clusula CONSTRAINT, o utilizando una clusula CONSTRAINT.
La ltima restriccin que podemos definir sobre una columna es la de clave fornea, una clave
fornea es una columna o conjunto de columnas que contiene un valor que hace
referencia a una fila de otra tabla, en una restriccin de tipo 1 se puede definir con la
clusula REFERENCES, despus de la palabra reservada indicamos a qu tabla hace
referencia, opcionalmente podemos indicar entre parntesis el nombre de la columna donde
tiene que buscar el valor de referencia, por defecto coge la clave principal de la tabla2, si el
valor que tiene que buscar se encuentra en otra columna de tabla2, entonces debemos inidicar
el nombre de esta columna entre parntesis, adems slo podemos utilizar una columna que
est definida con una restriccin de UNIQUE, si la columna2 que indicamos no est definida
sin duplicados, la sentencia CREATE nos dar un error.
Ejemplo:
CREATE TABLE tab1 (
col1 INTEGER CONSTRAINT pk PRIMARY KEY,
col2 CHAR(25) NOT NULL,
col3 CHAR(10) CONSTRAINT uni1 UNIQUE,
col4 INTEGER,
col5 INT CONSTRAINT fk5 REFERENCES tab2 );
Con este ejemplo estamos creando la tabla tab1 compuesta por: una columna llamada col1 de
tipo entero definida como clave principal, una columna col2 que puede almacenar hasta 25
caracteres alfanumricos y no puede contener valores nulos, una columna col3 de hasta 10
caracteres que no podr contener valores repetidos, una columna col4 de tipo entero sin
ninguna restriccin, y una columna col5 de tipo entero clave fornea que hace referencia a
valores de la clave principal de la tabla tab2.
57
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
RESTRICCION TIPO 2
58
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Una restriccin de tipo 2 se utiliza para definir una caracterstica que afecta a una
columna o a una combinacin de columnas de la tabla que estamos definiendo, se escribe
despus de haber definido todas las columnas de la tabla.
sintaxis:
La sintaxis de una restriccin de tipo 2 es muy similar a la CONSTRAINT de una restriccin 1
la diferencia es que ahora tenemos que indicar sobre qu columnas queremos definir la
restriccin. Se utilizan obligatoriamente las restricciones de tipo 2 cuando la restriccin afecta a
un grupo de columnas o cuando queremos definir ms de una CONSTRAINT para una
columna (slo se puede definir una restriccin1 en cada columna).
La clusula PRIMARY KEY se utiliza para definir la clave principal de la tabla. Despus de las
palabras PRIMARY KEY se indica entre parntesis el nombre de la columna o las columnas
que forman la clave principal. Las columnas que forman la clave principal no pueden contener
valores nulos ni pueden haber valores duplicados de la combinacin de columnas, por ejemplo
la tabla pedidos de nuestros ejemplos tiene una clave principal formada por idfab e idproducto,
pues no pueden haber dos filas con la misma combinacin de idfab con idproducto (aci,0001
por ejemplo) pero s pueden haber dos filas con el valor aci en la columna idfab si tienen
valores diferentes en la columna idproducto, y pueden haber dos filas con el mismo idproducto
pero distinto idfab.
En una tabla no pueden haber varias claves principales, por lo que no podemos indicar la
clusula PRIMARY KEY ms de una vez, en caso contrario la sentencia da un error.
La clusula UNIQUE sirve para definir un ndice nico sobre una columna o sobre una
combinacin de columnas. Un ndice nico es un ndice que no permite valores duplicados.
Si el ndice es sobre varias columnas no se puede repetir la misma combinacin de valores en
dos
o
ms
filas.
Se
suele
emplear
para
que
el
sistema
59
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
que forman la clave principal. Las columnas que forman la clave principal no pueden contener
valores nulos ni pueden haber valores duplicados de la combinacin de columnas, por ejemplo
la tabla pedidos de nuestros ejemplos tiene una clave principal formada por idfab e idproducto,
pues no pueden haber dos filas con la misma combinacin de idfab con idproducto (aci,0001
por ejemplo) pero s pueden haber dos filas con el valor aci en la columna idfab si tienen
valores diferentes en la columna idproducto, y pueden haber dos filas con el mismo idproducto
pero distinto idfab.
En una tabla no pueden haber varias claves principales, por lo que no podemos indicar la
clusula PRIMARY KEY ms de una vez, en caso contrario la sentencia da un error.
La clusula UNIQUE sirve para definir un ndice nico sobre una columna o sobre una
combinacin de columnas. Un ndice nico es un ndice que no permite valores duplicados.
Si el ndice es sobre varias columnas no se puede repetir la misma combinacin de valores en
dos o ms filas. Se suele emplear para que el sistema compruebe el mismo que no se aaden
valores que ya existen.
La clusula FOREIGN KEY sirve para definir una clave fornea sobre una columna o una
combinacin de columnas. Una clave fornea es una columna o conjunto de columnas que
contiene un valor que hace referencia a una fila de otra tabla, en una restriccin 1 se
puede definir con la clusula REFERENCES. Para definir una clave fornea en una restriccin
de tipo 2 debemos empezar por las palabras FOREIGN KEY despus indicamos entre
parntesis la/s columna/s que es clave fornea, a continuacin la palabra reservada
REFERENCES seguida del nombre de la tabla a la que hace referencia, opcionalmente
podemos indicar entre parntesis el nombre de la/s columna/s donde tiene que buscar el valor
de referencia, por defecto coge la clave principal de la tabla2, si el valor que tiene que buscar
se encuentra en otra/s columna/s de tabla2, entonces debemos escribir el nombre de esta/s
columna/s entre parntesis, adems slo podemos utilizar una columna (o combinacin de
columnas) que est definida con una restriccin de UNIQUE, de lo contrario la sentencia
CREATE TABLE nos dar un error.
Ejemplo:
CREATE TABLE tab1 (col1 INTEGER,
col2 CHAR(25) NOT NULL,
col3 CHAR(10),
col4 INTEGER,
col5 INT,
CONSTRAINT pk PRIMARY KEY (col1),
CONSTRAINT uni1 UNIQUE (col3),
CONSTRAINT fk5 FOREIGN KEY (col5) REFERENCES tab2 );
Con este ejemplo estamos creando la misma tabla tab1 del ejemplo de la pgina anterior pero
ahora hemos definido las restricciones utilizando restricciones de tipo 2.
60
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
28999) );
ALTER TABLE
La sentencia ALTER TABLE sirve para modificar la estructura de una tabla que ya existe.
Mediante esta instruccin podemos aadir columnas nuevas, eliminar columnas. Ten cuenta
que cuando eliminamos una columna se pierden todos los datos almacenados en ella.
Tambin nos permite crear nuevas restricciones o borrar algunas existentes. La sintaxis
puede parecer algo complicada pero sabiendo el significado de las palabras reservadas la
61
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
sentencia se aclara bastante; ADD (aade), ALTER (modifica), DROP (elimina), COLUMN
(columna), CONSTRAINT (restriccin).
La sintaxis es la siguiente:
La clusula ADD permite aadir una columna nueva a la tabla. Como en la creacin de tabla,
hay que definir la columna indicando su nombre, tipo de datos que puede contener, y si lo
queremos alguna restriccin de valor no nulo, clave primaria, clave fornea, e ndice nico,
62
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
restriccion1 es opcional e indica una restriccin de tipo 1 que afecta a la columna que
estamos definiendo.
Ejemplo:
ALTER TABLE tab1 ADD col3 int NOT NULL CONSTRAINT c1 UNIQUE
Con este ejemplo estamos aadiendo a la tabla tab1 una columna llamada col3 de tipo entero,
requerida (no admite nulos) y con un ndice sin duplicados llamado c1.
Cuando aadimos una columna lo mnimo que se puede poner sera:
ALTER TABLE tab1 ADD col3 int
En este caso la nueva columna admite valores nulos y duplicados.
Para aadir una nueva restriccin en la tabla podemos utilizar la clusula ADD restriccion2
(ADD CONSTRAINT...).
Ejemplo:
ALTER TABLE tab1 ADD CONSTRAINT c1 UNIQUE (col3)
Con este ejemplo estamos aadiendo a la tabla tab1 un ndice nico (sin duplicados) llamado
c1 sobre la columna col3.
Para borrar una columna basta con utilizar la clusula DROP COLUMN (COLUMN es
opcional) y el nombre de la columna que queremos borrar, se perdern todos los datos
almacenados en la columna
Ejemplo:
ALTER TABLE tab1 DROP COLUMN col3
Para borrar una restriccin basta con utilizar la clusula DROP CONSTRAINT y el nombre
de la restriccin que queremos borrar, en este caso slo se elimina la definicin de la
restriccin pero los datos almacenados no se modifican ni se pierden.
Ejemplo:
ALTER TABLE tab1 DROP CONSTRAINT c1
Con esta sentencia borramos el ndice c1 creado anteriormente pero los datos de la columna
col3 no se ven afectados por el cambio.
DROP TABLE
La sentencia DROP TABLE sirve para eliminar una tabla. No se puede eliminar una tabla si
est abierta, tampoco la podemos eliminar si el borrado infringe las reglas de integridad
referencial (si interviene como tabla padre en una relacin y tiene registros relacionados).
La sintaxis es la siguiente:
63
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ejemplo:
DROP TABLE tab1
Elimina de la base de datos la tabla tab1.
CREATE INDEX
SQL Server - Definicin de los ndices
Se hara definicin de ndices en SQL Server - agrupados y no agrupados
indexex, el optimizador de consultas, para crear un ndice, para crear un ndice
nico, para crear un ndice agrupado, para crear ndices de texto completo, para
cambiar propiedades ndice, Para cambiar el nombre de un ndice, para eliminar
un ndice
Cuando aumentan los volmenes de datos, las organizaciones se enfrentan a
problemas relacionados con la recuperacin de datos y publicacin. Sienten la
necesidad de un mecanismo que aumentar la velocidad de acceso a datos. Un
ndice, al igual que el ndice de un libro, permite recuperar la base de datos y
presentar los datos al usuario final con facilidad. Un ndice puede ser definido
como un mecanismo para proporcionar un acceso rpido a las filas de tabla y de
hacer cumplir las restricciones.
Un ndice puede ser creado mediante la seleccin de una o ms columnas de
una tabla que est siendo buscado. Es una especie de "en el disco 'estructura
asociada a la tabla o vista y contiene las claves que se construyen a partir de
una o varias de las columnas de la tabla o vista. Esta estructura conocida como
B-Tree ayuda a que el SQL Server busque la fila o filas asociadas a los valores
de clave. Los ndices se pueden crear en columnas calculadas o columnas xml
tambin.
Los ndices pueden ser agrupados en clster o no. Un ndice agrupado
almacena los datos de las filas de la tabla en funcin de sus valores
fundamentales. Cada tabla slo puede tener un ndice agrupado como los
valores clave en las filas de datos son nicos y el ndice se basa en la columna
de clave nica. Cuando una tabla tiene un ndice agrupado, se conoce como
una tabla de clster. ndices no agrupados tienen estructuras que son diferentes
de las filas de datos. Un ndice no agrupado valor de clave se usa para apuntar
a las filas de datos que contienen el valor clave. Este valor se conoce como
localizador de fila. La estructura del localizador de fila est determinado sobre la
base del tipo de almacenamiento de las pginas de datos. Si la pgina de datos
se almacena como un montn, un localizador de fila se convierte en un puntero
64
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
SQL Server permite a los usuarios agregar columnas sin clave al nivel hoja del
ndice no agrupado en el ndice existente que pasa los lmites de claves y para
ejecutar plenamente cubiertos consultas ndice.
Cuando las restricciones de clave principal y nica de una columna de la tabla
se definen un ndice automtica se crea.
El optimizador de consultas utiliza los ndices para reducir disco I / O las
operaciones y el uso de los recursos del sistema, mientras que en la consulta de
datos. Las consultas que contienen instrucciones SELECT, UPDATE o DELETE
requieren ndices para un rendimiento ptimo. Cuando se ejecuta una consulta,
cada mtodo disponible se evala para la recuperacin de datos y la ms
eficiente es seleccionado por el optimizador de consultas. La metodologa
utilizada puede ser recorridos de tablas o exploraciones de ndices. En la tabla I
lecturas / operaciones de E son muchos y muchos recursos en todas las filas de
una tabla se analizan para encontrar las relevantes. exploraciones de ndices se
utilizan para buscar en el ndice de columnas de clave para encontrar la
ubicacin de almacenamiento de filas que necesita la consulta y como el ndice
contiene muy pocas columnas, la consulta se ejecuta ms rpido.
SQL Server proporciona al usuario una nueva Transact-SQL DDL para la
modificacin de los ndices relacionales y XML. La instruccin CREATE INDEX
se ha mejorado para admitir la sintaxis XML ndice, la separacin y las columnas
incluidas. Un nmero de opciones sobre ndices se han aadido nuevas
incluyendo la opcin en lnea que permite el acceso de usuarios concurrentes a
los datos subyacentes durante las operaciones de ndice.
65
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
66
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
67
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
68
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
SQL Server permite a los usuarios crear ndices nicos en columnas nicas
como el nmero de identificacin del empleado o estudiante o lo que es la clave
nica por la que el componente de datos se identifican. Un conjunto de
columnas tambin se pueden utilizar para crear un ndice nico. El DBA puede
establecer la opcin de ignorar duplicados de las llaves en un ndice nico si es
necesario. El valor predeterminado es No.
69
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
70
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
71
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
72
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
73
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
74
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Tenga en cuenta que los ndices nicos no se pueden crear en una sola
columna si la columna contiene NULL en ms de una fila. Del mismo modo los
ndices no se pueden crear en varias columnas si la combinacin de las
columnas contiene valores NULL en algunas filas. Los valores NULL se tratan
como valores duplicados.
ndices agrupados se pueden crear en bases de datos SQL Server. En tales
casos, el orden lgico del ndice de valores de las claves ser el mismo que el
orden fsico de las filas de la tabla. Una tabla slo puede tener un ndice
agrupado.
Para crear un ndice agrupado
1. En Explorador de objetos, haga clic en la tabla para el que desea crear un
ndice
agrupado
y
haga
clic
en
Modificar.
2.
La
tabla
se
abre
en
el
Diseador
de
tablas.
3. En el men Diseador de tablas, haga clic en ndices / Claves.
4. En los ndices / Claves cuadro de dilogo, haga clic en Agregar.
5. Seleccione el nuevo ndice en la Seleccin de Primaria Clave nica / o en
la
lista
de
ndice.
75
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
1.
2.
3.
En Explorador de objetos, haga clic en la tabla para el que desea crear un ndice de texto
completo y haga clic en Modificar.
La tabla se abre en el Diseador de tablas.
En el men Diseador de tablas, haga clic en ndice Texto completo.
77
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
5.
A continuacin, cree un catlogo con el botn derecho sobre
almacenamiento Texto completo Catlogo> y la creacin de un nuevo catlogo y
de introducir la informacin requerida en el cuadro de dilogo que se abre.
78
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
79
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
81
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
82
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Esta sintaxis se utiliza para insertar una sola fila cuyos valores indicamos despus de la
palabra reservada VALUES. En castellano la sentencia se leera: INSERTA EN
destino...VALORES ....
83
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ejemplo:
INSERT INTO empleados VALUES (200, 'Juan Lpez', 30, NULL, 'rep ventas', 06/23/01,
NULL, 350000, 0)
Observar en el ejemplo que los valores de tipo texto se encierran entre comillas simples ' ' y
que la fecha de contrato se encierra entre comillas simples con el formato dia/mes/ao.
Dependiendo del Regional que tenga su computador. Como no tenemos valor para los
campos oficina y director (a este nuevo empleado todava no se le ha asignado director ni
oficina) utilizamos la palabra reservada NULL. Los valores numricos se escriben tal cual,
para separar la parte entera de la parte decimal hay que utilizar siempre el punto
independientemente de la configuracin que tengamos.
ERRORES QUE SE PUEDEN PRODUCIR CUANDO SE EJECUTA LA SENTENCIA
INSERT INTO
84
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Cada fila devuelta por la SELECT acta como la lista de valores que vimos con
la INSERT...VALUES por lo que tiene las mismas restricciones en cuanto a tipo
de dato, etc. La asignacin de valores se realiza por posicin por lo que la
SELECT debe devolver el mismo nmero de columnas que las de la tabla
destino y en el mismo orden, o el mismo nmero de columnas que indicamos en la
lista de columnas despus de destino.
Ejemplo: Supongamos que tenemos una tabla llamada repres con la misma estructura que la
tabla empleados, y queremos insertar en esa tabla los empleados que tengan como titulo rep
ventas
INSERT INTO repres SELECT * FROM empleados WHERE titulo = 'rep ventas'
Con la SELECT obtenemos las filas correspondientes a los empleados con ttulo rep ventas,y
las insertamos en la tabla repres. Como las tablas tienen la misma estructura no hace falta
poner la lista de columnas y podemos emplear * en la lista de seleccin de la SELECT.
Ejemplo: Supongamos ahora que la tabla repres tuviese las siguientes columnas numemp,
oficinarep, nombrerep. En este caso no podramos utilizar el asterisco, tendramos que poner:
INSERT INTO repres SELECT numemp, oficina, nombre FROM empleados WHERE titulo
= 'rep ventas'
O bien:
INSERT INTO repres (numemp, oficinarep, nombrerep) SELECT numemp, oficina,
nombre FROM empleados WHERE titulo = 'rep ventas'
85
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
La sintaxis es la siguiente:
Las columnas de la nueva tabla tendrn el mismo tipo y tamao que las columnas origen,
y se llamarn con el nombre de alias de la columna origen o en su defecto con el nombre
de la columna origen, pero no se transfiere ninguna otra propiedad del campo o de la tabla
como por ejemplo las claves e ndices.
La sentencia SELECT puede ser cualquier sentencia SELECT sin ninguna restriccin,
puede ser una consulta multitabla, una consulta de resumen, una UNION ...
Ejemplo:
SELECT * INTO t2 FROM t1
Esta sentencia genera una nueva tabla t2 con todas las filas de la tabla t1. Las columnas se
llamarn igual que en t1 pero t2 no ser una copia exacta de t1 ya no tendr clave principal ni
relaciones con las otras tablas, ni ndices si los tuviese t1 etc...
Si en la base de datos hay ya una tabla del mismo nombre, el sistema nos
avisa y nos pregunta si la queremos borrar. Si le contestamos que no, la SELECT
no se ejecuta.
Para formar una sentencia SELECT INTO lo mejor es escribir la SELECT que
permite generar los datos que queremos guardar en la nueva tabla, y despus
aadir delante de la clusula FROM la clusula INTO nuevatabla.
Por ejemplo: Queremos enviarle a un representante una tabla con todos los datos
personales de sus clientes para que les pueda enviar cartas etc...
Ejemplo:
SELECT numclie AS codigo, nombre, direccion, telefono INTO susclientes FROM
clientes WHERE repclie = '103';
86
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ejemplo:
UPDATE oficinas INNER JOIN empleados
ON oficinas.oficina = empleados.oficina
SET cuota=objetivo*0.01;
En este ejemplo queremos actualizar las cuotas de nuestros empleados de tal forma que la
cuota de un empleado sea el 1% del objetivo de su oficina. La columna a actualizar es la cuota
del empleado y el valor a asignar es el 1% del objetivo de la oficina del empleado, luego la
clusula SET ser SET cuota = objetivo*0.01 o SET cuota = objetivo/100. El origen debe
contener la cuota del empleado y el objetivo de su oficina, luego el origen ser el INNER JOIN
de empleados con oficinas.
La clusula WHERE indica qu filas van a ser modificadas. Si se omite la clusula WHERE
se actualizan todas las filas.
87
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ejemplo:
UPDATE oficinas SET ventas=0, objetivo=ventas;
O bien:
UPDATE oficinas SET objetivo=ventas, ventas=0;
Los dos ejemplos anteriores son equivalentes ya que el valor de ventas que se asigna a
objetivo es el valor antes de la actualizacin, se deja como objetivo las ventas que ha tenido la
oficina hasta el momento y se pone a cero la columna ventas.
88
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
La opcin tabla.* se utiliza cuando el origen est basado en varias tablas, y sirve
para indicar en qu tabla vamos a borrar.
La opcin * es opcional y es la que se asume por defecto y se puede poner
unicamente cuando el origen es una sola tabla.
La clusula WHERE sirve para especificar qu filas queremos borrar. Se
eliminaran de la tabla todas las filas que cumplan la condicin. Si no se indica la
clusula WHERE, se borran TODAS las filas de la tabla.
En la condicin de bsqueda de la sentencia DELETE, se puede utilizar una
subconsulta. En SQL standard la tabla que aparece en la FROM de la
subconsulta no puede ser la misma que la tabla que aparece en la FROM de la
DELETE pero en el SQL de Microsoft Jet s se puede hacer.
Una vez borrados, los registros no se pueden recuperar. (al menos que no
hayamos puesto un Begin Transaction, para poder darle el ROLLBACK)
Si la tabla donde borramos est relacionada con otras tablas se podrn borrar
o no los registros siguiendo las reglas de integridad referencial definidas en las
relaciones.
Ejemplo:
DELETE * FROM pedidos WHERE clie IN (SELECT numclie FROM clientes WHERE
nombre = 'Julian Lpez');
O bien:
DELETE pedidos.* FROM pedidos INNER JOIN
clientes.numclie WHERE nombre = 'Julian Lpez';
clientes
ON
pedidos.clie
Las dos sentencias borran los pedidos del cliente Julian Lpez. En la segunda estamos
obligados a poner pedidos.* porque el origen est basado en varias tablas
DELETE * FROM pedidos; o DELETE FROM pedidos; Borra todas las filas de pedidos
89
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Si queremos aadir en una tabla una fila con valores conocidos utilizamos la
sentencia INSERT INTO tabla VALUES (lista de valores).
Para crear una nueva tabla con el resultado de una consulta con la sentencia
SELECT...INTO tabla FROM...
Para cambiar los datos contenidos en una tabla, tenemos que actualizar las
filas de dicha tabla con la sentencia UPDATE tabla SET asignacin de nuevos
valores.
Para eliminar filas de una tabla se utiliza la sentencia DELETE FROM tabla.
90
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Tipos de relaciones.
Por ejemplo: tenemos dos tablas una con los datos de diferentes poblaciones y otra con los
habitantes, una poblacin puede tener ms de un habitante, pero un habitante pertenecer
(estar empadronado) en una nica poblacin. En este caso la tabla principal ser la de
poblaciones y la tabla secundaria ser la de habitantes. Una poblacin puede tener varios
habitantes pero un habitante pertenece a una sola poblacin. Esta relacin se representa
incluyendo en la tabla 'hijo' una columna que se corresponde con la clave principal de la tabla
'padre', esta columna es lo denominamos clave fornea (o clave ajena o clave externa).
Una clave fornea es pues un campo de una tabla que contiene una referencia a un registro de
otra tabla. Siguiendo nuestro ejemplo en la tabla habitantes tenemos una columna poblacin que
contiene el cdigo de la poblacin en la que est empadronado el habitante, esta columna es
clave ajena de la tabla habitantes, y en la tabla poblaciones tenemos una columna codigo de
poblacion clave principal de la tabla.
91
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Relacin Varios a Varios: Cuando un registro de una tabla puede estar relacionado con
ms de un registro de la otra tabla y viceversa. En este caso las dos tablas no pueden estar
relacionadas directamente, se tiene que aadir una tabla entre las dos que incluya los pares de
valores relacionados entre s.
Por ejemplo: tenemos dos tablas una con los datos de clientes y otra con los artculos que se
venden en la empresa, un cliente podr realizar un pedido con varios artculos, y un artculo
podr ser vendido a ms de un cliente.
No se puede definir entre clientes y artculos, hace falta otra tabla (por ejemplo una tabla de
pedidos) relacionada con clientes y con artculos. La tabla pedidos estar relacionada con cliente
por una relacin uno a muchos y tambin estar relacionada con artculos por un relacin uno a
muchos.
Integridad referencial
Cuando se define una columna como clave fornea, las filas de la tabla pueden contener en
esa columna o bien el valor nulo (ningn valor), o bien un valor que existe en la otra tabla, un
error sera asignar a un habitante una poblacin que no est en la tabla de poblaciones. Eso es
lo que se denomina integridad referencial y consiste en que los datos que referencian otros
(claves forneas) deben ser correctos. La integridad referencial hace que el sistema gestor
de la base de datos se asegure de que no hayan en las claves forneas valores que no estn
en la tabla principal.
La integridad referencial se activa en cuanto creamos una clave fornea y a partir de ese
momento se comprueba cada vez que se modifiquen datos que puedan alterarla.
Cundo se pueden producir errores en los datos?
Cuando modificamos el valor de la clave fornea, el nuevo valor debe existir en la tabla
principal. Por ejemplo cambiamos la poblacin de un habitante, tena asignada la poblacin 1
92
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Cuando queremos borrar una fila de la tabla principal y ese registro tiene 'hijos',
por ejemplo queremos borrar la poblacin 1 (Valencia) si existen habitantes asignados
a la poblacin 1, estos no se pueden quedar con el valor 1 en la columna poblacin
porque tendran asignada una poblacin que no existe. En este caso tenemos dos
alternativas, no dejar borrar la poblacin 1 de la tabla de poblaciones, o bien borrarla y
poner a valor nulo el campo poblacion de todos sus 'hijos'.
Asociada a la integridad referencial estn los conceptos de actualizar los registros en cascada
y eliminar registros en cascada.
93
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ahora vamos a borrar una fila en la tabla departamentos. Si no existiese borrado en cascada, debido
a la integridad referencial, no podramos borrar ningn departamento que tuviese empleados. De esta
forma al borrar un departamento se borrarn todos los empleados de ese departamento.
DELETE FROM departamentos2
WHERE dep_no=10;
94
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
95
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Anidar subconsultas
Las subconsultas pueden anidarse de forma que una subconsulta aparezca en la clusula
WHERE (por ejemplo) de otra subconsulta que a su vez forma parte de otra consulta principal.
En la prctica, una consulta consume mucho ms tiempo y memoria cuando se incrementa el
nmero de niveles de anidamiento. La consulta resulta tambin ms difcil de leer , comprender y
mantener cuando contiene ms de uno o dos niveles de subconsultas.
Ejemplo:
SELECT numemp, nombre
FROM empleados
WHERE numemp = (SELECT rep FROM pedidos WHERE clie = (SELECT numclie FROM
clientes WHERE nombre = 'Julia Antequera'))
En este ejemplo, por cada linea de pedido se calcula la subconsulta de clientes, y esto se repite
por cada empleado, en el caso de tener 10 filas de empleados y 200 filas de pedidos (tablas
realmente pequeas), la subconsulta ms interna se ejecutara 2000 veces (10 x 200).
96
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
En la clusula FROM
En la clusula FROM se puede encontrar una sentencia SELECT encerrada entre parntesis
pero ms que subconsulta sera 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 clusula FROM vimos que se poda poner un nombre de tabla o un nombre de consulta,
pues en vez de poner un nombre de consulta se puede poner directamente la sentencia SELECT
correspondiente a esa consulta encerrada entre parntesis.
test de existencia
test de comparacin con subconsulta.
97
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Lista las oficinas cuyo objetivo sea superior a la suma de las ventas de sus empleados.
En este caso la subconsulta devuelve una nica columna y una nica fila (es un consulta de
resumen sin GROUP BY)
SELECT oficina, ciudad
FROM oficinas
WHERE objetivo > (SELECT SUM(ventas) FROM empleados WHERE empleados.oficina =
oficinas.oficina)
test de comparacin cuantificada.
Este test es una extensin del test de comparacin y del test de conjunto. Compara el valor de
la expresin con cada uno de los valores producidos por la subconsulta. La subconsulta debe
devolver una nica columna sino se produce un error.
Tenemos el test ANY (algn, alguno en ingls) y el test ALL (todos en ingls).
La sintaxis es la siguiente:
test ANY.
La subconsulta debe devolver una nica columna sino se produce un error.
Se evala la comparacin con cada valor devuelto por la subconsulta.
Si alguna de las comparaciones individuales produce el resultado verdadero, el test ANY
devuelve el resultado verdadero.
Si la subconsulta no devuelve ningn valor, el test ANY devuelve falso.
Si el test de comparacin es falso para todos los valores de la columna, ANY devuelve falso.
Si el test de comparacin no es verdadero para ningn valor de la columna, y es nulo para al
98
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
NOTA. Cuando se trabaja con tablas muy voluminosas el test EXISTS suele dar mejor
rendimiento que el test IN.
99
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Ejemplos:
1.Queremos saber la lista de empleados cuyo salario supere el salario medio. En
primer lugar, tendramos que averiguar el importe del salario medio:
SELECT AVG(salario)"Salario Medio"
FROM empleados;
+---------------+
| Salario Medio
+---------------+
| 2566.735569
+---------------+
7499 | ALONSO
7654 | MARTIN
7844 | CALVO
| VENDEDOR |
| VENDEDOR |
| VENDEDOR |
30 |
30 |
30 |
3. Obtener todos los empleados que tienen el mismo oficio que GARRIDO
SELECT emp_no "N Empleado", apellido, oficio
FROM empleados
WHERE oficio = (SELECT oficio
FROM empleados
WHERE apellido = 'GARRIDO');
+-------------+----------+----------+
| N Empleado | apellido | oficio |
+-------------+----------+----------+
| 7698 | GARRIDO | DIRECTOR |
| 7782 | MARTINEZ | DIRECTOR |
100
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
+--------+--------------+
| dep_no | dnombre |
+--------+--------------+
| 10 | CONTABILIDAD |
| 30 | VENTAS |
+--------+--------------+
101
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
+-----------------+--------------+
| N Departamento | Departamento |
+-----------------+--------------+
| 30 | VENTAS |
+-----------------+--------------+
102
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
103
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Unidad 8. Vistas
Definiciones
Podemos definir una vista como una consulta almacenada en la base de datos que se utiliza como
una tabla virtual. Se define asociadas a una o varias tablas y no almacena los datos sino que trabaja
sobre los datos de las tablas sobre las que est definida, estando as en todo momento actualizada.
104
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
[ VIEW_METADATA ]
El siguiente ejemplo crea la vista emple_dep30 para la gestin de los empleados del departamento 30
mencionada en el apartado anterior.
CREATE VIEW emple_dep30 AS
SELECT * FROM EMPLEADOS
WHERE DEP_NO = 30;
CREATE VIEW emple_dep30 AS
SELECT * FROM EMPLEADOS
WHERE DEP_NO = 30;
A continuacin se muestra la sentencia que crea la vista datos_emple que contiene informacin de
todos los empleados ocultando la informacin confidencial.
CREATE VIEW datos_emple AS
SELECT emp_no, apellido, oficio, director,
fecha_alta, dep_no
FROM empleados;
Las vistas pueden a su vez definirse sobre otras vistas. Si ya tenemos creada las vista
datos_emple, podramos crear otra vista sobre ella:
CREATE VIEW datos_emple_10 AS
SELECT *
FROM datos_emple
WHERE dep_no=10;
Utilizacin de vistas
Una vez definida puede ser utilizada para consultas de igual forma que una tabla.
Con algunas restricciones, todos los formatos de seleccin vistos para las tablas son aplicables para
la seleccin de filas en las vistas.
105
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Por ejemplo:
DEP_NO |
106
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
7698 | 1981-02-23 |
7698 | 1981-09-28 | 7698 |
1981-09-08 |
30 |
30 |
30 |
2- Tambin se pueden crear vistas a partir de consultas que incluyen agrupaciones, como en el
siguiente ejemplo:
CREATE VIEW resumen_dep1
(dep_no, num_empleados, suma_salario, suma_comision) AS
SELECT dep_no, COUNT(emp_no), SUM(salario),
SUM(ISNULL(comision,0))
FROM empleados
GROUP BY dep_no;
En estos casos, cada fila de la vista corresponder a varias filas en la tabla original tal como se puede
comprobar en la siguiente consulta:
SELECT *
FROM resumen_dep1;
Eliminacin de vistas
La sentencia DROP VIEW permite eliminar la definicin de una vista.
107
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Express
WorkGroup
Standard Enterprise
Num. CPUS
Ilimitado
Memoria
1 Gb
3 Gb
Limitado
por el
S.O.
Limitado por
el S.O.
Soporte 64 bits
Con
Con Windows Nativo
Windows on on Windows
Windows
(WOW)
(WOW)
Nativo
Tamao mximo 4 Gb
de BD
Sin limite
Sin limite
Sin limite
Particionamiento No
No
No
Si
Database
Mirroring
No
No
Si
Si
Cluster
No
No
Si (solo 2 Si
nodos)
Log Shipping
No
Si
Si
Si
Management
Studio
No
Si
Si
Si
Database
No
No
Si
Si
108
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Tunning Advisor
Full Text Search No
Si
Si
Si
SQL Server
Agent
No
Si
Si
Si
Best Practices
Analyzer
Si
Si
Si
SI
Notification
Services
No
No
Si
Si
Service Broker
Si (Solo
Si
subscriptor)
Si
Si
Merge
Replication
Si (Solo
Si (Publicador Si
Subscriptor) hasta 25
suscriptores)
Si
Transactional
Replication
Si (Solo
Si (Publicador Si
Subscriptor) hasta 5
subscriptores)
SI
Oracle
Replication
No
No
No
Si,
replicacion
transaccional
con Oracle
como un
publicador
Web Services
(HTTP
EndPoints)
No
No
Si
Si
Report Server
Si
Si
Si
Si
Report Builder
No
Si
Si
SI
BI Development Si (Solo
Studio
Report
Designer)
Si (Solo
Report
Designer)
Si
Si
Enterprise
Management
Tools
Si
Si
SI
Si (Solo
Reporting
Services)
Si
Si
Analysis
Services
No
Si
Si
No
No
109
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Standard Edition
WorkGroup Edition
Express Edition
Developer Edition
Memoria
Enterprise Edition: Minimo 512 MB, 1 GB o mas recomendada
110
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Requerimiento
Red
Versiones 64 bits
CPU
Sistema Operativo
Enterprise Edition IA64, Standard Edition IA64 y Developer Edition IA64
Windows Server 2003 64-Bit Itanium DataCenter Edition con SP1 o superior
Windows Server 2003 64-Bit Itanium Enterprise Edition con SP1 o superior
111
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Windows Server 2003 64-Bit X64 DataCenter Edition con SP1 o superior
Windows Server 2003 64-Bit X64 Enterprise Edition con SP1 o superior
Windows Server 2003 64-Bit X64 Standard Edition con SP1 o superior
Express Edition
112
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
BIBLIOGRAFIA
http://www.aulaclic.es/sql/b_6_1_1.htm
http://www.aulaclic.es/sql/f_sql.htm
Lic. Elvin German
Paulina Barthelemy
http://misservidores.wordpress.com/2008/09/04/capitulo-1-instalacion-sql-server-/
www.monografias.com
Prof. Manuel Torres Remon
mtr-unlimited@correoweb.com
manuelt23@mixmail.com
Docente de la Carrera Profesional de Computacin e Informtica
Instituto Superior Tecnolgico Publico Manuel Arevalo Caceres
113
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
ANEXOS
NORMALIZACIN DE BASE DE DATOS
1. Descomposicin y Normalizacin
Siempre que un analista de sistemas de base de datos arma una base de datos,
queda a su cargo descomponer dicha base en grupos y segmentos de registros.
Este proceso es la descomposicin; el mismo es necesario independientemente
de la arquitectura de la base de datos - relacional, red o jerrquica-. Sin
embargo, para la base de datos relacional, la accin correspondiente puede
dividirse y expresarse en trminos formales y se denomina normalizacin a la
misma.
La normalizacin convierte una relacin en varias sub-relaciones, cada una de las
cuales obedece a reglas. Estas reglas se describen en trminos de dependencia.
Una vez que hayamos examinado las distintas formas de dependencia,
encontraremos procedimientos a aplicar a las relaciones de modo tal que las
mismas puedan descomponerse de acuerdo a la dependencia que prevalece.
Esto no llevar indefectiblemente a formar varias subrelaciones a partir de la
nica relacin preexistente.
2. Dependencia
Significado:
Antes de entrar en el tpico principal de dependencia, vamos a ver algunos conceptos
acerca de los individuos y acerca de las tuplas que los describen en la base de datos
relacional (BDR). Restringiremos la discusin a la BDR, si bien la misma se aplica
igualmente a las otras arquitecturas.
Existen tres tipos distintos de dependencia.
Total uno-uno-sinnimo
Completa - subtupla
Transitiva - mltiple.
114
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
3. Normalizacin
Qu es normalizacin?
Cada tupla tiene una clave que la identifica en forma unvoca, pero
dicha clave no significa orden.
115
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
Para que una relacin sea normalizada en pasos adicionales, debe encontrarse
en la primera forma normal. Colocar los datos en la primera forma normal est a
cargo del diseador de la aplicacin. Estos datos se encuentran disponibles de
alguna manera inicialmente. Si la aplicacin existe en forma manual, o ha sido
anteriormente computarizada pero no todava como relacin, el diseador
reorganiza los datos de modo de conformar una matriz 1FN.
si todos los
R = (A,B,C,D,E,F,G,H,I,L,M,N,O,P,Q)
Descripcin
Una relacin R a poner en tercera forma normal debe estar en la segunda
forma normal. Es muy comn que R sea una sub-relacin; la relacin original
estaba en primera forma normal (para ponerla en segunda forma normal fue
descompuesta en varias sub-relaciones). Estas son ahora candidatas a una
descomposicin adicional.
Recordamos que las propiedades de la segunda forma normal (2Fn) son:
117
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German
En consecuencia es evidente que tenemos, o bien una clave simple, o una clave
compuesta de la cual todos los componentes no clave son dependientes en forma
completa.
nuestra
atencin
multidependientes.
FABPAT = proyectar FAB (FABNO, PATRN)
FABCOL = proyectar FAB (FABNO, COLOR)
El resultado son nuevas sub-relaciones que han
descripcin del mismo. Para cada curso existe una seleccin de textos y una
seleccin de profesores. Puede darse cualquier combinacin de texto y profesor.
120
MICROSOFT SQL Server Gota a Gota en las Bases de Datos Relacionales
Lic. Elvin German