Vous êtes sur la page 1sur 24

UNIVERSIDAD NACIONAL DE LIMA SUR

ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

BASE DE DATOS

Docente: Ing. Daz Leyva Teodoro


Tema: Implementacin de Consultas Bsicas

INTRODUCCIN

Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva
informacin de las bases de datos. Esta informacin es devuelta en forma de conjunto
de registros que se pueden almacenar en un objeto recordset. Este conjunto de
registros es modificable.

Cuando las peticiones se hacen ms complejas, deben utilizarse caractersticas


adicionales de la sentencia SELECT para especificar la consulta con precisin.

La sentencia SELECT consta de siete clusulas. 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
GROUP BY Puede faltar una de ellas pero el orden se mantiene
HAVING
ORDER BY
COMPUTE BY
[WITH ROLLUP/CUBE]

Pgina 1 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

a. Esquema de base de datos para los ejemplos:

b. 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:\BDVENTAS2017\VENTAS_DATA.MDF',
SIZE=10MB,
MAXSIZE=20MB,
FILEGROWTH=1MB
)

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

Pgina 2 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

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),
)

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

Pgina 3 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

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
)

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

Pgina 4 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

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)

c. Clave fornea (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)

Pgina 5 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

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 BOLETA


ADD CONSTRAINT EMPLEADO_BOLETA_FK FOREIGN KEY(COD_EMP)
REFERENCES EMPLEADO (COD_EMP)
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)

Pgina 6 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

