Documente Academic
Documente Profesional
Documente Cultură
INDICE
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
1.
13.
1.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
1.
24.
25.
26.
Operador Union
27.
SubConsultas
28.
29.
Ejercicios de SubConsultas
30.
31.
CASE
32.
33.
Insercin de datos
34.
Eliminacin de datos
35.
Actualizacin de datos
36.
37.
1.
38.
39.
Transacciones
40.
Funciones de fecha
41.
Funciones matemticas
42.
Funciones de cadena
43.
Funciones de Sistema
44.
45.
46.
47.
48.
49.
50.
51.
52.
Vistas
Introduccin al manual
Si bien la instalacin 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 instalacin a ciegas podra terminar en una instalacin
de ms o menos servicios de los necesarios, en la implementacin de malas prcticas 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 edicin 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
informacin al respecto se encuentra en la documentacin del producto.
3. Crear cuentas para los servicios de SQL Server, estas cuentas deben ser creadas con privilegios mnimos ya que durante
el proceso de instalacin, el asistente les asignar los permisos necesarios para ejecutar los respectivos servicios.
La creacin de estas cuentas de servicio NO es obligatoria para poder instalar SQL Server, pero es una buena prctica de
seguridad
Instalando
A continuacin se muestra una gua paso a paso de la instalacin de SQL Server 2008, con sus componentes de
administracin.
En SQL Server Installation Center es posible revisar informacin detallada acerca de requerimientos para la instalacin,
recomendaciones de seguridad y adicionalmente realizar un chequeo de la configuracin del sistema.
Haga clic en System Configuration Checker
Ahora, vaya al tab Installation, y all seleccione la opcin New SQL Server stand alone installation or add features to an
existing installation
Si est instalando una versin de pruebas (cmo en este ejemplo) de SQL Server, podr seleccionar la opcin
correspondiente para la edicin que desee; en una instalacin diferente, agregue la clave de producto y haga clic en Next
Ahora, lea los trminos de licencia y luego, si est de acuerdo seleccione la opcin correspondiente y haga clic en Next
A continuacin, se instalan componentes de soporte necesarios para la instalacin, haga clic en Install para instalarlos
Ahora, deber seleccionar las caractersticas de SQL server 2008 que desea instalar; Asegrese de instalar los servicios
que en algn momento vaya a utilizar, si est totalmente seguro que no va a usar un servicio especfico cmo Analysis
Services, limpie la casilla de verificacin junto a l, y haga clic en Next
A continuacin 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 mquina o de la
direccin ip de la misma. Haga clic en Next
En la siguiente ventana, se encuentra un anlisis 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 recomendacin es utilizar diferentes
cuentas, sin embargo, en la imagen de la derecha usted puede observar cmo una cuenta es utilizada para ejecutar ms de
un servicio, en la parte inferior podra seleccionar la opcin 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 prcticas de seguridad.
Despus de configurar las cuentas, haga clic en el tab Collation
En Collation, observe los mtodos de ordenamiento que van a ser utilizados tanto para SQL Server cmo para Analysis
Services; es importante que tenga un cuenta si existen regulaciones en su organizacin acerca del tipo de ordenamiento a
utilizar, y de no ser as, busque que tanto las bases de datos, cmo 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 autenticacin Windows o Mixto, y si especifica un modelo mixto
deber escribir una contrasea para el usuario administrador tipo SQL; Recuerde que el modo mixto permite la utilizacin
de inicios de sesin 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 autenticacin tipo Windows. Agregue tambin como administrador a cualquier usuario que vaya a cumplir con
dicha tarea, por ejemplo el usuario que est ejecutando la instalacin (Add current User) Haga clic en Data Directories
Ahora revise las ubicaciones fsicas 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 Anlisis Services, puede agregar al usuario con el que est
ejecutando la instalacin o a cualquier otro usuario, vaya a Data Directories
Revise la ubicacin donde va a quedar almacenada la informacin 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 instalacin sin necesidad de SharePoint), otro es el modo integrado con SharePoint (que
almacenara sus reportes en una librera de reportes de SharePoint) o bien puede instalar Reporting Services pero no
configurarlo, lo cual implica que luego debera realizar dicha configuracin (esta opcin se utilizara si piensa realizar una
configuracin escalada de Reporting Services) Para efectos de este ejemplo, seleccionamos el modo nativo. Haga clic en
Next
Ahora, seleccione las opciones para que se enven reportes de errores y de uso de caractersticas hacia Microsoft y haga
clic en Next
Si desea ver un resumen de la instalacin, aqu encuentra un link hacia dicho registro de resumen; Haga clic en Close
para salir, la instalacin ha sido terminada.
La instalacin 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, bastara con seguir el mismo proceso de instalacin y en la pgina de seleccin de componentes seleccionar
nicamente los componentes cliente; de la misma manera podra instalarse nicamente la documentacin (libros en
pantalla), para tener una buena fuente de informacin y capacitacin en cualquier mquina.
Lenguaje de control de datos (DCL) : Se basa en los derechos que tiene el usuario sobre la base da datos
(Permisos).
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)
Comentarios en SQL:
En lnea: --
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.
Los nombres que se le dan a las tablas, lo primero es que no pueden empezar por un nmero, deben empezar por un signo
alfabtico, 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:
Numricos:
datetime 0,333 s
smalldatetime 1 minuto
Caracteres:
Text
Ntext
Rowversion
Binario:
Uniqueidentifier
Operadores de SQL:
Lgicos:
AND, OR , NOT
De Comparacin:
= Igual
< Menor
> Mayor
<> Diferente
Cada vez que generamos una base de datos la informacin 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 cul sirve de modelo para crear una base de datos por defecto.
Una base de datos est compuesta de dos tipos de archivo:
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
Filename = 'Ruta\NombredeArchivo.LDF',
Size = Tamao por defecto
MaxSize = Tamao mximo
FileGrowth = Porcentaje / tamao de crecimiento)
FileGrowth: Indica cuanto crecer el archivo MDF o LDF cuando llegue a su tamao mximo. Este tamao lo
podemos fijar mediante porcentaje, MB o KB. Si no establecemos esta opcin, cuando el archivo alcance su tamao
mximo ya no podr crecer mas
FileGrowth = 1MB)
SP_HELPDB
Muestra todas las bases de datos del servidor, con su propietario, tamao hora de creacin etc.
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.
1. Modificamos la base de datos para aadirle el grupo de archivos secundario, para ello usaremos Add FileGroup
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:
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:
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
5) Eliminar uno de los archivos del grupo Bajas y modificar el otro para darle un tamao de 10 MB.
alter Database Clientes
9) Eliminar el grupo de Bajas de la base de datos junto con sus archivos. Eliminar tambin la base de datos.
alter Database Clientes
remove file relacionanual1
use master
go
drop database Clientes
Ejemplo:
create table NINONINO
(
identidad int identity(1,1) not null,
apellido nvarchar(10) null
)
Sintaxis parcial
[ constraint nombre_restriccin ] default expresin
Ejemplo
alter table Producto
add constraint DF_Descripcion default 'No especifica'
for Descripcion
Check
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
Sintaxis parcial
[Constraint nombrerestriccion] primary key [Clustered | NonClustered ] columnas
Ejemplo
alter table Producto add constraint Pk_Codigo primary key nonclustered (codigo)
Unique
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
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
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.
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
CREATE DEFAULT Telefono_default AS '(00)000-0000'
GO
EXEC sp_bindefault Telefono_default,'Customers.Phone'
use northwind
EXEC sp_helpconstraint products
Para eliminar varios objetos de la base de datos con una sola sentencia
REGLAS
Sintaxis
use Hospital
create rule Funcion_Rule
as
@Funcion in('INTERINO','ENFERMERO','ENFERMERA')
GO
use northwind
GO
CREATE RULE regioncode_rule
AS @regioncode >=1000 and @regioncode <=100
GO
EXEC sp_bindrule regioncode_rule,'Customers.Region'
O tambin
use northwind
GO
CREATE RULE regioncode_rule AS @regioncode like '[0-9][0-9 ][ 0-9]'
GO
EXEC sp_bindrule regioncode_rule,'Customers.Region'
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'.
2. Crear tipos de datos que contengas los datos ms comunes para nuestra base de datos. (Mirar las bases
de datos y cuales son sus campos ms 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
Restriccin
Cod_colegio
Numrico
Nombre
Texto
No permite nulos
Localidad
Texto
Provincia
Texto
Ao_Construccin
Fecha
Coste_Construccin
Moneda
Cod_Region
Numrico
Unico
Unico
Clave nica
Campos
Tipo de dato
Restriccin
Cod_Profe
Texto
Nombre
Texto
No permite nulos.
Apellido1
Texto
Apellido2
Texto
Edad
Numrico
Localidad
Texto
Provincia
Texto
Salario
Money
Cod_Colegio
Numrico
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)
)
Campos
Tipo de dato
Restriccin
Cod_Region
Numrico
Regiones
Texto
No permite nulos
Campos
Tipo de dato
Restriccin
DNI
Texto
Nombre
Texto
No permite nulos
Apellido1
Texto
Apellido2
Texto
Fecha_nac
Fecha/hora
Localidad
Texto
Provincia
Texto
Cod_Colegio
Numrico
7. Crear una nueva relacin 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 grfico que muestre las relaciones que se han obtenido en la base de datos hasta ahora :
13. Crear de nuevo la relacin borrada en el ejercicio anterior que tenga relacin en cascada y actualizacin :
alter table profesores
add constraint FK_Profesores foreign key(cod_colegio)
references colegios(cod_colegio) on update cascade
on delete cascade
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
Insert into Regiones (Regiones) values('MADRID')
Insert into Regiones (Regiones) values('COMUNIDAD VALENCIANA')
Insert into Regiones (Regiones) values('CATALUA')
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.
insert into Colegios (nombre,localidad ,provincia,ao_construccion ,coste_construccion,cod_region) values
('PADRE POVEDA','MADRID','MADRID','01/01/65',1129876,3)
insert into Colegios (nombre,localidad ,provincia,ao_construccion ,coste_construccion,cod_region) values
('CARMELITAS','ALICANTE','ELCHE','01/01/49',298763,5)
insert into Colegios (nombre,localidad ,provincia,ao_construccion ,coste_construccion,cod_region) values
('SAN PEP','BARCELONA','BARCELONA','01/01/63',234567,6)
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.
R','Miguel','Torres','Tormo','15/03/95','LLOBREGAT','BARCELONA',12)
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.
17. Borrar la tabla Regiones :
drop table regiones
Qu ocurre?. Cmo lo solucionamos?
Servidor: mensaje 3726, nivel 16, estado 1, lnea 1
No se puede quitar el objeto 'regiones'. Hay una referencia a l en una restriccin FOREIGN KEY.
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 anlisis 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)
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'
2. Insertar los datos convenientemente para verificar la integridad de nuestra base de datos
Inserto un departamento
Inserto un empleado
Cambio la fecha de ingreso del empleado (Fecha_alt) a una que este entre el intervalo definido en la restriccin
Check.
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 publicacin o tambin desde el indice de esta serie de publicaciones.
Sin mas prembulos les presento la estructura de la base de datos Hospital. Vamos a sacarle el mximo de provecho.
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
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.
Si no tienes la base de datos Hospital, te invito a volver al indice y descargarla.
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.
1. Mostrar todos los datos de los empleados de nuestra tabla emp.
2. Mostrar el apellido, oficio, salario, salario anual, con las dos extras para aquellos empleados con comisin
mayor de 100000.
?
1
3. Idntico del anterior, pero para aquellos empleados que su salario anual con extras supere los 2200000
?
1
4. Idntico del anterior, pero para aquellos empleados que sumen entre salario anual con extras y comisin
los 3 millones.
?
1
5. Mostrar todos los datos de empleados ordenados por departamento y dentro de este por oficio para tener
una visin jerrquica.
?
1
9. Listar todos los datos de la plantilla del hospital del turno de maana
?
1
11. Visualizar los empleados de la plantilla del turno de maana que tengan un salario entre 200000 y
225000.
?
1
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'
15. Lo mismo que en el ejercicio 14 pero con salario entre 150000 y 400000.
?
1
2
3
16. Igual que en el ejercicio 15, pero tambin incluimos aquellos que no siendo analista pertenecen al
departamento 20.
?
1
17. Mostrar aquellos empleados cuyo apellido termine en Z ordenados por departamento, y dentro de este
por antigedad.
?
1
18. De los empleados del ejercicio 17 quitar aquellos que superen los 200000 mensuales.
?
1
20. Igual que el ejercicio 19, pero mostrndolos de forma que se aprecien las diferencias de salario dentro de
cada oficio.
?
1
21. Del ejercicio 20, nos quedamos solo con aquellos cuyo nmero de empleado no este entre 7600 y 7900.
?
1
24. Mostrar que personal No Interino existe en cada sala de cada hospital, ordenado por hospital y sala.
?
1
FROM PLANTILLA
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
26. Seleccionar los distintos valores del sexo que tienen los enfermos.
?
1
FROM ENFERMO
27. Indicar los distintos turnos de la plantilla del hospital, ordenados por turno y por apellido.
?
1
FROM PLANTILLA
28. Seleccionar las distintas especialidades que ejercen los mdicos, ordenados por especialidad y apellido.
?
1
FROM DOCTOR
LIKE
LIKE
LIKE
LIKE
LIKE
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 prctica.
1. Seleccionar todos los empleados cuyo apellido comience por M
?
1
4. Mostrar todos los empleados cuyo nombre sea de 4 letras y su apellido termine con la letra a
?
1
5. Mostrar todos los empleados cuyo apellido comience entre las letras E y F.
?
1
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
7. Mostrar todos los empleados cuyo apellido comience por la letra M y la segunda letra no sea una A.
?
1
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
9. Mostrar todos los empleados cuyo apellido sea de 6 letras y no comience entre la A y la D.
?
1
10. Mostrar todos los que empiecen por la A y cuya cuarta letra no est comprendida entre A G
?
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 ms que decir vayamos al punto.
Las funciones de agregado son funciones que se utilizan para calcular valores en las tablas. Si queremos usarlas
combinndolas 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 expresin: HAVING.
Equivalente a where
pongo
un
valor
dentro
de
la
expresin
devolver
la
cuenta
de
Si pongo un asterisco contar todos los registros aunque tengan valores nulos.
?
1
AVG: Realiza la media sobre la expresin dada, debe ser un tipo de dato Int.
?
todos
los
registros
no
nulos.
?
1
?
1
?
1
1. Encontrar el salario medio de los analistas, mostrando el nmero de los empleados con oficio analista.
?
1
2. Encontrar el salario mas alto, mas bajo y la diferencia entre ambos de todos los empleados con oficio EMPLEADO.
?
1
ORDER BY 1
2
3
GROUP BY DEPT_NO
7. Visualizar el nmero de enfermeros, enfermeras e interinos que hay en la plantilla, ordenados por la
funcin.
?
1
GROUP BY FUNCION
ORDER BY FUNCION
8. Visualizar departamentos, oficios y nmero de personas, para aquellos departamentosque tengan dos o ms personas
trabajando en el mismo oficio.
?
1
9. Calcular el salario medio, Diferencia, Mximo y Mnimo de cada oficio. Indicando el oficio y el nmero de
empleados de cada oficio.
?
1
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.
?
1
11. Calcular el salario medio de la plantilla de la sala 6, segn la funcin que realizan. Indicar la funcin y el
nmero de empleados.
?
1
12. Averiguar los ltimos empleados que se dieron de alta en la empresa en cada uno de los oficios,
ordenados por la fecha.
?
1
GROUP BY OFICIO
ORDER BY 1
13. Mostrar el nmero de hombres y el nmero de mujeres que hay entre los enfermos.
?
1
14. Mostrar la suma total del salario que cobran los empleados de la plantilla para cada funcin y turno.
?
1
GROUP BY HOSPITAL_COD
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
Condicin 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
2
3
4
5
SELECT APELLIDO,OFICIO,DNOMBRE
FROM EMP
INNER JOIN DEPT
ON EMP.DEPT_NO=DEPT.DEPT_NO
ORDER BY DEPT.DNOMBRE
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
2
3
4
5
SELECT APELLIDO,OFICIO,DNOMBRE
FROM EMP
FULL JOIN DEPT
ON EMP.DEPT_NO=DEPT.DEPT_NO
ORDER BY DEPT.DNOMBRE
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:
Select tablaprincipal.campo, tablaacombinar.campo
From tablaprincipal
left join / right join / cross join tabla
on condicin
- 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
2
3
4
5
SELECT APELLIDO,OFICIO,DNOMBRE
FROM EMP
LEFT OUTER JOIN DEPT
ON EMP.DEPT_NO=DEPT.DEPT_NO
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
2
3
4
5
SELECT APELLIDO,OFICIO,DNOMBRE
FROM EMP
RIGHT OUTER JOIN DEPT
ON EMP.DEPT_NO=DEPT.DEPT_NO
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
2
3
SELECT APELLIDO,OFICIO,DNOMBRE
FROM EMP
CROSS JOIN DEPT
Realiza un producto cartesiano combinando todos los empleados con todos los departamentos.
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.
Combinar los valores de una tabla sobre s misma
Para ello crearemos dos copias de la misma tabla ponindole un alas, para posteriorme nte combinar los
resultados de ambas copias.
?
1
2
3
4
5
6
7