0% encontró este documento útil (0 votos)
88 vistas

Manual 2 SQL 2012 (Programación 1)

Este documento explica cómo insertar y consultar datos en una base de datos SQL Server utilizando la sintaxis SQL. Primero se crea una base de datos de ejemplo llamada "Hospital" y luego se muestran ejemplos de cómo insertar datos en las tablas utilizando sentencias INSERT. A continuación, se proporcionan varios ejemplos de consultas SELECT para seleccionar y filtrar datos de las tablas, incluyendo el uso de cláusulas WHERE, ORDER BY, BETWEEN y DISTINCT. Finalmente, se explica el uso del operador LIKE para realizar búsquedas

Cargado por

Jimmy Trujillo
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
88 vistas

Manual 2 SQL 2012 (Programación 1)

Este documento explica cómo insertar y consultar datos en una base de datos SQL Server utilizando la sintaxis SQL. Primero se crea una base de datos de ejemplo llamada "Hospital" y luego se muestran ejemplos de cómo insertar datos en las tablas utilizando sentencias INSERT. A continuación, se proporcionan varios ejemplos de consultas SELECT para seleccionar y filtrar datos de las tablas, incluyendo el uso de cláusulas WHERE, ORDER BY, BETWEEN y DISTINCT. Finalmente, se explica el uso del operador LIKE para realizar búsquedas

Cargado por

Jimmy Trujillo
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 137

Manual SQL Server | Sentencias SQL

SQL

Estructura de Base de Datos Hospital - Ejemplo


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.
Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL

Insertar Datos en SQL Server - Ejemplo Hospital

En la publicacin anterior creamos la base de datos de ejemplo llamada Hospital, la cual


nos servir para las prximas publicaciones que se realizarn.

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:

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 publicacin 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
Manual SQL Server | Sentencias SQL

Tabla EMP

Tabla ENFERMO
Manual SQL Server | Sentencias SQL

Tabla HOSPITAL

Tabla PLANTILLA

Tabla SALA
Manual SQL Server | Sentencias SQL

Consultas de Seleccin en SQL Server - Parte 1

Bien es momento de utilizar la base de datos "Hospital" creada en publicaciones


anteriores, para realizar las bsicas consultas de seleccin, que se presentan en toda
aplicacin informtica.

A manera de prctica, realiza las consultas en tu Analizador de Consultas SQL para


comprobar los resultados. Recuerda que digitando se va quedando en la mente y vas
comprendiendo poco a poco.

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

1 SELECT * FROM EMP


Manual SQL Server | Sentencias SQL

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

1 SELECT APELLIDO, OFICIO,

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

3 WHERE COMISION > 100000

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


Manual SQL Server | Sentencias SQL

4. Idntico del anterior, pero para aquellos empleados que sumen entre salario anual con
extras y comisin los 3 millones.

1 SELECT APELLIDO, OFICIO,

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

3 WHERE SALARIO * 14 + comision > 3000000


Manual SQL Server | Sentencias SQL

5. Mostrar todos los datos de empleados ordenados por departamento y dentro de este
por oficio para tener una visin jerrquica.

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


Manual SQL Server | Sentencias SQL

7. Mostrar todos los enfermos nacidos antes de 1970.

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


Manual SQL Server | Sentencias SQL

Consultas de Seleccin en SQL Server - Parte 2

8. Igual que el anterior, para los nacidos antes de 1970 ordenados por nmero de
inscripcin 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 maana

1 SELECT * FROM PLANTILLA WHERE T ='M'

10. Idem del turno de noche.


Manual SQL Server | Sentencias SQL

1 SELECT * FROM PLANTILLA WHERE T='N'

11. Visualizar los empleados de la plantilla del turno de maana 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'
Manual SQL Server | Sentencias SQL

13. Mostrar los nombres de los departamentos situados en Madrid o en Barcelona.

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


Manual SQL Server | Sentencias SQL

Consultas de Seleccin 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


Manual SQL Server | Sentencias SQL

16. Igual que en el ejercicio 15, pero tambin 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 antigedad.

1 SELECT * FROM EMP

2 WHERE APELLIDO LIKE '%Z'

3 ORDER BY DEPT_NO, FECHA_ALT ASC


Manual SQL Server | Sentencias SQL

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'


Manual SQL Server | Sentencias SQL

20. Igual que el ejercicio 19, pero mostrndolos 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


Manual SQL Server | Sentencias SQL

21. Del ejercicio 20, nos quedamos solo con aquellos cuyo nmero 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


Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL

Consultas de Seleccin 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.
Manual SQL Server | Sentencias SQL

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


Manual SQL Server | Sentencias SQL

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.

?
Manual SQL Server | Sentencias SQL

1 SELECT DISTINCT T AS "TURNO", APELLIDO

2 FROM PLANTILLA

3 ORDER BY TURNO, APELLIDO

28. Seleccionar las distintas especialidades que ejercen los mdicos, ordenados por
especialidad y apellido.

1 SELECT DISTINCT ESPECIALIDAD, APELLIDO

2 FROM DOCTOR

3 ORDER BY ESPECIALIDAD, APELLIDO


Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL

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 nmero de caracteres

_ Para un carcter individual

[ ] Para un conjunto de caracteres que est dentro del corchete

[ ^ ] Que el carcter individual que no est dentro del corchete

EJEMPLO: LIKE %een Muestra todos los caracteres que acaben con een

EJEMPLO: LIKE %een% Muestra todos los caracteres que contengan een en ese orden

EJEMPLO: LIKE _en Muestra todos los caracteres que contenga tres letras y acaben en en

EJEMPLO: LIKE [CK% ] Muestra todos los caracteres que empiecen por C o K

EJEMPLO: LIKE [S-V]ing Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en
ing

EJEMPLO: LIKE M[^c]% Todos los que empiecen por M y segunda letra no sea una c. No hay limite
de caracteres.

Ahora veamos todo esto en la prctica.

1. Seleccionar todos los empleados cuyo apellido comience por M

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


Manual SQL Server | Sentencias SQL

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%'


Manual SQL Server | Sentencias SQL

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]%'


Manual SQL Server | Sentencias SQL

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'


Manual SQL Server | Sentencias SQL

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]%'


Manual SQL Server | Sentencias SQL

Funciones de agregado - Parte 1

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

COUNT: Cuenta los registros que hay en la consulta.


Si pongo un valor dentro de la expresin 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 expresin dada, debe ser un tipo de dato Int.
?
1 select avg(salario) from emp

MAX: Saca el valor mximo de una consulta.


?
1 select max(fecha_alt) from emp

MIN: Devuelve el valor mnimo de una consulta.


?
Manual SQL Server | Sentencias SQL

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 nmero 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'


Manual SQL Server | Sentencias SQL

3. Visualizar los salarios mayores para cada oficio.

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

4. Visualizar el nmero 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
Manual SQL Server | Sentencias SQL

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 nmero 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
Manual SQL Server | Sentencias SQL

7. Visualizar el nmero de enfermeros, enfermeras e interinos que hay en la plantilla,


ordenados por la funcin.

?
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
Manual SQL Server | Sentencias SQL

Funciones de agregado - Parte 2

8. Visualizar departamentos, oficios y nmero de personas, para aquellos departamentos que


tengan dos o ms 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, Mximo y Mnimo de cada oficio. Indicando el oficio y el
nmero de empleados de cada oficio.

1 SELECT OFICIO, COUNT(*) AS [N DE EMPLEADOS], MIN(SALARIO) AS [SALARIO MNIMO]

2 , MAX(SALARIO) AS [SALARIO MXIMO], MAX(SALARIO) - MIN(SALARIO) AS [DIFERENCIA]

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


