0% encontró este documento útil (0 votos)
184 vistas127 páginas

Manual de Microsoft SQL Server TRANSACT SQL

Este manual proporciona una guía detallada para la instalación de Microsoft SQL Server 2008, explicando los pasos a seguir como revisar los requisitos técnicos, seleccionar las características a instalar, configurar las cuentas de servicio, definir la autenticación y directorios de datos, e instalar y configurar los componentes deseados como Reporting Services. El proceso guiado permite instalar con facilidad SQL Server 2008 de forma segura y en cumplimiento de buenas prácticas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
184 vistas127 páginas

Manual de Microsoft SQL Server TRANSACT SQL

Este manual proporciona una guía detallada para la instalación de Microsoft SQL Server 2008, explicando los pasos a seguir como revisar los requisitos técnicos, seleccionar las características a instalar, configurar las cuentas de servicio, definir la autenticación y directorios de datos, e instalar y configurar los componentes deseados como Reporting Services. El proceso guiado permite instalar con facilidad SQL Server 2008 de forma segura y en cumplimiento de buenas prácticas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 127

Manual de Microsoft SQL Server - Full Transact SQL

INDICE

1. Manual de Instalación de Microsoft SQL Server 2008

2. Conocimientos básicos de SQL Server

3. Creación y Administración de bases de datos - 1 de 3

4. Creación y Administración de bases de datos - 2 de 3

5. Creación y Administración de bases de datos - 3 de 3

6. Creación de tipos de datos y tablas

7. Restricciones de tablas en una base de datos

8. Valores predeterminados y las reglas como objetos independientes

9. Estructuras de las tablas en SQL Server - 1 de 2

10. Estructuras de las tablas en SQL Server - 2 de 2

11. Restricciones, valores por defecto y reglas en SQL Server

12. Estructura de Base de Datos Hospital - Ejemplo

1. Descargar Base de Datos Hospital

13. Insertar Datos en SQL Server - Ejemplo Hospital

1. Descargar Script SQL - Insertar datos Base de Datos Hospital

14. Consultas de Selección en SQL Server - Parte 1

15. Consultas de Selección en SQL Server - Parte 2

16. Consultas de Selección en SQL Server - Parte 3

17. Consultas de Selección en SQL Server - Parte 4

18. Operador LIKE - SQL Server

19. Funciones de agregado - Parte 1

20. Funciones de agregado - Parte 2

21. Consultas de conbinación - Parte 1

22. Consultas de combinación - Parte 2

23. Base de datos Pubs

1. Descargar Base de Datos Pubs

24. Uso de Join - Ejercicios con combinaciones internas y externas

25. Uso de Join - Combinaciones internas

26. Operador Union

27. SubConsultas

28. Clausulas EXISTS Y NOT EXISTS


29. Ejercicios de SubConsultas

30. Variables y Bucles en SQL Server

31. CASE

32. Ejercicios con CASE

33. Inserción de datos

34. Eliminación de datos

35. Actualización de datos

36. Ejercicios con Insert, Update, y Delete

37. ROLLUP, CUBE Y GROUPING

1. Descargar Base de Datos Northwind

38. Ejercicios con Rollup y Cube

39. Transacciones

40. Funciones de fecha

41. Funciones matemáticas

42. Funciones de cadena

43. Funciones de Sistema

44. Ejercicios con IF y Funciones - 1 de 2

45. Ejercicios con IF y Funciones - 2 de 2

46. Procedimientos almacenados con parametros

47. Variables en procedimientos almacenados

48. Ejercicios de procedimientos almacenados - 1 de 2

49. Ejercicios de procedimientos almacenados - 2 de 2

50. TRIGGERS - Desencadenadores, disparadores

51. Ejercicios con Triggers

52. Vistas
Manual de Instalación de Microsoft SQL Server 2008

Esta publicación va dirigido a profesionales de tecnología interesados en entender el proceso de instalación de Microsoft

SQL Server 2008, sus componentes, las recomendaciones de seguridad y el significado de todas las opciones disponibles

durante dicho proceso.

 Introducciòn al manual

Si bien la instalación de Microsoft SQL Server 2008 no es complicada, es de gran importancia conocer acerca de lo que se

está realizando en cada uno de los pasos del proceso, realizar una instalación a ciegas podría terminar en una instalación

de más o menos servicios de los necesarios, en la implementación de malas prácticas de seguridad entre muchas otras.

 Antes de Instalar

Es importante que antes de instalar SQL Server se tengan en cuenta algunas recomendaciones importantes:

1. Decidir la edición de SQL Server 2008 que se desea instalar

2. Revisar que se cumpla con los requerimientos de hardware y software necesarios para instalar SQL Server 2008, la

información al respecto se encuentra en la documentación del producto.

3. Crear cuentas para los servicios de SQL Server, estas cuentas deben ser creadas con privilegios mínimos ya que durante

el proceso de instalación, el asistente les asignará los permisos necesarios para ejecutar los respectivos servicios.

La creación de estas cuentas de servicio NO es obligatoria para poder instalar SQL Server, pero es una buena práctica de

seguridad

 Instalando

A continuación se muestra una guía paso a paso de la instalación de SQL Server 2008, con sus componentes de

administración.

“En SQL Server Installation Center” es posible revisar información detallada acerca de requerimientos para la instalación,

recomendaciones de seguridad y adicionalmente realizar un chequeo de la configuración del sistema.

Haga clic en “System Configuration Checker”


Revise el reporte y haga clic en OK
Ahora, vaya al tab “Installation”, y allí seleccione la opción “New SQL Server stand alone installation or add features to an

existing installation”
Observe de nuevo el reporte y haga clic en “OK”
Si está instalando una versión de pruebas (cómo en este ejemplo) de SQL Server, podrá seleccionar la opción

correspondiente para la edición que desee; en una instalación diferente, agregue la clave de producto y haga clic en “Next”
Ahora, lea los términos de licencia y luego, si está de acuerdo seleccione la opción correspondiente y haga clic en “Next”
A continuación, se instalan componentes de soporte necesarios para la instalación, haga clic en “Install” para instalarlos
Ahora haga clic en “Next”
Ahora, deberá seleccionar las características de SQL server 2008 que desea instalar; Asegúrese de instalar los servicios

que en algún momento vaya a utilizar, si está totalmente seguro que no va a usar un servicio específico cómo Analysis

Services, limpie la casilla de verificación junto a él, y haga clic en “Next”


A continuación tendrá que decidir si la instancia que va instalar es una instancia por defecto o nombrada, en el segundo

caso tendrá que asignar a esta un nombre con el cual la reconocerá a futuro; si la instancia es creada por defecto, la forma

de conectarse a esta desde servidores o equipos clientes remotos, será por medio del nombre de la máquina o de la

dirección ip de la misma. Haga clic en “Next”


En la siguiente ventana, se encuentra un análisis de requerimientos de espacio, cuando se haya comprobado que cuenta

con el espacio de almacenamiento suficiente, haga clic en “Next”


Ahora, usted deberá configurar las cuentas con las cuales se ejecutará el servicio; la recomendación es utilizar diferentes

cuentas, sin embargo, en la imagen de la derecha usted puede observar cómo una cuenta es utilizada para ejecutar más de

un servicio, en la parte inferior podría seleccionar la opción para utilizar la misma cuenta para todos los servicios, en cuyo

caso solamente tendrá que escribir credenciales una vez, pero no estará cumpliendo con buenas prácticas de seguridad.

Después de configurar las cuentas, haga clic en el tab “Collation”


En Collation, observe los métodos de ordenamiento que van a ser utilizados tanto para SQL Server cómo para Analysis

Services; es importante que tenga un cuenta si existen regulaciones en su organización acerca del tipo de ordenamiento a

utilizar, y de no ser así, busque que tanto las bases de datos, cómo Analysis Services tengan modelos de ordenamiento

similares para evitar problemas cuando estos dos componentes se conecten entre sí. Haga clic en Next
Ahora, tendrá que definir si va a utilizar un modelo de autenticación Windows o Mixto, y si especifica un modelo mixto

deberá escribir una contraseña para el usuario administrador tipo SQL; Recuerde que el modo mixto permite la utilización

de inicios de sesión tipo SQL (usuarios que no hacen parte de Windows) y es utilizada para dar acceso a SQL Server desde

aplicaciones, entre otras cosas. De todas maneras se recomienda por razones de seguridad y mientras sea posible, utilizar

el modo de autenticación tipo Windows. Agregue también como administrador a cualquier usuario que vaya a cumplir con

