Vous êtes sur la page 1sur 7

Base de datos I.

Gua 6

Facultad:
Ingeniera
Escuela:
Computacin
Asignatura: Base de datos I

Tema: SUBCONSULTAS Y CREACION DE VISTAS.

Objetivo
Especfico

Definir que es una subsonsulta


Utilizar vistas para seguridad de los datos

Materiales
Equipo

Computadora con SQL Server 2005.


Gua Nmero 6

Introduccin
Terica
Qu es una subconsulta?
Una subconsulta es una consulta T-SQL normal anidada dentro de otra consulta, se
crean utilizando parntesis en una instruccin SELECT que sirve como base para
cualquier parte de los datos o de la condicin de otra consulta.
Normalmente las subconsultas se utilizan para satisfacer una o un par de las siguientes
necesidades:

Desglosar una consulta en una serie de pasos lgicos.


Proporcionar un listado que va a ser el destino de una clusula WHERE con [IN |
EXISTS |ANY | ALL].
Proporcionar una bsqueda dirigida por cada registro individual de una consulta
principal.

Crear una subconsulta anidada.


Las subconsultas pueden anidarse de forma que una subconsulta aparezca en la clusula
WHERE (por ejemplo) de otra subconsulta que a su vez forma parte de otra consulta
principal. En la prctica, una consulta consume mucho ms tiempo y memoria cuando se
incrementa el nmero de niveles de anidamiento. La consulta resulta tambin ms difcil
de leer , comprender y mantener cuando contiene ms de uno o dos niveles de

Base de datos I, Gua 6

subconsultas.
Ejemplo 1:
SELECT numemp, nombre
FROM empleados
WHERE numemp = (SELECT rep FROM pedidos WHERE clie = (SELECT numclie
FROM clientes WHERE nombre = 'Julia Antequera'))
En este ejemplo, por cada lnea de pedido se calcula la subconsulta de clientes, y esto se
repite por cada empleado, en el caso de tener 10 filas de empleados y 200 filas de
pedidos (tablas realmente pequeas), la subconsulta ms interna se ejecutara 2000
veces (10 x 200).
Evidentemente, la sintaxis exacta variar, no slo por sustituir la lista de seleccin y los
nombres exactos de las tablas, sino tambin porque tenemos uniones de mltiples tablas
en la consulta interior, en la exterior o en ambas.
Consultas anidadas utilizando instrucciones SELECT: de un solo valor vamos a practicar
un ejemplo explicito.
Supongamos, por ejemplo, que deseamos conocer los ProductID (ID de productos) de
todos los artculos vendidos el primer da que se compr cualquier producto desde el
sistema.
Si ya sabemos cul es el primer da en que se insert un pedido en el sistema, no habr
ningn problema; la consulta sera como la siguiente:
USE NORTHWIND
SELECT DISTINCT (o.OrderDate), od.ProductID
FROM Orders o
INNER JOIN [Order Details] od
ON o.OrderID = od.OrderID
WHERE OrderDate = '4/7/1996' --Esta es la primera fecha de un pedido en el sistema
Pero ahora supongamos, por ejemplo, que depuramos regularmente los datos de nuestro
sistema y deseamos seguir haciendo la misma pregunta como parte de un informe
automatizado. Como se va a automatizar, no podemos ejecutar una consulta para buscar
cual es la primera fecha en el sistema e insertarla manualmente en nuestra consulta, lo
mejor es automatizar el procedimiento.
USE NORTHWIND
SELECT DISTINCT o.OrderDate, od.ProductID
FROM Orders o
INNER JOIN [Order Details] od
ON o.OrderID = od.OrderID
WHERE OrderDate = (SELECT MIN(OrderDate) FROM Orders)

Base de datos I. Gua 1 3


Consultas anidadas utilizando subconsultas que devuelven: Mltiples valores: La consulta
que vamos a realizar en estos momentos es para buscar una lista de todas las tiendas
que tienen registros de descuento. Las tiendas se encuentran en una tabla denominada
Stores (Tiendas). Los descuentos estn en una tabla denominada discounts
(descuentos).
USE PUBS
SELECT stor_id, stor_name
FROM Stores
WHERE stor_id IN (SELECT stor_id FROM Discounts)
Mezclar tipos de datos: CAST y CONVERT Podr ver CAST y CONVERT utilizadas con
mucha frecuencia. Considerando que vamos a utilizar con frecuencia estas dos funciones
ste es el momento ideal para examinarlas con ms detalle para saber lo que pueden
hacer por nosotros.
Tanto CAST como CONVERT ejecutan conversiones de tipos de datos. En su mayora,
ambas hacen lo mismo, exceptuando a CONVERT que tambin realiza algunas
conversiones de formatos de fecha que CAST no ofrece.
Vamos a examinar la sintaxis de ambas funciones:

CAST (expresin AS tipo-de-datos)


CONVERT (tipo-de-datos, expresin [, estilo])
CAST y CONVERT pueden tratar una amplia variedad de conversiones de tipos de datos
que vamos a necesitar cuando SQL Server no lo haga implcitamente por nosotros. Por
ejemplo, convertir un nmero en una cadena es una necesidad muy comn.
SELECT 'El cliente ha realizado la siguiente orden' + OrderID
FROM Orders
WHERE CustomerID = 'ALFKI'
Nos va a producir un error: Pero si cambiamos el cdigo para que convierta primero
el nmero:
SELECT 'El cliente ha realizado la siguiente orden: ' + CAST (OrderID AS varchar)
FROM Orders
WHERE CustomerID = 'ALFKI'
Observe que con CAST no tenemos el mismo control sobre el formato de fechas que con
CONVERT.
Por ejemplo:
SELECT OrderDate, CONVERT (varchar (12), OrderDate, 111) AS Convertido
FROM Orders WHERE OrderID = 11050