Manual SQL Server | Sentencias SQL

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 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, segn la funcin que realizan. Indicar la
funcin y el nmero 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


Manual SQL Server | Sentencias SQL

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 nmero de hombres y el nmero de mujeres que hay entre los enfermos.

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


Manual SQL Server | Sentencias SQL

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

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

2 FROM PLANTILLA GROUP BY FUNCION, T

15. Calcular el nmero de salas que existen en cada hospital.

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

2 GROUP BY HOSPITAL_COD
Manual SQL Server | Sentencias SQL

16. Mostrar el nmero 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
Manual SQL Server | Sentencias SQL

Consultas de combinacin 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

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.


Manual SQL Server | Sentencias SQL

1 SELECT APELLIDO,OFICIO,DNOMBRE

2 FROM EMP

3 INNER JOIN DEPT

4 ON EMP.DEPT_NO=DEPT.DEPT_NO

ORDER BY DEPT.DNOMBRE
5

La combinacin Full Join muestra las coincidencias de la tabla Dept con Emp, ms los
valores que no coincidan, como el departamento Produccin, que no tiene empleados.

1 SELECT APELLIDO,OFICIO,DNOMBRE
Manual SQL Server | Sentencias SQL

2 FROM EMP

3 FULL JOIN DEPT

ON EMP.DEPT_NO=DEPT.DEPT_NO
4
ORDER BY DEPT.DNOMBRE
5

Se podra decir que es como la suma de utilizar left join y right join.
Manual SQL Server | Sentencias SQL

Consultas de combinacin en SQL Server - Parte 2

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:

?
SELECT APELLIDO,OFICIO,DNOMBRE
1
FROM EMP
2
LEFT OUTER JOIN DEPT
3
ON EMP.DEPT_NO=DEPT.DEPT_NO
Manual SQL Server | Sentencias SQL

4 ORDER BY DEPT.DNOMBRE

Si existiera algn empleado que no tenga asignado un departamento, la consulta traera


los datos del empleado, pero el nombre del departamento tendra el valor null porque no
tendra ningn departamento asociado y en la consulta le estamos diciendo que
seleccione los empleados aunque no tengan departamento asociado, ponemos
como principal la tabla de la izquierda (EMP).

Ejemplo 2:

1 SELECT APELLIDO,OFICIO,DNOMBRE
Manual SQL Server | Sentencias SQL

2 FROM EMP

3 RIGHT OUTER JOIN DEPT

ON EMP.DEPT_NO=DEPT.DEPT_NO
4
ORDER BY DEPT.DNOMBRE
5

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:

?
Manual SQL Server | Sentencias SQL

1 SELECT APELLIDO,OFICIO,DNOMBRE

2 FROM EMP

3 CROSS JOIN DEPT

Realiza un producto cartesiano combinando todos los empleados con todos los
departamentos.
Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL

Combinaciones con ms 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

AND P.SALA_COD = S.SALA_COD


7
INNER JOIN HOSPITAL AS H
8
ON H.HOSPITAL_COD = P.HOSPITAL_COD
9
Manual SQL Server | Sentencias SQL

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
posteriormente 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

ON A.EMP_NO = B.EMP_NO
6
ORDER BY B.EMP_NO
7
Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL

Base de datos Pubs - SQL Server

Saludos seguidores del manual de transact SQL.

Para poder realizar los ejercicios de consultas, con tablas combinadas mediante las
instrucciones JOIN, tanto internas como externas, necesitaremos de la base de datos
Pubs. La cual comparto tanto en diagrama como el script de la creacin e insercin de
datos. Descargenlo al final de esta publicacin o desde el indice, es necesario si deseas
seguir esta serie de ejercicios. Puedes hacer clic en la imagen para agrandarla.
Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL

Uso de Join SQL Server - Ejercicios con combinaciones


internas y externas

1) Realizar una consulta que muestre los nombres de los autores y editores ubicados en
la misma ciudad

1
USE PUBS
2 SELECT A.AU_FNAME AS [NOMBRE]

3 ,A.AU_LNAME AS [APELLIDO]

4 ,P.PUB_NAME AS [EDITOR]

5 FROM AUTHORS AS A

6 INNER JOIN PUBLISHERS AS P

ON
7
A.CITY = P.CITY
8

2) Obtener todos los nombres y editores de todos los libros cuyos anticipos pagados son
superiores a 7500
Manual SQL Server | Sentencias SQL

1
USE PUBS
2
SELECT T.TITLE AS [TITULO]
3 ,P.PUB_NAME AS [EDITOR]

4 ,T.ADVANCE AS [ANTICIPO]

5 FROM TITLES AS T

6 INNER JOIN PUBLISHERS AS P

7 ON

T.PUB_ID=P.PUB_ID
8
WHERE
9
T.ADVANCE>7500
10

3) Seleccionar todos los titulos, nombre y apellidos del autor de todos los libros de cocina
tradicional.

?
SELECT A.AU_LNAME AS [NOMBRE]
1
,A.AU_FNAME AS [APELLIDO]
2
,T.TITLE AS [TITULO]
3
FROM AUTHORS AS A
Manual SQL Server | Sentencias SQL

4 INNER JOIN TITLEAUTHOR AS TA

5 ON

A.AU_ID=TA.AU_ID
6
INNER JOIN TITLES AS T
7
ON
8
TA.TITLE_ID=T.TITLE_ID
9
WHERE T.TYPE= 'TRAD_COOK'
10

11

4) Seleccione nombre, apellido de los autores y el nombre de la editorial de todos aquellos


escritores cuya ciudad sea la misma que la de la editorial. Pero en la consulta tambin se
incluirn los dems autores de la tabla authors

?
SELECT A.AU_LNAME AS [NOMBRE]
1
,A.AU_FNAME AS [APELLIDO]
2
,P.PUB_NAME AS [EDITOR]
3
FROM AUTHORS AS A
4
LEFT JOIN PUBLISHERS AS P
5
ON
Manual SQL Server | Sentencias SQL

6 A.CITY=P.CITY

5) Recuperar los ttulos y el ndice del almacn de todos los libros que vendieron ms de
25 unidades.

1 SELECT S.STOR_ID AS [ALMACEN ID]

2 ,T.TITLE AS [TITULO]
Manual SQL Server | Sentencias SQL

3 FROM TITLES AS T

4 INNER JOIN SALES AS S

ON
5
T.TITLE_ID = S.TITLE_ID
6
WHERE
7
S.QTY>25
8

6) Modificacin al ejercicio anterior: incluir tambin los ttulos de aquellos libros que no
superaron las 25 unidades en sus ventas

1 SELECT S.STOR_ID AS [ALMACEN ID]

2 ,T.TITLE AS [TITULO]

3 FROM TITLES AS T

4 LEFT JOIN SALES AS S

5 ON

T.TITLE_ID = S.TITLE_ID AND S.QTY>25


6
Manual SQL Server | Sentencias SQL

7) Realizar una consulta que devuelva el titulo, editorial y autor de cada libro.

1 SELECT T.TITLE AS [TITULO]

,A.AU_LNAME AS [AUTOR]
2
,P.PUB_NAME AS [EDITOR]
3
FROM PUBLISHERS AS P
4
INNER JOIN TITLES AS T
5
ON
6
T.PUB_ID = P.PUB_ID
7 INNER JOIN TITLEAUTHOR AS TA

8 ON
Manual SQL Server | Sentencias SQL

9 TA.TITLE_ID = T.TITLE_ID

10 INNER JOIN AUTHORS AS A

ON
11
TA.AU_ID = A.AU_ID
12

13
Manual SQL Server | Sentencias SQL

Uso de Join SQL Server - Combinaciones internas

1. Seleccionar el apellido, oficio, salario, numero de departamento y su nombre de todos los