dicha tarea, por ejemplo el usuario que está ejecutando la instalación (Add current User) Haga clic en “Data Directories”
Ahora revise las ubicaciones físicas donde va a quedar instalado SQL Server y cada uno de sus componentes, Haga clic en

Next
Agregue los usuarios que van a ser administradores de Análisis Services, puede agregar al usuario con el que está

ejecutando la instalación o a cualquier otro usuario, vaya a “Data Directories”


Revise la ubicación donde va a quedar almacenada la información de Analysis Services, haga clic en ‘’Next”
Defina en qué modo va a instalar reporting services, puede instalarlo en el modo nativo (para que pueda usar reporting

services una vez termine la instalación sin necesidad de SharePoint), otro es el modo integrado con SharePoint (que

almacenara sus reportes en una librería de reportes de SharePoint) o bien puede instalar Reporting Services pero no

configurarlo, lo cual implica que luego debería realizar dicha configuración (esta opción se utilizaría si piensa realizar una

configuración escalada de Reporting Services) Para efectos de este ejemplo, seleccionamos el modo nativo. Haga clic en

“Next”
Ahora, seleccione las opciones para que se envíen reportes de errores y de uso de características hacia Microsoft y haga

clic en “Next”
Haga clic en “Next”
Revise el resumen y haga clic en “Install”
La instalación está siendo realizada
La instalación ha sido completada
Si desea ver un resumen de la instalación, aquí encuentra un link hacia dicho registro de resumen; Haga clic en “Close”

para salir, la instalación ha sido terminada.


La instalación de todas las ediciones y componentes de SQL Server es similar al ejemplo que se mostró anteriormente,

recuerde que puede instalar todos los componentes o solo algunos de ellos en un equipo; por ejemplo, si se deseara

instalar únicamente los componentes cliente para desde allí conectarse a un servidor de SQL Server ubicado en un lugar

remoto, bastaría con seguir el mismo proceso de instalación y en la página de selección de componentes seleccionar

únicamente los componentes cliente; de la misma manera podría instalarse únicamente la documentación (libros en

pantalla), para tener una buena fuente de información y capacitación en cualquier máquina.
Conocimientos básicos de SQL Server

Existen 3 tipos de instrucciones para el lenguaje en SQL.


 Lenguaje de definición de datos (DDL) : Creación y eliminación de tipos de datos y objetos.
 CREATE : Crear Objeto
 ALTER : Modificar los datos creados
 DROP : Eliminar el Objeto
 Lenguaje de control de datos (DCL) : Se basa en los derechos que tiene el usuario sobre la base da datos
(Permisos).
 GRANT : Dar permisos a un usuario para efectuar determinadas instrucciones
 DENY : Eliminar el permiso que se ha concedido con el GRANT
 REVOKE : Eliminar todos los permisos
 Lenguaje de manipulación de datos (DML) : Desarrollo de la programación de la base de datos.
 SELECT
 INSERT
 UPDATE
 DELETE

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 línea: --
 En Bloque: /* comentario */

Tablas en SQL:
 Tabla master: Es la tabla que contiene como generar una base de datos y sobre ella, se crean todas las bases de
datos.
 Tabla model: Es la tabla modelo, las bases de datos creadas se basan en esta tabla como modelo.
 Tabla AdventureWorks, Northwind y Pubs: Son tablas de ejemplos que todo usuario puede trabajar con ellas.

Identificadores para los objetos:

Los nombres que se le dan a las tablas, lo primero es que no pueden empezar por un número, deben empezar por un signo

alfabético, pueden incluir el guion bajo ( _ ), la arroba @ y la almohadilla #.

Generalmente para las variables locales se usan @ + el nombre.

EJEMPLO: @Contador.

Para las variables totales se usan dos arrobas + el nombre @@Contador

EJEMPLO: @@Error

#Nombre: indica una tabla o procedimiento temporal (Local)

##Nombre: Igual que el anterior pero global.


Tipos de datos:
 Numéricos:
 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
 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
 Uniqueidentifier

Operadores de SQL:

 Lógicos:
 AND, OR , NOT
 De Comparación:
 = Igual
 < Menor
 > Mayor
 <> Diferente
 >= Mayor o igual
 <= Menor o igual

Creación y Administración de bases de datos - 1 de 3


Cada vez que generamos una base de datos la información de esta, se incluye dentro de la base de datos Master en la

tabla SysDataBases.

Si al crear la base de datos no establecemos una serie de valores para configurarla, toma como estos valores de la base de

datos Model, la cuál sirve de modelo para crear una base de datos por defecto.

Una base de datos está compuesta de dos tipos de archivo:

1. Archivos de datos: Es donde están guardados los datos.

a. .MDF

b. .NDF: Contiene las copias de seguridad. También vistas, tablas y consultas que se usan mas frecuentemente. Este tipo

de archivos se puede separar e instalar en diferente máquina que el resto del servidor de la base de datos, para poder

instalarlo en una máquina mas potente.

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. También sirve

como histórico ya que almacena todas las transacciones realizadas.

a. LDF

 Crear una base de datos

Para ello usaremos el comando CREATE.

CREATE DATABASE BBDD

On Primary

(Name = Nombre,

Filename = 'Ruta\NombredeArchivo.MDF',

Size = Tamaño por defecto,

MaxSize = Tamaño máximo,

Filegrowth = Porcentaje / tamaño de crecimiento)

Log on

(NAME = Nombre,
Filename = 'Ruta\NombredeArchivo.LDF',

Size = Tamaño por defecto

MaxSize = Tamaño máximo

FileGrowth = Porcentaje / tamaño de crecimiento)

 Primary: Esta parte es donde se define y configura el archivo MDF


 Log On: En esta parte es donde se define y configura el archivo LDF
 Name: Indica el nombre que tendrá el archivo MDF o LDF
 Filename: Indica la ruta donde estará almacenado el MDF o LDF y su nombre.
 Size: Indica el tamaño por defecto que tendrá el MDF o LDF
 MaxSize: Indica el tamaño máximo que puede alcanzar el MDF o LDF
 FileGrowth: Indica cuanto crecerá el archivo MDF o LDF cuando llegue a su tamaño máximo. Este tamaño lo
podemos fijar mediante porcentaje, MB o KB. Si no establecemos esta opción, cuando el archivo alcance su tamaño
máximo ya no podrá crecer mas

CREATE DATABASE Ejemplo

On Primary

(Name = EjemploData,

Filename = 'D:\Ejemplo.MDF',

Size = 5MB, MaxSize = 10MB,

Filegrowth = 20%)

Log on

(NAME = EjemploLog,

Filename = 'D:\EjemploLog.ldf',

Size = 3MB,

MaxSize = 5MB,
FileGrowth = 1MB)

El proceso CREATE DATABASE está asignando 5.00 MB en el disco 'EjemploData'.

El proceso CREATE DATABASE está asignando 3.00 MB en el disco 'EjemploLog'.

 SP_HELPDB

Muestra todas las bases de datos del servidor, con su propietario, tamaño hora de creación 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.

Creación y Administración de bases de datos - 2 de 3


 Grupos de archivos secundarios

Son los formados por archivos NDF, donde como hemos visto antes, se almacenan copias de seguridad, vistas etc.

Para crear un grupo de archivo secundario seguiremos los siguientes pasos:

1. Modificamos la base de datos para añadirle el grupo de archivos secundario, para ello usaremos Add FileGroup

Alter Database Base de datos

Add FileGroup Grupodearchivosecundario

Alter Database Ejemplo

Add FileGroup MuyConsultados

Comandos completados con éxito.

2. Modificamos la base de datos para añadir un archivo NDF físico al grupo de archivos secundario, para ello usaremos Add

File. Sintaxis:
Alter Database Base de datos

Add File

Name = ‘Nombre’,

Filename = ‘Ruta\Archivo.ndf’,

Size = Tamaño en MB

SP_HelpFile

Muestra información sobre archivos NDF.

Sintaxis: SP_HELPFILE @Filename = ‘Nombredearchivosinextensión’

 Modificar y añadir archivos a grupos de archivos secundarios

3. Mediante la opción 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 añadir un nuevo archivo NDF al archivo secundario de la base de datos elegido. Sintaxis:

Alter Database Base de datos

Add File

(Name = 'Nombre',

Filename = 'Ruta\Archivo.NDF',

Size = Tamaño por defecto,

Maxsize = Tamaño máximo)

To Filegroup Grupo de archivos secundario

Ampliando la base de datos en 10.00 MB de disco 'Ejemplodata2'

5. Con Remove File, podemos eliminar un archivo elegido de la base de datos Sintaxis:

Alter Database Base de datos