d. 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(


COD_EMP,NOMBRES_EMP,APE_PATER_EMP,APE_MATER_EMP,FECHA_NAC_E
MP,DIRECCION_EMP,TELEFONO_EMP,COD_DIST_EMP,CORREO_E_EMP,FECH
A_INGRESO_EM) VALUES ('E005', 'FRANO ','SALCEDO', ' PUMA', '12-06-70 ','JR.
LOS NOGALES','578-7188','D003','JPEREZ@HOTMAIL.COM','22-08-76')

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', 'FANY ','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-76
','JR. LOS PINOS 235','578-7188','D003','DMARIN@HOTMAIL.COM','22-08-90','E005')
INSERT INTO EMPLEADO VALUES( 'E006', 'ANGELICA','SIMEON', ' JULCA', '08-
10-76 ','AV. SALAZAR 44 ','578-7122','D002','ASJ@HOTMAIL.COM','22-05-80','E005')
INSERT INTO EMPLEADO VALUES( 'E007', 'LUIS','MOTA', ' QUIROZ', '08-10-80
','AV. PERU 911 ','511-7122','D002','LUISM@HOTMAIL.COM','22-08-95','E005')
INSERT INTO EMPLEADO VALUES( 'E008', 'ANA','RUIZ', ' OLIVA', '08-10-76 ','AV.
LA PAZ 964 ','578-7122','D002','ANAR@HOTMAIL.COM','22-05-80','E005')
GO

INSERT INTO TIPO_PRODUCTO VALUES('T001','ACEITES')


INSERT INTO TIPO_PRODUCTO VALUES('T002','LICORES')
INSERT INTO TIPO_PRODUCTO VALUES('T003','MATERIALES ELCTRICOS')
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')

Pgina 7 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

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')
INSERT INTO PRODUCTO VALUES('P015','FUENTE DE PODER MICRONICS 250W
/ 550',20,5,'T003')
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

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-11-2010','C002','EMITIDA')


INSERT INTO BOLETA VALUES('B002','E002','15-02-2010','C002','EMITIDA')
INSERT INTO BOLETA VALUES('B003','E001','26-05-2013','C001','EMITIDA')
INSERT INTO BOLETA VALUES('B004','E001','26-05-2009','C003','EMITIDA')
INSERT INTO BOLETA VALUES('B005','E001','26-05-2011','C003','EMITIDA')
GO

INSERT INTO DETALLEBOLETA VALUES('B001','P003',1,15)


INSERT INTO DETALLEBOLETA VALUES('B001','P004',1,12)

Pgina 8 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

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)

Pgina 9 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Funciones para el manejo de datos


Funciones de fecha
Funcin Descripcin
Devuelve el nmero de lmites datepart de fecha y hora entre dos
fechas especificadas.
DATEDIFF ( datepart , startdate , enddate )
DATEDIFF SET DATEFORMAT DMY
DECLARE @FECHAINICIAL DATE = '01-08-2011';
DECLARE @FECHAFINAL DATE = '01-09-2011';
SELECT DATEDIFF(DAY, @FECHAINICIAL,@FECHAFINAL) AS
'DURACION'
Devuelve una cadena de caracteres que representa el datepart
especificado de la fecha especificada.
DATENAME
DATENAME ( datepart , date )
SELECT DATENAME(MONTH, GETDATE()) AS 'MES'
Devuelve un entero que representa el datepart especificado del
date especificado.
DATEPART
DATEPART ( datepart , date )
SELECT DATEPART(MONTH, GETDATE()) AS 'MES'
Devuelve un entero que representa la parte del da datepart de la
DAY fecha especificada.
SELECT DAY('01/9/2011') AS 'DA DEL MES'
Devuelve la fecha del sistema
GETDATE SELECT GETDATE() 'FECHA DEL SISTEMA'
Devuelve un entero que representa el mes de date especificado.
MONTH MONTH devuelve el mismo valor que DATEPART (month, date).
SELECT MONTH(GETDATE()) AS 'MES DE LA FECHA DE
SISTEMA'
Devuelve un entero que representa el ao de date especificado.
YEAR YEAR devuelve el mismo valor que DATEPART (year, date).
SELECT YEAR(GETDATE()) AS 'AO DE LA FECHA DE SISTEMA'

Funciones para el manejo de cadenas


Funcin Descripcin
Devuelve la parte izquierda de una cadena de caracteres con
LEFT el nmero de caracteres especificado.
LEFT ( character_expression , integer_expression )
Devuelve el nmero de caracteres de la expresin de cadena
LEN especificad, excluidos los espacios en blanco finales.
LEN ( string_expression )
Devuelve una expresin de caracteres despus de convertir en
LOWER minsculas los datos de caracteres en maysculas.
LOWER ( character_expression )
Devuelve una expresin de caracteres tras quitar todos los
LTRIM espacios iniciales en blanco.
LTRIM ( character_expression )
Devuelve una cadena de caracteres despus de truncar todos
RTRIM los espacios en blanco finales.
RTRIM ( character_expression )
SUBSTRING Devuelve parte de una expresin de caracteres, binaria, de
texto o de imagen.
SUBSTRING (value_expression, start_expression,
length_expression)

Pgina 10 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Devuelve una expresin de caracteres con datos de caracteres


UPPER en minsculas convertidos a maysculas.
UPPER ( character_expression )

Ejemplos:

Funciones de fecha
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 Ao actual.

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


Formato: MONTH(getDate()) AS MES,
Dia, Mes, Ao YEAR(getDate()) AS AO

Select DAY(getDate()) AS DIA,


Mostrar el siguiente
DATENAME(month,getDate()) as [MES EN
Formato:
LETRAS],
Dia, Mes en Letras, Ao
YEAR(getDate()) AS AO

Funciones numricas para Select


Mostrar el Valor
Select ABS(STOCK_MIN_PRO)
Absoluto del Campo
From Producto
STOCK_MIN_PRO
Mostrar los Precios de
los Productos
Select Ceiling(PRECIOVENTA)
redondeados al entero
From DETALLEBOLETA
mas pequeo mayor o
igual que el Precio.

Pgina 11 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Mostrar los Precios de


los productos
Select Floor(PRECIOVENTA)
redondeados al entero
From DETALLEBOLETA
mas grande que es
menor o igual al Precio.
Mostrar el Stock elevado
Select Power(STOCK_ACT_PRO,2)
a la dos de todos los
From Producto
productos.
Mostrar los Precios de
los Productos Select cod_bol, cod_pro,round(precioventa,2)
redondeados a 2 from detalleboleta
Decimales
Mostrar a 2 decimales
los Precios de los Select Convert(Char(10), precioventa,2)
Productos utilizando From detalleboleta
conversion.

Funciones de Cadena para Select


Mostrar las 3 Primeras
Letras del Nombre del Select LEFT(nombres_emp,3) From Empleado
Empleado
Mostrar la longitud en
cadena de caracteres del Select LEN(nombres_emp) From Empleado
nombre de los Empleado
Mostrar los datos de la
Direccion de los
Select LOWER(direccion_emp) From empleado
empleados en escrito
Minuscula
Mostrar al reves los
codigos registrados a Select REVERSE(cod_emp) From Empleado
los Empleados
Mostrar las 4 Ultimas
Letras de la descripcin Select RIGHT(descrip_pro,4) From Producto
del Producto
Mostrar una lista de los
select nombres_emp as Nombre,
empleados de forma que
fecha_ingreso_em as [Fecha de Ingreso] ,
la direccin y el telfono
direccion_emp+','+space(1)+telefono_emp as
aparescan
Contacto,correo_e_emp as Correo
concatenados pero
from Empleado
separado por comas.
Mostrar los datos de la
Direccion de los
Select UPPER(direccion_emp)From empleado
empleados en escrito
Mayusculas

Pgina 12 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

1. CONSULTAS SENCILLAS
La sintaxis bsica de una consulta de seleccin es la siguiente:

SELECT Campos FROM Tabla

En donde campos es la lista de campos que se deseen recuperar y tabla es el origen


de los mismos, por ejemplo:

SELECT *
FROM EMPLEADO

Esta consulta devuelve un recordset con todos los campos de la tabla


EMPLEADOS.

SELECT NOMBRES_EMP, APE_PATER_EMP


FROM EMPLEADO

Esta consulta devuelve un recordset con los campos NOMBRES_EMP y


APE_PATER_EMP de la tabla EMPLEADO.

2. ORDENAR LOS REGISTROS


Adicionalmente se puede especificar el orden en que se desean recuperar los registros
de las tablas mediante la clusula ORDER BY (Lista de Campos). En donde Lista de
campos representa los campos a ordenar.

Ejemplo:

SELECT *
FROM EMPLEADO
ORDER BY APE_PATER_EMP ASC

Esta consulta devuelve todos los campos de la tabla EMPLEADO ordenados por el
campo apellido paterno del empleado

3. CONSULTAS CON PREDICADO.


El predicado se incluye entre la clusula y el primer nombre del campo a recuperar, los
posibles predicados son los siguientes:

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
instruccin SQL. No es conveniente abusar de este predicado ya que obligamos al

Pgina 13 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

motor de la base de datos a analizar la estructura de la tabla para averiguar los


campos que contiene. Por ello, es mucho ms rpido indicar el listado de campos
deseados.

SELECT ALL * FROM EMPLEADO


SELECT * FROM EMPLEADO

TOP Devuelve un cierto nmero de registros que entran al principio o al final de un


rango especificado por una clusula ORDER BY. Supongamos que queremos
recuperar los nombres de los cinco (03) primeros recordset de la tabla
EMPLEADO ordenados por apellido paterno en forma descendente:

SELECT TOP 3 APE_PATER_EMP, APE_MATER_EMP, NOMBRES_EMP


FROM EMPLEADO
ORDER BY APE_PATER_EMP DESC

Si no se incluye la clusula ORDER BY, la consulta devolver un conjunto


arbitrario de cinco (03) registros de la tabla EMPLEADO. El predicado TOP no
elige entre valores iguales.

TOP PERCENT Se puede utilizar la palabra reservada PERCENT para devolver


un cierto porcentaje de registros que estn al principio o al final de un rango
especificado por la clusula ORDER BY. Supongamos que en lugar de los cinco
(05) primeros empleados, deseamos el veinte por ciento (20%) por ciento de la
tabla de empleados:

SELECT TOP 20 PERCENT APE_PATER_EMP, APE_MATER_EMP,


NOMBRES_EMP FROM EMPLEADO
ORDER BY APE_PATER_EMP DESC

DISTINCT Omite los registros que contienen datos duplicados en los campos
seleccionados. Para que los valores de cada campo listado en la instruccin
SELECT se incluyan en la consulta deben ser nicos.

SELECT DISTINCT COD_BOL


FROM DETALLEBOLETA

En otras palabras, el predicado DISTINCT devuelve aquellos registros cuyos


campos indicados en la clusula SELECT posean un contenido diferente. El
resultado de una consulta que utiliza DISTINCT no es actualizable y no refleja los
cambios subsiguientes realizados por otros usuarios.

ALIAS En determinadas circunstancias es necesario asignar un nombre a alguna


columna determinada de un conjunto devuelto, otras veces por simple capricho o
por otras circunstancias. Para resolver todas ellas tenemos la palabra reservada
AS que se encarga de asignar el nombre que deseamos a la columna deseada.
Tomado como referencia el ejemplo anterior podemos hacer que la columna
devuelta por la consulta, en lugar de llamarse NUMFAC (igual que el campo
devuelto) se llame FACTURA. En este caso, procederamos de la siguiente forma:

Pgina 14 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

SELECT DISTINCT COD_BOL AS BOLETA


FROM DETALLEBOLETA

4. CONSULTAS CONDICIONALES
Empleo de condicionales IF EXISTS, AND, y operadores lgicos >, <, =, <>,
BETWEEN, IN, OR, NOT, DISTINCT, LIKE.

Sentencia que presenta los campos cdigo de producto, descripcin del producto,
stock del producto cuyo stock actual sea menor o igual que 60.

SELECT COD_PRO, DESCRIP_PRO, STOCK_ACT_PRO


FROM PRODUCTO
WHERE STOCK_ACT_PRO<= 60

El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en


comparaciones de verdadero o falso para determinar si la subconsulta devuelve
algn registro. Supongamos que se desea determinar los empleados que han
emitido una boleta

SELECT COD_EMP, NOMBRES_EMP FROM EMPLEADO


WHERE EXISTS (SELECT *FROM BOLETA
WHERE BOLETA.COD_EMP=EMPLEADO.COD_EMP)

Usando operadores lgicos, por ejemplo presenta todos los campos de la tabla
producto, pero con el stock actual mayor o igual a 60 y menor o igual a 80

SELECT *FROM PRODUCTO


WHERE STOCK_ACT_PRO>=60 AND STOCK_ACT_PRO<=80
Si a cualquiera de las anteriores condiciones le anteponemos el operador NOT el
resultado de la operacin ser el contrario al devuelto sin el operador NOT.

Para indicar que deseamos recuperar los registros segn el intervalo de valores
de un campo, emplearemos el operador Between cuya sintaxis es de la siguiente
manera:

campo [Not] Between valor1 And valor2


(la condicin Not es opcional)

En este caso la consulta devolvera los registros que contengan un


"campo" con el valor incluido en el intervalo valor1, valor2 (ambos
inclusive). Si anteponemos la condicin Not devolver aquellos valores
no incluidos en el intervalo.

Ejemplo:
Lista de productos con stock actual entre 60 y 80

SELECT *FROM PRODUCTO


WHERE STOCK_ACT_PRO BETWEEN 60 AND 80

Pgina 15 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

EL OPERADOR LIKE Se utiliza para comparar una expresin de cadena con un


modelo en una expresin SQL. Su sintaxis es de la siguiente manera:

expresin Like modelo

En donde, expresin es una cadena modelo o campo contra el que se compara


expresin. Se puede utilizar el operador Like para encontrar valores en los
campos que coincidan con el modelo especificado. De acuerdo con el modelo
empleado, se puede especificar un valor completo (Ana Cecilia) o se pueden
utilizar caracteres comodn como los reconocidos por el sistema operativo para
encontrar un rango de valores (Like An%).

El operador Like se puede utilizar en una expresin para comparar un valor de un


campo con una expresin de cadena.

Por ejemplo, si introduce Like C% en una consulta SQL, la consulta devuelve


todos los valores de campo que comiencen por la letra C. En una consulta con
parmetros, puede hacer que el usuario escriba el modelo que se va a utilizar.

El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de
cualquier letra entre A y F y de tres dgitos:

Like 'P[A-F]###'

Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A
a la D seguidas de cualquier cadena.

Like '[A-D]%'

Este ejemplo devuelve todos los empleados cuyo nombre empiece con la letra F

SELECT*FROM EMPLEADO WHERE NOMBRES_EMP LIKE 'F%'

EL OPERADOR IN Este operador devuelve aquellos registros cuyo campo


indicado coincide con alguno de los en una lista. Su sintaxis es la siguiente:

expresin [Not] In(valor1, valor2, . . .)

Ejemplo:

SELECT COD_EMP,NOMBRES_EMP,APE_PATER_EMP
FROM EMPLEADO
WHERE APE_PATER_EMP IN ('FLORES','RAMIREZ','SANCHEZ')

LA CLUSULA WHERE La clusula WHERE puede usarse para determinar qu


registros de las tablas enumeradas en la clusula FROM aparecern en los
resultados de la instruccin SELECT. Despus de escribir esta clusula se deben
especificar las condiciones expuestas en los puntos anteriores de la presente

Pgina 16 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

sesin. Si no se emplea esta clusula, la consulta devolver todas las filas de la


tabla. WHERE es opcional, pero cuando aparece debe ir a continuacin de
FROM.

5. CONSULTAS CONDICIONALES Empleando las clasulas GROUP BY y


HAVING, SUM, MIN, MAX, AVG y COUNT

GROUP BY y HAVING Combina los registros con valores idnticos, en la lista de


campos especificados, en un nico registro. Para cada registro, se crea un valor
sumario si se incluye una funcin SQL agregada, como SUM o COUNT (como
veremos despus), en la instruccin SELECT. Su sintaxis es la siguiente:

SELECT CAMPOS
FROM TABLA
WHERE CRITERIO
GROUP BY CAMPOS DEL GRUPO

GROUP BY es opcional. Los valores de resumen se omiten si no existe una


funcin SQL agregada en la instruccin SELECT. Los valores NULL en los
campos GROUP BY se agrupan y no se omiten. No obstante, los valores NULL no
se evalan en ninguna de las funciones SQL agregadas.

Se utiliza la clusula WHERE para excluir aquellas filas que no desea agrupar, y
la clusula HAVING para filtrar los registros una vez agrupados.

A menos que contenga un dato Memo, un campo de la lista de campos GROUP


BY puede referirse a cualquier campo de las tablas que aparecen en la clusula
FROM, incluso si el campo no est incluido en la instruccin SELECT, siempre y
cuando esta instruccin incluya al menos una funcin SQL agregada.

Todos los campos de la lista de campos de la instruccin SELECT deben incluirse


en la clusula GROUP BY o como argumentos de una funcin SQL agregada.

SELECT COD_EDIF, COUNT(COD_DEP)


FROM DEPARTAMENTOS
GROUP BY COD_EDIF

Ejemplo con la base de datos ventas: script para obtener el total de cada boleta

SELECT COD_BOL, SUM(CANTIDAD*PRECIOVENTA ) AS TOTAL FROM


DETALLEBOLETA GROUP BY COD_BOL

Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier
registro agrupado por la clusula GROUP BY que satisfaga las condiciones de la
clusula HAVING.

Pgina 17 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

HAVING es similar a WHERE, determina qu registros se seleccionan. Una vez


que los registros se han agrupado utilizando GROUP BY, HAVING determina
cules de ellos se van a mostrar. El siguiente ejemplo lista a los edificios que
poseen ms de 22 departamentos.

SELECT COD_EDIF, COUNT(COD_DEP)


FROM DEPARTAMENTOS
GROUP BY COD_EDIF
HAVING COUNT(COD_DEP) > 22

Ejemplo con la base de datos ventas: script para listar las boletas con nmero 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

Ejemplo prctico:
Supongamos que tenemos los siguientes datos de la tabla DEPARTAMENTOS

Supongamos adems que tenemos los siguientes datos de la tabla


DETALLECONTRATO

Pgina 18 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Se solicita mostrar el nmero de contrato y el monto acumulado por cada contrato.

SELECT DET.COD_CONT,
MONTO=SUM(DEP.PRECIO_ALQXMES_DEP *
(DATEDIFF(MM,DET.FEC_INI_ALQ,DET.FEC_FIN_ALQ)))
FROM DEPARTAMENTOS DEP, DETALLECONTRATO DET
WHERE DEP.COD_EDIF=DET.COD_EDIF.
AND DEP.COD_DEP=DET.COD_DEP
GROUP BY DET.COD_CONT
Haciendo uso de la clusula HAVING se filtran los datos agrupados obtenidos y
se muestra solamente los que tengan un MONTO ACUMULADO mayor de 1,000
soles.

La solucin sera la siguiente:

SELECT DET.COD_CONT,
MONTO=SUM(DEP.PRECIO_ALQXMES_DEP *
DATEDIFF ( MM,DET.FEC_INI_ALQ,DET.FEC_FIN_ALQ ) )
FROM DEPARTAMENTOS DEP, DETALLECONTRATO DET
WHERE DEP.COD_EDIF.=DET.COD_EDIF.
AND DEP.COD_DEP=DET.COD_DEP
GROUP BY DET.COD_CONT
HAVING SUM(DEP.PRECIO_ALQXMES_DEP *
DATEDIFF(MM,DET.FEC_INI_ALQ,DET.FEC_FIN_ALQ)) > 1000

SUM Devuelve la suma del conjunto de valores contenido en un campo especfico


de una consulta. Su sintaxis es:

SELECT SUM (EXPR) FROM TABLA

Pgina 19 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

En donde EXPR debe ser un valor numrico y representa el nombre del campo
que contiene los datos que desean sumarse o una expresin que realiza un
clculo utilizando los datos de dichos campos. Los operandos de EXPR pueden
incluir el nombre de un campo de una tabla, una constante o una funcin (la cual
puede ser intrnseca o definida por el usuario pero no otras de las funciones
agregadas de SQL).

Mostrar el total de rea construida por cdigo de edificio.

SELECT COD_EDIF, SUM(AREA_CONSTRUIDA_DEP) AS


AREATOTALCONSTRUIDA
FROM DEPARTAMENTOS
GROUP BY COD_EDIF

AVG Calcula la media aritmtica de un conjunto de valores CONTENIDO en un


campo especificado de una consulta. Su sintaxis es la siguiente:

SELECT AVG(EXPR) FROM TABLA

En donde EXPR representa el campo que contiene los datos numricos para los
que se desea calcular la media o una expresin que realiza un clculo utilizando
los datos de dicho campo. La media calculada por AVG es la media aritmtica (la
suma de los valores dividido por el nmero de valores). La funcin AVG no incluye
ningn campo NULL en el clculo.

Ejemplos:
Calcular el stock actual promedio de los productos.

SELECT AVG(STOCK_ACT_PRO) AS [STOCK ACTUAL PROMEDIO] FROM


PRODUCTO

Calcular la edad promedio de los usuarios.

SELECT AVG(DATEDIFF(YY,FEC_NAC_USUA,GETDATE()))
AS EDADPROMEDIO
FROM USUARIO

MIN, MAX Devuelven el mnimo o el mximo de un conjunto de valores


CONTENIDO en un campo especifico de una consulta. Su sintaxis es la siguiente:

SELECT MIN(EXPR) FROM TABLA


---
SELECT MAX(EXPR) FROM TABLA
---
SELECT MIN(EXPR) , MAX(EXPR)
FROM TABLA

Pgina 20 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

En donde EXPR es el campo sobre el que se desea realizar el clculo. EXPR


puede incluir el nombre de un campo de una tabla, una constante o una funcin
(la cual puede ser intrnseca o definida por el usuario pero no otras de las
funciones agregadas de SQL).

Ejemplos:

Calcular el haber mnimo y el haber mximo de los inquilinos.

SELECT MIN (HABER_BAS_INQ) AS ELMINIMOHABER


FROM INQUILINO
----
SELECT MAX (HABER_BAS_INQ) AS ELMAXIMOHABER
FROM INQUILINO
---
SELECT MIN (HABER_BAS_INQ) AS ELMINIMOHABER ,
MAX (HABER_BAS_INQ) AS ELMAXIMOHABER
FROM INQUILINO

COUNT Calcula el nmero de registros devueltos por una consulta. Su sintaxis es


la siguiente:

SELECT COUNT(EXPR) FROM TABLA

En donde EXPR contiene el nombre del campo que desea contar. Los operandos
de EXPR pueden incluir el nombre de un campo de una tabla, una constante o
una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de
las funciones agregadas de SQL). Puede contar cualquier tipo de datos, incluso
texto.

Aunque EXPR puede realizar un clculo sobre un campo, COUNT simplemente


cuenta el nmero de registros sin tener en cuenta qu valores se almacenan en
los registros. La funcin COUNT no cuenta los registros que tienen campos NULL
a menos que EXPR sea el carcter comodn asterisco (*). Si utiliza un asterisco,
COUNT calcula el nmero total de registros, incluyendo aquellos que contienen
campos NULL. COUNT(*) es considerablemente ms rpido que
COUNT(Campo). No se debe poner el asterisco entre dobles comillas ('*').

Mostrar la cantidad de usuarios registrados.

SELECT COUNT(*) AS TOTAL FROM USUARIO

Pgina 21 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Esquema de base de datos ESTUDIO para desarrollar las consultas


propuestas:

Pgina 22 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Crear las siguientes consultas:

Operadores Lgicos

1. Mostrar todos los alumnos que hayan nacido en el mes de Agosto o Septiembre.

2. Mostrar todos los alumnos que hayan nacido en el ao 1978 y en el mes


Septiembre o que sean solteros
La consulta solo debe mostrar los siguientes datos: Cdigo del alumno, Nombre,
apellido paterno, apellido materno, Estado Civil y fecha de Nacimiento. As mismo
la informacin debe ser ordenada por nombre en forma ascendente y ante
coincidencia por fecha de nacimiento en forma descendente.

Operador between

3. Mostrar el cdigo y nombre de la asignatura as como el cdigo del periodo, fecha


inicio, fecha fin de todos los cursos cuya capacidad se encuentre entre 45 y 50
vacantes para el periodo 200401.

4. Mostrar cdigo, nombre, apellido paterno, apellido materno y nota de todos


aquellos registros cuyas notas no se encuentren entre 12 y 16 para el periodo
200401.

5. Mostrar el cdigo, nombre completo y fecha nacimiento del alumno as como


cdigo de la asignatura, fecha inicio, fecha fin, cdigo del periodo y nombre de la
asignatura para aquellas personas que hayan nacido entre los aos 1977 y 1978.

Like

6. Mostrar el cdigo y nombre de la asignatura, cdigo del periodo. Fecha inicio y


capacidad del curso de aquellas asignaturas que han sido dictadas en el periodo
200402, que a su vez el nombre de la asignatura deba contener la palabra SI.

Operador In

7. Mostrar el cdigo y nombre de la asignatura, cdigo del periodo. Fecha inicio y


capacidad del curso de aquellas asignaturas cuyos cdigos sean 1,2 3 y que
adems sean del periodo 200401.

8. Mostrar el cdigo, nombre, apellido paterno, apellido materno, cdigo de la


asignatura y nota de aquellos alumnos cuyos cdigos sean 1,2,3,4 5 y a que
adems sean del periodo 200401.

Pgina 23 de 24
UNIVERSIDAD NACIONAL DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

Operador Numrico

9. Mostrar el cdigo, nombre, apellido paterno, apellido materno y el Importe de la


boleta de pago para el periodo 200402. El Importe se calcula sumando el monto
con su respectivo IGV (19%). As mismo slo se mostrarn aquellos registros cuyo
importe sea mayor a 700 soles.

10. Mostrar el cdigo, nombre, apellido paterno, apellido materno, cdigo de la


asignatura, nota y bonificacin. La bonificacin es igual al 25% de la nota. As
mismo slo se mostrarn aquellos registros cuya bonificacin sea mayor o igual a
3.

Distinct

11. Mostrar Todos los Nombres de los Alumnos. La informacin no debe incluir
repetidos.

12. Mostrar el cdigo y nombre de las asignaturas que han sido dictadas hasta la
fecha.

Exists

13. Mostrar todos los alumnos siempre y cuando exista algn alumno que empiece su
nombre con la letra J

14. Mostrar todas las asignaturas del periodo siempre y cuando exista algn alumno
cuya nota sea mayor a quince durante el periodo 200402.

Otros Operadores con LIKE

15. Mostrar a Todos los Alumnos cuyos apellidos paternos empiecen con la letra S.

16. Mostrar a Todos los Alumnos cuyos apellidos paternos finalicen con la letra A.

17. Mostrar todos los Alumnos que tienen correo en @yahoo

18. Mostrar Todos los Cursos que contienen la palabra MATEMATICO

19. Mostrar Todos los Alumnos que su Nombre sea slo de 4 letras.

20. Mostrar Todos los Alumnos que su Nombre sea slo de 4 letras., pero la primera
letra debe empezar en L o J

21. Mostrar Todos los Alumnos que su Nombre sea slo de 4 letras, pero la primera
letra no debe empezar ni en L y G

Pgina 24 de 24

Vous aimerez peut-être aussi