empleados cuyo salario sea mayor de 300000

1
SELECT E.APELLIDO
2
,E.OFICIO
3 ,E.SALARIO

4 ,D.DEPT_NO AS [N DEPT]

5 ,DNOMBRE AS [DEPARTAMENTO]

6 FROM EMP AS E

INNER JOIN DEPT AS D ON


7
E.DEPT_NO = D.DEPT_NO
8
WHERE E.SALARIO > 300000
9

2. Mostrar todos los nombres de Hospital con sus nombres de salas correspondientes.
Manual SQL Server | Sentencias SQL

1 SELECT S.NOMBRE AS [NOMBRE SALA]

2 ,H.NOMBRE AS [NOMBRE HOSPITAL]

3 FROM SALA S INNER JOIN HOSPITAL H ON

4 S.HOSPITAL_COD = H.HOSPITAL_COD

3. Calcular cuantos trabajadores de la empresa hay en cada ciudad.

1 SELECT COUNT(E.EMP_NO) AS [N DE TRABAJADORES]

2 ,D.LOC AS [CIUDAD]

3 FROM EMP AS E

4 RIGHT OUTER JOIN DEPT AS D

5 ON D.DEPT_NO = E.DEPT_NO

GROUP BY D.LOC
6
Manual SQL Server | Sentencias SQL

4. Visualizar cuantas personas realizan cada oficio en cada departamento mostrando el nombre
del departamento.

1
SELECT D.DNOMBRE AS [N DEPARTAMENTO]
2 ,COUNT(*) AS [N DE PERSONAS]

3 ,E.OFICIO

4 FROM EMP E

5 RIGHT OUTER JOIN DEPT D

ON E.DEPT_NO = D.DEPT_NO
6
GROUP BY E.DEPT_NO, E.OFICIO,D.DNOMBRE
7
Manual SQL Server | Sentencias SQL

5. Contar cuantas salas hay en cada hospital, mostrando el nombre de las salas y el nombre del
hospital.

1
SELECT COUNT(S.NOMBRE) AS [NUMERO DE SALAS]
2 ,S.NOMBRE AS [SALA]

3 ,H.NOMBRE AS [HOSPITAL]

4 FROM SALA AS S

5 INNER JOIN HOSPITAL AS H

ON H.HOSPITAL_COD = S.HOSPITAL_COD
6
GROUP BY S.NOMBRE,H.NOMBRE
7

6. Calcular cuantos trabajadores hay en cada departamento(nombre de departamento)

1 SELECT COUNT(E.EMP_NO) AS [N DE TRABAJADORES]

2 ,D.DNOMBRE AS [DEPARTAMENTO]
Manual SQL Server | Sentencias SQL

3 FROM EMP E

4 RIGHT OUTER JOIN DEPT D

ON D.DEPT_NO = E.DEPT_NO
5
GROUP BY D.DNOMBRE
6

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

1
SELECT D.DNOMBRE AS [DEPARTAMENTO]
2 ,COUNT(*) AS [N DE PERSONAS]

3 FROM EMP E

4 INNER JOIN DEPT D

5 ON E.DEPT_NO = D.DEPT_NO

GROUP BY D.DEPT_NO,D.DNOMBRE
6
HAVING COUNT(*) >= 4
7
Manual SQL Server | Sentencias SQL

8. Calcular el valor medio de las camas que existen para cada nombre de sala. Indicar el nombre de
cada sala y el codigo de cada una de ellas.

1 SELECT AVG(NUM_CAMA) AS [MEDIA CAMAS]

2 ,NOMBRE

3 ,SALA_COD

4 FROM SALA

GROUP BY NOMBRE,SALA_COD
5

9. Calcular la media salarial por ciudad.

1 SELECT D.LOC AS [CIUDAD]

2 ,AVG(SALARIO) AS [MEDIA SALARIAL]

3 FROM EMP E INNER JOIN DEPT D

4 ON D.DEPT_NO = E.DEPT_NO

GROUP BY D.LOC
5
Manual SQL Server | Sentencias SQL

10. Mostrar los doctores junto con el nombre de hospital en el que ejercen, la direccin y el
telfono del mismo.

1
SELECT D.APELLIDO
2 ,H.NOMBRE

3 ,H.DIRECCION

4 ,H.TELEFONO

5 FROM DOCTOR D

INNER JOIN HOSPITAL H


6
ON H.HOSPITAL_COD = D.HOSPITAL_COD
7
Manual SQL Server | Sentencias SQL

11. Mostrar los nombres de los hospitales junto con el mejor salario de los empleados de cada
hospital.

1 SELECT H.NOMBRE AS [HOSPITAL]

2 ,MAX(P.SALARIO) AS [SALARIO MAXIMO]

3 FROM PLANTILLA P

4 INNER JOIN HOSPITAL H

5 ON P.HOSPITAL_COD = H.HOSPITAL_COD

GROUP BY H.NOMBRE
6

12. Visualizar el nombre de los empleados de la plantilla junto con el nombre de la sala, el nombre
del hospital y el nmero de camas libres de cada una de ellas.

SELECT P.APELLIDO AS [APELLIDO Y NOMBRE]


1
,S.NOMBRE AS [SALA]
2
,H.NOMBRE AS [HOSPITAL],
3
S.NUM_CAMA AS [N DE CAMAS]
4
FROM PLANTILLA P INNER JOIN SALA AS S
5
ON P.HOSPITAL_COD = S.HOSPITAL_COD
Manual SQL Server | Sentencias SQL

6 AND P.SALA_COD = S.SALA_COD

7 INNER JOIN HOSPITAL AS H

ON H.HOSPITAL_COD = P.HOSPITAL_COD
8

13. Visualizar el mximo salario, mnimo salario de los empleados dependiendo de la ciudad en la
que trabajen. Indicando el nmero total de trabajadores por ciudad.

1
SELECT COUNT(E.EMP_NO) AS [N DE TRABAJADORES]
2 ,D.LOC AS [CIUDAD]

3 ,MAX(E.SALARIO) AS [SALARIO MXIMO]

4 ,MIN(E.SALARIO) AS [SALARIO MNIMO]

5 FROM EMP E

6 INNER JOIN DEPT D

ON E.DEPT_NO = D.DEPT_NO
7
GROUP BY D.LOC
8
Manual SQL Server | Sentencias SQL

14. Averiguar la combinacin de que salas podra haber por cada uno de los hospitales.

1 SELECT S.NOMBRE AS [NOMBRE SALA]

2 ,H.NOMBRE AS [NOMBRE HOSPITAL]

3 FROM SALA AS S

4 CROSS JOIN HOSPITAL AS H


Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL

15. Mostrar el Numero de empleado, apellido, oficio y Nombre del departamento de los
empleados, junto al Nmero de empleado, apellido, oficio y Nombre del departamento de sus
subordinados respectivamente, para obtener una visin jerarquica de la empresa.

1
SELECT A.EMP_NO AS [N DE EMPLEADO]
2
,A.APELLIDO AS [JEFE], A.OFICIO
3
,D.DNOMBRE AS [DEPARTAMENTO]
4
,B.EMP_NO AS [N EMPLEADO]
5 ,B.APELLIDO AS [SUBORDINADO]

6 ,B.OFICIO

7 ,D.DNOMBRE AS [DEPARTAMENTO]

8 FROM EMP AS A

9 INNER JOIN EMP AS B

ON B.DIR = A.EMP_NO
10
INNER JOIN DEPT AS D
11
ON A.DEPT_NO = D.DEPT_NO
12
AND B.DEPT_NO = D.DEPT_NO
13
ORDER BY B.DIR
14
Manual SQL Server | Sentencias SQL