Remove File Nombre del archivo


6. Podemos modificar el tamaño de un archivo secundario mediante ShrinkFile.

Sintaxis:

DBCC ShrinkFile (Nombrearchivo, %tamañoareducir, Opcion)

Opciones:

 EmptyFile: Indica que el tamaño del archivo reducido, pase a otros archivos secundarios del mismo grupo.
 TruncateOnly: Indica que el tamaño reducido de la base de datos pasa al sistema operativo. Si no ponemos
ninguna opción esta es la opción por defecto.
 NoTruncate: Indica que el tamaño reducido de la base de datos no pasa al sistema operativo

7. ShrinkDataBase

Modifica el tamaño de la base de datos. Sintaxis:

DBCC Shrinkdatabase (Basededatos, %tamañoareducir, Opcion)

Opciones:

 EmptyFile: Indica que el tamaño del archivo reducido, pase a otros archivos secundarios del mismo grupo.
 TruncateOnly: Indica que el tamaño reducido de la base de datos pasa al sistema operativo. Si no ponemos
ninguna opción esta es la opción por defecto.
 NoTruncate: Indica que el tamaño reducido de la base de datos no pasa al sistema operativo.

Ejemplo:

Creación y Administración de bases de datos - 3 de 3

1º) Crear una base de datos de Clientes con un tamaño 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 demás 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.
Añadir dos archivos a ese grupo de archivos llamados RelacionAnual y que ocupen 5MB.

alter database Clientes


add filegroup Bajas

alter database Clientes


add file
(name='RelacionAnual1',
filename='D:\RelacionAnual1.NDF',
size=5MB)
to filegroup Bajas
alter database Clientes
add file
(name='RelacionAnual2',
filename='D:\RelacionAnual2.NDF',
size=5MB)
to filegroup Bajas

4º) Mostrar las características de los archivos que acabamos de incluir y de su grupo.

Exec sp_Helpfile @filename='RelacionAnual1'


Exec sp_Helpfile @filename='RelacionAnual2'

Exec sp_helpfilegroup 'Bajas'

5º) Eliminar uno de los archivos del grupo Bajas y modificar el otro para darle un tamaño de 10 MB.

alter Database Clientes


remove file RelacionAnual2

alter Database Clientes


modify file (Name='RelacionAnual1', size=10Mb)

6º) Reducir el tamaño de la base de datos en un 2%.

Dbcc shrinkdatabase(Clientes, 2)

7º) Volver a aumentar el tamaño de la base de datos en 5 MB más.

alter Database Clientes


modify file (Name='Clientes_Data', size=30)
8º) Poner el tamaño máximo de la base de datos a 200 MB.

alter Database Clientes


modify file (Name='Clientes_Data', maxsize=120)

alter Database Clientes


modify file (Name='Clientes_Log', maxsize=60)

alter Database Clientes


modify file (Name='RelacionAnual1', maxsize=20)
9º) Eliminar el grupo de Bajas de la base de datos junto con sus archivos. Eliminar también la base de datos.

alter Database Clientes


remove file relacionanual1

alter Database Clientes


remove filegroup bajas

use master
go
drop database Clientes
Creación de tipos de datos y tablas

1. Creación 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.

Para crear un nuevo tipo de dato se usa sp_addtype:

sp_addtype nombre,' tipo de dato', [NULL | NOT NULL ], [propietario]

Ejemplo:
EXEC sp_addtype Ciudad, 'nvarchar(15)', NULL

Con esto borras el dato:

EXEC sp_droptype Ciudad


2. Creación y eliminación de una tabla

Para crear una tabla se utiliza la siguiente sintaxis

CREATE TABLE NombreTabla


(NombreColumna TipoDato [NULL | NOT NULL ])

El valor por defecto es NULL

Ejemplo:

create table productos


(
codigo varchar(15) not null,
descripcion varchar(50) not null,
precio money null,
stock int
)
Para eliminarla una tabla se utiliza la siguiente sintaxis

DROP TABLE NombreTabla


Ejemplo:

drop table productos

3. Agregar y quitar columnas

Para agregar una columna la sintaxis es la siguiente:

ALTER TABLE NombreTabla ADD NombreColumna TipoDato NULL

Ejemplo:

create table Pais


(
codigo char(6) not null,
nombre varchar(45) not null
)
alter table Pais add anio int null

Para quitar una columna la sintaxis es la siguiente:

ALTER TABLE NombreTabla DROP COLUMN NombreColumna

Ejemplo:

alter table Pais drop column anio

4. Generación de valores de columnas

Uso de propiedad IDENTITY

Es un tipo de dato que genera valores y los incrementa. Un contador.


Sólo una columna con Identity, el tipo de dato debe ser entero int, numerico numeric o decimal, estos dos
últimos con escala cero.

Sintaxis:

CREATE TABLE Tabla (Columna TipoDato IDENTITY([inicial, incremento ]) NOT NULL)

Debe ser obligatorio que sea NOT NULL.

Inicial e incremento son opcionales y por defecto comenzarian en 1,1.


Ejemplo:

create table NINONINO


(
identidad int identity(1,1) not null,
apellido nvarchar(10) null
)

Uso función NEWID y tipo de datos UNIQUEIDENTIFIER

Pueden cambiarse sin volver a crear la tabla


Requieren comprobación de errores
Comprueban datos existentes

Ejemplo:
Restricciones de tablas en una base de datos

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_restricción ] default expresión

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
 Sólo 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 automáticamente
 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 restricción que solamente me permita

insertar Productos que esten en una Categoria de la tabla Categoria"


Característica orientada a las claves externas

 Integridad referencial en cascada

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

Dadas las tablas y columnas

-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 restricción 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.

 Deshabilitacion de restricciones

Deshabilitación para la comprobación de los datos existentes o Aplicable a Check y Foreign Key o Utilizar la opción With

NoCheck

Sintaxis parcial

Alter Table [With Check | With NoCheck]

