Unidad 02
Consultas en Sql Server
Objetivo:
Conocer las consultas que puedes realizar a una base
de datos con las herramientas que te proporciona Sql
Server
Contenido:
▪ Implementar consulta usando las cláusulas: Where,
Order By, Group By, Having.
▪ Operadores lógicos: And, Or, Not
▪ Operadores de comparación: Betwen, Like, In
▪ Funciones de agregado: AVG,Count, Sum, Máx, Min
Base de datos II
1. IMPLEMENTACIÓN DE CONSULTAS
El lenguaje SQL está compuesto por comandos, clausulas, operadores y
funciones de agregado. Estos elementos se combinan en las instrucciones para
crear, actualizar y manipular las bases de datos.
Los comandos de definición de datos (DLL) y los de manipulación de datos (DML)
lo vimos en la unidad anterior, ahora veremos las cláusulas, operadores y
funciones de agregado.
Cláusulas
Comando Descripción
Utilizada para especificar la tabla de la cual se van a
FROM
seleccionar los registros
Utilizada para especificar las condiciones que deben
WHERE
reunir los registros que se van a seleccionar
Utilizada para separar los registros seleccionados en
GROUP BY
grupos específicos
Utilizada para expresar la condición que debe satisfacer
HAVING
cada grupo
Utilizada para ordenar los registros seleccionados de
ORDER BY
acuerdo con un orden especifico
Operadores lógicos:
Comando Descripción
Es el “y” lógico. Evalúa dos condiciones y devuelve un valor
AND
de verdad solo si ambas con ciertas.
Es el “o” lógico. Evalúa dos condiciones y devuelve un valor
OR
de verdad si alguna de las dos es cierta.
Negación lógica. Devuelve el valor contrario de la
NOT
expresión.
Operadores de comparación
Comando Descripción
< Menor que
> Mayor que
<> Distinto de
<= Menor o igual que
>= Mayor o igual que
= Igual que
BETWEN Utilizado para especificar un intervalo de valores.
LIKE Utilizado en la comparación de un modelo
In Utilizado para especificar registros de una base de datos
2 Instructor: Alexander Luna
Base de datos II
Funciones de agregado: Las funciones de agregado se usan dentro de una
cláusula SELECT, en grupos de registros para devolver un único valor que se
aplica a un grupo de registros.
Comando Descripción
Se emplea para calcular el promedio de los valores de un
AVG
campo determinado
COUNT Se emplea para devolver el número de registros de la selección
Se emplea para devolver la suma de todos los valores de un
SUM
campo determinado
Se emplea para devolver el valor más alto de un campo
MAX
especificado
Se emplea para devolver el valor más bajo de un campo
MIN
especifico
1.1. CONSULTAS DE SELECCIÓN (SELECT)
El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos
normalizado, utilizado por el motor de base de datos de Microsoft SQLServer. Las
consultas de selección se utilizan para solicitar información de las bases de datos,
esta información es devuelta en forma de conjunto de registros el cual puede ser
modificado. Para realizar consultas a una base de datos, se usa el comando
SELECT, funciones y cláusulas, empezaremos desde lo más básico y usaremos
para nuestros ejemplos la base de datos Neptuno.
Ejemplos:
1. LIstado de todos los clientes
Sintaxis:
USE Neptuno
go
SELECT*FROM Clientes
2. Listado de todos los productos
Sintaxis:
SELECT*FROM Productos
3. Codigo, Nombre y el pais de la tabla Clientes
Sintaxis:
SELECT Idcliente, NombreCompañía, País
FROM Clientes
4. Direccion, Ciudad, Pais y el nombre de los clientes.
Sintaxis:
SELECT Dirección, Ciudad, País, NombreCompañía
FROM Clientes
5. Seleccionar las categorías
Sintaxis:
3 Instructor: Alexander Luna
Base de datos II
SELECT*FROM Categorías
6. Seleccionar la table Detalles
Sintaxis:
SELECT*FROM Detalles
1.2. USO DE AS
Se utiliza para designar, reemplazar titulos y campos existentes.
SINTAXIS:
Nombre Actual AS ‘Nombre que tendra’
Ejemplo:
En la base de datos Venta cambie los nombres indicados.
SELECT Idproducto AS 'Codigo', Nombre AS 'Descripcion'
FROM Products
1.3. CAMPO CALCULADO
Es un campo virtual, no esta grabado en la tabla y se obtiene a partir de una
expresion creada con valores almacenados solo visualizado en consultas.
Ejemplos:
1. En el siguiente ejemplo se pide mostrar la columna calculada precio incluido
IGV.
SELECT Idproducto AS 'Codigo', NombreProducto AS 'Descripcion',
PrecioUnidad AS 'Precio', Format(PrecioUnidad*1.18,'0.00') AS 'Incluido IGV'
FROM Productos
2. Obtener el subtotal, el descuento, el IGV, y el total, en la tabla Detalles de la
base de datos Neptuno.
SELECT Idpedido AS 'Nro. de Pedido', IdProducto AS 'Codigo',
PrecioUnidad AS 'Precio Unitario', Cantidad AS 'Cantidad',
PrecioUnidad*Cantidad AS 'SubTotal',
PrecioUnidad*Cantidad*Descuento AS 'M.Descuento',
PrecioUnidad*Cantidad*(1-Descuento) AS 'NETO',
PrecioUnidad*Cantidad*(1-Descuento)*0.19 AS 'IGV',
PrecioUnidad*Cantidad*(1-Descuento)*1.19 AS'TOTAL'
FROM Detalles
1.4. USO DE LA CLAUSULA WHERE
WHERE determina que registro de las tablas enumeradas en la clausula FROM
apareceran en los resultados de la instrucción SELECT, realiza los filtros de
acuerdo a los criterios establecidos.
Ejemplos:
1. Mostrar un listado de los Clientes de Mexico
SELECT*FROM Clientes
WHERE País ='Mexico'
2. Mostrar un listado de los Clientes de Argentina y Canada.
SELECT*FROM Clientes
WHERE País ='Argentina' OR País ='Canada'
4 Instructor: Alexander Luna
Base de datos II
3. Listado de Productos con Precio Unitario entre 20 y 50
SELECT*FROM Productos
WHERE PrecioUnitario >= 20 AND PrecioUnitario <= 50
4. Listado de productos de la categoria 1,3,4, y 5
SELECT*FROM Productos
WHERE Idcategoria =1 OR Idcategoria = 3 OR
Idcategoria =4 OR Idcategoria =5
1.5. USO DE LA CLAUSULA GROUP BY Y ORDER BY
ORDER BY. - Permite Ordenar los datos de la manera que deseamos, puede ser
ascendente o descendente.
GROUP BY. - Permite agrupar un conjunto de registros.
Ejemplos:
1. Ordenar la coluna pais obtenida en orden alfabetico descendente.
SELECT*FROM Clientes
WHERE País ='Argentina' OR País ='Canada'
ORDERBY País DESC
2. Ordenar y Agrupar los productos por categoria
Select IdCategoría, IdProducto, NombreProducto
From Productos
Group By IdCategoría, IdProducto, NombreProducto
Order By IdCategoría Asc
1.6. OPERADORES
OPERADOR BETWEEN.- Permite indicar rangos.
Ejemplo:
Listado de productos con precios unitarios entre 20 y 50
SELECT*FROM Productos
WHERE PrecioUnidad BETWEEN 20 AND 50
OPERADOR IN.- Filtra rangos seleccionados.
Ejemplo:
1. Listado de Productos de la Categoria 1, 3, 4, y 5
SELECT*FROM Productos
WHERE Idcategoría IN(1,3,4,5)
2. Listado de Productos de la categoria 1, 3, 5, y 7, y que ademas sus precio
unitario sean menores que 40
SELECT*FROM Productos
WHERE Idcategoría IN(1,3,5,7) And PrecioUnidad < 40
1.7. FUNCIONES DE FECHA E IMPRESIÓN
PRINT.- es una funcion que nos permite mostrar lo solicitado.
GETDATE().- Nos entrega la fecha y hora de hoy (lo que el sistema tiene como
dato).
Ejemplos:
Imprimir la fecha de hoy
5 Instructor: Alexander Luna
Base de datos II
PRINT GETDATE()
DATEADD(PARTE_FECHA,n,fecha).- Permite adicionar uno de los argumentos
de una fecha (puede ser los dias, mese, años), n es el numero que se adiciona.
Ejemplos:
1. Mostrar la Fecha dentro de 5 años.
PRINT DATEADD(Year,5,GETDATE())
2. Mostrar la fecha dentro de 40 dias.
PRINT DATEADD(day,40,GETDATE())
DATEDIFF(PARTE_FECHA,FECHA1,FECHA2).- Dada dos fechas nos entrega la
diferencia de las dos, en el argumento solicitado.
Elemplos:
Mostrar la edad de una persona cuya fecha de naciomiento es: 05/06/1987
SELECT DATEDIFF(YEAR,'05-06-1987',GETDATE())
AS 'AÑOS DELA PERSONA'
DATEPART(PARTE_FECHA,FECHA).- Nos entrega parte de la fecha (Puede ser
dia, mes, año) de acuerdo a lo solicitado en PART_FECHA.
Ejemplos:
1. PRINT DATEPART(Year,GETDATE())
2. PRINT DATEPART(MONTH, GETDATE())
3. PRINT DATEPART(DAY, GETDATE())
4. PRINT DATEPART(DAYOFYEAR, GETDATE())
5. PRINT DATEPART(Weekday, GETDATE())
6. PRINT DATENAME(Month, GETDATE())-- Abril
Nomenclatura en fechas:
Parte_Fecha Abreviatura Descripcion
Year yy, yyyy Año de fecha
Quarter q, qq Trimestre del año de la fecha
Month m, mm Mes de año
Week ww,wk Semana del año
Dayofyear dy Dia del año
Hour hh Hora de la fecha
Minute n,mi Minuto de la fecha
Second s,ss Segundo de la fecha
Ejemplos:
1. Muestrame las ordenes emitidas en el año 1996 y 1997
SELECT*FROM Orders
WHERE DATEPART(YEAR,OrderDate)= 1996 OR
DATEPART(YEAR,OrderDate)= 1997 Rta: 560
2. Ordenes emitidas en el primer y ultimo trimestredel año 1996
6 Instructor: Alexander Luna
Base de datos II
SELECT*FROM Orders
WHERE DATEPART(Year,OrderDate)=1996
AND(DATEPART(quarter,OrderDate)= 1 OR
DATEPART(quarter,OrderDate)= 4)
3. Ordenes emitidas la primera quincena DE AGOSTO DEL AÑO 1996
SELECT*FROM Orders
WHEREDATEPART(Year,OrderDate)=1996 AND
DATENAME(MONTH,OrderDate)='AGOSTO' AND
DATEPART(DAY,OrderDate) BETWEEN 1 AND 15
4. Ordenes emitidas un martes 13
SELECT*FROM Orders
WHERE DATENAME(Weekday,OrderDate)='Martes' AND
DATEPART(DAY,OrderDate)= 13
Las fechas que se generan en la tablas tienen un formato según el idioma, por lo
general viene en formato de EEUU, es decir yyyy/mm/dd, año , mes y dia. El
formato que usamos en el Peru es dd/mm/yyyy, estas pueden ser cambiadas
usando la funcion CONVERT.
Ejemplos:
1. Cambiar la fecha de hoy en el formato dd/mm/yyyy
Solucion:
SELECT CONVERT(char(24), GETDATE(), 103) AS "Fecha de Hoy"
Resultado:
La interpretacion del scrip es la siguiente:
Char(24) indica que la conversion estara en tipo texto de un ancho de 24
caracteres.
103 es el nuemero que representa al formato solicitado es decir dd/mm/yyyy.
2. Cambiar el formato de fechas en la tabla Orden, al formato dd/mm/yyyy.
Solucion:
SELECT
IdOrden, CONVERT(CHAR(10),
FechaOrden,103) AS 'Fecha de Orden',
CONVERT(CHAR(10),
FechaEntrada,103) AS 'Fecha de
Entrada'
FROM ORDEN
GO
Resultado:
7 Instructor: Alexander Luna
Base de datos II
1.8. USO DEL OPERADOR LIKE Y COMODINES
LIKE se usa para comparar una expresion de cadena con un modelo en una
expresion SQL.
Su sintaxis es de la siguiente manera:
Expresion LIKE modelo
Expresion es una cadena modelo o campo contra el que se compara expresion.
LIKE se usa acompañado de comodines.
Comodin %.- Reemplaza a cero o más caracteres
Ejemplos:
1. Listado de cliente con la letra C al inicio del nombre.
SELECT*FROM Customers
WHERE CompanyName LIKE 'C%'
2. Listado del cliente con la letra al final del nombre.
WHERE CompanyName LIKE '%a'
3. Listado de clientes con la palabra cocina en el nombre
WHERE CompanyName LIKE '%cocina%'
4. Listado de productos con la palabra queso en el nombre
SELECT*FROM Products
WHERE ProductsName LIKE '%queso%'
5. Listado de productos con la letra e en la tercera posicion
SELECT*FROM Products
WHERE ProductName LIKE '__e%'
6. Listado de productos que empiecen y terminen con la letra e
SELECT*FROM Products
WHERE ProductName LIKE 'e%e'
7. Listado de productos que empiecen y terminen con la letra e
SELECT*FROM Products
WHERE ProductName LIKE 'e%e'
COMODIN [ ]
[ ] Retorna TRUE si el operador coinside con algun elemento del rango
Ejemplos:
1. Listado de productos con la letra A, B o C como primer caracter del
producto
SELECT*FROM Products
WHERE ProductName LIKE '[ABC]%'
2. Seleccionar los productos cuyos nombres empiezan con A, B, C, D, E, F.
SELECT*FROM Products
WHERE ProductName LIKE '[A-F]%'
3. Listado de productos con la primera y ultima letra del producto Vocal
SELECT*FROM Products
WHERE ProductName LIKE '[AEIOU]%[AEIOU]'
COMODIN [^]
8 Instructor: Alexander Luna
Base de datos II
[^] Retorna TRUE si el operador NO coinside con algun elemento del rango
Ejemplo:
Listado de productos con la Tercera letra o y la ultima letra del nombre del
producto no sea vocal.
SELECT*FROM Products
WHERE ProductName LIKE'__o%[^AEIOU]'
1.9. FUNCIONES DE AGREGADO
Las funciones de agregado realizan un calculo sobre un conjunto de valores y
devuelven un solo valor, se usuelen usar acompañado de la funcion Group By
de la instrucción Select. Las funciones de agregado más usados son:
1. FUNCION DE AGREGADO SUM
Permite devolver la suma de todos los valores distinguidos en una determinada
expresión. Esta funcion solo puede utilizarse con columnas tipo numerico.
Ejemplos:
i. Hallar los subtotales por pedido en la base de datos Neptuno sin
considerar el descuento.
Select IdPedido,sum(PrecioUnidad*Cantidad)
From Detalles
Group By IdPedido
go
2. FUNCION COUNT
Funcion que permite devolver el numero de elementos de un grupo, count
siempre devolvera un valor númerico.
Count se usa con la siguiente sintaxis: COUNT(ALL o Distinct o Columna o *)
All: Al especificarlo todos los valores son contabilizados.
Distict: Permite definir la no repitencia de valores condicionados de la consulta.
Columna: Se puede especificar el nombre de una columna de la tabla a contar.
Asterisco (*): Representa a todas la filas de la tabla.
Ejemplos:
Implementar un scrip que permita implementar el total de Clientes en la tabla
Neptuno.
Implementar un scrip que permita determinar el total de clientes agrupados por
su país, tener en cuenta las columnas a mostrar nombre del pais y total de
clientes.
3.
• MIN() Halla el valor minimo
• MAX() Halla el valor maximo
• COUNT() Cuenta elementos
• AVG() Obtiene el promedio
Ejemplos:
9 Instructor: Alexander Luna
Base de datos II
Obtener el precio maximo, el precio minimo y el promedio de los precios
unitarios.
SELECT MAX(unitPrice) AS 'Precio maximo',
MIN (unitPrice) AS 'Precio minimo',
AVG (unitPrice) AS 'Promedio de Precios'
FROM Products
Preguntas propuestas:
1. Implementar un Scrip que muestre el acumulado de los subtotales por año
de los pedidos en la base de datos Neptuno.
2. Implementar un Scrip que muestre el acumulado de los subtotales por año
y por mes de los pedidos en la base de datos Neptuno.
1.10. CONSULTAS CON PREDICADO
El predicado se incluye entre la cláusula y el primer nombre del campo a
recuperar, los posibles predicados son los siguientes:
Predicado Descripción
ALL Devuelve todos los registros de los campos de la tabla
seleccionados
TOP Devuelve un determinado número de registros de las
columnas de la tabla seleccionada.
DISTINCT Omite los registros cuyos campos seleccionados
coincidían totalmente
DISTINCTROW Omite los registros duplicados que están en la totalidad
de registros y no solo en los campos seleccionados
ALL
Si no se incluye ninguno de los predicados se asume ALL. El motor de base
de datos selecciona todos los registros que cumplen las condiciones de la
instrucción SQL.
Ejemplos:
1. Seleccionar todos los registros de la columna primer nombre
SELECT ALL FirstName
FROM Employees
TOP
Devuelve un cierto número de registros, si combinamos con la cláusula Order By
conseguiremos que los registros entregados puedan estar ordenados en forma
Ascendente o descendente.
Ejemplos:
1. Seleccionar los 5 primeros registros de la columna primer nombre
SELECT TOP(5) FirstName
FROM Employees
10 Instructor: Alexander Luna
Base de datos II
2. Seleccionar los 5 primeros registros de la columna primer nombre
pero Ordenados en forma descendente
SELECT TOP(5)FirstName
FROM Employees
ORDERBY
FirstNameDesc
Podemos expresar en porcentaje la cantidad de registros requeridos, para ello
usaremos la palabra reservada PERCENT.
3. Seleccionar el 80 % de los primeros registros de la columna primer
nombre.
SELECT TOP 80 PERCENT FirstName
FROM Employees
TOP no elige entre valores iguales.
DISTINCT
Omite los registros que contienen datos duplicados en los campos
seleccionados. Para que los valores de cada campo listado en la
instrucción SELECT se incluyan en la consulta deben ser únicos.
Ejemplo:
1. Seleccionar las ordenes sin repeticion en la tabla detalles de orden.
SELECT DISTINCT OrderID
FROM [Order Details]
GO
2. Cuantas ordenes realizo cada cliente
SELECT CustomerID,COUNT(orderID)
FROM Orders
GROUPBY CustomerID
3. Cuantas ordenes atendio cada empleado
SELECT*FROM Employees
SELECT EmployeeID,COUNT(orderID)AS'Numero de Orden'
FROM Orders
GROUPBY EmployeeID
ORDERBY 2 DESC
Ejercicios de repaso
1. Cuantos productos existen en cada categoria
SELECT*FROM Products
SELECT CategoryID,COUNT(ProductID) AS 'Nro de Productos'
FROM Products
GROUPBY CategoryID
2. Listar la categoria y el precio mas bajo en la categoria
SELECT CategoryID,MIN(unitPrice) AS 'Precio mas bajo'
FROM Products
GROUPBY CategoryID
11 Instructor: Alexander Luna
Base de datos II
3. Listar la categoria y el precio mas alto en la categoria.
SELECT CategoryID,MAX(unitPrice) AS 'Precio mas alto'
FROM Products
GROUPBY CategoryID
4. Mostrar orden y el total de la orden
SELECT OrderID,ROUND(SUM(unitPrice*Quantity*(1-Discount)),2) AS
'SubTotal'
FROM [Order Details]
GROUPBY OrderID
5. Cuantos productos existen en cada categoria y ademas mostrar el
precio mas bajo
SELECT*FROM Products
SELECT CategoryID,COUNT(ProductID) AS 'Nro de Productos',
MIN(unitPrice) AS 'Precio mas Bajo'
FROM Products
GROUPBY CategoryID
2. CONSULTAS COMBINADAS
Habitualmente cuando necesitamos recuperar la información de una base de
datos nos encontramos con que dicha información se encuentra repartida en
varias tablas, referenciadas a través de varios códigos. Es una necesidad
entonces buscar formas para poder relacionar información de varias tablas y
ponerlas en otra con la información requerida.
Las consultas combinadas pueden ser de tres tipos:
• Combinación interna
• Combinación externa
• Uniones
COMBINACIÓN INTERNA
La combinación interna nos permite mostrar los datos de dos o más tablas a
través de una condición WHERE.
Ejemplo:
Si queremos saber los promedios de los alumnos mencionando su nombre, su
apellido, de la tabla Alumno y su código del curso programado, y la nota de la
tabla matricula usaríamos el siguiente Scrip.
Use EduTec
GO
SELECT Alumno.NomAlumno, Alumno.ApeAlumno, Matricula.IdCursoProg,
Matricula.Promedio
FROM Alumno, Matricula
WHERE Alumno.IdAlumno = Matricula.IdAlumno
GO
Consultas combinadas. JOINS
12 Instructor: Alexander Luna
Base de datos II
SQL nos proporciona una forma más fácil de mostrar la información repartida en
varias tablas, usando JOINS. Si las consultas son Internas entonces se usa
combinándolo con INNER y en conjunto se convierte en la denominada Consulta
de Unión Interna INNER JOIN.
Las vinculaciones entre tablas se realizan mediante la cláusula INNER JOIN que
combina registros de dos tablas siempre que haya concordancia de valores en un
campo común.
Su sintaxis es idéntica a la de una consulta SELECT habitual, con la particularidad
de que en la cláusula FROM sólo aparece una tabla o vista, añadiéndose el resto
de tablas a través de cláusulas INNER JOIN.
Sintaxis:
SELECT campos
FROM tb1
INNER JOIN tb2
ON tb1.campo1 Comp tb2. Campo2
En donde:
tb1, tb2: Son los nombres de las tablas desde las que se combinan los registros.
Campo1, campo2: Son los nombres de los campos que se combinan. Si no son
numéricos, los campos deben ser del mismo tipo de datos.
Comp: Es cualquier operador de comparación relacional: =, <, >, <=, >=, o
<>.
Se puede utilizar una operación INNER JOIN en cualquier clausula FROM. Esto
crea una combinación por equivalencia, conocida también como unión interna.
Las combinaciones aquí son las más comunes; estas combinan los registros de
dos tablas siempre que haya concordancia de valores en un campo común a
ambas tablas.
Ejemplos:
1. Vamos a realizar el mismo ejemplo anterior, pero usando INNER JOIN. La
codificación será como se muestra a continuación.
SELECT
Alumno.NomAlumno, Alumno.ApeAlumno,
Matricula.IdCursoProg, Matricula.Promedio
FROM Alumno
INNER JOIN Matricula
ON Alumno.IdAlumno = Matricula.IdAlumno
GO
También es posible identificar a las tablas mediante letras y el Scrip que también
traería iguales resultados seria:
SELECT
A.NomAlumno, A.ApeAlumno, M.IdCursoProg, M.Promedio
FROM Alumno A
INNER JOIN Matricula M
13 Instructor: Alexander Luna
Base de datos II
ON A.IdAlumno = M.IdAlumno
GO
2. Se desea saber la existencia actual por producto y por proveedor en la base
de Datos Neptuno.
Realizando un análisis de las tablas observaras que el nombre de proveedor se
encuentra en la tabla proveedores y el nombre del producto y el stock están en
la tabla Productos.
Ambas tablas tienen un campo común que es Idproveedor esto nos permitirá
relacionar otros campos de estas tablas, en nuestro caso será la relación de
Nombre de Proveedor de la tabla Proveedores con Nombre del producto y Stock
de la tabla productos.
--Existencia actual por Producto y proveedor.
SELECT Pr.NombreCompañía, P.NombreProducto, P.UnidadesEnExistencia
FROM Proveedores Pr
INNER JOIN Productos P
ON Pr.IdProveedor=P.IdProveedor
ORDER BY Pr.NombreCompañía, P.NombreProducto
GO
NOTA:
Las letras Pr y P nos permiten diferenciar la pertenencia de tablas, Pr es de
Proveedores, y P es de Productos.
3. Crear una tabla que nos permita obtener la cantidad de productos por
categoría en la Base de Datos Neptuno.
SELECT C.NombreCategoría, COUNT(P.IdProducto) AS 'Numero de productos'
FROM Categorías C
INNER JOIN Productos P
ON C.IdCategoría=P.IdCategoría
GROUP BY C.NombreCategoría
ORDER BY C.NombreCategoría
GO
CONSULTA A TRES TABLAS:
4. De la BD EduTec obtenga una tabla con los campos de: Apellidos del alumno,
Id del curso programado y ID del profesor.
SOLUCION:
Observa que en este caso la consulta será a tres tablas, el scrip que hará posible
es:
SELECT A.ApeAlumno, M.IdCursoProg, CP.IdProfesor
FROM Alumno A INNER JOIN Matricula M
ON A.IdAlumno=M.IdAlumno
INNER JOIN CursoProgramado CP
ON M.IdCursoProg=CP.IdCursoProg
GO
14 Instructor: Alexander Luna
Base de datos II
CONSULTA A CUATRO TABLAS:
5. De la BD EduTec obtenga una tabla con los campos de: Apellidos del alumno,
Id del curso programado, Id del profesor Y Apellido del profesor.
SOLUCION:
Observa que en este caso la consulta será a 4 tablas, el scrip que hará posible
es:
SELECT A.ApeAlumno, M.IdCursoProg, CP.IdProfesor, P.ApeProfesor
FROM Alumno A INNER JOIN Matricula M
ON A.IdAlumno=M.IdAlumno
INNER JOIN CursoProgramado CP
ON M.IdCursoProg=CP.IdCursoProg
INNER JOIN Profesor P
ON CP.IdProfesor = P.IdProfesor
GO
CONSULTA A CINCO TABLAS:
6. De la BD EduTec obtenga una tabla con los campos de: Apellidos del alumno,
Id del curso programado, ID del profesor y nombre del Curso.
SOLUCION:
Observa que en este caso la consulta será a 5 tablas, el scrip que hará posible
es:
SELECT A.ApeAlumno, M.IdCursoProg, CP.IdProfesor, P.ApeProfesor,
C.NomCurso
FROM Alumno A INNER JOIN Matricula M
ON A.IdAlumno=M.IdAlumno
INNER JOIN CursoProgramado CP
ON M.IdCursoProg=CP.IdCursoProg
INNER JOIN Profesor P
ON CP.IdProfesor=P.IdProfesor
INNER JOIN Curso C
ON CP.IdCurso=C.IdCurso
GO
3. VISTAS
Es una alternativa de ver los datos de una o mas tablas al igual que con las
consultas, pero a diferencia de ellas estas tablas pueden grabarse.
Con las vistas podemos ver los datos de nuestro interes, por ellos se suele decir
que podemos cambiar los datos mediante una vista, obviamente los datos con
los que se crea una vista estan en las tablas creadas.
Las Vistas son tablas personalizadas. La edicion de datos en las tablas principales,
repercutiran en las vistas.
15 Instructor: Alexander Luna
Base de datos II
Las vistas se graban como tal y estan a disposicion del usuario, en ella puedes
cambiar los datos que ves y esta tambien repercutira en las tablas principales.
SINTAXIS:
CREATE VIEW Nombre de la vista
AS
SELECT Columnas que intervienen en la vista
FROM Tabla de las que provienen
WHERE Condicion
Ejemplo 01:
CREATE VIEW USUR_LISTA
AS
SELECT COD_USUA,NOM_USUA,APEPATER_USUA
FROM USUARIO
WHERE YEAR(FEC_NAC_USUA)>=1980
VISTAS AGRUPADAS
La consulta especificada en una definicion de vista puede incluir una clausula
GROUP BY. Este tipo de vista se denomina agrupada, ya que los datos visibles a
traves de ella son el resultado de una consulta agrupada. Las Vistas agrupadas
efectuan la misma funcion que las consultas agrupadas.
Ejemplo 02:
CREATE VIEW NOTAS_ALUMNO
AS
SELECT A.NomAlumno, A.ApeAlumno, C.NomCurso, M.Promedio
FROM Alumno A INNER JOIN Matricula M
ON A.IdAlumno=M.IdAlumno
INNER JOIN CursoProgramado CP
ON CP.IdCursoProg=M.IdCursoProg
INNER JOIN Curso C
ON CP.IdCurso=C.IdCurso
GO
--
CREATE VIEW NOTAS_ALUMNO1
AS
SELECT A.NomAlumno, A.ApeAlumno, C.NomCurso, M.Promedio
FROM AlumnoA INNER JOIN MatriculaM
ON A.IdAlumno=M.IdAlumno
INNER JOIN CursoProgramado CP
ON CP.IdCursoProg=M.IdCursoProg
INNER JOIN Curso C
ON CP.IdCurso=C.IdCurso
GROUP BY A.NomAlumno, A.ApeAlumno, C.NomCurso, M.Promedio
GO
16 Instructor: Alexander Luna
Base de datos II
Las vistas tambien se pueden crear y con mayor facilidad de manera grafica a
traves del explorador de objetos, ubicando la carpeta de vistas.
Realice los siguientes pasos.
1. Ubique la carpeta View de la base de datos del cual desea crear vistas.
2. Clic derecho y clic en New View.
3. Clic en New View y se abre la ventana de ayuda para la creacion de la vista.
4. Agrega las tablas de las cuales deseas crear la vista haciendo clic en el
botón Add.
17 Instructor: Alexander Luna
Base de datos II
5. Haz Check en cada campo de cada tabla para agregar los campos que
tendra tu vista.
6. Para ejecutar la vista clic en Execute SQL
18 Instructor: Alexander Luna