Operador Union en SQL Server

Es un operador que combina un conjunto de resultados, por ejemplo, una sentencia


SELECT con OTRA.

Ejemplo:

Obtener las filas de los empleados y de Plantilla

1
SELECT APELLIDO,
2 OFICIO AS

3 'OFICIO/FUNCION'

4 ,SALARIO FROM EMP

5 UNION

6 SELECT APELLIDO,

FUNCION, SALARIO FROM


7
PLANTILLA
8
Manual SQL Server | Sentencias SQL

Recomendaciones a la hora de usar las combinaciones:

Combinar tablas en funcion de claves principales y externas


Limite el nmero de tablas de las combinaciones.
Manual SQL Server | Sentencias SQL

SubConsultas en SQL Server

Es una SELECT anidada en una instruccin INSERT, DELETE, SELECT o UPDATE.

Como una tabla derivada


?
1 SELECT E.EMP_NO AS NUMERO

2 ,E.APELLIDO

3 FROM (SELECT EMP_NO, APELLIDO FROM EMP) AS E

Como una expresin


?
1 SELECT EMP_NO AS [NUMERO]

2 ,APELLIDO
Manual SQL Server | Sentencias SQL

3 ,SALARIO

4 ,(SELECT AVG(SALARIO) FROM EMP)

AS DIFERENCIA
5
FROM EMP
6
WHERE OFICIO = 'EMPLEADO'
7

Para correlacionar datos


- Expresin dinmica que cambia en cada fila de una consulta externa
- Es una combinacin entre la subconsulta y la fila de la consulta externa.

- Dividen consultas complejas con dos o ms consultas simples relacionadas

1 SELECT APELLIDO, OFICIO,DEPT_NO

2 FROM EMP AS E

3 WHERE 20 <

4 (SELECT DEPT_NO FROM DEPT AS D

5 WHERE E.DEPT_NO = D.DEPT_NO

AND D.DNOMBRE = 'VENTAS')


6
Manual SQL Server | Sentencias SQL

Simulacin de una clausula JOIN


Vamos a mostrar los oficios que estn en ms de un departamento.

1 SELECT DISTINCT E1.OFICIO FROM EMP AS E1

2 WHERE E1.OFICIO IN(SELECT E2.OFICIO FROM EMP AS E2

3 WHERE E1.DEPT_NO <> E2.DEPT_NO)

Se debe utilizar antes una combinacin que una subconsulta, la combinacin sera asi, dando los
mismos resultados:

1 SELECT DISTINCT E1.OFICIO FROM EMP AS E1

2 INNER JOIN EMP AS E2

3 ON E1.OFICIO = E2.OFICIO

4 WHERE E1.DEPT_NO <> E2.DEPT_NO

Estos son los dos oficios que estn en ms de un departamento.


Manual SQL Server | Sentencias SQL

Subconsulta para simular una clausula HAVING

1 SELECT E1.APELLIDO,E1.OFICIO, E1.SALARIO

2 FROM EMP AS E1

3 WHERE E1.SALARIO >

4 (SELECT AVG(E2.SALARIO) FROM EMP AS E2

WHERE E1.OFICIO = E2.OFICIO)


5

Esta es la consulta utilizando el HAVING, que es la que deberamos utilizar antes que una
subconsulta de simulacin HAVING:

1 SELECT E1.APELLIDO,E1.OFICIO, E1.SALARIO

2 FROM EMP AS E1

3 INNER JOIN EMP AS E2

4 ON E1.OFICIO = E2.OFICIO

5 GROUP BY E1.OFICIO, E1.SALARIO,E1.APELLIDO

HAVING E1.SALARIO > AVG (E2.SALARIO)


6
Manual SQL Server | Sentencias SQL

Clausulas EXISTS Y NOT EXISTS en SQL Server

Comprueba si el dato que buscamos existe en la consulta.

Mostrar los departamentos que no tienen empleados:

1 SELECT DEPT_NO, DNOMBRE, LOC

2 FROM DEPT AS D

3 WHERE NOT EXISTS(SELECT * FROM EMP AS E

4 WHERE E.DEPT_NO = D.DEPT_NO)

Recomendaciones:
Manual SQL Server | Sentencias SQL

Utilizar subconsultas para dividir una consulta compleja.


Utilizar Alias para tablas en subconsultas correlacionadas y combinaciones.
Utilizar EXISTS en vez de IN

Ejercicios de SubConsultas en SQL Server

Saludos seguidores del manual SQL Server. A continuacin los ejercicios de subconsultas
utilizando la Base de Datos Hospital. Descarguen el script de la BD en el ndice si an no
la tienen.

1. Mostrar el nmero de empleado, el apellido y la fecha de alta del empleado mas


antiguo de la empresa

?
1 SELECT EMP_NO,APELLIDO,

2 FECHA_ALT FROM EMP WHERE FECHA_ALT = (SELECT MIN(FECHA_ALT) FROM EMP)

2. Mostrar el numero de empleado, el apellido y la fecha de alta del empleado mas


modernos de la empresa.

?
1 SELECT EMP_NO,APELLIDO,

2 FECHA_ALT FROM EMP WHERE FECHA_ALT = (SELECT MAX(FECHA_ALT) FROM EMP)


Manual SQL Server | Sentencias SQL

3. Visualizar el apellido y el oficio de los empleados con el mismo oficio que Jimnez.

?
1 SELECT APELLIDO, OFICIO FROM EMP WHERE

2 OFICIO = (SELECT OFICIO FROM EMP WHERE APELLIDO = 'JIMENEZ')

4. Queremos saber el apellido, oficio, salario y nmero de departamento de los empleados


con salario mayor que el mejor salario del departamento 30.

?
1 SELECT APELLIDO, OFICIO, SALARIO, DEPT_NO FROM EMP WHERE SALARIO >

2 (SELECT

3 MAX (SALARIO) FROM EMP WHERE DEPT_NO = 30)

5. Mostrar el apellido, la funcin, sala o departamento de todos los empleados que


trabajen en la empresa.

?
Manual SQL Server | Sentencias SQL

1
SELECT E.APELLIDO, E.OFICIO AS [CARGO EN EMPRESA], D.DNOMBRE AS [OFICINA]
2
FROM EMP AS E
3
INNER JOIN DEPT AS D
4
ON E.DEPT_NO = D.DEPT_NO<
5
UNION
6 SELECT P.APELLIDO, P.FUNCION, S.NOMBRE

7 FROM PLANTILLA AS P

8 INNER JOIN SALA AS S

9 ON P.HOSPITAL_COD = S.HOSPITAL_COD

10 AND P.SALA_COD = S.SALA_COD

UNION
11
SELECT D.APELLIDO, D.ESPECIALIDAD, H.NOMBRE
12
FROM DOCTOR AS D
13
INNER JOIN HOSPITAL AS H
14
ON D.HOSPITAL_COD = H.HOSPITAL_COD
15
ORDER BY 3
16
Manual SQL Server | Sentencias SQL

6. Averiguar el salario de todos los empleados de la empresa, de forma que se aprecien


las diferencias entre ellos.

?
Manual SQL Server | Sentencias SQL

1 SELECT APELLIDO, SALARIO FROM EMP

2 UNION

3 SELECT APELLIDO, SALARIO FROM PLANTILLA

4 ORDER BY 2 DESC

7. Mostrar apellidos y oficio de los empleados del departamento 20 cuyo trabajo sea el
mismo que el de cualquier empleado de ventas.

?
Manual SQL Server | Sentencias SQL

1 SELECT APELLIDO, OFICIO FROM EMP WHERE DEPT_NO = 20 AND OFICIO IN