Add Constrain restriccion { Foreign key (Columna,…)

References TablaRef (Columna,…) { Check (Condicion)}

 Restricción de una tabla consigo misma

alter table employees

with NoCheck add Constraint Fk_employees_employees

Foreign Key (ReportsTo) References employees(EmployeeId)


alter table emp2

with NoCheck add Constraint FK_Emp_Dir

Foreign Key (Dir) References emp2(Emp_no)

 Deshabilitación al cargar nuevos datos

Los datos verifican la restricción

Datos que no cumplen la restricción pero que se quieren guardar en la tabla

Sintaxis parcial

Alter Table tabla {Check | NoCheck }

Constraint {All | Restricción 1, … } => Para hacer la restriccion a todo , o a sólo lo que está separado por comas “,”

 Deshabilita la restricción hecha antes

alter table employees NoCheck Constraint Fk_Employees_Employees

Con esto introduces los datos y vuelves a habilitar la restricción

Solamente en restricciones de tipo Check y Foreign Key


Valores predeterminados y las reglas como objetos
independientes

Tener en cuenta:

- Se definen una vez

- Pueden vincularse a una o mas columnas o a tipos de datos definidos por el usuario

- Toda regla asociada a la columna y a los tipos de datos valida el valor de un valor predeterminado

- Cualquier restricción CHECK sobre la columna debe validar el valor de un valor predeterminado

- No se puede crear una restricción DEFAULT en una columna que este definida con un tipo de datos definido por el usuario

si dicha columna o tipo tuvieran un valor predeterminado

 DEFAULT

Sintaxis

CREATE DEFAULT Nombre AS Expresión

Procedimientos de sistema para valores predeterminados

 sp_helpconstraint: muestra todas las restricciones que tiene una tabla


 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

CREATE DEFAULT Telefono_default AS '(00)000-0000'

GO

EXEC sp_bindefault Telefono_default,'Customers.Phone'


Al desvincularlo de la tabla se invierten los valores

EXEC sp_unbindefault 'Customers.Phone', Telefono_default

use northwind

EXEC sp_helpconstraint products

Para eliminar varios objetos de la base de datos con una sola sentencia

DROP DEFAULT Nombre

 REGLAS

- Puede contener cualquier expresión valida para una clausula WHERE

- Una columna o tipo de dato definido por el usuario solo puede tener asociado una regla

Sintaxis

CREATE RULE NombreRegla AS Condición

Procedimientos almacenados de sistema para las reglas:


 sp_bindrule: vincula una regla a la tabla
 sp_unbindrule: desvincula una regla de la tabla

use Hospital

create rule Funcion_Rule

as

@Funcion in('INTERINO','ENFERMERO','ENFERMERA')

GO
EXEC sp_bindrule Funcion_rule,'Plantilla.Funcion'

Para desvincular la regla de la tabla se invierten los valores

EXEC sp_unbindrule 'Plantilla.Funcion', Funcion_rule

Si fuese un intervalo de valores se podría hacer asi

use northwind

GO

CREATE RULE regioncode_rule

AS @regioncode >=1000 and @regioncode <=100

GO

EXEC sp_bindrule regioncode_rule,'Customers.Region'


O también

use northwind

GO

CREATE RULE regioncode_rule AS @regioncode like '[0-9][0-9 ][ 0-9]'

GO

EXEC sp_bindrule regioncode_rule,'Customers.Region'

Para borrar la regla se pone

DROP RULE NombreRegla


A continuación, 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.

Exec sp_helptext Funcion_Rule

Exec sp_rename Oficio_rule, Funcion_Regla

Advertencia: al cambiar cualquier parte del nombre de un objeto pueden dejar de ser válidas secuencias de comandos y

procedimientos almacenados. El object ha cambiado su nombre por 'Funcion_Regla'.

Tabla para evaluar la integridad de los datos


Estructuras de las tablas en SQL Server - 1 de 2

1. Crear una nueva base de datos con un tamaño de 10 MB llamada Escuela.

create database Escuela


on primary
(
name = Escuela_Data ,
filename = 'D:\Escuela_Data.mdf' ,
size = 5MB ,
maxsize = 10MB ,
filegrowth = 2%
)
log on
(
name = Escuela_Log ,
filename = 'D:\Escuela_Log.ldf' ,
size = 5MB ,
maxsize = 10MB ,
filegrowth = 2%
)
GO
2. Crear tipos de datos que contengas los datos más comunes para nuestra base de datos. (Mirar las bases
de datos y cuales son sus campos más comunes). Comprobar si se han introducido correctamente estos
datos, mostrando solamente los Tipos de dato que hayamos introducido.

use Escuela
GO
exec sp_addtype TNoNulo,'nvarchar(15)','Not null'
exec sp_addtype TNulo,'nvarchar(15)','Null'

select * from systypes where name in('TNoNulo','TNulo')

3. Crear la tabla COLEGIOS con los siguientes campos:

Campos Tipo de dato Restricción

Cod_colegio Numérico Clave Principal e Identidad

Nombre Texto No permite nulos

Localidad Texto

Provincia Texto

Año_Construcción Fecha

Coste_Construcción Moneda

Cod_Region Numérico

Unico Unico Clave Única

create table colegios


(
cod_colegio int identity(1,1) not null constraint PK_Clave primary key ,
nombre TNoNulo ,
localidad TNulo ,
provincia TNulo ,
año_construccion smalldatetime null ,
coste_construccion money null ,
cod_region int null ,
Unico uniqueidentifier default Newid()
)
4. Crear la tabla PROFESORES con los siguientes campos :

Campos Tipo de dato Restricción

Cod_Profe Texto Clave Principal y no permite nulos.

Nombre Texto No permite nulos.

Apellido1 Texto

Apellido2 Texto

Edad Numérico

Localidad Texto

Provincia Texto

Salario Money

Cod_Colegio Numérico Clave ajena: COLEGIOS

create table profesores


(
cod_profe TNoNulo
constraint PK_Profesores primary key ,
nombre TNoNulo ,
apellido1 TNulo ,
apellido2 TNulo ,
edad int null ,
localidad TNulo ,
provincia TNulo ,
salario money ,
cod_colegio int null
constraint FK_Profesores foreign key(cod_colegio)
references colegios(cod_colegio)
)

5. Crear la tabla REGIONES con los siguientes campos :

Campos Tipo de dato Restricción

Cod_Region Numérico Clave Principal e Identidad

Regiones Texto No permite nulos

create table regiones


(
cod_region int identity(1,1) not null constraint PK_Regiones primary key ,
regiones TNoNulo
)

6. Crear la tabla ALUMNOS con los siguientes campos :

Campos Tipo de dato Restricción

DNI Texto Clave Principal y no permite nulos.

Nombre Texto No permite nulos

Apellido1 Texto

Apellido2 Texto

Fecha_nac Fecha/hora

Localidad Texto

Provincia Texto

Cod_Colegio Numérico Clave ajena: COLEGIOS(Cod_colegio)

create table alumnos


(
dni TNoNulo constraint PK_Alumnos primary key ,
nombre TNoNulo ,
apellido1 TNulo ,
apellido2 TNulo ,
fecha_nac smalldatetime ,
localidad TNulo ,
provincia TNulo ,
cod_colegio int constraint FK_Alumnos foreign key(cod_colegio) references colegios(cod_colegio)
)
7. Crear una nueva relación entre el campo Cod_Region de la tabla REGIONES y Cod_Region de la tabla
colegios.

alter table colegios


add constraint FK_colegios
foreign key(cod_region)
references regiones(cod_region)

8. Crear un gráfico que muestre las relaciones que se han obtenido en la base de datos hasta ahora :
Estructuras de las tablas en SQL Server - 2 de 2

9. Añadir el campo Sexo, Fecha de nacimiento y Estado Civil a la tabla Profesores :

Alter Table Profesores


add Sexo nvarchar(6) null ,
Fecha_Nac smalldatetime null ,
[Estado Civil] nvarchar(12) null
10. Eliminar el campo Edad de la tabla Profesores :

alter table Profesores


drop column Edad

11. Añadir el campo Sexo, Dirección y Estado Civil a la tabla Alumnos :

Alter Table Alumnos


add Sexo nvarchar(6) null ,
Direccion varchar(80) null ,
[Estado Civil] nvarchar(12) null

12. Borrar la relación existente entre la tabla profesores y Colegios :

sp_helpconstraint profesores
sp_helpconstraint colegios
alter table profesores drop constraint fk_profesores
13. Crear de nuevo la relación borrada en el ejercicio anterior que tenga relación en cascada y actualización :

alter table profesores


add constraint FK_Profesores foreign key(cod_colegio)
references colegios(cod_colegio) on update cascade
on delete cascade

14. Agregar un identificador único en la tabla Regiones :

alter table regiones add Unico uniqueidentifier default newid()


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 mínimo en cada tabla.

- TABLA REGIONES

Insert into Regiones (Regiones) values('MADRID')


Insert into Regiones (Regiones) values('COMUNIDAD VALENCIANA')
Insert into Regiones (Regiones) values('CATALUÑA')

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
Ahora podemos insertar el registro que faltaba:

 TABLA COLEGIOS
Antes de insertar verifica el código de la región. Debe ser el que te genero la tabla regiones.

insert into Colegios (nombre,localidad ,provincia,año_construccion ,coste_construccion,cod_region) values


('PADRE POVEDA','MADRID','MADRID','01/01/65',1129876,3)
insert into Colegios (nombre,localidad ,provincia,año_construccion ,coste_construccion,cod_region) values
('CARMELITAS','ALICANTE','ELCHE','01/01/49',298763,5)
insert into Colegios (nombre,localidad ,provincia,año_construccion ,coste_construccion,cod_region) values
('SAN PEP','BARCELONA','BARCELONA','01/01/63',234567,6)
SELECT IDENT_SEED('REGIONES') AS [PRIMER VALOR]

SELECT IDENT_CURRENT('REGIONES') AS [VALOR ACTUAL]

SELECT IDENT_INCR('REGIONES') AS [INCREMENTO]

SELECT IDENTITYCOL,REGIONES FROM REGIONES


 TABLA ALUMNOS

insert into alumnos (dni,Nombre,Apellido1,Apellido2 ,Fecha_nac,Localidad,Provincia,Cod_Colegio) values


('54132456-R','Marta','Serrano','Lopez','15/03/93','MADRID','MADRID',6)

PARA INTRODUCIR AL SIGUIENTE ALUMNO HAY QUE CAMBIAR LA COLUMNA DE LOCALIDAD PARA QUE ADMITA

MAS CARACTERES.
alter table alumnos alter column Localidad nvarchar(50) null

insert into alumnos (dni,Nombre,Apellido1,Apellido2 ,Fecha_nac,Localidad,Provincia,Cod_Colegio) values ('3414356-

R','Javier','Morgado','Palomo','15/03/93','ARENALES DEL SOL','ALICANTE',11)

insert into alumnos (dni,Nombre,Apellido1,Apellido2 ,Fecha_nac,Localidad,Provincia,Cod_Colegio) values ('3254353-

R','Miguel','Torres','Tormo','15/03/95','LLOBREGAT','BARCELONA',12)

16. Eliminar un tipo de dato que hayamos usado en las tablas :

exec sp_droptype TNulo


No se puede eliminar el dato porque está vinculado a una tabla, para poder eliminarlo deberíamos modificar
la tabla y cambiar todos los campos donde el dato está presente.

17. Borrar la tabla Regiones :

drop table regiones

¿Qué ocurre?. ¿Cómo lo solucionamos?

Servidor: mensaje 3726, nivel 16, estado 1, línea 1


No se puede quitar el objeto 'regiones'. Hay una referencia a él en una restricción FOREIGN KEY.

Se soluciona quitando las dependencias que tienen la tablas.

Borrar todas las tablas, tipos de datos y base de datos. Realizarlo en el siguiente orden.

drop table alumnos


drop table profesores
drop table colegios
drop table regiones
go
exec sp_droptype TNulo
exec sp_droptype TNoNulo
go
use master
go
drop database Escuela
Restricciones, valores por defecto y reglas en SQL
Server

1. Crear una nueva base de datos llamada Prueba y las tablas Emp y Dept. Crear la integridad de los datos utilizando

reglas, valores por defecto entre otros, dependiendo del análisis que hagamos previamente.
 Creo la base de datos

create database Prueba

on primary

(Name = 'Prueba_Data' ,

Filename = 'D:\Prueba_Data.mdf' ,

Size = 5MB ,

MaxSize = 8MB ,

Filegrowth = 2%)

Log on

(Name = 'Emp_Log' ,

Filename = 'D:\Prueba_Log.ldf' ,

Size = 6MB ,

MaxSize = 8MB ,

Filegrowth = 2%)
 Creo las tablas y utilizo los valores Null y Not Null convenientemente.

use Prueba

go

create table Emp

(Emp_no int not null ,

Apellido nvarchar(20) not null ,

Oficio nvarchar(20) not null ,

Dir int null ,

Fecha_alt smalldatetime null ,

Salario int null ,

Comision int null ,

Dept_no int null)

go

create table Dept

(Dept_no int not null ,

Dnombre nvarchar(19) not null ,

Loc nvarchar(20) null)


 Poner Restricción Primary Key en Departamento

Alter Table Dept

add constraint PK_Dept Primary Key(Dept_no)

 Poner Primary Key en Empleados

Alter Table Emp

add constraint Pk_Emp Primary Key(Emp_no)


 Poner la Foreign Key en Empleados

Alter Table Emp

add constraint FK_Emp Foreign Key (Dept_no)

references Dept (Dept_no)

on Update Cascade

on Delete Cascade

 Creo una restricción Check para el Salario

Alter Table Emp

add constraint CK_Salario Check (Salario > 0)

 Creo una restricción Check para la Comisión

Alter Table Emp

add constraint CK_Comisión Check (Comision >= 0)


 Creo una restricción Check para la Fecha

Alter Table Emp

add constraint CK_Fecha Check (Fecha_alt > '01/01/1970' and Fecha_alt <= GetDate())

 Creo un Valor Predeterminado para Fecha

alter table Emp

add constraint DF_Fecha Default GetDate() for Fecha_alt

 Creo un Valor Predeterminado Comisión

Alter Table Emp

add constraint DF_Comision Default 0 for Comision


 Creo una restricción Default para la localidad en Departamento

Alter Table Dept

add constraint DF_Loc Default 'DESCONOCIDA' for Loc

 Creo una regla para que todos los empleados tengan asociado director

GO

Create Rule Director_Rule as @Director in(7566,7698,7782,7839)

GO

--Para vincular regla a la columna

exec sp_bindrule Director_Rule, 'Emp.Dir'

--Para desvincular regla a la columna

exec sp_unbindrule 'Emp.Dir', Director_Rule


2. Insertar los datos convenientemente para verificar la integridad de nuestra base de datos
 Inserto un departamento

 Inserto un empleado
 Cambio el código de director (Dir) a uno que exista en la regla.

 Cambio la fecha de ingreso del empleado (Fecha_alt) a una que este entre el intervalo definido en la restricción
Check.
Estructura de Base de Datos Hospital - Ejemplo

Saludos a todos los seguidores de este tutorial.

Para los temas y ejemplos siguientes vamos a necesitar esta base de datos llamada hospital, la cual nos proporcionará el

soporte para nuestras consultas SQL.

Si deseas la puedes crear a manera de practicas desde tu editor SQL o bien puedes descargarlo desde el link que dejo al

final de esta publicación o también desde el indice de esta serie de publicaciones.

Sin mas preámbulos les presento la estructura de la base de datos Hospital. Vamos a sacarle el máximo de provecho.
SCRIPT SQL DE LA BASE DE DATOS HOSPITAL

--Creación de la base de datos Hospital


--
USE MASTER
GO
CREATE DATABASE Hospital
On Primary
(Name = EjemploData,
Filename = 'D:\Hospital.mdf',
Size = 5MB, MaxSize = 10MB,
Filegrowth = 20%)
Log on
(NAME = EjemploLog,
Filename = 'D:\Hospital.ldf',
Size = 3MB,
MaxSize = 5MB,
FileGrowth = 1MB)
GO
USE Hospital
GO
CREATE TABLE Dept
(
Dept_No INT NOT NULL,
DNombre VARCHAR(50) NULL,
Loc VARCHAR(50) NULL,
CONSTRAINT PK_Dept PRIMARY KEY(Dept_No)
)
GO
CREATE TABLE Emp
(
Emp_No INT NOT NULL,
Apellido VARCHAR(50) NULL,
Oficio VARCHAR(50) NULL,
Dir INT NULL,
Fecha_Alt SMALLDATETIME NULL,
Salario NUMERIC(9,2) NULL,
Comision NUMERIC(9,2) NULL,
Dept_No INT NULL
CONSTRAINT PK_Emp PRIMARY KEY(Emp_No),
CONSTRAINT FK_Emp_Dept FOREIGN KEY (Dept_No) REFERENCES Dept(Dept_No)
)
GO
CREATE TABLE Hospital
(
Hospital_Cod INT NOT NULL,
Nombre VARCHAR(50) NULL,
Direccion VARCHAR(50) NULL,
Telefono VARCHAR(50) NULL,
Num_Cama INT NULL,
CONSTRAINT PK_Hospital PRIMARY KEY(Hospital_Cod)
)
GO
CREATE TABLE Doctor
(
Doctor_No INT NOT NULL,
Hospital_Cod INTNOT NULL,
Apellido VARCHAR(50) NULL,
Especialidad VARCHAR(50) NULL
CONSTRAINT PK_Doctor PRIMARY KEY(Doctor_No),
CONSTRAINT FK_Doctor_Hospital FOREIGN KEY (Hospital_Cod) REFERENCES Hospital(Hospital_Cod)
)
GO
CREATE TABLE Sala
(
Sala_Cod INT NOT NULL,
Hospital_Cod INT NOT NULL,
Nombre VARCHAR(50) NULL,
Num_Cama INT NULL
CONSTRAINT PK_Sala PRIMARY KEY(Sala_Cod,Hospital_Cod),
CONSTRAINT FK_Sala_Hospital FOREIGN KEY (Hospital_Cod) REFERENCES Hospital(Hospital_Cod)
)
GO
CREATE TABLE Plantilla
(
Empleado_No INT NOT NULL,
Sala_Cod INT NOT NULL,
Hospital_Cod INTNOT NULL,
Apellido VARCHAR(50) NULL,
Funcion VARCHAR(50) NULL,
T VARCHAR(15) NULL,
Salario NUMERIC(9,2) NULL
CONSTRAINT PK_Plantilla PRIMARY KEY(Empleado_No),
CONSTRAINT FK_Plantilla_Sala01 FOREIGN KEY (Sala_Cod,Hospital_Cod) REFERENCES
Sala(Sala_Cod,Hospital_Cod)
)
GO
CREATE TABLE Enfermo
(
Inscripcion INT NOT NULL,
Apellido VARCHAR(50) NULL,
Direccion VARCHAR(50) NULL,
Fecha_Nac VARCHAR(50) NULL,
S VARCHAR(2) NULL,
NSS INT NULL
)

Insertar Datos en SQL Server - Ejemplo Hospital

Saludos a todos los seguidores de este tutorial.

En la publicación anterior creamos la base de datos de ejemplo llamada Hospital, la cual


nos servirá para las próximas publicaciones que se realizarán.

Bien, ahora nos toca insertar datos en las tablas. La sintaxis SQL de inserción "para datos
fijos o ingresados de forma manual" la podemos clasificar en 3 formas:

 INSERT INTO nombre_tabla VALUES (valor1,valor2,valor3,...)


 INSERT INTO nombre_tabla (columna1,columna2,columna3,...) VALUES
(valor1,valor2,valor3,...)
 INSERT INTO nombre_tabla (columna1,columna2,columna3,...) VALUES
(valor1,valor2,valor3,...), (valor1,valor2,valor3,...), (valor1,valor2,valor3,...),
(valor1,valor2,valor3,...), ...
Ya conociendo la sintaxis, podemos insertar los datos. Al final de la publicación dejo el
script SQL con los datos listos para insertar. A manera de practica intenta insertar los
datos de algunas de las siguientes tablas.
Tabla DEPT

Tabla DOCTOR

Tabla EMP

Tabla ENFERMO
Tabla HOSPITAL

Tabla PLANTILLA

Tabla SALA
--***Insertar datos en las tablas de la Base de Datos de ejemplo llamada HOSPITAL***
--Trataremos de mostrar las tres formas de insertar datos fijos o que no provienen de ninguna otra tabla
--
--Insertar datos en la table Dept
INSERT INTO Dept(Dept_No,DNombre,Loc) VALUES(10,'CONTABILIDAD','ELCHE')
INSERT INTO Dept(Dept_No,DNombre,Loc) VALUES(20,'INVESTIGACIÓN','MADRID')
INSERT INTO Dept(Dept_No,DNombre,Loc) VALUES(30,'VENTAS','BARCELONA')
INSERT INTO Dept(Dept_No,DNombre,Loc) VALUES(40,'PRODUCCIÓN','SALAMANCA')
GO
--Insertar datos en la tabla Emp
INSERT INTO Emp( Emp_No, Apellido, Oficio, Dir, Fecha_Alt, Salario, Comision, Dept_No)
VALUES
(7369,'SANCHEZ','EMPLEADO',7902,'17/12/1980',10400,0,20),
(7499,'ARROYO','VENDEDOR',7698,'22/02/1981',208000,39000,30),
(7521,'SALA','VENDEDOR',689,'22/02/1981',162500,65000,30),
(7566,'JIMENEZ','DIRECTOR',7839,'02/04/1981',386750,0,20),
(7654,'MARTIN','VENDEDOR',7698,'28/09/1981',182000,182000,30),
(7698,'NEGRO','DIRECTOR',7839,'01/05/1981',370500,0,30),
(7782,'CEREZO','DIRECTOR',7839,'09/06/1981',318500,0,10),
(7788,'NINO','ANALISTA',7566,'30/03/1987',390000,0,20),
(7839,'REY','PRESIDENTE',0,'17/11/1981',650000,0,10),
(7844,'TOVAR','VENDEDOR',7698,'08/09/1981',195000,0,30),
(7876,'ALONSO','EMPLEADO',7788,'03/05/1987',143000,0,20),
(7900,'JIMENO','EMPLEADO',7698,'03/12/1981',123500,0,30),
(7902,'FERNANDEZ','ANALISTA',7566,'03/12/1981',390000,0,20),
(7934,'MUÑOZ','EMPLEADO',7782,'23/06/1982',169000,0,10),
(7119,'SERRA','DIRECTOR',7839,'19/11/1983',225000,39000,20),
(7322,'GARCIA','EMPLEADO',7119,'12/10/1982',129000,0,20)
GO
--Insertar datos en la tabla Hospital
INSERT INTO Hospital(Hospital_Cod,Nombre,Direccion,Telefono, Num_Cama) VALUES(19,'Provincial','O Donell
50','964-4256',502)
INSERT INTO Hospital(Hospital_Cod,Nombre,Direccion,Telefono, Num_Cama) VALUES(18,'General','Atocha
s/n','595-3111',987)
INSERT INTO Hospital(Hospital_Cod,Nombre,Direccion,Telefono, Num_Cama) VALUES(22,'La Paz','Castellana
1000','923-5411',412)
INSERT INTO Hospital(Hospital_Cod,Nombre,Direccion,Telefono, Num_Cama) VALUES(45,'San Carlos','Ciudad
Universitaria','597-1500',845)
GO
--Insertar datos en la tabla Doctor
INSERT INTO Doctor(Hospital_Cod,Doctor_No,Apellido,Especialidad) VALUES(22,386,'Cabeza D.','Psiquiatría')
INSERT INTO Doctor(Hospital_Cod,Doctor_No,Apellido,Especialidad) VALUES(22,398,'Best D.','Urología')
INSERT INTO Doctor(Hospital_Cod,Doctor_No,Apellido,Especialidad) VALUES(19,435,'López A.','Cardiología')
INSERT INTO Doctor(Hospital_Cod,Doctor_No,Apellido,Especialidad) VALUES(22,453,'Galo D.','Pediatría')
INSERT INTO Doctor(Hospital_Cod,Doctor_No,Apellido,Especialidad) VALUES(45,522,'Adams C.','Neurología')
INSERT INTO Doctor(Hospital_Cod,Doctor_No,Apellido,Especialidad) VALUES(18,585,'Miller G.','Ginecología')
INSERT INTO Doctor(Hospital_Cod,Doctor_No,Apellido,Especialidad) VALUES(45,607,'Chuki P.','Pediatría')
INSERT INTO Doctor(Hospital_Cod,Doctor_No,Apellido,Especialidad) VALUES(18,982,'Cajal R.','Cardiología')
GO
--Insertar datos en la tabla Sala
INSERT INTO SALA VALUES(1,22,'Recuperación',10)
INSERT INTO SALA VALUES(1,45,'Recuperación',15)
INSERT INTO SALA VALUES(2,22,'Maternidad',34)
INSERT INTO SALA VALUES(2,45,'Maternidad',24)
INSERT INTO SALA VALUES(3,19,'Cuidados Intensivos',21)
INSERT INTO SALA VALUES(3,18,'Cuidados Intensivos',10)
INSERT INTO SALA VALUES(4,18,'Cardiología',53)
INSERT INTO SALA VALUES(4,45,'Cardiología',55)
INSERT INTO SALA VALUES(6,19,'Psiquiátricos',67)
INSERT INTO SALA VALUES(6,22,'Psiquiátricos',118)
GO
--Insertar datos en la tabla Plantilla
INSERT INTO Plantilla(Hospital_Cod,Sala_Cod,Empleado_No,Apellido, Funcion, T, Salario)
VALUES
(22,6,1009,'Higueras D.','Enfermera','T',200500),
(45,4,1280,'Amigo R.','Interino','N',221000),
(19,6,3106,'Hernández','Enfermero','T',275000),
(19,6,3754,'Díaz B.','Enfermera','T',226200),
(22,1,6065,'Rivera G.','Enfermera','N',162600),
(18,4,6357,'Karplus W.','Interino','T',337900),
(22,1,7379,'Carlos R.','Enfermera','T',211900),
(22,6,8422,'Bocina G.','Enfermero','M',183800),
(45,1,8526,'Frank H.','Enfermera','T',252200),
(22,2,9901,'Núñez C.','Interino','M',221000)
GO
--Insertar datos en la tabla Enfermo
INSERT INTO Enfermo(Inscripcion,Apellido,Direccion,Fecha_Nac,S,NSS)
VALUES
(10995,'Laguía M.','Goya 20','16-may-56','M',280862422),
(14024,'Fernández M.','Recoletos 50','21-may-60','F',284991452),
(18004,'Serrano V.','Alcalá 12','23-jun-67','F',321790059),
(36658,'Domin S.','Mayor 71','01-ene-42','M',160654471),
(38702,'Neal R.','Orense 11','18-jun-40','F',380010217),
(39217,'Cervantes M.','Perón 38','29-feb-52','M',440294390),
(59076,'Miller B.','López de Hoyos 2','16-sep-45','F',311969044),
(63827,'Ruiz P.','Ezquerdo 103','26-dic-80','M',100973253),
(64823,'Fraiser A.','Soto 3','10-jul-80','F',285201776),
(74835,'Benítez E.','Argentina','05-oct-57','M',154811767)

Consultas de Selección en SQL Server - Parte 1

Bien es momento de utilizar la base de datos "Hospital" creada en publicaciones anteriores, para realizar las
básicas consultas de selección, que se presentan en toda aplicación informática.

Si no tienes la base de datos Hospital, te invito a volver al indice y descargarla.

A manera de práctica, 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.

1. Mostrar todos los datos de los empleados de nuestra tabla emp.

1 SELECT * FROM EMP


2. Mostrar el apellido, oficio, salario, salario anual, con las dos extras para aquellos empleados con comisión
mayor de 100000.

1 SELECT APELLIDO, OFICIO,

2 SALARIO, SALARIO * 14 AS 'SALARIO ANUAL' FROM EMP

3 WHERE COMISION > 100000

3. Idéntico del anterior, pero para aquellos empleados que su salario anual con extras supere los 2200000

1 SELECT APELLIDO, OFICIO,

2 SALARIO, SALARIO * 14 AS 'SALARIO ANUAL' FROM EMP

3 WHERE SALARIO * 14 > 2200000


4. Idéntico del anterior, pero para aquellos empleados que sumen entre salario anual con extras y comisión
los 3 millones.

1 SELECT APELLIDO, OFICIO,

2 SALARIO, SALARIO * 14 AS 'SALARIO ANUAL' FROM EMP

3 WHERE SALARIO * 14 + comision > 3000000

5. Mostrar todos los datos de empleados ordenados por departamento y dentro de este por oficio para tener
una visión jerárquica.
?

1 SELECT * FROM EMP ORDER BY DEPT_NO, OFICIO

6. Mostrar todas las salas para el hospital 45.

1 SELECT * FROM SALA WHERE HOSPITAL_COD = 45

7. Mostrar todos los enfermos nacidos antes de 1970.

1 SELECT * FROM ENFERMO WHERE FECHA_NAC < '1970-01-01'


Consultas de Selección en SQL Server - Parte 2

8. Igual que el anterior, para los nacidos antes de 1970 ordenados por número de inscripción descendente

1 SELECT * FROM ENFERMO WHERE CAST(FECHA_NAC AS DATE) < '01/01/1970'

2 ORDER BY INSCRIPCION DESC

9. Listar todos los datos de la plantilla del hospital del turno de mañana

1 SELECT * FROM PLANTILLA WHERE T ='M'


10. Idem del turno de noche.

1 SELECT * FROM PLANTILLA WHERE T='N'

11. Visualizar los empleados de la plantilla del turno de mañana que tengan un salario entre 200000 y
225000.

1 SELECT * FROM PLANTILLA WHERE SALARIO BETWEEN 200000 AND 225000

12. Visualizar los empleados de la tabla emp que no se dieron de alta entre el 01/01/80 y el 12/12/82.

1 SELECT * FROM EMP WHERE FECHA_ALT NOT BETWEEN '01/01/1980' AND '31/12/1982'
13. Mostrar los nombres de los departamentos situados en Madrid o en Barcelona.

1 SELECT DNOMBRE FROM DEPT WHERE LOC IN ('MADRID','BARCELONA')

Consultas de Selección en SQL Server - Parte 3

14. Mostrar aquellos empleados con fecha de alta posterior al 1 de Julio de 1985.

1 SELECT * FROM EMP

2 WHERE FECHA_ALT > '01-07-1985'

15. Lo mismo que en el ejercicio 14 pero con salario entre 150000 y 400000.

1 SELECT * FROM EMP


2
WHERE FECHA_ALT > '01-07-1985'
3
AND SALARIO BETWEEN 150000 AND 4000000

16. Igual que en el ejercicio 15, pero también incluimos aquellos que no siendo analista pertenecen al
departamento 20.

1 SELECT * FROM EMP

2 WHERE FECHA_ALT > '01-07-1985'

3 AND SALARIO BETWEEN 150000 AND 4000000

4 OR (OFICIO <> 'ANALISTA' AND DEPT_NO = 20)

17. Mostrar aquellos empleados cuyo apellido termine en ‘Z’ ordenados por departamento, y dentro de este
por antigüedad.

1 SELECT * FROM EMP

2 WHERE APELLIDO LIKE '%Z'

3 ORDER BY DEPT_NO, FECHA_ALT ASC


18. De los empleados del ejercicio 17 quitar aquellos que superen los 200000 mensuales.

1 SELECT * FROM EMP

2 WHERE APELLIDO LIKE '%Z'

3 AND SALARIO > 200000

4 ORDER BY DEPT_NO, FECHA_ALT ASC

19. Mostrar todos los empleados cuyo oficio no sea analista.

1 SELECT * FROM EMP

2 WHERE OFICIO <> 'ANALISTA'


20. Igual que el ejercicio 19, pero mostrándolos de forma que se aprecien las diferencias de salario dentro de
cada oficio.

1 SELECT * FROM EMP

2 WHERE OFICIO <> 'ANALISTA'

3 ORDER BY OFICIO, SALARIO DESC


21. Del ejercicio 20, nos quedamos solo con aquellos cuyo número de empleado no este entre 7600 y 7900.

1 SELECT * FROM EMP

2 WHERE OFICIO <> 'ANALISTA'

3 AND EMP_NO NOT BETWEEN 7600 AND 7900

4 ORDER BY OFICIO, SALARIO DESC

Consultas de Selección en SQL Server - Parte 4


22. Mostrar los distintos oficios de los empleados.

1 SELECT DISTINCT OFICIO FROM EMP

23. Mostrar los distintos nombres de sala.

1 SELECT DISTINCT NOMBRE FROM SALA

24. Mostrar que personal “No Interino” existe en cada sala de cada hospital, ordenado por hospital y sala.

1 SELECT HOSPITAL_COD, SALA_COD, APELLIDO, FUNCION

2 FROM PLANTILLA

3 WHERE FUNCION NOT IN ('INTERINO')

4 ORDER BY HOSPITAL_COD, SALA_COD


25. Justificar el resultado de la siguiente consulta SELECT APELLIDO DISTINCT DEPT_NO FROM EMP
Indicar que ocurre y modificarla para que todo vaya bien.

1 SELECT DISTINCT APELLIDO,DEPT_NO FROM EMP

26. Seleccionar los distintos valores del sexo que tienen los enfermos.

1 SELECT DISTINCT S AS "SEXO"

2 FROM ENFERMO
27. Indicar los distintos turnos de la plantilla del hospital, ordenados por turno y por apellido.

1 SELECT DISTINCT T AS "TURNO", APELLIDO

2 FROM PLANTILLA

3 ORDER BY TURNO, APELLIDO

28. Seleccionar las distintas especialidades que ejercen los médicos, ordenados por especialidad y apellido.

1 SELECT DISTINCT ESPECIALIDAD, APELLIDO

2 FROM DOCTOR

3 ORDER BY ESPECIALIDAD, APELLIDO


Operador LIKE - SQL Server

Veamos este interesante tema, de frente al punto como dicen algunos.

Like utiliza los siguientes comodines para un determinado fin :

% Cualquier número de caracteres


_ Para un carácter individual
[ ] Para un conjunto de caracteres que esté dentro del corchete
[ ^ ] Que el carácter 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.

Ahora veamos todo esto en la práctica.


1. Seleccionar todos los empleados cuyo apellido comience por M
?

1 SELECT * FROM EMP WHERE APELLIDO LIKE 'M%'

2. Seleccionar todos los empleados cuyo apellido termine con la letra Z

1 SELECT * FROM EMP WHERE APELLIDO LIKE '%z'

3. Seleccionar todos los empleados que contengan en su apellido ER.

1 SELECT * FROM EMP WHERE APELLIDO LIKE '%er%'


4. Mostrar todos los empleados cuyo nombre sea de 4 letras y su apellido termine con la letra a

1 SELECT * FROM EMP WHERE APELLIDO LIKE '___a'

5. Mostrar todos los empleados cuyo apellido comience entre las letras E y F.

1 SELECT * FROM EMP WHERE APELLIDO LIKE '[E-F]%'

6. Mostrar todos los empleados cuyo apellido comience por la letra A, contenga dentro de su apellido de la
letra A a la M y que terminen en O.

1 SELECT * FROM EMP WHERE APELLIDO LIKE 'A%[a-m]%o'


7. Mostrar todos los empleados cuyo apellido comience por la letra M y la segunda letra no sea una A.

1 SELECT * FROM EMP WHERE APELLIDO LIKE 'M[^A]%'

8. Mostrar todos los empleados cuyo apellido sea de 5 letras y su tercera letra sea entra la A y la S
terminando en Z.

1 SELECT * FROM EMP WHERE APELLIDO LIKE '__[a-ñ]_z'

9. Mostrar todos los empleados cuyo apellido sea de 6 letras y no comience entre la A y la D.

1 SELECT * FROM EMP WHERE APELLIDO LIKE '[^a-d]_____'


10. Mostrar todos los que empiecen por la A y cuya cuarta letra no esté comprendida entre A – G

1 SELECT * FROM EMP WHERE APELLIDO LIKE 'A__[^a-g]%'

Funciones de agregado - Parte 1

Hola nuevamente!! Te recuerdo que para esta serie de ejercicios estamos utilizando la base de datos Hospital, la cual

puedes descargarla desde el indice. Sin más que decir vayamos al punto.

Las funciones de agregado son funciones que se utilizan para calcular valores en las tablas. Si queremos usarlas

combinándolas junto con otros campos debemos utilizar Group by y agrupar los datos que no son funciones.

Con la sentencia group by no se utiliza la clausula where, se utilizara una clausula propia de la expresión: HAVING.

Equivalente a where

 COUNT: Cuenta los registros que hay en la consulta.

Si pongo un valor dentro de la expresión devolverá la cuenta de todos los registros no nulos.

Si pongo un asterisco contará todos los registros aunque tengan valores nulos.

1 select count(*) from emp

: Valores con Nulos

1 select count(oficio) from emp

: Valores sin nulos

 AVG: Realiza la media sobre la expresión dada, debe ser un tipo de dato Int.

?
1 select avg(salario) from emp

 MAX: Saca el valor máximo de una consulta.

?
1 select max(fecha_alt) from emp

 MIN: Devuelve el valor mínimo de una consulta.

?
1 select min(fecha_alt) from emp

 SUM: Devuelve la suma de los salarios

?
1 select sum(salario) from emp

Empecemos con los ejercicios :

1. Encontrar el salario medio de los analistas, mostrando el número de los empleados con oficio analista.

?
1 SELECT COUNT(*) AS [NUMERO DE EMPLEADOS], OFICIO,

2 AVG(SALARIO) AS [SALARIO MEDIO] FROM

3 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.

?
1 SELECT OFICIO, MAX(SALARIO) AS [SALARIO MAS ALTO]

2 , MIN(SALARIO) AS [SALARIO MAS BAJO]

3 , MAX(SALARIO) - MIN(SALARIO) AS [DIFERENCIA ENTRE AMBOS]

4 FROM EMP GROUP BY OFICIO HAVING OFICIO = 'EMPLEADO'


3. Visualizar los salarios mayores para cada oficio.

?
1 SELECT OFICIO, MAX(SALARIO) AS [SALARIO MÁXIMO] FROM EMP GROUP BY OFICIO

4. Visualizar el número de personas que realizan cada oficio en cada departamento.

?
1 SELECT DEPT_NO AS [Nº DE DEPARTAMENTO],

2 COUNT(*) AS [Nº DE PERSONAS], OFICIO

3 FROM EMP GROUP BY DEPT_NO, OFICIO

4 ORDER BY 1

5. Buscar aquellos departamentos con cuatro o mas personas trabajando.

?
1 SELECT DEPT_NO AS [Nº DE DEPARTAMENTO]
2
, COUNT(*) AS [Nº DE PERSONAS] FROM EMP
3
GROUP BY DEPT_NO HAVING COUNT(*) > 3

6. Mostrar el número de directores que existen por departamento.

?
1 SELECT COUNT(*) AS [NUMERO EMPLEADOS], DEPT_NO FROM EMP

2 WHERE OFICIO = 'DIRECTOR'

3 GROUP BY DEPT_NO

7. Visualizar el número de enfermeros, enfermeras e interinos que hay en la plantilla, ordenados por la
función.

?
1 SELECT COUNT(*) AS [Nº DE PERSONAS], FUNCION FROM PLANTILLA

2 GROUP BY FUNCION

3 HAVING FUNCION IN ('ENFERMERO','ENFERMERA','INTERINO')

4 ORDER BY FUNCION
Funciones de agregado - Parte 2

8. Visualizar departamentos, oficios y número de personas, para aquellos departamentosque tengan dos o más personas

trabajando en el mismo oficio.

1 SELECT DEPT_NO AS [Nº DE DEPARTAMENTO],COUNT(*) AS [Nº DE PERSONAS],

2 OFICIO FROM EMP GROUP BY DEPT_NO,OFICIO HAVING COUNT(*) > 1

9. Calcular el salario medio, Diferencia, Máximo y Mínimo de cada oficio. Indicando el oficio y el número de
empleados de cada oficio.

1 SELECT OFICIO, COUNT(*) AS [Nº DE EMPLEADOS], MIN(SALARIO) AS [SALARIO MÍNIMO]

2 , MAX(SALARIO) AS [SALARIO MÁXIMO], MAX(SALARIO) - MIN(SALARIO) AS [DIFERENCIA]

3 , AVG(SALARIO) AS [MEDIA] FROM EMP GROUP BY OFICIO


10. Calcular el valor medio de las camas que existen para cada nombre de sala. Indicar el nombre de cada
sala y el número de cada una de ellas.

1 SELECT SALA_COD AS [SALA], NOMBRE

2 , AVG(NUM_CAMA) AS [MEDIA DE CAMAS]

3 FROM SALA GROUP BY NOMBRE, SALA_COD

11. Calcular el salario medio de la plantilla de la sala 6, según la función que realizan. Indicar la función y el
número de empleados.

1 SELECT COUNT(*) AS [Nº DE EMPLEADOS], FUNCION, AVG(SALARIO) AS [SALARIO MEDIO]

2 FROM PLANTILLA GROUP BY FUNCION, SALA_COD HAVING SALA_COD = 6

12. Averiguar los últimos empleados que se dieron de alta en la empresa en cada uno de los oficios,
ordenados por la fecha.

1 SELECT MAX(FECHA_ALT) AS [FECHA], OFICIO FROM EMP

2 GROUP BY OFICIO

3 ORDER BY 1
13. Mostrar el número de hombres y el número de mujeres que hay entre los enfermos.

1 SELECT COUNT(*) AS [NÚMERO], S AS [SEXO] FROM ENFERMO GROUP BY S

14. Mostrar la suma total del salario que cobran los empleados de la plantilla para cada función y turno.

1 SELECT FUNCION, T AS [TURNO], SUM(SALARIO) AS [SUMA DE SALARIOS]

2 FROM PLANTILLA GROUP BY FUNCION, T

15. Calcular el número de salas que existen en cada hospital.

?
1 SELECT COUNT(*) AS [Nº SALAS], HOSPITAL_COD FROM SALA

2 GROUP BY HOSPITAL_COD

16. Mostrar el número de enfermeras que existan por cada sala.

1 SELECT COUNT(*) AS [Nº PERSONAS], SALA_COD, FUNCION FROM PLANTILLA


2 WHERE FUNCION='ENFERMERA'
3 GROUP BY SALA_COD, FUNCION
4 ORDER BY 1

Consultas de combinación en SQL Server - Parte 1

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:

Select TablaPrincipal.Campo, Tablaconlaquecombinar.Campo


From TablaPrincipal
Inner Join / Full Join Tablaconlaquecombinar
On
Condición para combinar los campos
- Inner Join: Indica que combine los campos con resultados comunes
- Full Join: Indica que combine todos los campos aunque los resultados sean diferentes.

Ejemplos :

Devuelva todos los Empleados que tengan asociado un departamento.

?
1 SELECT APELLIDO,OFICIO,DNOMBRE
2 FROM EMP
3 INNER JOIN DEPT
4 ON EMP.DEPT_NO=DEPT.DEPT_NO
5 ORDER BY DEPT.DNOMBRE

La combinación Full Join muestra las coincidencias de la tabla Dept con Emp, más los valores que no
coincidan, como el departamento Producción, que no tiene empleados.

?
1 SELECT APELLIDO,OFICIO,DNOMBRE
2 FROM EMP
3 FULL JOIN DEPT
4 ON EMP.DEPT_NO=DEPT.DEPT_NO
5 ORDER BY DEPT.DNOMBRE
Se podría decir que es como la suma de utilizar left join y right join.

Consultas de combinación en SQL Server - Parte 2

Consultas Externas
Al igual que las consultas de combinación internas, combina los valores comunes de los campos indicados y
además de la tabla que queramos, devuelve también el resto de valores aunque no coincidan. Para ello
usaremos las siguientes opciones combinadas con join:

Sintaxis:

Select tablaprincipal.campo, tablaacombinar.campo


From tablaprincipal
left join / right join / cross join tabla
on condición

- 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 algún empleado que no tenga asignado un departamento, la consulta traería los datos del
empleado, pero el nombre del departamento tendría el valor null porque no tendría ningún 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 producción 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
8 INNER JOIN HOSPITAL AS H
9 ON H.HOSPITAL_COD = P.HOSPITAL_COD
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 número de camas.

Combinar los valores de una tabla sobre sí misma

Para ello crearemos dos copias de la misma tabla poniéndole un alías, 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
7 ORDER BY B.EMP_NO

También podría gustarte