Está en la página 1de 20

ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

BASE DE DATOS

Docente: Ing. Díaz Leyva Teodoro


Tema: Creación de Base de Datos – Implementación de Consultas Básicas

Objetivo: Crear base de Datos y Diseña Consultas.

1. Esquema de la base de datos Ventas

Página 1 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

2. Crear base de datos ventas y tablas

USE MASTER
if DB_ID('VENTAS') IS NOT NULL
BEGIN
DROP DATABASE VENTAS
END
CREATE DATABASE VENTAS
ON
(NAME='VENTAS_DATA',
FILENAME='D:\BDVENTAS2018\VENTAS_DATA.MDF',
SIZE=10MB,
MAXSIZE=20MB,
FILEGROWTH=1MB
)

LOG ON
(NAME='VENTAS_LOG',
FILENAME='D:\BDVENTAS2018\\VENTAS_LOG.LDF',
SIZE=5MB,
MAXSIZE=15MB,
FILEGROWTH=1MB
)

USE VENTAS
if object_id('EMPLEADO') IS NOT NULL
DROP TABLE EMPLEADO
if object_id('DISTRITO') IS NOT NULL
DROP TABLE DISTRITO
if object_id('CLIENTE') IS NOT NULL
DROP TABLE CLIENTE
if object_id('CLIENTE_PER_JURIDICA') IS NOT NULL
DROP TABLE CLIENTE_PER_JURIDICA
if object_id('CLIENTE_PER_NATURAL') IS NOT NULL
DROP TABLE CLIENTE_PER_NATURAL
if object_id('TIPO_PRODUCTO') IS NOT NULL
DROP TABLE TIPO_PRODUCTO
if object_id('PRODUCTO') IS NOT NULL
DROP TABLE PRODUCTO
if object_id('BOLETA') IS NOT NULL
DROP TABLE EMPLEADO
if object_id('DETALLEBOLETA') IS NOT NULL
DROP TABLE DETALLEBOLETA

CREATE TABLE DISTRITO(


COD_DIST CHAR(7) NOT NULL,
DESCRIP_DIST VARCHAR(35),
)

Página 2 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

CREATE TABLE EMPLEADO(


COD_EMP CHAR(7) NOT NULL,
NOMBRES_EMP VARCHAR(30),
APE_PATER_EMP VARCHAR(20),
APE_MATER_EMP VARCHAR(20),
FECHA_NAC_EMP DATE,
DIRECCION_EMP VARCHAR(45),
TELEFONO_EMP VARCHAR(20),
COD_DIST_EMP CHAR(7) NOT NULL,
CORREO_E_EMP VARCHAR(25),
FECHA_INGRESO_EM DATE,
COD_SUPERVISOR_EMP CHAR(7)
)

CREATE TABLE CLIENTE(


COD_CLI CHAR(7) NOT NULL,
DIRECCION_CLI VARCHAR(45),
TELFONO_CLI VARCHAR(20),
CODDIST_CLI CHAR(7),
COREO_E VARCHAR(25),
WEB VARCHAR(45)
)

CREATE TABLE CLIENTE_PER_JURIDICA(


COD_CLI CHAR(7) NOT NULL,
RAZONSOCIAL_CLI VARCHAR(30),
RUC_CLI VARCHAR(11),
CONTACTO_CLI VARCHAR(25),
COD_CARGO_CLI CHAR(5)
)

CREATE TABLE CLIENTE_PER_NATURAL(


COD_CLI CHAR(7) NOT NULL,
NOMBRES_CLI VARCHAR(25),
APE_PATER_CLI VARCHAR(20),
APE_MATER_CLI VARCHAR(20)
)

CREATE TABLE TIPO_PRODUCTO(


COD_TIPO_PRO CHAR(7) NOT NULL,
DESCRIP_TIPO_PROD VARCHAR(120 )
)

CREATE TABLE PRODUCTO(


COD_PRO CHAR(7) NOT NULL,
DESCRIP_PRO VARCHAR(120),
STOCK_ACT_PRO INT,
STOCK_MIN_PRO INT,
COD_TIPO_PROD CHAR(7) NOT NULL
)

Página 3 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

CREATE TABLE BOLETA(


COD_BOL CHAR(7) NOT NULL,
COD_EMP CHAR(7) NOT NULL,
FECHA_BOL DATE,
COD_CLI CHAR(7) NOT NULL,
ESTADO_BOL VARCHAR(15)
)