2 (SELECT OFICIO FROM EMP WHERE DEPT_NO =

3 (SELECT DEPT_NO FROM DEPT WHERE DNOMBRE = 'VENTAS'))

4 ORDER BY 2

8. Mostrar los empleados que tienen mejor salario que la media de los directores, no
incluyendo al presidente.

?
1 SELECT * FROM EMP WHERE SALARIO >

2 (SELECT AVG (SALARIO) FROM EMP WHERE OFICIO = 'DIRECTOR')

3 AND OFICIO <> 'PRESIDENTE'

9. Mostrar el apellido, funcin, salario y cdigo de hospital de los empleados de la plantilla


que siendo enfermeros o enfermeras pertenecen al hospital SAN CARLOS.
Manual SQL Server | Sentencias SQL

?
1 SELECT APELLIDO, FUNCION, SALARIO, HOSPITAL_COD FROM PLANTILLA WHERE

2 (FUNCION

3 = 'ENFERMERO' OR FUNCION = 'ENFERMERA') AND HOSPITAL_COD = (SELECT

4 HOSPITAL_COD FROM HOSPITAL WHERE NOMBRE = 'SAN CARLOS')

10. Visualizar los datos de los hospitales que tienen personal (Doctores) de cardiologa.

?
1 SELECT * FROM HOSPITAL WHERE HOSPITAL_COD IN (SELECT HOSPITAL_COD FROM

2 DOCTOR WHERE ESPECIALIDAD = 'CARDIOLOGA')

11. Visualizar el salario anual de los empleados de la plantilla del Hospital Provincial y
General.

?
1 SELECT APELLIDO, FUNCION, SALARIO * 12 AS [SALARIO ANUAL] FROM PLANTILLA

2 WHERE HOSPITAL_COD IN (SELECT HOSPITAL_COD FROM HOSPITAL WHERE

3 NOMBRE =

4 'PROVINCIAL' OR NOMBRE= 'GENERAL')


Manual SQL Server | Sentencias SQL

12. Mostrar el apellido de los enfermos que nacieron antes que el Seor Miller.

?
1 SELECT APELLIDO FROM ENFERMO WHERE FECHA_NAC < (SELECT FECHA_NAC

2 FROM

3 ENFERMO WHERE APELLIDO = 'MILLER B.')


Manual SQL Server | Sentencias SQL

Variables y Bucles en SQL Server

Variables
Definidas en una instruccin DECLARE (Con una sola @)
Valores asignados con instruccin SET o SELECT (Con una sola @)
mbito global o local

Sintaxis:

DECLARE @VariableLocal tipodatos,...

SET @VariableLocal = expresin

SELECT @VariableLocal = Nombre from Empleados WHERE Id = 5

Bucles
Nivel de instruccin:

Bloques BEGIN......END
Bloques IF.............ELSE
Construcciones WHILE

Ejemplos:

Determinar si el nmero 5 es par o impar


Manual SQL Server | Sentencias SQL

1
--IF
2 DECLARE @N INT

3 SET @N = 5

4 IF (@N % 2)= 0

5 PRINT 'PAR'

ELSE
6
PRINT 'IMPAR'
7

Obtener los nmeros pares menores a 10 dentro de un bucle en SQL

1
--BUCLES
2
DECLARE @N INT
3 SET @N = 1

4 WHILE @N < 10

5 BEGIN

6 IF (@N % 2) = 0

SELECT @N AS NUMERO
7
SET @N = @N + 1
8
END
9
Manual SQL Server | Sentencias SQL

CASE en SQL Server

Las expresiones a nivel de fila evalan un resultado devuelto por la consulta y dependiendo de los
valores que utilicemos lo sustituyen para mejorar la presentacin de los datos.

1
CASE expresion
2 WHEN valor1 THEN resultado1

3 ELSE resultadoN

4 END

5 CASE

6 WHEN verdadero THEN resultado1

ELSE resultado2
7
END
8
Manual SQL Server | Sentencias SQL

1
--CASE
2
DECLARE @N INT
3
SET @N = 1
4
WHILE (@N<100)
5 BEGIN

6 SELECT @N AS 'NUMERO', CASE

7 WHEN (@N % 2) = 1 THEN

8 'IMPAR'

ELSE
9
'PAR'
10
END AS 'TIPO'
11
SET @N = @N + 1
12
END
13
Manual SQL Server | Sentencias SQL

EJEMPLO:

Esto se puede utilizar tambin para inicializar variables. Es el mismo caso pero utilizando el CASE
para inicializar una variable.

DECLARE @N INT,@TIPO CHAR(10),@VALOR CHAR(11)


1
SET @N = 1
2
WHILE (@N < 100)
3
BEGIN
4
IF (@N < 50)
5
SET @VALOR = 'MENOR DE 50'
6 ELSE
Manual SQL Server | Sentencias SQL

7 SET @VALOR = 'MAYOR DE 50'

8 SET @TIPO = CASE (@N % 2)

WHEN 1 THEN 'IMPAR'


9
ELSE 'PAR'
10
END
11
SELECT @N AS 'NUMERO', @TIPO AS 'TIPO',@VALOR AS VALOR
12
SET @N = @N + 1
13
END
14

15

CONVERT se usa para convertir el numero a una cadena de dos caracteres y lo concatenamos con
@tipo.

CAST realiza lo mismo que CONVERT


Manual SQL Server | Sentencias SQL

1
DECLARE @N INT,@TIPO CHAR(10)
2
SET @N = 5
3
IF (@N BETWEEN 4 AND 6)
4
BEGIN
5
WHILE (@N > 0)
6 BEGIN

7 SET @TIPO = CASE (@N % 2)

8 WHEN 1 THEN 'IMPAR'

9 ELSE 'PAR'

10 END

SELECT @N AS 'NUMERO', @TIPO AS 'TIPO'


11
PRINT CONVERT (CHAR(2),@N) + @TIPO
12
PRINT CAST (@N AS CHAR(2)) + @TIPO
13
SET @N = @N - 1
14
END
15
END
16
Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL

Ejercicios con CASE en SQL Server

1. Queremos saber a qu empleados eliminariamos si quitasemos los departamentos 10 y 30 y


cales se mantendran. Mostrar un informe con el apellido, salario, oficio y fechas de alta en la
empresa.

1 SELECT APELLIDO,SALARIO,DEPT_NO,OFICIO,'ACCION' = CASE

2 WHEN DEPT_NO <> 10 THEN 'EMPLEADO DE BAJA'

3 ELSE

4 'SE MANTIENE'

5 END

FROM EMP WHERE OFICIO = 'EMPLEADO'


6

2. Debemos hacer recortes de salario en la empresa, para ello debemos saber a que personas
recortaremos el sueldo, cuales se mantendrn y cuales subiremos el puesto. Utilizar todos los
empleados de la empresa(Plantilla y Empleados)

Cuando el salario sea menor de 100000, Subiremos sueldo, cuando est entre 100000 y 250000 lo
mantendremos y cuando sea superior, lo bajaremos.

?
Manual SQL Server | Sentencias SQL

1
SELECT APELLIDO, SALARIO, 'ACCION' = CASE
2
WHEN SALARIO < 100000 THEN 'SUBIR SUELDO'
3
WHEN SALARIO BETWEEN 150000 AND 250000 THEN 'MANTENER SUELDO'
4
ELSE
5
'BAJAR SUELDO'
6 END

7 FROM EMP

8 UNION

9 SELECT APELLIDO,SALARIO, 'ACCION' = CASE

WHEN SALARIO < 100000 THEN 'SUBIR SUELDO'


10
WHEN SALARIO BETWEEN 150000 AND 250000 THEN 'MANTENER SUELDO'
11
ELSE
12
'BAJAR SUELDO'
13
END
14
FROM PLANTILLA
15
Manual SQL Server | Sentencias SQL