Base de datos I, Gua 6

Es un resultado algo diferente de CAST. De hecho, podramos haber convertido a uno de


los formatos de ao de dos dgitos.
SELECT OrderDate, CONVERT(varchar(12), OrderDate, 5) AS Convertido
FROM Orders
WHERE OrderID = 11050
Para elegir el formato de fecha que deseamos, lo que tenemos que hacer es suministrar
un cdigo al final de la funcin CONVERT. (111 en el ejemplo anterior nos habra
proporcionado el estndar japons, con un ao de cuatro dgitos; 5 es el estndar italiano,
con un ao de dos dgitos). Los cdigos de 100 son para aos de cuatro dgitos; los
cdigos menores que 100 (con algunas excepciones) son para aos de dos dgitos. Los
formatos disponibles se pueden encontrar en el tema CONVERT o CASE de los libros en
pantalla de SQL Server.
PERTENENCIA A CONJUNTO IN
Examina si el valor de la expresin es uno de los valores incluidos en la lista de valores
SELECT numemp, nombre, oficina FROM empleados
WHERE oficina IN (12,14,16)
SELECT numemp, nombre FROM empleados
WHERE (oficina = 12) OR (oficina = 14) OR (oficina =
16)

Lista los empleados de las oficinas 12, 14 y 16


Obtenemos lo mismo que en el ejemplo anterior.
Los parntesis son opcionales

La subconsulta debe generar una nica columna y las filas que sean. Si la subconsulta no
produce ninguna fila, el test da falso.

Sintaxis:
SELECT numemp, nombre, oficina
FROM empleados
WHERE oficina IN (SELECT oficina FROM
oficinas WHERE region = 'este')

Con la subconsulta se obtiene la lista de los


nmeros de oficina del este y la consulta
principal obtiene los empleados cuyo
nmero de oficina sea uno de los nmeros
de
oficina
del
este.
Por lo tanto lista los empleados de las
oficinas del este.

Vistas
Las vistas tiene una tendencia a ser utilizadas mucho o poco: en raras ocasiones se
utilizan en su justa medida. Las vistas se podran utilizar para:
1) Reducir la complejidad aparente de la base de datos para los usuarios finales

Base de datos I. Gua 1 5


2) Prevenir la seleccin de columnas confidenciales a la vez que permite el acceso a otros
datos importantes En el fondo, una vista no es ms que una consulta almacenada. lo
extraordinario es que podemos combinar y hacer corresponder datos desde tablas base
(o desde otras vistas) para crear lo que, en general, funciona como cualquier otra tabla
base.

Ejemplo 1:
USE northwind
CREATE VIEW Categorias
AS
SELECT CategoryID, CategoryName, Description
FROM Categories
Para llamar a la vista creada: SELECT * FROM Categorias

Ejemplo 2:
CREATE VIEW Vista_Products
AS
SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice
FROM Products
Para llamar a la vista creada: SELECT * FROM Vista_Products
Si queremos modificar la vista del ejemplo 2 agregndole un nuevo campo, lo podemos
hacer con el comando ALTER de la siguiente manera
ALTER VIEW Vista_Products
AS
SELECT ProductID, ProductName, QuantityPerUnit,
UnitPrice,UnitsInStock
FROM Products
Las vistas se pueden utilizar como tablas. Para eliminar una vista podemos utilizar DROP.
Ejemplo:
DROP VIEW Vista_Products
Se pueden tambien utilizar vistas con combinaciones de tablas.

Base de datos I, Gua 6

Procedimiento
Realice los siguientes ejercicios sin utilizar Join, solo subconsultas.
1. Escriba un script utilizando subconsulta, liste los empleados de la editorial
(pub_name) New Moon Books. La base a utilizar es PUBS y las tablas son
employee y publishers.
2. Haga una consulta haciendo uso de subconsultas, que liste el nombre de los
procutos (ProductID, ProductName de la tabla product) que tengan una
cantidad(quantity de la tabla [Order Details]), de pedido mayor a 115
3. Cree las vistas que contengan las siguientes consultas.
Realizar una consulta que muestre los siguientes campos:
1) de la tabla HumanResources.EmployeeAddress el campo EmployeeID
2) de la tabla Person.Address los campos AddressLine1 y PostalCode
3) de la tabla Person.StateProvince los campos StateProvinceID y nameDe la base
de datos AdventureWorks
Realizar una consulta que muestre los siguientes campos:
1) de la tabla Customers el campo CustomerID.
2) de la tabla Orders el campo OrderDate.
3) de la tabla Employees los campos FirstName, LastName y BirthDate de la base
de datos Northwind.

Investigacin
Investigar que son los Procedimientos Almacenados en SQL Server.

Bibliografa
Vieira Roberto, Fundamentos de Programacin con SQL Server
2005

Base de datos I. Gua 1 7

SUBCONSULTAS
CREACION DE VISTAS
Gua

Hoja de cotejo:

6:

Alumno:

Mquina No:

Docente:

GL:

Fecha:

EVALUACION
%
CONOCIMIENTO

Del 20
al 30%

APLICACIN
DEL
CONOCIMIENTO

Del 40%
al 60%

1-4

5-7

8-10

Conocimie
nto
deficient
e de los
fundament
os
tericos

Conocimiento
y explicacin
incompleta de
los
fundamentos
tericos

Conocimiento
completo y
explicacin
clara de los
fundamentos
tericos

No tiene
actitud
proactiva
.

Actitud
propositiva y
con
propuestas no
aplicables al
contenido de
la gua.

Tiene actitud
proactiva y sus
propuestas son
concretas.

ACTITUD
Del 15%
al 30%

TOTAL

100%

Nota

6
1

Vous aimerez peut-être aussi