CREATE TABLE DETALLEBOLETA(


COD_BOL CHAR(7) NOT NULL,
COD_PRO CHAR(7) NOT NULL,
CANTIDAD INT,
PRECIOVENTA DECIMAL(9,2)
)

3. Clave primaria(Primary Key)

ALTER TABLE EMPLEADO


ADD CONSTRAINT EMPLEADO_PK PRIMARY KEY(COD_EMP)
GO

ALTER TABLE DISTRITO


ADD CONSTRAINT DISTRITO_PK PRIMARY KEY(COD_DIST)
GO

ALTER TABLE CLIENTE


ADD CONSTRAINT CLIENTE_PK PRIMARY KEY(COD_CLI)
GO

ALTER TABLE CLIENTE_PER_JURIDICA


ADD CONSTRAINT CLIENTE_PER_JURIDICA_PK PRIMARY KEY(COD_CLI)
GO

ALTER TABLE CLIENTE_PER_NATURAL


ADD CONSTRAINT CLIENTE_PER_NATURAL_PK PRIMARY KEY(COD_CLI)
GO

ALTER TABLE PRODUCTO


ADD CONSTRAINT PRODUCTO_PK PRIMARY KEY(COD_PRO)
GO

ALTER TABLE TIPO_PRODUCTO


ADD CONSTRAINT TIPO_PRODUCTO_PK PRIMARY KEY(COD_TIPO_PRO)
GO

ALTER TABLE BOLETA


ADD CONSTRAINT BOLETA_PK PRIMARY KEY(COD_BOL)
GO

ALTER TABLE DETALLEBOLETA


ADD CONSTRAINT DETALLEBOLETA_PK PRIMARY KEY(COD_BOL,COD_PRO)
GO

Página 4 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

4. Clave foránea (Foreign Key)sobre una columna o combinacion de columnas y relacionar


tablas.

ALTER TABLE EMPLEADO


ADD CONSTRAINT EMPLEADO_FK FOREIGN KEY(COD_SUPERVISOR_EMP)
REFERENCES EMPLEADO(COD_EMP)
GO

ALTER TABLE EMPLEADO


ADD CONSTRAINT DISTRITO_EMPLEADO_FK FOREIGN KEY(COD_DIST_EMP)
REFERENCES DISTRITO(COD_DIST)
GO

ALTER TABLE CLIENTE


ADD CONSTRAINT DISTRITO_CLIENTE_FK FOREIGN KEY(CODDIST_CLI)
REFERENCES DISTRITO(COD_DIST)
GO

ALTER TABLE CLIENTE_PER_JURIDICA


ADD CONSTRAINT CLIENTE_CLIENTE_PER_JURIDICA_FK FOREIGN KEY(COD_CLI)
REFERENCES CLIENTE(COD_CLI)
GO

ALTER TABLE CLIENTE_PER_NATURAL


ADD CONSTRAINT CLIENTE_CLIENTE_PER_NATURAL_FK FOREIGN KEY(COD_CLI)
REFERENCES CLIENTE(COD_CLI)
GO

ALTER TABLE BOLETA


ADD CONSTRAINT CLIENTE_BOLETA_FK FOREIGN KEY(COD_CLI)
REFERENCES CLIENTE(COD_CLI)
GO

ALTER TABLE PRODUCTO


ADD CONSTRAINT TIPO_TIPO_PRODUCTO_PRODUCTO_FK FOREIGN
KEY(COD_TIPO_PROD)
REFERENCES TIPO_PRODUCTO(COD_TIPO_PRO)
GO

ALTER TABLE DETALLEBOLETA


ADD CONSTRAINT PRODUCTO_DETALLEBOLETA_FK FOREIGN KEY(COD_PRO)
REFERENCES PRODUCTO (COD_PRO)
GO

ALTER TABLE DETALLEBOLETA


ADD CONSTRAINT BOLETA_DETALLEBOLETA_FK FOREIGN
KEY(COD_BOL)REFERENCES BOLETA(COD_BOL)

Página 5 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

5. Registros

INSERT INTO DISTRITO VALUES('D001','CHORRILLOS')


INSERT INTO DISTRITO VALUES('D002','RIMAC')
INSERT INTO DISTRITO VALUES('D003','BARRANCO')
INSERT INTO DISTRITO VALUES('D004','LOS OLIVOS')
INSERT INTO DISTRITO VALUES('D005','LINCE')
INSERT INTO DISTRITO VALUES('D006','VILLA EL SALVADOR')
INSERT INTO DISTRITO VALUES('D007','ANCON')
INSERT INTO DISTRITO VALUES('D008','SURCO')