3. Queremos saber que empleados de la plantilla trabajan en turno de tarde, noche o en otros,
para ello mostraremos Tarde o Noche dependiendo de sus valores.

SELECT 'NMERO EMPLEADO' = EMPLEADO_NO, 'APELLIDO' = APELLIDO,


1
'TURNO' = CASE T
2
WHEN 'T' THEN 'TARDE'
3
WHEN 'M' THEN 'MAANA'
4
ELSE 'OTROS'
Manual SQL Server | Sentencias SQL

5 END

6 FROM PLANTILLA

4. Queremos cambiar de localidad en Barcelona, para ello tenemos que saber qu empleados
cambiarian de localidad y cales no. Combinar tablas y mostrar el nombre del departamento junto
a los datos del empleado.

1
SELECT D.DNOMBRE AS [DEPARTAMENTO]
2 ,E.APELLIDO,'CAMBIAR DE LOCALIDAD' = CASE

3 WHEN D.LOC = 'SEVILLA' THEN 'CAMBIA DE LOCALIDAD'

4 ELSE

5 'NO CAMBIA DE LOCALIDAD'

6 END

FROM EMP AS E INNER JOIN DEPT AS D


7
ON E.DEPT_NO = D.DEPT_NO
8
Manual SQL Server | Sentencias SQL

5. Queremos saber el nmero de trabajadores que cambiaran de localidad si cambiasemos a


Barcelona y que nmero de trabajadores no cambiarian de localidad.

1
SELECT COUNT(E.EMP_NO) AS [N DE TRABAJADORES],
2 D.LOC AS [CIUDAD],'CAMBIAR' = CASE

3 WHEN D.LOC = 'BARCELONA' THEN 'CAMBIA DE LOCALIDAD'

4 ELSE 'NO CAMBIA'

5 END

6 FROM EMP AS E INNER JOIN DEPT AS D

ON D.DEPT_NO = E.DEPT_NO
7
GROUP BY D.LOC
8
Manual SQL Server | Sentencias SQL

6. Mostrar el apellido, la direccin, la fecha de nacimiento mostrando la dcada en la que est


cada persona y el sexo mostrando si es masculino o femenino de la tabla enfermo.

SELECT APELLIDO, DIRECCION,


1
[FECHA NACIMIENTO] = CASE
2
WHEN FECHA_NAC BETWEEN '01/01/1940' AND '01/01/1950' THEN
3
'DECADA DE LOS 40'
4
WHEN FECHA_NAC BETWEEN '01/01/1950' AND '01/01/1960' THEN
5
'DECADA DE LOS 50'
6 WHEN FECHA_NAC BETWEEN '01/01/1960' AND '01/01/1970' THEN

7 'DECADA DE LOS 60'

8 WHEN FECHA_NAC BETWEEN '01/01/1970' AND '01/01/1980' THEN

9 'DECADA DE LOS 70'

10 WHEN FECHA_NAC BETWEEN '01/01/1980' AND '01/01/1990' THEN

'DECADA DE LOS 80'


11
ELSE
12
'DEMASIADO VIEJO O DEMASIADO JOVEN'
13
END
14
,SEXO = CASE S
15
WHEN 'F' THEN 'MUJER'
16 ELSE
Manual SQL Server | Sentencias SQL

17 'HOMBRE'

18 END

FROM ENFERMO
19
ORDER BY FECHA_NAC,S
20

21

22

7. Mostrar el apellido, el salario, el oficio y el nombre del departamento de todos los empleados
aunque no tengan departamento. Si no tienen departamento mostrar que no tienen
departamento. Mostrar adems si tienen comisin o si no tienen comisin.

SELECT E.APELLIDO,E.OFICIO,E.SALARIO
1
,DEPARTAMENTO =
2
ISNULL(D.DNOMBRE,'SIN DEPARTAMENTO')
3
,COMISION = CASE COMISION
4
WHEN 0 THEN 'SIN COMISION'
5
ELSE
Manual SQL Server | Sentencias SQL

6 'CON COMISION'

7 END

FROM EMP E
8
LEFT JOIN DEPT D
9
ON E.DEPT_NO = D.DEPT_NO
10
ORDER BY D.DNOMBRE
11

12

8. Mostrar todas las camas que existen para cada hospital y cada sala. Mostrar el nombre del
hospital, las salas y su nmero de camas. Si no hubiese camas para algn hospital las dejar a 0.
Tambin mostrar que son muchas camas cuando sean ms de 90, buen nmero cuando sean
mayores de 40 y pocas camas para las dems.

?
Manual SQL Server | Sentencias SQL

1
SELECT H.NOMBRE AS [HOSPITAL]
2
,ISNULL(S.NUM_CAMA,0) AS [N DE CAMAS]
3
,S.NOMBRE AS [SALAS]
4
,CAMAS = CASE
5 WHEN S.NUM_CAMA > 90 THEN'DEMASIADAS CAMAS'

6 WHEN S.NUM_CAMA BETWEEN 40 AND 89 THEN 'BUEN NUMERO'

7 ELSE

8 'POCAS CAMAS'

9 END

FROM SALA AS S
10
FULL JOIN HOSPITAL AS H
11
ON H.HOSPITAL_COD = S.HOSPITAL_COD
12
GROUP BY H.NOMBRE,S.NUM_CAMA,S.NOMBRE
13
ORDER BY H.NOMBRE,S.NUM_CAMA
14
Manual SQL Server | Sentencias SQL

9. Seleccionar qu empleados estn dentro de la media y cuales estn por debajo de la media,
mostrando el apellido, oficio, salario, comisin y el nombre de los departamentos. No dejar ningn
campo a NULL.

1
DECLARE @MEDIA INT
2
SELECT @MEDIA = AVG(SALARIO) FROM EMP<
3
SELECT E.APELLIDO,E.OFICIO,E.SALARIO,E.COMISION
4
,MEDIA = CASE
5 WHEN SALARIO > @MEDIA THEN 'DENTRO DE LA MEDIA'

6 ELSE

7 'POR DEBAJO DE LA MEDIA'

8 END

9 ,ISNULL(D.DNOMBRE,'SIN DEPARTAMENTO') AS DEPARTAMENTO

FROM EMP AS E
10
LEFT JOIN DEPT D
11
ON E.DEPT_NO = D.DEPT_NO
12
GROUP BY E.APELLIDO,E.OFICIO,E.SALARIO,E.COMISION,D.DNOMBRE
13
ORDER BY MEDIA
14
Manual SQL Server | Sentencias SQL
Manual SQL Server | Sentencias SQL

Funciones de fecha en SQL Server

Parte de la fecha Abreviaturas

year yy , yyyy

quarter qq , q

month mm , m

dayofyear dy , y

day dd , d

week wk , ww

weekday dw

hour hh

minute mi, n

second ss , s

millisecond ms

microsecond mcs

nanosecond ns

TZoffset tz

ISO_WEEK isowk , isoww

GetDate
Funcion que recupera la fecha actual del sistema.

1 select getdate()
Manual SQL Server | Sentencias SQL

Convert, Cast
Convierten explcitamente una expresin de un tipo de datos en otro. CAST y CONVERT
proporcionan funciones similares.
Convert(Tipodedatosdestino, Origen, Estilo)

Tiposdedatosdestino: Siempre ha de ser tipo carcter


Origen: Puede ser tipo fecha, numrico o moneda.
Estilo: Opcional. Es un cdigo que indica el formato en el que devuelve la cadena
de caracteres.
Sintaxis:
Convert(TipoDato,Dato)
Cast (Dato as TipoDato)

Ejemplo:

