RECUPERACIÓN DE DATOS
¿Y QUÉ ES SQL?
Es un lenguaje de base de datos normalizado, utilizado por el motor de
base de datos de Microsoft. SQL se utiliza para crear objetos QueryDef,
como el argumento de origen del método OpenRecordSet y como la
propiedad RecordSource del control de datos
¿QUÉ ES SENTENCIA SELECT?
Es un comando que permite componer una consulta; este es
interpretado por el servidor el cual recupera los datos
especificados de las tablas. Su formato es:
SELECT
[ALL | * | DISTINCT]
[TOP VALOR [PERCENT]]
[ALIAS.] COLUMNA [AS] CABECERA]
FROM NOMBRE_TABLA [ALIAS]
[WHERE CONDICION]
[ORDER BY COLUMNA [ASC | DESC]]
DONDE:
Se tiene la base de datos VENTAS2017 y dentro de ella la tabla producto
--ABRIENDO LA BASE DE DATOS DEL
SISTEMA
USE MASTER
GO
--VALIDAR LA BASE DE DATOS
IF DB_ID('VENTAS2017') IS NOT NULL
DROP DATABASE VENTAS2017
GO
--CREANDO LA BASE DE DATOS
CREATE DATABASE VENTAS2017
GO
--ABRIENDO LA BASE DE DATOS
USE VENTAS2017
GO
--CAMBIANDO EL FORMATO DE LA FECHA
SET DATEFORMAT DMY
GO
Se cuenta con los siguientes registros, para realizar los ejemplos
INSERT INTO PRODUCTO VALUES ('PRO001','ARROZ COSTEÑO X 50 - SACO',160.0,5,200,'04/03/2017','C01')
INSERT INTO PRODUCTO VALUES ('PRO002','AZUCAR RUBIA X 50 - SACO',100.0,2,80,'05/05/2017','C01')
INSERT INTO PRODUCTO VALUES ('PRO003','FIDEOS ANITA X 12 - BOLSA',30.0,3,150,'08/10/2017','C01')
INSERT INTO PRODUCTO VALUES ('PRO004','FIDEOS MOLITALIA X 12 - BOLSA',35.0,5,120,'08/08/2017','C01')
INSERT INTO PRODUCTO VALUES ('PRO005','YOGURT GLORIA X 6 - PAQUETE',26.0,5,230,'25/08/2018','C02')
INSERT INTO PRODUCTO VALUES ('PRO006','LECHE GLORIA X 48 - CAJA',98.0,5,240,'03/08/2017','C02')
INSERT INTO PRODUCTO VALUES ('PRO007','ACEITE PRIMOR X 12 - CAJA ',75.0,10,180,'10/10/2019','C01')
INSERT INTO PRODUCTO VALUES ('PRO008','LENTEJAS X 50 - SACO',230.0,5,50,'02/02/2017','C07')
INSERT INTO PRODUCTO VALUES ('PRO009','PALLARES X 50 - SACO',290.0,2,30,'02/01/2017','C07')
INSERT INTO PRODUCTO VALUES ('PRO010','ATUN A1 X 48 - CAJA',145.0,2,80,'12/12/2019','C01')
INSERT INTO PRODUCTO VALUES ('PRO011','GALLETA CHARADA X 100 - BOLSA',72.0,5,160,'30/11/2017','C10')
INSERT INTO PRODUCTO VALUES ('PRO012','GASEOSA COCACOLA X 24 - CAJA',24.0,2,50,'06/10/2017','C04')
INSERT INTO PRODUCTO VALUES ('PRO013','DETERGENTE ARIEL X KILO - BOLSA',15.0,2,40,'07/08/2018','C09')
INSERT INTO PRODUCTO VALUES ('PRO014','COMINO X 100 - CAJA',10.0,5,300,'02/03/2017','C05')
INSERT INTO PRODUCTO VALUES ('PRO015','GASEOSA PEPSI X 12 MEDIANA- PAQUETE',20.0,5,50,'02/03/2018','C04')
INSERT INTO PRODUCTO VALUES ('PRO016','DOS CABALLOS X 6 - CAJA',28.0,5,45,'02/03/2019','C11')
INSERT INTO PRODUCTO VALUES ('PRO017','CEREALES ANGEL X KILO - BOLSA',18.0,5,70,'02/03/2017','C05')
INSERT INTO PRODUCTO VALUES ('PRO018','QUAKER X KILO - BOLSA',7.00,5,300,'02/04/2017','C01')
INSERT INTO PRODUCTO VALUES ('PRO019','PEZIDURI X LITRO - POTE',8.50,5,300,'31/12/2016','C12')
INSERT INTO PRODUCTO VALUES ('PRO020','ARROZ PAISANA SUPERIOR x 5kg- Bolsa',17.0,5,80,'07/05/2017','C01')
1 • UTILIZANDO EL OPERADOR *
El operador asterisco (*) cumple dos funciones dentro de la implementación de una consulta,
la primera es mostrar todos los registros de la tabla y la segunda es mostrar todas las columnas
que la componen con el orden especificado en su creación.
Ejemplo 01: Crear el Script que permita mostrar todos los registros de la tabla producto:
Select * from producto
2 • ESPECIFICANDO COLUMNAS
La especificación de las columnas permite determinar el orden de los campos en el resultado de la
consulta, su objetivo es meramente visual; pues al final el resultado es el mismo
Ejemplo 02: Script que permita mostrar los campos ID_PRODUCTO, DESCRIPCION,
STOCK_ACTUAL y FECHA_VENC de la tabla producto.
SELECT ID_PRODUCTO, DESCRIPCION, STOCK_ACTUAL, FECHA_VENC FROM PRODUCTO
GO
3 • ESPECIFICANDO COLUMNAS Y UTILIZANDO ALIAS
El Alias se utiliza para identificar la tabla de donde se obtienen las columnas.
Ejemplo 03: Script que permita mostrar los campos ID_PRODUCTO, DESCRIPCION y
STOCK_ACTUAL de la tabla producto. Utilizar el alias “P” para la tabla producto.
SELECT P.ID_PRODUCTO, [Link], P.STOCK_ACTUAL FROM PRODUCTO P
GO
4 • ESPECIFICANDO CABECERA DE COLUMNAS
La especificación de cabeceras permita asignar títulos a las columnas mostradas en el resultado
de una consulta SELECT
Ejemplo 04: Crear un script que permita mostrar los campos ID_PRODUCTO(código),
DESCRIPCION(Producto) y STOCK_ACTUAL(EXISTENCIA) de la tabla producto. Utilizar el alias “P”
para la tabla producto.
SELECT P.ID_PRODUCTO AS CÓDIGO, [Link] AS PRODUCTO, P.STOCK_ACTUAL AS
EXISTENCIA FROM PRODUCTO P
GO
4 • ESPECIFICANDO CABECERA DE COLUMNAS
Ejemplo 05: Crear un script que permita mostrar los campos ID_PRODUCTO(CÓDIGO),
DESCRIPCION(PRODUCTO), PRECIO_VENTA(PRECIO ACTUAL), STOCK_ACTUAL(STOCK
ACTUAL), FECHA_VENC (FECHA DE VENCIMIENTO) de la tabla producto. Utilizar alias
SELECT P.ID_PRODUCTO CÓDIGO, [Link] PRODUCTO, P.PRECIO_VENTA [PRECIO ACTUAL],
P.FECHA_VENC [FECHA DE VENCIMIENTO], P.STOCK_ACTUAL [STOCK ACTUAL] FROM PRODUCTO P
GO
5 • DISTINGUIDAS
Este tipo de consulta permita mostrar solo una ocurrencia de un conjunto de valores repetidos
a partir de una columna de la tabla.
Ejemplo 06: Crear un script que permita mostrar todas las categorías con los que cuenta
la tabla producto.
SELECT DISTINCT P.COD_CATE FROM PRODUCTO P
GO
6 • ORDENADAS
Este tipo de consulta permita mostrar la información de los registros ordenados de tal
forma que podemos especificar que columnas deben ordenarse tanto de forma ascendente
como descendente.
Ejemplo 07: Crear un script que permita mostrar todos los productos ordenados por
descripcion de forma descendente
SELECT P.* FROM PRODUCTO P ORDER BY [Link] DESC
GO
6 • ORDENADAS
Ejemplo 08: Crear un script que permita mostrar todos los productos ordenados primero por
DESCRIPCION de forma ascendente y luego por STOCK_ACTUAL de forma descendente. Utilizar
números para las columnas
SELECT P.* FROM PRODUCTO P ORDER BY 2 ASC, 5 DESC
GO
7 • CLAUSULA WHERE DE LA SENTENCIA SELECT
La cláusula WHERE puede usarse para determinar qué registros de las tablas
enumeradas en la cláusula FROM aparecerán en los resultados de la instrucción
SELECT. Después de escribir esta cláusula se deben especificar las condiciones
que deben cumplir dichos resultados para su muestra
Ejemplo 09: Crear un script que permita mostrar todos los productos de la categoría
abarrotes (Utilice código de categoría) →’C01’
SELECT P.* FROM PRODUCTO P WHERE P.COD_CATE='C01'
GO
7 • CLAUSULA WHERE DE LA SENTENCIA SELECT
Ejemplo 10: Crear un script que permita mostrar todos los productos que su
stock actual sea igual a 300
SELECT P.* FROM PRODUCTO P WHERE P.STOCK_ACTUAL=300
GO
OPERADORES RELACIONALES
Operador Descripción
= Determina la igualdad entre dos valores.
> Determina si el primer valor es mayor que el segundo.
>= Determina si el primer valor es mayor o igual que el segundo.
< Determina si el primer valor es menor que el segundo.
<= Determina si el primer valor es menor o igual que el segundo.
Ejemplo 11: Crear un script que permita mostrar todos los productos que el precio de
venta sean mayores que 100
SELECT P.* FROM PRODUCTO P WHERE P.PRECIO_VENTA>100
GO
OPERADORES LÓGICOS
Los operadores lógicos soportados por SQL son: AND, OR, XOR, Eqv, Imp, Is y Not.
Ejemplo 12: Crear un script que permita mostrar todos los productos que sean de la categoría
abarrotes (utilice código de categoría) y el stock actual sea mayor a 160
SELECT P.* FROM PRODUCTO P WHERE P.COD_CATE='C01' AND P.STOCK_ACTUAL>160
GO
OPERADORES LÓGICOS
Ejemplo 13: Crear un script que permita mostrar todos los productos que
sean de categoría Lácteos (utilice su código) o Detergentes (utilice su código)
SELECT P.* FROM PRODUCTO P WHERE P.COD_CATE='C02' OR P.COD_CATE='C09'
GO
OPERADORES LÓGICOS
Ejemplo 14: Crear un script que permita mostrar todos los productos que su stock
actual estén entre 80 y 150 o su precio de venta estén entre 10 y 18
SELECT P.* FROM PRODUCTO P WHERE (P.STOCK_ACTUAL>=80 AND
P.STOCK_ACTUAL<=150) OR (P.PRECIO_VENTA>=10 AND P.PRECIO_VENTA<=18)
GO
OPERADOR LIKE
Se utiliza para comparar una expresión de cadena con un modelo en una expresión
SQL
Ejemplo 15: Crear un script que permita mostrar todos los productos que su
descripcion comience con F, seguido de la letra i y el resto cualesquiera.
SELECT P.* FROM PRODUCTO P WHERE [Link] LIKE ‘F[i]%'
GO
OPERADOR LIKE
Ejemplo 16: Crear un script que permita mostrar todos los productos que la
descripcion del producto comience con A y el resto de caracteres podrá ser
cualquiera
SELECT P.* FROM PRODUCTO P WHERE [Link] LIKE 'A%'
GO
OPERADOR LIKE
Ejemplo 17: Crear un script que permita mostrar todos los productos que la
descripcion del producto tenga la letra t en la segunda posición
SELECT P.* FROM PRODUCTO P WHERE [Link] LIKE ‘_t%'
GO
OPERADOR BETWEEN
Para indicar que deseamos recuperar los registros según el intervalo de valores de
un campo
Ejemplo 18: Crear un script que permita mostrar todos los productos que su
precio de venta esté entre 10 y 25.
SELECT P.* FROM PRODUCTO P WHERE P.PRECIO_VENTA BETWEEN 10 AND 25
GO
OPERADOR IN
Este operador devuelve aquellos registros cuyo campo indicado coincide con
alguno de los valores que se encuentran en la lista
Ejemplo 19: Crear un script que permita mostrar todos los productos que su
precio de venta sea 30, 35, 100
SELECT P.* FROM PRODUCTO P WHERE P.PRECIO_VENTA IN(30,35,100)
GO
CONSULTAS COMBINADAS
¿QUÉ ES?
Es recuperar información que se encuentra en varias tablas de la
base de datos.
¿Y CÓMO RECUPERAMOS?
Utilizando Utilizando
combinación combinación
interna. externa.
CONSULTAS COMBINADAS
¿Cuáles son las combinaciones Internas y
Externas?
INTERNAS INNER JOIN
COMBINACIONES
LEFT JOIN
OUTER JOIN RIGHT JOIN
EXTERNAS
CROSS JOIN FULL JOIN
Nota: Utilizaremos sólo la combinación interna y no la externa.
CONSULTAS COMBINADAS
Ejemplo
si queremos visualizar el número de factura, la fecha de facturación, la
razón social y dirección del cliente, nos damos cuenta que dicha información
(campos) proviene de DOS tablas.
TB_CLIENTE
COD_CLI TB_FACTURA
RAZ_SOC_CLI NUM_FAC
DIR_CLI FEC_FAC
TLF_CLI COD_CLI
RUC_CLI FEC_CAN
COD_DIS EST_FAC
FEC_REG COD_VEN
TIP_CLI PORC_IGV
CONTACTO
CONSULTAS COMBINADAS
Es aquí donde combinamos a estas tablas para mostrar los datos.
TB_CLIENTE
COD_CLI TB_FACTURA
RAZ_SOC_CLI NUM_FAC
DIR_CLI FEC_FAC
TLF_CLI COD_CLI
RUC_CLI FEC_CAN
COD_DIS EST_FAC
FEC_REG COD_VEN
TIP_CLI PORC_IGV
CONTACTO
CONSULTAS COMBINADAS
En esta combinación, debemos identificar
¿Qué campos de ambas
tablas se combinan?.
TB_CLIENTE
COD_CLI PK TB_FACTURA
RAZ_SOC_CLI NUM_FAC
DIR_CLI FEC_FAC
COD_CLI FK
TLF_CLI
RUC_CLI FEC_CAN
COD_DIS EST_FAC
FEC_REG COD_VEN
TIP_CLI PORC_IGV
CONTACTO
COMBINACIÓN INTERNA
(INNER JOIN)
¿Para qué se utiliza INNER JOIN?
Para combinar 02 tablas en base a los campos de ambas tablas y así
mostrar sólo los registros que coinciden en dicha combinación de los
campos, excluyendo a los registros que no coincide.
COMBINACIÓN INTERNA
(INNER JOIN)
Nota: Se cuenta con las siguientes tablas: TB_FACTURA y TB_CLIENTE
TB_CLIENTE TB_FACTURA
COD_CLI RAZ_SOC_CLI NUM_FAC FEC_FAC COD_CLI
C001 Finseth FA001 07/06/2013 C001
C002 Orbi FA003 09/01/2013 C003
C003 Serviemsa FA009 10/03/2013 C008
C004 Issa FA019 02/07/2013 C008
C005 Mass FA006 08/01/2013 C009
C006 Berker FA013 12/01/2013 C011
C007 Fidenza FA008 10/04/2013 C012
C008 Intech
C009 Prominent
C010 Landu
C011 Filasur
C012 Sucerte
C013 Hayashi
C014 Kadia
COMBINACIÓN INTERNA (INNER JOIN)
Ejemplo 01: Seleccionar los campos número de factura, fecha de factura,
razón social del cliente y dirección del cliente.
SELECT F.NUM_FAC,
F.FEC_FAC,
C.RAZ_SOC_CLI,
C.DIR_CLI
FROM TB_FACTURA AS F INNER JOIN TB_CLIENTE AS C
ON F.COD_CLI = C.COD_CLI
NUM_FAC FEC_FAC RAZ_SOC_CLI DIR_CLI
FA001 07/06/2013 Finseth Av. Los Viñedos 150
FA002 07/06/2013 Corefo Av. Canada 3894 - 3898
FA003 09/01/2013 Serviemsa Jr. Collagate 522
FA004 09/06/2013 Cardeli Jr. Bartolome Herrera 451
FA005 10/01/2013 Meba Av. Elmer Faucett 1638
FA006 08/01/2013 Prominent Jr. Iquique 132
FA007 10/05/2013 Corefo Av. Canada 3894 - 3898
FA008 10/04/2013 Sucerte Jr. Grito de Huaura 114
FA009 10/03/2013 Intech Av. San Luis 2619 5to P
FA010 10/01/2013 Payet Calle Juan Fanning 327
FA011 09/10/2013 Corefo Av. Canada 3894 - 3898
FA012 12/01/2013 Kadia [Link] Cruz 1332 Of.201
FA013 12/01/2013 Filasur Av. El Santuario 1189
FA014 12/01/2012 Cramer Jr. Mariscal Miller 1131
FA015 12/08/2012 Meba Av. Elmer Faucett 1638
FA016 01/06/2013 Cardeli Jr. Bartolome Herrera 451
FA017 01/06/2013 Meba Av. Elmer Faucett 1638
FA018 02/03/2013 Cardeli Jr. Bartolome Herrera 451
COMBINACIÓN INTERNA
(INNER JOIN)
Ejemplo 02: El siguiente Script muestra cómo podría combinar las tablas
CLIENTES y PAISES basándose en el campo “Idpais”
Select [Link], [Link], [Link], [Link]
From Cliente c INNER JOIN Pais p
ON [Link] = [Link]
Idcliente Nombre Direccion NombrePais
0001 Juan Velasco Calle 1, # 1 Perú
0002 Raquel Salinas Av. los álamos 561 Argentina
0003 Irma Rosales Av. La Marina 566 Chile
0004 Pedro Porras Jr. Ica 655 Perú
COMBINACIÓN INTERNA
(INNER JOIN)
Ejemplo 03: Utilizando las siguientes tablas.
Script
Vistas
¿QUÉ ES?
a) Es una tabla virtual o una consulta almacenada, donde los
datos accesibles no están almacenados en la vista
b) Lo que se almacena es una instrucción SELECT y el resultado
forma la tabla virtual
c) El usuario puede utilizar dicha tabla virtual haciendo
referencia al nombre de la vista en instrucciones SQL
d) Restringe el acceso a filas y columnas
e) Combina columnas de varias tablas en una sola tabla
f) Agrega información en lugar de presentar los detalles
Vistas
¿CUÁLES SON LAS RAZONAES PARA
CREAR UNA VISTA?
• Seguridad, nos pueden interesar que los usuarios
tengan acceso a una parte de la información que hay
en una tabla, pero no a toda la tabla.
• Comodidad, como hemos dicho el modelo relacional
no es el más cómodo para visualizar los datos, lo que
nos puede llevar a tener que escribir complejas
sentencias SQL, tener una vista nos simplifica esta
tarea.
Vistas
Vistas
¿CÓMO CREAMOS UNA VISTA?
Para crear una vista utilice la sentencia CREATE VIEW,
proporcionando un nombre a la vista y una sentencia SQL
SELECT válida.
CREATE VIEW <nombre_vista>
AS
(<sentencia_select>);
Vistas
Crear una vista sobre la tabla Productos, en la que se nos
muestre los datos de los productos y el nombre de categoría en
lugar de su código.
Vistas
La vista se guarda en el servidor
Vistas
¿CÓMO EJECUTAR UNA VISTA?
SELECT * FROM <Nombre_Vista>
Ejemplo:
Procederemos a ejecutar la vista creada en el Ejemplo 01
SELECT * FROM V_PRODUCTOSCAT
Vistas
A continuación veremos el contenido de la vista creada en el Ejemplo 01 utilizando
la función SP_HELPTEXT
SP_HELPTEXT VProductosCat
Resultado de la vista:
1 CREATE VIEW v_ProductosCat as
2 Select p.id_producto, p.nom_producto,
3 p.pre_unidad, c.nom_categoria
4 from productos p
5 inner join categorias c
6 on p.id_categoria = c.id_categoria
Nota: El uso de SP_HELPTEXT no es posible para vista encriptadas
Vistas
¿CÓMO MODIFICAMOS UNA VISTA?
Si queremos, modificar la definición de nuestra vista
podemos utilizar la sentencia ALTER VIEW, de
forma muy parecida de cómo se realiza con las tablas.
ALTER VIEW <nombre_vista>
AS
(<sentencia_select>);
Vistas
Modificar la vista V_ProductosCat, en la que se nos muestre los
datos de los productos, el nombre de categoría en lugar de su
código y el nombre del Proveedor.
ALTER VIEW V_PRODUCTOSCAT
AS
SELECT
[Link],[Link],[Link],
[Link], [Link], [Link]
FROM TB_PRODUCTOS P INNER JOIN TB_CATEGORIAS C
ON [Link]=[Link] INNER JOIN TB_PROVEEDORES PROV
ON [Link] = [Link]
Vistas
¿CÓMO ELIMINAMOS UNA VISTA?
Si queremos, eliminar una vista podemos
utilizar la sentencia DROP VIEW
DROP VIEW <nombre_vista>
Crear un vista con el nombre VALUMNO que permita mostrar datos de la relación de tablas
TALUMNO, TMATRICULA y TCURSO.
CREATE VIEW VALUMNO
AS
SELECT A.C_ALUMNO,
A.X_NOMBRE,
A.X_PATERNO,
A.X_MATERNO,
M.C_CURSO,
M.X_CURSO
FROM TALUMNO A JOIN TMATRICULA M
ON A.C_ALUMNO = M.C_ALUMNO JOIN
TCURSO C
ON M.C_CURSO = C.C_CURSO
Ejemplo
Crear una vista que liste NombreProducto, NombreCategoría,
PrecioUnidad, Suspendido
Create view v_productos
as
select NombreProducto, NombreCategoría, PrecioUnidad, Suspendido from Productos p
inner join Categorías c on [Link]ía =[Link]ía
go
Ejecutando
select * from v_productos order by NombreCategoría, NombreProducto
go