GO
INSERT INTO EMPLEADO VALUES( 'E001', 'FRANCISCO ','FLORES', ' SALAZAR', '26-05-85
','AV. LOS ALISOS 233 ','578-7188','D002','JPEREZ@HOTMAIL.COM','22-08-90','E005')
INSERT INTO EMPLEADO VALUES( 'E002', 'MARIA','VASQUEZ', ' SILVA', '08-06-76 ','AV. LA
MARINA 964 ','578-7122','D002','MVASQUEZ@HOTMAIL.COM','22-08-95','E005')
INSERT INTO EMPLEADO VALUES( 'E003', 'LUIZ ','RAMIREZ', ' VILLAR', '26-10-80 ','JR.
PUNO 554 ','228-7182','D005','LRAMIREZ@HOTMAIL.COM','22-08-90','E005')
INSERT INTO EMPLEADO VALUES( 'E004', 'DIANA ','MARIN', ' SILVA', '12-02-77 ','JR. LOS
PINOS 235','578-7188','D003','DMARIN@HOTMAIL.COM','22-08-90','E005')
INSERT INTO EMPLEADO(
COD_EMP,NOMBRES_EMP,APE_PATER_EMP,APE_MATER_EMP,FECHA_NAC_EMP,DIR
ECCION_EMP,TELEFONO_EMP,COD_DIST_EMP,CORREO_E_EMP,FECHA_INGRESO_E
M) VALUES ('E005', 'FRANO ','SALCEDO', ' PUMA', '12-06-70 ','JR. LOS NOGALES','578-
7188','D003','JPEREZ@HOTMAIL.COM','22-08-90')

GO
INSERT INTO TIPO_PRODUCTO VALUES('T001','ACEITES')
INSERT INTO TIPO_PRODUCTO VALUES('T002','LICORES')
INSERT INTO TIPO_PRODUCTO VALUES('T003','MATERIALES ELÉCTRICOS')

GO
INSERT INTO PRODUCTO VALUES('P001','ACEITES VEGETAL AGUACATE',120,5,'T001')
INSERT INTO PRODUCTO VALUES('P002','ACEITES VEGETAL ALMENDRA
DULCE',200,5,'T001')
INSERT INTO PRODUCTO VALUES('P003','ACEITES VEGETAL GERMEN DE
TRIGO',80,5,'T001')
INSERT INTO PRODUCTO VALUES('P004','ACEITES VEGETAL JOJOBA',80,5,'T001')
INSERT INTO PRODUCTO VALUES('P005','ACEITES VEGETAL JOJOBA',80,5,'T002')
INSERT INTO PRODUCTO VALUES('P006','PISCO VIEJO TONEL ACHOLADO',80,5,'T002')
INSERT INTO PRODUCTO VALUES('P007','PISCO VIEJO TONEL PURO',120,5,'T002')
INSERT INTO PRODUCTO VALUES('P008','PISCO SOL DE ICA',120,5,'T002')
INSERT INTO PRODUCTO VALUES('P009','PISCOS VARGAS',12,05,'T002')
INSERT INTO PRODUCTO VALUES('P010','PISCO QUEIROLO QUEBRANTA',90,5,'T002')
INSERT INTO PRODUCTO VALUES('P011','VINO NAVARRO CORREA FINCA
DOLORES',85,5,'T002')
INSERT INTO PRODUCTO VALUES('P012','VINO CASILLERO DEL DIABLO CABERNET
TINTO',85,5,'T002')
INSERT INTO PRODUCTO VALUES('P013','FUENTE THERMALTAKE 750W - COD.
312',20,5,'T003')
INSERT INTO PRODUCTO VALUES('P014','FUENTE THERMALTAKE 550W - COD.
310',20,5,'T003')

Página 6 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

GO
INSERT INTO CLIENTE VALUES('C001','AV. LA MAR 333
CHORRILLOS','966714489','D005','SISA@GMAIL.COM','WWW.SISA.COM')
INSERT INTO CLIENTE VALUES('C002','AV. PRADO 111
LINCE','966714422','D002','PALMA@GAMIL.COM','WWW.PALMA.COM')
INSERT INTO CLIENTE VALUES('C003','JR. AVARADO 45
LINCE','966714422','D003','ALVA@GAMAIL.COM','WWW.ALVA.COM')
INSERT INTO CLIENTE VALUES('C004','JR. LOS JIRASOLES 45
BARRANCO','55714421','D004','JIRAL@GMAIL.COM','WWW.JIRASOLES.COM')
INSERT INTO CLIENTE VALUES('C005','JR. GOMEZ SANCHEZ 331
BARRANCO','66714424','D004','GOMEZ@GMAIL.COM','WWW.GOMEZ.COM')
GO
GO
INSERT INTO CLIENTE_PER_JURIDICA VALUES('C004','DUPLO
SA','20414256361','JUAN GIMENEZ','CA01')
INSERT INTO CLIENTE_PER_JURIDICA VALUES('C005','ESCODA
EDUARDO SA','20414256361','JUAN GIMENEZ','CA01')
GO
INSERT INTO CLIENTE_PER_NATURAL VALUES('C001','CECILIA ','PELAES' ,'PUMA')
INSERT INTO CLIENTE_PER_NATURAL VALUES('C002','ALBERTO ','PALMA' ,'LOZANO')
INSERT INTO CLIENTE_PER_NATURAL VALUES('C003','MARIA ','ALVARADO' ,'SILVA')
GO
INSERT INTO BOLETA VALUES('B001','E002','26-05-2013','C002','EMITIDA')
INSERT INTO BOLETA VALUES('B002','E002','26-05-2013','C002','EMITIDA')
INSERT INTO BOLETA VALUES('B003','E001','26-05-2013','C001','EMITIDA')
INSERT INTO BOLETA VALUES('B004','E001','26-05-2013','C003','EMITIDA')
INSERT INTO BOLETA VALUES('B005','E001','26-05-2013','C003','EMITIDA')
GO
INSERT INTO DETALLEBOLETA VALUES('B001','P003',1,15)
INSERT INTO DETALLEBOLETA VALUES('B001','P004',1,12)
INSERT INTO DETALLEBOLETA VALUES('B002','P011',1,30)
INSERT INTO DETALLEBOLETA VALUES('B003','P011',2,30)
INSERT INTO DETALLEBOLETA VALUES('B003','P009',1,45)
INSERT INTO DETALLEBOLETA VALUES('B004','P012',2,70)
INSERT INTO DETALLEBOLETA VALUES('B004','P006',2,40)
INSERT INTO DETALLEBOLETA VALUES('B005','P006',1,40)
INSERT INTO DETALLEBOLETA VALUES('B005','P008',1,40)
INSERT INTO DETALLEBOLETA VALUES('B005','P009',1,45)

Página 7 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

C O N S U L T A S

SQL es un lenguaje que se puede utilizar para interactuar con una base de datos relacional.
SQL es un lenguaje completo de de control e interacción con un sistema de Gestión de Base
de Datos.

La sentencia SELECT
La sentencia select recupera datos de una Base de Datos y los devuelve en forma de
resultados de la consulta. Para consultas sencillas, la petición inglés y la sentencia SELECT
de SQL son muy similares. Cuando las peticiones se hacen más complejas, deben utilizarse
características adicionales de la sentencia Select para especificar la consulta con precisión.

La sentencia select consta de siete cláusulas. Las clausulas SELECT y FROM de la


sentencia son necesarias. Las cinco restantes son opcionales. Se incluyen en la sentencia
select solamente cuando se desean utilizar las funciones que proporcionan.

SELECT
INTO
FROM
WHERE Puede faltar una de ellas pero el orden se mantiene
GROUP BY
HAVING
ORDER BY
COMPUTE BY
[WITH ROLLUP/CUBE]

La función de cada clausula esta resumida a continuación:

 La cláusula SELECT lista los datos a recuperar por sentencia select. Los ítems
pueden ser columnas de la Base de Datos o columnas a calcular por SQL cuando
efectúa la consulta.

 La cláusula FROM lista las tablas que contiene los datos a recuperar por la consulta.

 La cláusula WHERE dice a SQL qué incluya sólo ciertas filas de datos en los
resultados de una consulta. Se utiliza una condición de búsqueda para especificara las
filas deseadas.

Página 8 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

 La cláusula GROUP BY especifica una consulta sumaria. En vez de producir una fila
de resultados por cada fila de datos de la Base de Datos, una consulta sumaria agrupa
todas las filas similares y luego produce una fila sumaria de resultados por cada
grupo.

 La cláusula HAVING dice a SQL que incluya sólo ciertos grupos producidos por la
cláusula GROUP BY en los resultados de la consulta. Al igual que la consulta
WHERE, utiliza una condición de búsqueda para especificar los grupos deseados.

 La cláusula ORDER BY ordena los resultados de la consulta en la Base de Datos de


una o más columnas. Si se omite, los resultados de la consulta no aparecen
ordenados.

 La cláusula COMPUTE BY genera cortes de control y subtotales. Se generan filas de


detalle y varios valores de resumen cuando cambian los valores del campo.

 La cláusula WITH ROLLUP/CUBE el operador ROLLUP entrega totales y subtotales


para expresiones con una sentencia GROUP BY.

El operador CUBE es un interruptor adicional de la cláusula GROUP BY en una


sentencia SELECT. El operador CUBE puede ser aplicado a todas las funciones de
grupo, incluyendo AVG, SUM, MAX, MIN y COUNT. Esta es usada para producir un
conjunto de resultados que típicamente son utilizados para reportes cruzados. Mientras
ROLLUP produce solo una parte de posibles subtotales, CUBE produce subtotales para
todas las posibles combinaciones de agrupaciones especificadas en la cláusula GROUP
BY y un gran total.
El operador CUBE es usado con una función de grupo para generar filas adicionales en
un conjunto de resultados. Las columnas incluidas en la cláusula
GROUP BY son una referencia cruzada para producir un súper conjunto de grupos. Las
funciones de grupo especificadas en la lista seleccionada son aplicadas a esos grupos
para producir valores resumidos para las filas agregadas. El número de grupos extra en
el conjunto de resultados es determinado por el número de columnas incluidas en la
cláusula GROUP BY.

Página 9 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Ejemplos:
Las consultas SQL más sencillas solicitan columnas de datos de una única tabla en la
Base de Datos.
Ejemplos:

1. La siguiente sentencia SQL extrae todos los campos y registros de la tabla


PRODUCTOS.

SELECT * FROM PRODUCTO


NOTA:
 El asterisco ( * ) indica todos los campos (columnas).
 Subrayado ( _ ) indica un carácter cualquiera.

2. Presenta algunos campos de la tabla producto( los campos código de producto,


descripción del producto)

SELECT COD_PRO, DESCRIP_PRO FROM PRODUCTO

3. Lista todos los campos utilizando alias de la tabla cliente

SELECT COD_CLI as CODIGO, DIRECCION_CLI AS DIRECCION


,TELFONO_CLI
AS TELEFONO, CODDIST_CLI AS [CODIGO DE DISTRITO]

,COREO_E AS CORREO ,WEB FROM CLIENTE

CONSULTAS CON LA CLÁUSULA WHERE


4. Script que presenta los campos código, descripción del producto cuyo stock actual del
sea menor igual que 50.

SELECT COD_PRO ,DESCRIP_PRO,STOCK_ACT_PRO FROM

PRODUCTO WHERE STOCK_ACT_PRO<= 50

5. Script para listar todos los campos de la tabla producto, pero con el stock actual mayor
igual a 60 y menor igual a 80

Página 10 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

SELECT *FROM PRODUCTO WHERE STOCK_ACT_PRO>=60

AND STOCK_ACT_PRO<=80
Nótese que para éste tipo de consulta también se puede utilizar la clausula de rango
BETWEEN, que haría lo mismo que la consulta anterior:

SELECT*FROM PRODUCTO WHERE STOCK_ACT_PRO

BETWEEN 60 AND 80
6. Script LOS PRODUCTOS con stock actual equivalente 120 ó 90 ó 12

SELECT*FROM PRODUCTO WHERE STOCK_ACT_PRO =120

OR STOCK_ACT_PRO=90 OR STOCK_ACT_PRO=12

Nótese que para éste tipo de consulta también se puede utilizar la clausula de pertenencia a
conjunto IN que haría lo mismo que la sentencia anterior:

SELECT*FROM PRODUCTO WHERE STOCK_ACT_PRO

IN(120,12,120)
7. Script para listar los empleados cuyo nombre empiece F

SELECT*FROM empleado WHERE NOMBRES_EMP LIKE 'F%'

Nótese que para éste tipo de consulta se está utilizando la clausula de correspondencia de
patrón LIKE.
Porcentaje ( % ) :Comodín que remplaza a cero o más caracteres.
Subrayado ( _ ) :Comodín que remplaza a un carácter.

INTO
Permite crear una nueva tabla a partir de un select, que esta puede ser tabla física o
temporal.

8. Almacenar la tabla cliente dentro de otra tabla llamada “NUEVA1”

SELECT * INTO NUEVA1 FROM CLIENTE

Página 11 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Realice la siguiente consulta para comprobar que la tabla NUEVA1 contiene los registros
de la tabla cliente:

SELECT*FROM NUEVA1

9. Crear una tabla temporal

SELECT *INTO #NUEVA2 FROM CLIENTE


-- #NUEVA2 es la tabla temporal

CONSULTAS CON LA CLAUSULA GROUP BY


10. Script para obtener el total de cada boleta

SELECT COD_BOL , SUM(CANTIDAD*PRECIOVENTA ) AS TOTAL

FROM DETALLEBOLETA GROUP BY COD_BOL

11. Script para listar el número de productos por boleta y total de cada boleta :

SELECT COD_BOL, COUNT (COD_BOL) AS ITEM,

SUM(CANTIDAD*PRECIOVENTA ) AS TOTAL FROM

DETALLEBOLETA GROUP BY COD_BOL

Recuerde las funciones de grupo:


COUNT() : Cuenta el número de valores en una columna
SUM() :Calcula el total de una columna
AVG() :Calcula el valor promedio de una columna
MIN() :Encuentra el valor más pequeño en una columna
MAX() :Encuentra el valor mayor en una columna

 Tener en cuenta que al usar group by, hay un campo por el cual se va agrupar (ejm:

COD_BOL) y los demás campos deben ser calculados

Página 12 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

CONSULTAS CON LA CLAUSULA HAVING

12. Script para listar las boletas con número de productos por boleta mayor a 2

SELECT COD_BOL, COUNT (COD_BOL) AS ITEM,


SUM(CANTIDAD*PRECIOVENTA ) AS TOTAL FROM
DETALLEBOLETA GROUP BY COD_BOL HAVING COUNT(
COD_BOL)>2

CONSULTAS CON LA CLAUSULA ORDER BY


13. Script para listar los empleados ordenados por nombre y de forma descendente

SELECT*FROM EMPLEADO ORDER BY NOMBRES_EMP


DESC

14. Script para listar los empleados ordenados por nombre y de forma ascendente

SELECT*FROM EMPLEADO ORDER BY NOMBRES_EMP asc

CONSULTAS CON LA CLAUSULA COMPUTE BY


15. Script para resumen del total por boleta

SELECT COD_BOL, COD_PRO,CANTIDAD*PRECIOVENTA AS


TOTAL FROM DETALLEBOLETA
ORDER BY COD_BOL, COD_PRO COMPUTE

SUM(CANTIDAD*PRECIOVENTA) BY COD_BOL

Ojo…!: se necesita que la tabla este ordenada

CONSULTAS CON LA CLAUSULA ROLLUP


16. Script para resumen del total por boleta

SELECT COD_BOL, COD_PRO,sum(CANTIDAD*PRECIOVENTA)


AS TOTAL FROM DETALLEBOLETA
GROUP BY COD_BOL, COD_PRO WITH ROLLUP

 Ahora cambie rollup por cube

Página 13 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Caso Propuesto:

1. Crear la Base de Datos VENTAS2012

2. Aplicar las siguientes sentencias de recuperación de datos:

2.1 Muestre los datos de los productos cuyo precio se encuentra entre 1 y 18.5, cuya
descripción del producto empiece con las letras A a la D.
2.2 Muestre todos los datos de los clientes registrados cuyo teléfono empiece con el
dígito ‘4’ y su correo termine con @hotmail.com, ordenados por su apellido paterno
de manera ascendente y en coincidencias por su apellido materno de manera
descendente.
2.3 Muestre los datos de todos los clientes registrados y la descripción del distrito
donde residen pero únicamente muestre a los que residen en los distritos de
‘Magdalena’, ‘San Isidro’ y ‘Miraflores’.
2.4 Muestre los datos de todos las boletas registradas entre el mes de Octubre y
Diciembre. Use la cláusula BETWEEN.
2.5 Muestre los datos de las boletas con sus detalles emitidos en el año 2007. Use la
cláusula BETWEEN.
2.6 Muestre las boletas emitidas a los clientes con apellido paterno ‘Mendoza’, o
‘Toledo. Ordenado por fecha de la Boleta en forma ascendente.
2.7 Mostrar los datos de los clientes que registraron en el distrito aquellos que
empiezan con “San” por ejemplo “San Miguel”

Página 14 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Tener en cuenta:

A. Funciones de Fecha para Select


SET DATEFORMAT DMY
DECLARE @FECHAINICIAL DATE = '01-08-
Devuelve el número de 2011';
límites datepart de fecha DECLARE @FECHAFINAL DATE = '01-09-
y hora entre dos 2011';
fechas especificadas. SELECT DATEDIFF(DAY,
@FECHAINICIAL,@FECHAFINAL) AS
'DURACION'
Mostrar la Fecha y Hora
Select GETDATE()
del Sistema.

Mostrar el Mes actual en


Select DATEPART(month,getDate())
Numero.

Mostrar el Mes actual el


Select DATENAME(month,getDate())
Letras.

Mostrar el dia actual del


Select DAY(getDate())
sistema.

Mostrar el mes actual. Select MONTH(getDate())

Select YEAR(getDate())
Mostrar el Año actual.

Mostrar el siguiente Select DAY(getDate()) AS DIA,


Formato: MONTH(getDate()) AS MES,
Dia, Mes, Año YEAR(getDate()) AS AÑO

Select DAY(getDate()) AS DIA,


Mostrar el siguiente
DATENAME(month,getDate()) as [MES EN
Formato:
LETRAS],
Dia, Mes en Letras, Año
YEAR(getDate()) AS AÑO

B. Funciones Numericas para Select


Mostrar el Valor Absoluto del Select ABS(Stock)
Campo Stock From Producto
Mostrar los Precios de los
Productos redondeados al Select Ceiling(PrecioU)
entero mas pequeño mayor o From Producto
igual que el Precio.

Página 15 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Mostrar los Precios de los


productos redondeados al Select Floor(PrecioU)
entero mas grande que es From Producto
menor o igual al Precio.
Suponga que se compro el
doble de productos, Mostrar Select Power(Stock,2)
el Stock de todos los From Producto
productos.
Mostrar los Precios de los
Select Descripción,Round(PrecioU,2)
Productos redondeados a 2
From Producto
Decimales
Mostrar a 2 decimales los
Select Convert(Char(10),PrecioU,2)
Precios de los Productos
From Producto
utilizando conversion.

C. Funciones de Cadena para Select


Mostrar las 3 Primeras
Letras del Nombre del Select LEFT(Descripción,3) From Producto
Producto
Mostrar la longitud en
cadena de caracteres de
Select LEN(Descripción) From Producto
la Descripción de los
Productos
Mostrar los datos de la
Direccion de los
Select LOWER(Direccion) From Proveedor
Proveedores en estricto
Minuscula
Mostrar al reves los
Select REVERSE(Código_Prov) From
codigos registrados a los
Proveedor
Proveedores
Mostrar las 4 Ultimas
Select RIGTH(Descripción,4) From
Letras del Nombre del
Producto
Producto
Mostrar una lista de los
Select Nombre,
proveedores de forma
Direccion,
que la Ciudad y el
Ciudad+','+Space(1)+Departamento,
Departamento aparescan
Fono as Telefono
concatenados pero
From Proveedor
separado por comas.
Mostrar los datos de la
Direccion de los
Select UPPER(Direccion) From Proveedor
Proveedores en estricto
Mayusculas

D. Manejo de LIKE como operador valido para textos

Página 16 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Mostrar todos los


Select * From Producto
productos cuya descripcion
Where Descripción LIKE 'L%'
empiecen con “L”

Mostrar a todos los


proveedores que vivan en
algún distrito cuyo
Select * From Proveedor
contenido sea Juan por
Where Distrito LIKE '%Juan%'
Ejemplo San Juan
Miraflores, San Juan de
Lurigancho.
Mostrar a todos los
proveedores de los Select * From Proveedor
distritos que inicien con Where Distrito LIKE 'San%'
“SAN”
Mostrar todos los
Select * From Producto
productos cuyo segunda
Where Descripción LIKE '_A%'
letra sea A
Mostrar los productos cuya
Select * From Producto
descripcion empiece con
Where Descripción LIKE '[adj]%'
A,D o J
Mostrar todos los
productos cuya descripcion Select * From Producto
empiece con la letra A Where Descripción LIKE '[a-j]%'
hasta J
Mostrar los productos cuya
Select * From Producto
descripcion sea de K hasta
Where Descripción LIKE '[^a-j]%'
Z

E. Manejo de BETWEEN como operador valido para Rangos


Mostrar todos los
Select * From Producto
productos cuyo precio este
Where PrecioU BETWEEN 1.00 and 3.00
en el rango de 1 a 3 soles.
Mostrar los Proveedores
Select * From Proveedor
cuyo distrito inicie este en
Where Distrito BETWEEN 'A' and 'J'
el rango de A hasta J
set dateformat DMY
Mostrar las Guias del mes Select * From Guia
de Mayo 2010 Where FechaSalida
BETWEEN '01/05/2010' and '31/05/2010'
Mostrar las guias cuyos Select * From Guia
numeros son 1,4,8 Where nGuia IN (1,4,8)

Página 17 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

CONSULTAS A MULTIPLES TABLAS


La sentencia join en SQL permite combinar registros de dos o más tablas en una base de datos
relacional.

SINTAXIS

SELECT NOMCOL1, NOMCOL2, . . .


FROM NOMTABLA1
INNERT / LEFT / RIGHT JOIN
NOMTABLA2
ON NOMTABLA1. NOMCOL1= NOMTABLA2. NOMCOL
INNERT / LEFT / RIGHT JOIN
NOMTABLA3
ON NOMTABLA2. NOMCOL1= NOMTABLA3. NOMCOL
INNERT / LEFT / RIGHT JOIN

WHERE
GROUP BY

Combinación interna (INNER JOIN)


El JOIN nos permitirá obtener un listado de los campos que tienen coincidencias en ambas
tablas.

Ejemplos

Lista de clientes facturados

SELECT CLIENOMBRE, CLIEDIRECCION, CLIETELEFONO

FROM CLIENTE

INNER JOIN

FACTURA

ON CLIENTE.CLIECODIGO=FACTURA.CLIECODIGO

Página 18 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Se hace referencia la tabla con su respectiva columna porque el campo existe en las dos
tablas.

SELECT CLIENTEs.CODCLI, CLIENTEs.NOMCLI, FACTURAS.NUMFAC,


FACTURAS.FECEMI
FROM CLIENTES
INNER JOIN
FACTURAS
ON CLIENTES.CODCLI=FACTURAS.CODCLI

Combinación externa (LEFT JOIN)


La sentencia LEFT JOIN nos dará el resultado anterior más los campos de la tabla clientes que
no tienen coincidencias en la tabla facturas.

Ejemplo:
SELECT CLIENTES.CODCLI, NOMCLI FROM CLIENTES
LEFT JOIN FACTURAS
ON CLIENTES.CODCLI=FACTURAS.CODCLI

Combinación externa (RIGHT JOIN)


Aquí se listarán todas las tenencias de facturas, tengan o no empleados las que no tengan
empleados se verán como null.

Ejemplo:

SELECT*FROM EMPLEADOS
RIGHT JOIN FACTURAS
ON EMPLEADOS.CODEMP=FACTURAS.CODEMP

Página 19 de 20
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Ejemplo de consulta utilizando alias para los nombres de las tablas

SELECT a.CODCLI, a.NOMCLI, b.NUMFAC, b.FECEMI,


c.CODPRO, d.NOMPRO FROM CLIENTES a
INNER JOIN
FACTURAS b
ON a.CODCLI=b.CODCLI
INNER JOIN
DETALLE_FACTURAS c
ON b.NUMFAC=c.NUMFAC
INNER JOIN
PRODUCTOS d
ON c.CODPRO=d.CODPRO

SUBQUERY (SUB CONSULTAS)

Se pueden construir sentencias poderosas utilizando sub consultas. Las sub consultas pueden
ser muy útiles cuando necesites seleccionar filas de una tabla con una condición que dependa
de los datos de la misma u otra tabla. Las sub consultas son muy útiles para escribir sentencias
SQL que necesiten valores de un o más valores condicionales desconocidos.

Ejemplos:

1. Producto con más alto precio

SELECT *FROM PRODUCTOs WHERE PREUNT=(SELECT MAX(PREUNT) FROM


PRODUCTOS)
2. Productos que han sido facturados

SELECT*FROM PRODUCTOS
WHERE CODPRO IN (SELECT DISTINCT CODPRO FROM DETALLE_FACTURAS)

3. Productos que no han sido facturados


SELECT*FROM PRODUCTOS
WHERE CODPRO NOT IN (SELECT DISTINCT CODPRO FROM DETALLE_FACTURAS)

Página 20 de 20