1 DECLARE @N INT,@PALABRA NVARCHAR(10)

SET @N = 1
2
SET @PALABRA ='NMERO'
3
PRINT CONVERT(NVARCHAR(2),@N) + ' ' + @PALABRA
4
PRINT CAST(@N AS NVARCHAR(2)) + ' ' + @PALABRA
5
WHILE (@N<11)
6
BEGIN
7 PRINT CONVERT(NVARCHAR(2),@N) + ' ' + @PALABRA

8 PRINT CAST(@N AS NVARCHAR(2)) + ' ' + @PALABRA


Manual SQL Server | Sentencias SQL

9 SET @N = @N + 1

10 END

11

DateName
Devuelve una cadena de caracteres que representa la parte de la fecha especificada de la
fecha especificada Los calculos para las horas no son exactos cuando se trata de
SmallDateTime, por lo que devuelve 0.

?
1 SELECT DATENAME(MONTH,FECHA_ALT) AS 'NOMBRE MES SIN ABREVIATURA'
Manual SQL Server | Sentencias SQL

2 FROM EMP

3 WHERE EMP_NO = 7876

4
SELECT DATENAME(M,FECHA_ALT) AS 'NOMBRE MES CON ABREVIATURA'
5
FROM EMP
6
WHERE EMP_NO = 7876
7

8
SELECT DATENAME(WEEK,FECHA_ALT) AS 'NUMERO SEMANA SIN ABREVIATURA'
9
FROM EMP
10
WHERE EMP_NO = 7876
11

12 SELECT DATENAME(WK,FECHA_ALT) AS 'NUMERO SEMANA CON ABREVIATURA'

13 FROM EMP

14 WHERE EMP_NO = 7876

15

16 SELECT DATENAME(WEEKDAY,FECHA_ALT) AS 'DIA SEMANA SIN ABREVIATURA'

FROM EMP
17
WHERE EMP_NO=7876
18

19
SELECT DATENAME(DW,FECHA_ALT) AS 'DIA SEMANA CON ABREVIATURA'
20
FROM EMP
21
WHERE EMP_NO=7876
22

23
Manual SQL Server | Sentencias SQL

Horas:

?
SELECT DATENAME(MI,FECHA_ALT) AS 'MINUTOS CON ABREVIATURA'
1
FROM EMP
2
WHERE EMP_NO = 7876
3

4
SELECT DATENAME(MINUTE,GETDATE()) AS 'MINUTOS SIN ABREVIATURA'
5

6
SELECT DATENAME(MI,GETDATE()) AS 'MINUTOS CON ABREVIATURA'
7

8
SELECT DATENAME(HH,FECHA_ALT) AS 'HORA CON ABREVIATURA'
9
FROM EMP
10 WHERE EMP_NO = 7876
Manual SQL Server | Sentencias SQL

11

12 SELECT DATENAME(HOUR,GETDATE()) AS 'HORA SIN ABREVIATURA'

13

14 SELECT DATENAME(HH,GETDATE()) AS 'HORA CON ABREVIATURA'

15

DatePart
Devuelve la parte de la fecha u hora indicada.

Sintaxis: Datepart(Valoradevolver, fecha)

?
1 SELECT DATEPART(MM,FECHA_ALT) AS 'MES',APELLIDO FROM EMP

3 SELECT DATEPART(HH,GETDATE()) AS 'HORA'

4
Manual SQL Server | Sentencias SQL

5 SELECT DATEPART(MI,GETDATE()) AS 'MINUTOS'

Nombres de Fechas:

Day(fecha)

Devuelve un INT, equivale a datepart

?
Manual SQL Server | Sentencias SQL

1
SELECT DAY(GETDATE()) AS DIA
2

3 SELECT DATEPART(DD,GETDATE()) AS DIA

5 SELECT MONTH(GETDATE()) AS MES

7 SELECT DATEPART(MM,GETDATE()) AS MES

9 SELECT YEAR(GETDATE()) AS AO

10

11 SELECT YEAR(FECHA_ALT) AS AO

FROM EMP
12
WHERE EMP_NO = 7876
13
Manual SQL Server | Sentencias SQL

DateAdd
Aade un nmero a la fecha puesta

DateAdd( datepart , number, date )

DatePart es el formato de lo que queremos aadir.

Number es el nmero que queremos incrementar la fecha expuesta.

1 SELECT DATEADD(DD,7,'16/05/2015') AS 'FECHA CON 7 DIAS DE MAS'

3 SELECT DATEADD(MM,1,'16/05/2015') AS 'FECHA CON 1 MES DE MAS'

5 SELECT DATEADD(YY,3,'16/05/2015') AS 'FECHA CON 3 AOS DE MAS'


Manual SQL Server | Sentencias SQL

DateDiff
Devuelve la diferencia entre dos fechas en el intervalo que le indiquemos.

Sintaxis:

DateDiff (DatoqueDevuelve, Fecha1, Fecha2)

Datoquedevuelve: Indicamos como queremos que haga la comparacin y el tipo de dato


que nos devolver, aos, das, minutos etc.

1 SELECT DATEDIFF(YYYY,FECHA_ALT,GETDATE())

2 AS 'DIFERENCIA DE AOS ENTRE LA FECHA DE ALTA Y LA FECHA ACTUAL'

3 FROM EMP

4 WHERE EMP_NO = 7876


Manual SQL Server | Sentencias SQL

Funciones matemticas en SQL Server

ABS
Obtiene el valor Absoluto

1 SELECT ABS(-4) AS 'VALOR ABSOLUTO'

CEILING
Devuelve el entero ms pequeo mayor o igual que la expresin numrica dada.

1 SELECT CEILING(5.4) AS 'CEILING'

FLOOR
Devuelve el entero ms grande menor o igual que la expresin numrica dada.

1 SELECT FLOOR(5) AS 'FLOOR'


Manual SQL Server | Sentencias SQL

POWER
Devuelve el valor de la expresin indicada elevada a la potencia especificada.

1 SELECT POWER(3,2) AS '3 ELEVADO A 2'

RAND
Devuelve un valor float aleatorio de 0 a 1.
Las llamadas repetitivas de RAND() en una nica consulta producirn el mismo valor.

1 SELECT RAND(6) AS 'ALEATORIO'

3 SELECT RAND(5) AS 'ALEATORIO'

5 SELECT RAND(4) AS 'ALEATORIO'


Manual SQL Server | Sentencias SQL

Rand sobre los milisegundos actuales

1 SELECT RAND(DATEPART(MS,GETDATE())) AS 'ALEATORIO'

3 SELECT RAND(999999999) AS 'ALEATORIO'


Manual SQL Server | Sentencias SQL

ROUND
Devuelve una expresin numrica, redondeada a la longitud o precisin especificada.

Round(Numero, Redondeo del Nmero)

ROUND siempre devuelve un valor. Si length es un valor negativo y mayor que el nmero de
dgitos anteriores al separador decimal, ROUND devuelve 0.

1 SELECT ROUND(123.4567,2)

3 SELECT ROUND(123.4567,-2)

5 SELECT ROUND(123.4567,0)

7 SELECT ROUND(123.4567,-3)
Manual SQL Server | Sentencias SQL

SIGN
Devuelve el signo positivo (+1), cero (0) o negativo (-1) de la expresin especificada.
Dice el valor negativo, positivo o neutro (0) del valor especificado

1 SELECT SIGN(-3)

3 SELECT SIGN(3)

5 SELECT SIGN(0)

SQUARE
Devuelve el cuadrado de la expresin especificada.

1 SELECT SQUARE(4) AS 'CUADRADO'


Manual SQL Server | Sentencias SQL

SQRT
Devuelve la raz cuadrada de la expresin especificada.

