Escolar Documentos
Profissional Documentos
Cultura Documentos
com/2014/01/Manual-de-Microsoft-SQL-Server-Full-Transact-
SQL.html
CONOCIMIENTOS BSICOS DE SQL SERVER
Elementos de sintaxis:
Directivas de procesos por lotes
GO: Envia lotes de intrucciones de TRANSACT SQL a las herramientas y utilidades
(Sirve para separar bloques de instrucciones)
EXEC O EXECUTE: Ejecuta funciones definidas por el usuario, procedimientos de
sistema y procedimientos almacenados.
Comentarios en SQL:
En lnea: --
En Bloque: /* comentario */
Tablas en SQL:
1. Tabla master: Es la tabla que contiene como generar una base de datos y sobre ella, se crean
todas las bases de datos.
2. Tabla model: Es la tabla modelo, las bases de datos creadas se basan en esta tabla como
modelo.
3. Tabla AdventureWorks, Northwind y Pubs: Son tablas de ejemplos que todo usuario puede
trabajar con ellas.
Operadores de SQL:
2. Registro de transacciones: Es donde se cargan todas las consultas antes de ejecutarlas en los
archivos de datos. Se ejecutan en este registro de transacciones y si el resultado es correcto,
se ejecutan en los archivos de datos. Tambin sirve como histrico ya que almacena todas las
transacciones realizadas.
a. LDF
Crear una base de datos
SP_HELPDB
Muestra todas las bases de datos del servidor, con su propietario, tamao hora de creacin etc.
Digita en el editor de consultas sp_helpdb y te mostrar algo parecido a la siguiente imagen:
SP_SPACEUSED
Muestra el espacio usado de la base de datos que estamos usando actualmente
Elije la base de datos Ejemplo con el comando use y en otra linea escribe exec sp_spaceused. Al
ejecutar estas instrucciones se mostrar algo parecido a la siguiente imagen.
Grupos de archivos secundarios
Son los formados por archivos NDF, donde como hemos visto antes, se almacenan copias de
seguridad, vistas etc.
2. Modificamos la base de datos para aadir un archivo NDF fsico al grupo de archivos
secundario, para ello usaremos Add File. Sintaxis:
SP_HelpFile
3. Mediante la opcin Modify File de Alter Database, podemos modificar un archivo secundario.
Sintaxis:
Alter Database Base de datos Modify File (name = nombre, propiedades y valores a modificar)
4. Con Add File, podemos aadir un nuevo archivo NDF al archivo secundario de la base de
datos elegido. Sintaxis:
5. Con Remove File, podemos eliminar un archivo elegido de la base de datos Sintaxis:
Sintaxis:
DBCC ShrinkFile (Nombrearchivo, %tamaoareducir, Opcion)
Opciones:
EmptyFile: Indica que el tamao del archivo reducido, pase a otros archivos
secundarios del mismo grupo.
TruncateOnly: Indica que el tamao reducido de la base de datos pasa al
sistema operativo. Si no ponemos ninguna opcin esta es la opcin por
defecto.
NoTruncate: Indica que el tamao reducido de la base de datos no pasa al
sistema operativo.
7. ShrinkDataBase
Opciones:
EmptyFile: Indica que el tamao del archivo reducido, pase a otros archivos
secundarios del mismo grupo.
TruncateOnly: Indica que el tamao reducido de la base de datos pasa al
sistema operativo. Si no ponemos ninguna opcin esta es la opcin por
defecto.
NoTruncate: Indica que el tamao reducido de la base de datos no pasa al
sistema operativo.
Ejemplo:
EJEMPLOS VARIOS.
1. Crear una base de datos de Clientes con un tamao de 40 MB y con crecimiento de un 10%.
create database Clientes
on primary
(Name=Clientes_Data,
Filename='D:\ClientesData.MDF',
size=25MB,
Maxsize=100MB,
Filegrowth=10%)
log on
(Name=Clientes_Log,
Filename='D:\ClientesLog.LDF',
size=15MB,
Maxsize=40MB,
Filegrowth=10%)
2. Mostrar si la base de datos est junto a las dems y el espacio usado de mi nueva base de
datos.
sp_helpdb
sp_spaceused
3. Crear un grupo de archivos en mi base de datos clientes que se llame Bajas.
Aadir dos archivos a ese grupo de archivos llamados RelacionAnual y que ocupen 5MB.
5. Eliminar uno de los archivos del grupo Bajas y modificar el otro para darle un tamao de 10
MB.
Dbcc shrinkdatabase(Clientes, 2)
9. Eliminar el grupo de Bajas de la base de datos junto con sus archivos. Eliminar tambin la
base de datos.
1. Creacin de tipos de datos definidos por el usuario: Se basan en tipos de datos definidos por
el SQL. Para crear un tipo de dato se usa un procedimiento almacenado del sistema.
Administrador Corporativo => Eliges una Tabla => Procedimientos almacenados que
empiecen por sp.
Ejemplo:
Ejemplo:
Ejemplo:
Ejemplo:
Es un tipo de dato que genera valores y los incrementa. Un contador. Slo una columna con
Identity, el tipo de dato debe ser entero int, numerico numeric o decimal, estos dos ltimos con
escala cero.
Sintaxis:
Ejemplo:
create table NINONINO
(
identidad int identity(1,1) not null,
apellido nvarchar(10) null
)
Uso funcin NEWID y tipo de datos UNIQUEIDENTIFIER
Pueden cambiarse sin volver a crear la tabla
Requieren comprobacin de errores
Comprueban datos existentes
Ejemplo:
Default
Se aplica para INSERT
Solo una por columna
No se pueden utilizar con IDENTITY
Permite especificar valores proporcionados por el sistema
Sintaxis parcial
[ constraint nombre_restriccin ] default expresin
Ejemplo
alter table Producto
add constraint DF_Descripcion default 'No especifica'
for Descripcion
Check
Para sentencias Insert y Update
Pueden hacer referencias a columnas en la
misma tabla
No pueden contener subconsultas
Sintaxis parcial
[Constraint nombrerestriccion) check ( Expresion )
Ejemplo
alter table Producto
add constraint CHK_Stock Check(Stock > -1)
Primary key
Slo una por tabla
Valores exclusivos
No se permiten valores nulos
Crea un ndice exclusivo en las columnas especificadas (Predet. --> CLUSTERED )
Sintaxis parcial
[Constraint nombrerestriccion] primary key [Clustered | NonClustered ] columnas
Ejemplo
alter table Producto add constraint Pk_Codigo primary key nonclustered (codigo)
Unique
Permite un valor nulo
Permite varias en una tabla
Formadas por una o mas columnas
Exigida con un ndice nico
Sintaxis parcial
[Constraint nombreRestriccion ] Unique [Clustered | non Clustered ] (Columnas,...)
Ejemplo
alter table Producto add constraint U_Nombre Unique Nonclustered (Nombre)
Foreign key
Deben hacer referencia a PRIMARY KEY o UNIQUE
Proporcionan integridad referencial de una o varias columnas
No crean ndices automticamente
Permisos SELECT o REFERENCES
Sintaxis parcial
[Constraint nombreRest ] Foreign key (Columna,...) References tablaRef (Columna,)
Ejemplo
alter table Producto add Constraint Fk_Pro_Cat Foreign Key (CategoriaID) References
Categoria(CategoriaID)
"Realizo una referencia a la tabla Categoria y el campo CategoriaID para crear una
restriccin que solamente me permita insertar Productos que esten en una Categoria de
la tabla Categoria"
Sintaxis parcial
[Constraint NombreRestriccion) [Foreign Key ] (Columna) References TablaRef
(Columnas,)
[On Delete {Cascade | No Action}]
[On Update {Cascade | No Action}]
NO Action es la predeterminada
-Products
PK ProductId
-Orders
PK OrderId
FK ProductId
Con cascade si borras, borrara lo que este asociado a ella en la otra tabla, pero con No Action
no te dejara borrarlo ya que esta asociado a otra tabla la cual tiene la clave principal.
Con cascade puedes borrar ProductId de products , lo cual borrara productId de orders, con
No Action no lo podras borrar.
Ejemplo
alter table Producto
add Constraint Fk_Pro_Cat Foreign Key (CategoriaID) References Categoria (CategoriaID)
On delete Cascade
On update Cascade
Con estas dos instrucciones al final de la restriccin le estoy diciendo que borre todos los productos
de una categoria si dicha categoria es eliminado de la tabla Categoria. Lo mismo suceder al
modificar.
2. Deshabilitacion de restricciones
Deshabilitacin para la comprobacin de los datos existentes o Aplicable a Check y Foreign Key
o Utilizar la opcin With NoCheck
Sintaxis parcial
Alter Table [With Check | With NoCheck]
Add Constrain restriccion { Foreign key (Columna,)
References TablaRef (Columna,) { Check (Condicion)}
Sintaxis parcial
Alter Table tabla {Check | NoCheck }
Constraint {All | Restriccin 1, } => Para hacer la restriccion a todo , o a slo lo que est
separado por comas ,
DEFAULT
Sintaxis
sp_bindefault: con este procedimiento lo que hago es vincular el valor por defecto a la tabla.
sp_unbindefault: Con este otro lo que hago es desvincular el valor por defecto de la tabla
use northwind
GO
GO
use northwind
Para eliminar varios objetos de la base de datos con una sola sentencia
Reglas:
Sintaxis
use Hospital
as
@Funcion in('INTERINO','ENFERMERO','ENFERMERA')
GO
use northwind
GO
GO
use northwind
GO
GO
A continuacin, el primero de los procedimientos muestra el texto que se ha utilizado para crear la regla, el segundo
procedimiento renombra el objeto, se puede utilizar con cualquier tipo de objeto de la base de datos.
Advertencia: al cambiar cualquier parte del nombre de un objeto pueden dejar de ser vlidas secuencias de comandos y
procedimientos almacenados. El object ha cambiado su nombre por 'Funcion_Regla'.
use Escuela
GO
exec sp_addtype TNoNulo,'nvarchar(15)','Not null'
exec sp_addtype TNulo,'nvarchar(15)','Null'
8. Crear un grfico que muestre las relaciones que se han obtenido en la base de datos hasta ahora :
9. Aadir el campo Sexo, Fecha de nacimiento y Estado Civil a la tabla Profesores :
sp_helpconstraint profesores
sp_helpconstraint colegios
alter table profesores drop constraint fk_profesores
13. Crear de nuevo la relacin borrada en el ejercicio anterior que tenga relacin en cascada y actualizacin :
15. Queremos rellenar los datos de las tablas creadas, para ello vamos a introducir a tres alumnos en los colegios. Los
datos son los siguientes:
Alumnos:
Marta Serrano Lopez Provincia: Madrid Localidad: Madrid
Javier Morgado Palomo Provincia: Alicante Localidad: Arenales del sol
Miguel Torres Tormo Provincia: Barcelona Localidad: Llobregat
Rellenar las tablas convenientemente con datos relacionales. Ejemplo: Region: Comunidad Valenciana, 3 datos como
mnimo en cada tabla.
TABLA REGIONES
Nos dar error por el tipo de dato introducido en el campo regiones, debemos cambiar el tipo de dato para poder
utilizar la tabla
ALTER TABLE REGIONES
ALTER COLUMN REGIONES NVARCHAR(50) NULL
TABLA COLEGIOS
Antes de insertar verifica el cdigo de la regin. Debe ser el que te genero la tabla regiones.
PARA INTRODUCIR AL SIGUIENTE ALUMNO HAY QUE CAMBIAR LA COLUMNA DE LOCALIDAD PARA QUE ADMITA MAS
CARACTERES.
No se puede eliminar el dato porque est vinculado a una tabla, para poder eliminarlo deberamos modificar la tabla y
cambiar todos los campos donde el dato est presente.
Borrar todas las tablas, tipos de datos y base de datos. Realizarlo en el siguiente orden.
Bien es momento de utilizar la base de datos "Hospital" creada en publicaciones anteriores, para realizar las bsicas
consultas de seleccin, que se presentan en toda aplicacin informtica.
A manera de prctica, realiza las consultas en tu Analizador de Consultas SQL para comprobar los resultados. Recuerda
que digitando se va quedando en la mente y vas comprendiendo poco a poco.
2. Mostrar el apellido, oficio, salario, salario anual, con las dos extras para aquellos empleados con comisin mayor de
100000.
3. Idntico del anterior, pero para aquellos empleados que su salario anual con extras supere los 2200000
SELECT APELLIDO, OFICIO,
SALARIO, SALARIO * 14 AS 'SALARIO ANUAL' FROM EMP
WHERE SALARIO * 14 > 2200000
4. Idntico del anterior, pero para aquellos empleados que sumen entre salario anual con extras y comisin los 3
millones.
5. Mostrar todos los datos de empleados ordenados por departamento y dentro de este por oficio para tener una visin
jerrquica.
9. Listar todos los datos de la plantilla del hospital del turno de maana
11. Visualizar los empleados de la plantilla del turno de maana que tengan un salario entre 200000 y 225000.
SELECT * FROM PLANTILLA WHERE SALARIO BETWEEN 200000 AND 225000 AND T = 'M'
12. Visualizar los empleados de la tabla emp que no se dieron de alta entre el 01/01/80 y el 12/12/82.
SELECT * FROM EMP WHERE FECHA_ALT NOT BETWEEN '01/01/1980' AND '31/12/1982'
14. Mostrar aquellos empleados con fecha de alta posterior al 1 de Julio de 1985.
15. Lo mismo que en el ejercicio 14 pero con salario entre 150000 y 400000.
16. Igual que en el ejercicio 15, pero tambin incluimos aquellos que no siendo analista pertenecen al
departamento 20.
18. De los empleados del ejercicio 17 quitar aquellos que superen los 200000 mensuales.
21. Del ejercicio 20, nos quedamos solo con aquellos cuyo nmero de empleado no este entre 7600 y 7900.
24. Mostrar que personal No Interino existe en cada sala de cada hospital, ordenado por hospital y sala.
26. Seleccionar los distintos valores del sexo que tienen los enfermos.
27. Indicar los distintos turnos de la plantilla del hospital, ordenados por turno y por apellido.
AVG: Realiza la media sobre la expresin dada, debe ser un tipo de dato Int.
select avg(salario) from emp
1. Encontrar el salario medio de los analistas, mostrando el nmero de los empleados con oficio analista.
SELECT COUNT(*) AS [NUMERO DE EMPLEADOS], OFICIO,
AVG(SALARIO) AS [SALARIO MEDIO] FROM
EMP GROUP BY OFICIO HAVING OFICIO ='ANALISTA'
2. Encontrar el salario mas alto, mas bajo y la diferencia entre ambos de todos los empleados con oficio EMPLEADO.
SELECT OFICIO, MAX(SALARIO) AS [SALARIO MAS ALTO]
, MIN(SALARIO) AS [SALARIO MAS BAJO]
, MAX(SALARIO) - MIN(SALARIO) AS [DIFERENCIA ENTRE AMBOS]
FROM EMP GROUP BY OFICIO HAVING OFICIO = 'EMPLEADO'
7. Visualizar el nmero de enfermeros, enfermeras e interinos que hay en la plantilla, ordenados por la funcin.
SELECT COUNT(*) AS [N DE PERSONAS], FUNCION FROM PLANTILLA
GROUP BY FUNCION
HAVING FUNCION IN ('ENFERMERO','ENFERMERA','INTERINO')
ORDER BY FUNCION
8. Visualizar departamentos, oficios y nmero de personas, para aquellos departamentosque tengan dos o ms
personas trabajando en el mismo oficio.
9. Calcular el salario medio, Diferencia, Mximo y Mnimo de cada oficio. Indicando el oficio y el nmero de
empleados de cada oficio.
10. Calcular el valor medio de las camas que existen para cada nombre de sala. Indicar el nombre de cada sala y
el nmero de cada una de ellas.
12. Averiguar los ltimos empleados que se dieron de alta en la empresa en cada uno de los oficios, ordenados
por la fecha.
13. Mostrar el nmero de hombres y el nmero de mujeres que hay entre los enfermos.
14. Mostrar la suma total del salario que cobran los empleados de la plantilla para cada funcin y turno.
JOIN
Se usa para combinar resultados entre varias tablas. Microsoft recomienda usar Join ya que consume menos recursos.
Para ver como manejamos este tipo de consultas.
Consultas Internas
Combina las tablas comparando los valores comunes de los campos indicados mediante combinaciones cruzadas.
Sintaxis:
- Inner Join: Indica que combine los campos con resultados comunes
- Full Join: Indica que combine todos los campos aunque los resultados sean diferentes.
Ejemplos :
?
1 SELECT APELLIDO,OFICIO,DNOMBRE
2 FROM EMP
3 INNER JOIN DEPT
4 ON EMP.DEPT_NO=DEPT.DEPT_NO
ORDER BY DEPT.DNOMBRE
5
La combinacin Full Join muestra las coincidencias de la tabla Dept con Emp, ms los valores que no coincidan, como el
departamento Produccin, que no tiene empleados.
?
1 SELECT APELLIDO,OFICIO,DNOMBRE
2 FROM EMP
3 FULL JOIN DEPT
4 ON EMP.DEPT_NO=DEPT.DEPT_NO
ORDER BY DEPT.DNOMBRE
5
Se podra decir que es como la suma de utilizar left join y right join.
Consultas Externas
Al igual que las consultas de combinacin internas, combina los valores comunes de los campos indicados y adems de
la tabla que queramos, devuelve tambin el resto de valores aunque no coincidan. Para ello usaremos las siguientes
opciones combinadas con join:
Sintaxis:
- Left Join: Indica que muestre todos los resultados de la columna de la izquierda
- Right Join: Indica que muestre todos los resultados de la columna de la derecha
- Cross Join: Muestra un producto cartesiano combinando todos los resultados de las dos tablas.
Ejemplos 1:
?
1 SELECT APELLIDO,OFICIO,DNOMBRE
2 FROM EMP
3 LEFT OUTER JOIN DEPT
4 ON EMP.DEPT_NO=DEPT.DEPT_NO
5 ORDER BY DEPT.DNOMBRE
Si existiera algn empleado que no tenga asignado un departamento, la consulta traera los datos del empleado, pero el
nombre del departamento tendra el valor null porque no tendra ningn departamento asociado y en la consulta le
estamos diciendo que seleccione los empleados aunque no tengan departamento asociado, ponemos como principal la
tabla de la izquierda (EMP).
Ejemplo 2:
?
1 SELECT APELLIDO,OFICIO,DNOMBRE
2 FROM EMP
3 RIGHT OUTER JOIN DEPT
4 ON EMP.DEPT_NO=DEPT.DEPT_NO
5 ORDER BY DEPT.DNOMBRE
En esta consulta el departamento de produccin tiene valores null porque le hemos dicho que seleccione la tabla de la
derecha como principal (dept), con lo cual selecciona todos los campos de la tabla departamentos con coincidencias con
emp o sin ellas.
Ejemplo 3:
?
1 SELECT APELLIDO,OFICIO,DNOMBRE
2 FROM EMP
3 CROSS JOIN DEPT
Realiza un producto cartesiano combinando todos los empleados con todos los departamentos.
Combinaciones con mas de dos tablas
Ya hemos visto como combinar 2 tablas con inner join, el siguiente ejemplo muestra como combinar las 3 tablas que
tenemos en la base de datos. Podremos combinar tantas tablas como queramos usando inner join o full join.
?
1
SELECT P.APELLIDO AS [APELLIDO]
2 ,S.NOMBRE AS [SALA]
3 ,H.NOMBRE AS [HOSPITAL],
4 S.NUM_CAMA AS [N DE CAMAS]
5 FROM PLANTILLA P INNER JOIN SALA AS S
6 ON P.HOSPITAL_COD = S.HOSPITAL_COD
7 AND P.SALA_COD = S.SALA_COD
INNER JOIN HOSPITAL AS H
8 ON H.HOSPITAL_COD = P.HOSPITAL_COD
9
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.
Para ello crearemos dos copias de la misma tabla ponindole un alas, para posteriorme nte combinar los resultados de
ambas copias.
?
1 SELECT A.EMP_NO AS [PRIMER EMPLEADO]
2 ,A.APELLIDO,A.DEPT_NO
3 ,B.EMP_NO AS [SEGUNDO EMPLEADO],
4 B.APELLIDO
5 FROM EMP AS A INNER JOIN EMP AS B
6 ON A.EMP_NO = B.EMP_NO
ORDER BY B.EMP_NO
7
BASE DE DATOS: HOSPITAL.
Estructura de Base de Datos Hospital - Ejemplo
INSERCION DE DATOS BDD: HOSPITAL.
Bien, ahora nos toca insertar datos en las tablas. La sintaxis SQL de insercin "para datos fijos o ingresados de forma
manual" la podemos clasificar en 3 formas:
Tabla DEPT
Tabla DOCTOR
Tabla EMP
Tabla ENFERMO
Tabla HOSPITAL
Tabla PLANTILLA
Tabla SALA