1 SELECT SQRT(4) AS [RAIZ CUADRADA]


Manual SQL Server | Sentencias SQL

Funciones de cadena en SQL Server

ASCII
Devuelve el cdigo ASCII del carcter ms a la izquierda de una expresin de caracteres.

1 SELECT ASCII('A') AS 'A'

2 SELECT ASCII('a') AS 'a'

3 SELECT ASCII('aula') AS 'aula'

CHAR
Una funcin de cadena que convierte un cdigo ASCII int en un carcter.

1 SELECT CHAR(65) AS '65'

2 SELECT CHAR(97) AS '97'


Manual SQL Server | Sentencias SQL

CHARINDEX
Devuelve la posicin inicial de la expresin especificada en una cadena de caracteres.

1 CHARINDEX ( expression1 , expression2 [ , start_location ] )

Argumentos:

expression1
Es una expresin que contiene la secuencia de caracteres que se desea
buscar. Expression1 es una expresin del tipo de cadenas cortas de caracteres.

Expression2
Es una expresin, normalmente una columna,
en la que se busca la cadena especificada. Expression2 es de la categora del tipo de
datos cadena de caracteres.

start_location
Es la posicin del carcter de expression2 en el que se empieza la
bsqueda de expression1.

Si no se especifica start_location, es un nmero negativo o es cero,


la bsqueda empieza al principio de la cadena expression2.
Si expression1 no se encuentra en expression2, CHARINDEX devuelve 0.
Si alguno de los dos es null, devuelve null

?
Manual SQL Server | Sentencias SQL

1 SELECT CHARINDEX('cie','murcielago') AS 'SS'

2 SELECT CHARINDEX('cie','murcielago',2) AS '2'

3 SELECT CHARINDEX('cie','murcielago',5) AS '5'

4 SELECT CHARINDEX('cie','murcielago',-6) AS '-6'

LEFT
Devuelve la parte de una cadena de caracteres que comienza en un nmero de
caracteres especificado a partir de la izquierda

1 SELECT LEFT('murcielago',5)

RIGHT
Devuelve la parte de una cadena de caracteres que comienza en el nmero de caracteres
especificado en integer_expression a partir de la derecha.
Manual SQL Server | Sentencias SQL

1 SELECT RIGHT('hola que tal',5)

LEN
Cuenta el nmero de caracteres que se incluyen en la cadena.

1 SELECT LEN('murcielago')

LOWER
Convierte a Minsculas la cadena especificada

1 SELECT LOWER('MurcIELaGO') AS [minusculas]<pre></pre>


Manual SQL Server | Sentencias SQL

UPPER
Convierte a Maysculas la cadena especificada

1 SELECT UPPER('murcielago') AS [MAYUSCULAS]

RTRIM y LTRIM
Elimina los espacios que existen a la izquierda y a la derecha respectivamente.

1 SELECT RTRIM (' murcielago ') AS [SIN ESPACIOS]

2 SELECT LTRIM (' murcielago ') AS [SIN ESPACIOS]

3 SELECT LTRIM(RTRIM(' hola ')) + '.'


Manual SQL Server | Sentencias SQL

REPLACE
Reemplaza por una tercera expresin todas las apariciones de la segunda expresin de
cadena proporcionada en la primera expresin de cadena

1 SELECT REPLACE('hola que tal estas','a','A') AS 'a'

2 SELECT REPLACE('buenos dias, que tal estas','ue','') AS 'ue'

SPACE
Coloca el nmero de espacios que se le indiquen para entre una cadena de caracteres.

1 SELECT 'hola'+ SPACE(5) + 'que tal'

SUBSTRING
Devuelve parte de una expresin de caracteres, binaria, de texto o de imagen.

Sintaxis:
Manual SQL Server | Sentencias SQL

1 SUBSTRING (expression, start, length)

Argumentos:

expression
Es una cadena de caracteres, cadena binaria, texto, imagen,
columna o expresin que incluye una columna.
No deben usarse expresiones que incluyan funciones de agregado.

start
Es un entero que especifica el punto en que comienza la subcadena.

length
Es un entero que especifica la longitud de la subcadena (el nmero de caracteres o bytes
que se devuelven).

1 SELECT SUBSTRING('murcielago',3,5) AS 'Dato1'

2 SELECT SUBSTRING('murcielago',3,LEN('murcielago')) AS 'Dato2'

REVERSE
Devuelve invertida una expresin de carcter.

?
Manual SQL Server | Sentencias SQL

1 SELECT REVERSE('hola')

REPLICATE
Repite una expresin de caracteres un nmero especificado de veces.

1 SELECT REPLICATE('murcielago ',5)

STUFF
Elimina el nmero de caracteres especificado e inserta otro conjunto de caracteres en un
punto de inicio indicado.

1 SELECT STUFF('Murcielago', 2, 3, 'ijklmn')


Manual SQL Server | Sentencias SQL

Funciones de Sistema en SQL Server

APP_NAME () Devuelve el nombre de la aplicacin actual

1 SELECT APP_NAME() AS [NOMBRE DE LA APLICACION]

DATALENGTH (Expresion) Devuelve un entero que es numero de bytes


necesarios para representar esa expresin a int

1 SELECT DATALENGTH('NINONI') AS [NUMERO DE BITES]

ISDATE (Expresion) Dice si la expresin es una fecha o no. Devuelve 1 si la


expresin es una fecha y 0 si no es una fecha.

1 SELECT ISDATE ('12/10/01') AS [VALIDACION FECHA]


Manual SQL Server | Sentencias SQL

ISNUMERIC (Expresion) Dice si la expresin es un numero o no.

Devuelve 1 si la expresin es un nmero y 0 si la expresin no es nmero.

1 SELECT ISNUMERIC('DDD') AS [VALIDACION NUMERO]

ISNULL (Expresin , ExpresionDevuelta) Si la expresin es nula te devuelve la


Expresin Devuelta y si no devuelve la primera Expresin

1 SELECT ISNULL (NULL,'NO NULO') AS [ES NULO]

PARSENAME (NombreObjeto, ParteNombre)


Manual SQL Server | Sentencias SQL

ParteNombre es un valor de tipo Int que coge unos determinados valores del

NombreObjeto:

1 Objeto.

2 Propietario

3 Base de Datos

4 Servidor

1 SELECT PARSENAME('SERRA.HOSPITAL.DBO.EMP',1) AS [PARTE EXPRESION]

2 SELECT PARSENAME('SERRA.HOSPITAL.DBO.EMP',2) AS [PARTE EXPRESION]

3 SELECT PARSENAME('SERRA.HOSPITAL.DBO.EMP',3) AS [PARTE EXPRESION]

4 SELECT PARSENAME('SERRA.HOSPITAL.DBO.EMP',4) AS [PARTE EXPRESION]

SYSTEM_USER
Manual SQL Server | Sentencias SQL

Devuelve el usuario del sistema actual

Depende de la autentificacin con la que te hayas conectado

1 SELECT SYSTEM_USER AS [USUARIO CONECTADO]

USER_NAME()

Devuelve el nombre del usuario actual

1 SELECT USER_NAME()

COALESCE (expresin1, expresin2, ...)

Devuelve la primera expresin no NULL

Si todos son NULL devuelve NULL


Manual SQL Server | Sentencias SQL

1 SELECT COALESCE(SALARIO,COMISION) FROM EMP

Si el Salario es nulo devolver la comisin, y si los dos son nulos, devolver un campo
null.
Manual SQL Server | Sentencias SQL

Referencia Bibliogrfica

http://www.ingenieriasystems.com/2014/01/Manual-de-Microsoft-SQL-Server-Full-Transact-
SQL.html

También podría gustarte