Está en la página 1de 38

USE BD_CLIENTES

-- Crear tabla Alumnos

DROP TABLE ALUMNOS

Create Table Alumnos(


Nombre varchar(30),
Nota1 NUMERIC(10,0),
Nota2 NUMERIC(10,0),
Nota3 NUMERIC(10,0),
Nota4 NUMERIC(10,0)
)

-- Insertar los siguientes registros

Insert Alumnos Values('Juan', 11, 12, 13,12)


Go
Insert Alumnos Values('Ana', 15, 16, 14,16)
Go
Insert Alumnos Values('Luis', 8, 9, 11,12)
Go
Insert Alumnos Values('Carlos', 11, 10, 9,14)
Go
Insert Alumnos Values('Jorge', 10, 11, 10,12)

--COMPARACIONES NUMERICAS

SELECT * FROM ALUMNOS


WHERE NOTA4<NOTA2

--MAXIMOS

SELECT MAX(NOTA1) FROM ALUMNOS

--MINIMOS

SELECT MIN(NOTA1) FROM ALUMNOS

-- [01] Mostrar todas las columnas de la tabla Alumnos

Select * From Alumnos

Select Nombre from Alumnos

-- [02] Mostrar todos las columnas de la tabla Alumnos ordenados alfabéticamente

Select * From Alumnos


Order By Nombre ASC

Select * From Alumnos


Order By Nombre DESC

Select * From Alumnos


Order By Nombre

-- [03] Mostrar Nombre y promedio de la tabla Alumnos en orden de mérito

Select Nombre, (Nota1+Nota2+Nota3+nota4)/4 AS PROMEDIO From Alumnos


Order By 2 Desc

1
Select Nombre, (Nota1+Nota2+Nota3+nota4)/4 As Promedio From Alumnos
Order By Promedio Desc

-- [04] Mostrar todos las columnas más el promedio en orden de mérito

Select *, (Nota1+Nota2+Nota3+nota4)/4 As Promedio From Alumnos


order by 6 desc

Select *, (Nota1+Nota2+Nota3+nota4)/4 As Promedio From Alumnos


order by Promedio desc

Select *, (Nota1+Nota2+Nota3+nota4)/4 As Promedio From Alumnos


order by nota1 desc, nota2 ASC

-- [05] Muestra Nombre más Promedio de los aprobados en orden alfabético

Select Nombre, (Nota1+Nota2+Nota3+Nota4)/4 As Promedio


From Alumnos
Where (Nota1+Nota2+Nota3+Nota4)/4 >= 10.5
Order By Nombre

-- [06] Muestra todos las columnas donde la Nota3 este entre [12, 15] y en orden
alfabético

Select * from Alumnos


where Nota3>=12 and Nota3<=15
order by Nombre

Select * from Alumnos


where Nota3 between 12 and 15
order by Nombre

-- [07] Muestra todos las columnas donde la Nota3 es par y aprobatoria y en orden
alfabético

Select * From Alumnos


Where Nota3 In (12,14,16,18,20)
Order By Nombre

Select * From Alumnos


Where Nota3%2=0 and Nota3>10
Order By Nombre

-- [08] Muestra todos las columnas donde el nombre empieza con J, y en orden
alfabético

Select * from Alumnos


where Nombre like 'J%'
order by nombre

-- [09] Muestra todos las columnas donde el nombre tiene una letra u, y en orden
alfabético

Select *
From Alumnos
Where Nombre Like '%u%'
Order By Nombre

-- [10] Muestra todos las columnas donde la segunda letra de Nombre es vocal, y en
orden alfabético

2
Select * from Alumnos
where Nombre like '_[aeiou]%'
order by nombre

-- [11] Muestra todos las columnas donde la segunda letra de Nombre no es vocal, y en
orden alfabético

Select *
From Alumnos
Where Nombre Like '_[^aeiou]%'
Order By Nombre

-- [12] Muestra todos las columnas donde Nombre empieza con J y termina con cualquier
letra entre [m, p]

Select * From Alumnos


Where Nombre Like 'J%[m-p]'
Order By Nombre

SELECT * FROM ALUMNOS

--PRIMER FORMA

ALTER TABLE ALUMNOS


ADD MINIMO NUMERIC(10,1)

SELECT * FROM ALUMNOS

UPDATE ALUMNOS
SET MINIMO=NOTA1

UPDATE ALUMNOS
SET MINIMO=NOTA2
WHERE NOTA2<NOTA1

UPDATE ALUMNOS
SET MINIMO=NOTA3
WHERE NOTA3<MINIMO

UPDATE ALUMNOS
SET MINIMO=NOTA4
WHERE NOTA4<MINIMO

ALTER TABLE ALUMNOS


DROP COLUMN PROMEDIO

ALTER TABLE ALUMNOS


ADD PROMEDIO NUMERIC(10,2)

UPDATE ALUMNOS
SET PROMEDIO=(NOTA1+NOTA2+NOTA3+NOTA4-MINIMO)/3

--SEGUNDA FORMA

CREATE TABLE ALUMNOS_V2


(
NOMBRE VARCHAR(30),
NOTA NUMERIC(10,0)
)

3
INSERT INTO ALUMNOS_V2
SELECT NOMBRE,NOTA1 FROM ALUMNOS

INSERT INTO ALUMNOS_V2


SELECT NOMBRE,NOTA2 FROM ALUMNOS

INSERT INTO ALUMNOS_V2


SELECT NOMBRE,NOTA3 FROM ALUMNOS

INSERT INTO ALUMNOS_V2


SELECT NOMBRE,NOTA4 FROM ALUMNOS

SELECT
NOMBRE,
MIN(NOTA) AS MINIMO
INTO #TEMPORAL
FROM ALUMNOS_V2
GROUP BY NOMBRE

SELECT * FROM #TEMPORAL

SELECT * FROM ALUMNOS

ALTER TABLE ALUMNOS


ADD MINIMO NUMERIC(10,0),PROMEDIO numeric(10,2)

UPDATE ALUMNOS
SET MINIMO=B.MINIMO
FROM ALUMNOS A,#TEMPORAL B
WHERE A.NOMBRE=B.NOMBRE

UPDATE ALUMNOS
SET PROMEDIO=(NOTA1+NOTA2+NOTA3+NOTA4-MINIMO)/3

4
-- Operaciones
Select 5%2
Select 27%10
Select 3+2*4
Select (3+2)*4

-- Funciones Matemáticas

Select Abs(-45) -- 45
Select Abs(45) -- 45

Select PI() -- PI, lleva paréntesis para indicar que es una constante
Select Degrees(PI()) -- Convierte radianes a grados

Select Log(10) -- Logaritmo neperiano


Select Log(2.71828182845905)

Select Log10(10) -- Logaritmo de base 10

Select Power(2, 5) -- 32 (Dos a la quinta)


Select Power(3.8, 2.2) -- 18.9
Select Sign(-10) -- Retorna signo (-1 para negativos)
Select Sign(10)

Select SQRT(25) -- 5

------------------------------------------
-- CONSULTAS CON FUNCIONES MATEMÁTICAS
------------------------------------------

-- Funciones de Cadena

Select Ascii('A') -- 65
Select ASCII('a') -- 97
Select ASCII('&') -- 38
Select Ascii('Arriba') -- 65

Select CharIndex('u', 'Paula') -- 3


Select CharIndex('a', 'Paula') -- 2
Select CharIndex('a', 'Paula', 3) -- 3

Select Lower('Lima Capital del Perú') -- a minúsculas


Select UPPER('Lima Capital del Perú') -- a mayúsculas

Select LTrim(' Hola') -- elimina blancos a la izq.


Select RTrim('Hola ') -- elimina blancos a la der.

Select PatIndex('%ul%', 'Paula') -- Posici¢n de sub cadena en cadena


Select PatIndex('ul', 'Paula') -- No funciona

Select Replicate('$', 10) -- Replica caracter


Select Replicate('au', 10) -- Replica cadena

Select Reverse('ROMA') -- AMOR

Select Right('Casa Blanca', 6) -- Blanca


Select Left('Casa Blanca', 4) -- Casa

Select RTrim('Hola ') -- elimina blancos a la der.

Select 'Juan'+Space(10)+'Pérez' -- Juan Pérez

Select SubString('1234567', 3, 2) -- 34 (Pos. 3 toma 2 caracteres)

Select Upper('La última') -- LA ULTIMA

5
CREATE TABLE TELEFONO
(
ID_ALUMNO CHAR(4) NOT NULL,
TELEFONO CHAR(7) NULL
)

SELECT * FROM TELEFONO

INSERT INTO TELEFONO VALUES


('1694','1245873')

INSERT INTO TELEFONO VALUES


('1695',NULL)

INSERT INTO TELEFONO VALUES


(NULL,'1245889')

INSERT INTO TELEFONO VALUES


('','1245889')

--ELIMINACION DE REGISTROS

DELETE FROM TELEFONO


WHERE ID_ALUMNO=''

--CASO 3

INSERT INTO TELEFONO VALUES


('1698',' ')

SELECT * FROM TELEFONO


WHERE
TELEFONO IS NULL OR TELEFONO =' '

--MODIFICAR

UPDATE TELEFONO
SET TELEFONO=NULL
WHERE TELEFONO =' '

INSERT INTO TELEFONO VALUES


('1698',NULL)
INSERT INTO TELEFONO VALUES
('1698',NULL)
INSERT INTO TELEFONO VALUES
('1698',NULL)

SELECT * FROM TELEFONO

DELETE FROM TELEFONO


WHERE ID_ALUMNO='1698'
AND TELEFONO IS NULL

--CREACION DE TABLA ELIMINANDO DUPLICIDAD

SELECT DISTINCT *
INTO TELEFONO_V2
FROM TELEFONO

--COPIA DE UNA TABLA

SELECT *
INTO TELEFONO_V3
FROM TELEFONO

--TRUNCAR

TRUNCATE TABLE TELEFONO_V3

SELECT * FROM TELEFONO_V3

CREATE TABLE PRODUCTO


(

6
ID_PRODUCTO INT IDENTITY (1,1),
DESC_PRODUCTO VARCHAR(30)
)

INSERT PRODUCTO (DESC_PRODUCTO)


VALUES ('TELEVISOR')

SELECT * FROM PRODUCTO

INSERT PRODUCTO (DESC_PRODUCTO)


VALUES ('LICUADORA')

CREATE TABLE PROGRAMAS


(
ID_PROGRAMA INT IDENTITY (10,5),
DESC_PROGRAMA VARCHAR(30)
)

INSERT PROGRAMAS (DESC_PROGRAMA)


VALUES ('SQL SERVER')

INSERT PROGRAMAS (DESC_PROGRAMA)


VALUES ('WORD')

--ADICION DE COLUMNAS

ALTER TABLE PROGRAMAS


ADD COSTO NUMERIC(10,2)

ALTER TABLE PROGRAMAS


ADD
COSTO_M2 NUMERIC(10,2),
COSTO_M3 NUMERIC(10,2),
COSTO_M4 NUMERIC(10,2)

--ELIMINACION DE COLUMNAS

ALTER TABLE PROGRAMAS


DROP COLUMN COSTO_M4

ALTER TABLE PROGRAMAS


DROP COLUMN COSTO_M3,COSTO_M2

UPDATE PROGRAMAS
SET COSTO=1000.50
WHERE ID_PROGRAMA=10

UPDATE PROGRAMAS
SET COSTO=500.30
WHERE ID_PROGRAMA=15

SELECT * FROM PROGRAMAS

--MODIFICACION DE COLUMNA

ALTER TABLE PROGRAMAS


ALTER COLUMN COSTO NUMERIC(10,0)

--SELECT * FROM PROGRAMAS

7
---MANEJO DE SCRIPTS

IF condición
BEGIN
-- sentencias
END
ELSE
BEGIN
-- sentencias
END

------instruccion repetitiva-------------------------------------

WHILE condición ----el while se hace hasta que la condicion sea falsa
BEGIN --------es necesario cuando son de dos a mas
-- sentencias
END

-------------------------------------------

-- Imprime del 1 al 10

Declare @i int
Set @i= 1 --- También puede ser Select
WHILE @i < 11
BEGIN
Print @i -- Select @i
Select @i= @i + 1
END

-- Imprime del 10 al 1
go
Declare @i int
Set @i= 10 --- También puede ser Select
WHILE @i > -10
BEGIN
Print @i
Select @i= @i - 1

If @i=-8 BREAK ---Break interrumpe un bucle repetitivo


END

-------------------------------------------

-- Imprime los múltiplos de 7 de dos dígitos


USE MASTER
Declare @i int
Set @i= 9
WHILE @i<100
BEGIN
Select @i= @i + 1

If (@i%7)!=0 CONTINUE ---- (!= )significa diferente, % es para el residuo en el


ejemplo cuando no sea multiplo de 7
---------- el continue ignora lo que sigue y vuelve a
continuar
Print @i ---se imprime cuando sea multiplo de 7
END
USE MASTER

--------------CREACION BASE DATOS---------------------------

IF EXISTS (SELECT NAME FROM SYSDATABASES WHERE NAME = 'PRUEBA')

8
DROP DATABASE PRUEBA

CREATE DATABASE PRUEBA


ON
PRIMARY ( NAME=Pruebadata,
FILENAME='F:\SQL SERVER\Prueba.mdf',
SIZE=10MB,
MAXSIZE=15MB,
FILEGROWTH=20%)
LOG ON
( NAME=Pruebalog,
FILENAME='F:\SQL SERVER\Pruebalog.ldf',
SIZE=3MB,
MAXSIZE=5MB,
FILEGROWTH=1MB)

--------------------CONSTRAINTS--------------------------

Create Table Autores(

idAutor int Identity(1,1) Not NULL,


Nombre varchar(30) Not NULL,
Direccion varchar(30),
Telefono char(8) Not NULL,
)

Create Table Temas(

idTema int Identity(1,1) Not NULL,


DescripcionTema varchar(30) Not NULL,
)

Create Table Libros(

idLibro int Identity(1,1) Not NULL,


Titulo varchar(30) Not NULL,
idTema int Not NULL,
Editorial varchar(30) Not NULL,
PrecioCompra money Not NULL,
Paginas int Not NULL,
)

Create Table AutoresLibros(

idLibro int Not NULL,


idAutor int Not NULL,
)

ALTER TABLE Autores


ADD
CONSTRAINT PK_Autores PRIMARY KEY (idAutor)

ALTER TABLE Temas


ADD
CONSTRAINT PK_Temas PRIMARY KEY (idTema)

ALTER TABLE Libros


ADD
CONSTRAINT PK_Libros PRIMARY KEY (idLibro)

SELECT * FROM AUTORES

INSERT INTO AUTORES (idautor,nombre,telefono)


VALUES (NULL,'Juan','235-4587')

9
INSERT INTO AUTORES (idautor,nombre,telefono)
VALUES (2567,'Juan','235-4587')

INSERT INTO AUTORES (nombre,telefono)


VALUES ('Juan','235-4587')

Create Table Autores_v2(

idAutor int Not NULL,


Nombre varchar(30) Not NULL,
Direccion varchar(30),
Telefono char(8) Not NULL,
)

ALTER TABLE Autores_V2


ADD
CONSTRAINT PK_Autores_V2 PRIMARY KEY (idAutor)

SELECT * FROM Autores_V2

INSERT INTO AUTORES_V2 (idautor,nombre,telefono)


VALUES (NULL,'Juan','235-4587')

INSERT INTO AUTORES_V2 (idautor,nombre,telefono)


VALUES (2567,'Juan','235-4587')

INSERT INTO AUTORES_V2 (idautor,nombre,telefono)


VALUES (2568,'Jorge','235-4589')

Alter Table Autores


Add
Constraint dTelf DEFAULT '000-0000' For Telefono

SELECT * FROM AUTORES

INSERT INTO AUTORES (Nombre,direccion)


VALUES ('Jorge','Surco')

INSERT INTO AUTORES (Nombre,direccion,telefono)


VALUES ('Luis','Ate','256-1478')

Alter Table Autores


Add
Constraint cTelf CHECK
(Telefono like '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]')

SELECT * FROM AUTORES

INSERT INTO AUTORES (NOMBRE,DIRECCION,TELEFONO)


VALUES ('Pedro','Surco','145-489a')

INSERT INTO AUTORES (NOMBRE,DIRECCION,TELEFONO)


VALUES ('Pedro','Surco','145-4898')

ALTER TABLE AUTORES


ADD
CONSTRAINT nombre UNIQUE (nombre)

--SELECT * FROM AUTORES

INSERT INTO AUTORES (nombre,direccion,telefono)


VALUES ('Pedro','Comas','145-7894')

10
INSERT INTO AUTORES (nombre,direccion,telefono)
VALUES ('Carlos','Comas','145-7894')

Alter Table Libros


Add
Constraint cPCompra CHECK (PrecioCompra>0)

Alter Table Libros


Add
Constraint cPaginas CHECK (Paginas>0)

Alter Table AutoresLibros


Add
Constraint FK_ConAutores Foreign Key(idAutor) References Autores(idAutor),
Constraint FK_ConLibros Foreign Key(idLibro) References Libros(idLibro)

Alter Table Libros


Add
Constraint FK_ConTemas Foreign Key(idTema) References Temas(idTema)

ALTER TABLE AUTORES


DROP nombre

-----------------------CONSULTA DE CONSTRAINTS --------------------


SELECT name FROM sysobjects
where type='C' or -- CHECK
type='D' or -- DEFAULT
type='K' or -- UNIQUE
type='PK' or -- PRIMARY KEY
type='F' -- FOREIGN KEY

--CASO PRACTICO FOREIGN KEY

INSERT INTO LIBROS


(TITULO,IDTEMA,EDITORIAL,PRECIOCOMPRA,PAGINAS)
VALUES
('METAMORFOSIS',2,'ZETA',70,100)

INSERT INTO TEMAS


(DESCRIPCIONTEMA)
VALUES ('Drama')

CREATE DATABASE PROCEDURES

Create Table DatosProc(


Alumno varchar(30) NOT NULL
CONSTRAINT unico UNIQUE,
Nota1 int,
Nota2 int,
Nota3 int,
Comentario varchar(60) NULL
)

-- Drop Table DatosProc


------------------------Insertando Filas

Insert DatosProc Values('Juan', 11, 11, 11, 'Ninguno')


Insert DatosProc Values('Ana', 12, 12, 12, Null)
Insert DatosProc Values('Luis', 13, 13, 13, Null)

Select * From DatosProc

--[01] CREANDO PROCEDIMIENTO PARA LISTAR FILAS

11
Create Procedure sp_Lista
as
Select * from DatosProc

--Ejecutando procedimiento sp_Lista

sp_Lista

EXEC sp_Lista

-- Listar procedimientos almacenados en base de datos

Select name from sysobjects where name like 'sp_%'

Select name from sysobjects where type like 'P'

-- Procedimientos para procedimientos

sp_help sp_Lista

sp_helptext sp_Lista

sp_stored_procedures

-- Eliminar Procedimiento

DROP PROCEDURE sp_Lista

-- Creando procedimiento para Insertar

Create Procedure sp_Insert


@Alumno varchar(30), -- Argumentos del procedimiento
@Nota1 int,
@Nota2 int,
@Nota3 int,
@Comentario varchar(60) = 'sin comentarios' --- Puede tener valor por defecto
As
Insert DatosProc
(
Alumno, -- Campos de la tabla
Nota1, Nota2, Nota3,
Comentario
)
Values
(
@Alumno, -- Argumentos del procedimiento que
@Nota1, @Nota2, @Nota3, -- irán a campos de la tabla
@Comentario
)

-- Ejecutando procedimiento sp_Insert

sp_Insert 'Jorge', 14,13

sp_Insert 'Carmen', 15, 15, 15, 'Ultimo ingreso'

sp_Lista

--[03] Creando procedimiento para Actualizar filas


Create Procedure sp_Update
@Alumno varchar(30), -- Argumentos del procedimiento
@Nota1 int,
@Nota2 int,
@Nota3 int,
@Comentario varchar(60)
As
UpDate DatosProc
set
Alumno=@Alumno,
Nota1=@Nota1,
Nota2=@Nota2,
Nota3=@Nota3,

12
Comentario=@Comentario
where Alumno=@Alumno

select * from datosproc

EXEC SP_UPDATE 'Juan',11,12,13,NULL

EXEC SP_LISTA
------------------------------------------
-- Drop Procedure sp_Update
------------------------------------------

Create Procedure sp_Delete


@Alumno varchar(30)
As
Delete from DatosProc
where Alumno=@Alumno

sp_Delete 'Jorge'

sp_Lista

-- [5] Procedimiento para obtener promedio (Con una variable output)

Create Procedure sp_Promedio


@Alumno varchar(30)
As
Declare @Suma real
Declare @Promedio real
Select @Suma= (Select Nota1+Nota2+Nota3 ---el igual es para asignar algo se hace el
parentesis y se asigna a @suma
From DatosProc
Where Alumno=@Alumno)
Select @Promedio= @Suma/3
Print @Promedio

EXEC SP_LISTA

EXEC SP_PROMEDIO 'Juan'

-- Ejecutando procedimiento para obtener promedio de un alumno dado su nombre

Create Procedure sp_Promedio2


@Alumno varchar(30),
@Promedio real output
As
Declare @Suma real
Select @Suma= (Select Nota1+Nota2+Nota3 ---el igual es para asignar algo se hace el
parentesis y se asigna a @suma
From DatosProc
Where Alumno=@Alumno)
Select @Promedio= @Suma/3

Declare @pro real ----declaro la variable porque abajo la voy a usar


execute sp_Promedio2 'Juan', @pro output
Select 'Su Promedio es: ', @pro

sp_Lista

-----Lo mismo pero con funcion (recomendado)

create function fn_promedio


(@Alumno varchar(30))
returns real
as
Begin
Declare @Suma real
Select @Suma= (Select Nota1+Nota2+Nota3
From DatosProc
Where Alumno=@Alumno)

13
return @suma/3
end

select dbo.fn_promedio ('juan')

-----------------------------
-- [5] Procedimiento para obtener la nota máxima
-----------------------------
Create Procedure sp_NotaMax
@Alumno varchar(30),
@NotaMax int Output
As
Declare @n1 int
Declare @n2 int
Declare @n3 int

Select @n1= (Select Nota1 From DatosProc Where Alumno=@Alumno)


Select @n2= (Select Nota2 From DatosProc Where Alumno=@Alumno)
Select @n3= (Select Nota3 From DatosProc Where Alumno=@Alumno)

If @n1>=@n2 And @n1>=@n3


Select @NotaMax= @n1

If @n2>=@n1 And @n2>=@n3


Select @NotaMax= @n2

If @n3>=@n1 And @n3>=@n2


Select @NotaMax= @n3

-- Ejecutando procedimiento para obtener promedio

-- Drop Proc sp_NotaMax

Declare @NotaMx int


execute sp_NotaMax 'Juan', @NotaMx Output
Select 'Su nota máxima es: ', @NotaMx

-----lo mismo pero en funcion


go
create function fn_NotaMax
(@Alumno varchar(30))
returns int
as
Begin

Declare @n1 int


Declare @n2 int
Declare @n3 int
Declare @Max int

Select @n1= (Select Nota1 From DatosProc Where Alumno=@Alumno)


Select @n2= (Select Nota2 From DatosProc Where Alumno=@Alumno)
Select @n3= (Select Nota3 From DatosProc Where Alumno=@Alumno)

If @n1>=@n2 And @n1>=@n3


set @Max= @n1

If @n2>=@n1 And @n2>=@n3


set @Max= @n2

If @n3>=@n1 And @n3>=@n2


set @Max= @n3

return @Max
end
go

select dbo. fn_NotaMax ('Juan')

--[7] Procedimiento para obtener cuántos alumnos existen

Create Procedure sp_CtosAlumnos

14
@Ctos int Output
As
Select @Ctos = (Select count(*) from DatosProc)

--Ejecutando procedimiento para obtener cuántos alumnos existe3n

-- Drop Proc sp_CtosAlumnos

Declare @CtoS int


execute sp_CtosAlumnos @Ctos Output
Select 'Hay', @Ctos, ' alumnos en el grupo'
go

-----para que salga todo junto

Declare @CtoS int


execute sp_CtosAlumnos @Ctos Output
Select 'Hay'+ convert(varchar(10), @Ctos) + ' alumnos en el grupo'
go

---otra forma
Declare @CtoS int
execute sp_CtosAlumnos @Ctos Output
Select 'Hay'+ cast(@Ctos as varchar(10)) + ' alumnos en el grupo'
go

---- CONTINUE

-------------------------------------------

-- Imprime los múltiplos de 7 de dos dígitos

Declare @i int
Set @i= 9
WHILE @i<100
BEGIN
Select @i= @i + 1

If (@i%7)!=0 CONTINUE ---- (!= )significa diferente, % es para el residuo en el ejemplo cuando
no sea multiplo de 7
---------- el continue ignora lo que sigue y vuelve a continuar
Print @i ---se imprime cuando sea multiplo de 7
END

--construcción dinámica de sentencias

Declare @dbName varchar(30), @tblName varchar(30)


Set @dbName = 'Datos'
Set @tblName = 'DatosProc'
EXECUTE ('Use ' + @dbName + ' Select * From ' + @tblName)

-------------------------------------------
go

Create Procedure sp_List


@tblName varchar(30)
As
BEGIN
EXECUTE ('Select * From ' + @tblName)
END

-- Datos de sp_List

sp_List 'DatosProc'

sp_List DatosProc ----como SQL lo reconoce como tabla por eso permite que este sin comillas

15
DROP DATABASE LIBRERIA
CREATE DATABASE LIBRERIA

Create Table Autores(

idAutor int Identity(1,1) Not NULL,


Nombre varchar(30) Not NULL,
Direccion varchar(30),
Telefono char(8) Not NULL,
)

Create Table Temas(

idTema int Identity(1,1) Not NULL,


DescripcionTema varchar(30) Not NULL,
)

Create Table Libros(

idLibro int Identity(1,1) Not NULL,


Titulo varchar(30) Not NULL,
idTema int Not NULL,
Editorial varchar(30) Not NULL,
PrecioCompra money Not NULL,
Paginas int Not NULL,
)

Create Table AutoresLibros(

idLibro int Not NULL,


idAutor int Not NULL,
)

ALTER TABLE Autores


ADD
CONSTRAINT PK_Autores PRIMARY KEY (idAutor)

ALTER TABLE Temas


ADD
CONSTRAINT PK_Temas PRIMARY KEY (idTema)

ALTER TABLE Libros


ADD
CONSTRAINT PK_Libros PRIMARY KEY (idLibro)

Alter Table AutoresLibros


Add
Constraint FK_ConAutores Foreign Key(idAutor) References Autores(idAutor),
Constraint FK_ConLibros Foreign Key(idLibro) References Libros(idLibro)

Alter Table Libros


Add
Constraint FK_ConTemas Foreign Key(idTema) References Temas(idTema)

INSERT INTO AUTORES (NOMBRE,DIRECCION,TELEFONO) VALUES ('Juan Rivera','Los Olivos','234-


3456')
INSERT INTO AUTORES (NOMBRE,DIRECCION,TELEFONO) VALUES ('José Fernández','Comas','345-
4567')
INSERT INTO AUTORES (NOMBRE,DIRECCION,TELEFONO) VALUES ('Carlos Rodríguez','Surco','123-
4567')
INSERT INTO AUTORES (NOMBRE,DIRECCION,TELEFONO) VALUES ('Pablo Hernández','Ate','234-6745')

INSERT INTO TEMAS (DESCRIPCIONTEMA) VALUES ('Comedia')


INSERT INTO TEMAS (DESCRIPCIONTEMA) VALUES ('Ciencia Ficción')

16
INSERT INTO TEMAS (DESCRIPCIONTEMA) VALUES ('Drama')
INSERT INTO TEMAS (DESCRIPCIONTEMA) VALUES ('Investigación')

INSERT INTO LIBROS (TITULO,IDTEMA,EDITORIAL,PRECIOCOMPRA,PAGINAS) VALUES ('Fábulas y


Leyendas',2,'Navarrete',70,80)
INSERT INTO LIBROS (TITULO,IDTEMA,EDITORIAL,PRECIOCOMPRA,PAGINAS) VALUES ('Clone
Wars',2,'Navarrete',90,100)
INSERT INTO LIBROS (TITULO,IDTEMA,EDITORIAL,PRECIOCOMPRA,PAGINAS) VALUES ('El Mundo
Feliz',1,'Navarrete',70,60)
INSERT INTO LIBROS (TITULO,IDTEMA,EDITORIAL,PRECIOCOMPRA,PAGINAS) VALUES
('Usted',4,'Navarrete',70,60)

DELETE FROM TEMAS


WHERE IDTEMA=1

DELETE FROM LIBROS


WHERE IDTEMA=1

DELETE FROM TEMAS


WHERE IDTEMA=1

DELETE FROM TEMAS


WHERE IDTEMA=3

INSERT INTO LIBROS (TITULO,IDTEMA,EDITORIAL,PRECIOCOMPRA,PAGINAS) VALUES ('Fábulas y


Leyendas',2,'Navarrete',70,80)
INSERT INTO LIBROS (TITULO,IDTEMA,EDITORIAL,PRECIOCOMPRA,PAGINAS) VALUES ('Clone
Wars',2,'Navarrete',90,100)
INSERT INTO LIBROS (TITULO,IDTEMA,EDITORIAL,PRECIOCOMPRA,PAGINAS) VALUES ('El Mundo
Feliz',1,'Navarrete',70,60)

SELECT * FROM AUTORES


SELECT * FROM LIBROS
SELECT * FROM AUTORESLIBROS

INSERT INTO AUTORESLIBROS VALUES (1,2)


INSERT INTO AUTORESLIBROS VALUES (2,2)
INSERT INTO AUTORESLIBROS VALUES (3,3)
INSERT INTO AUTORESLIBROS VALUES (4,1)

DELETE FROM AUTORES


WHERE IDAUTOR=1

DELETE FROM LIBROS


WHERE IDLIBRO=4

DELETE FROM AUTORES


WHERE IDAUTOR=1

DELETE FROM AUTORESLIBROS


WHERE IDLIBRO=3

DROP TABLE AUTORES


DROP TABLE LIBROS
DROP TABLE AUTORESLIBROS

DROP TABLE AUTORES


DROP TABLE LIBROS
DROP TABLE TEMAS
------- Select con tres tablas relacionadas

CREATE DATABASE ESTUDIANTES

Create Table Personas(


id_Persona int Identity(1,1),

17
Nombre varchar(30)
)

Create Table Cursos(


id_Curso int Identity(1,1),
Descripcion varchar(30)
)

Create Table PersonaCurso(


id_Persona int Not NULL,
id_Curso int Not NULL
)

----------------------------------------Relacionando
Alter Table Personas
Add
Constraint PK_Persona Primary Key(id_Persona)

Alter Table Cursos


Add
Constraint PK_Curso Primary Key(id_Curso)

Alter Table PersonaCurso


Add
Constraint FK_ConPersona Foreign Key(id_Persona) References Personas(id_Persona),
Constraint FK_ConCurso Foreign Key(id_Curso) References Cursos(id_Curso)

-- Insertando registros en la tabla Personas


Insert Personas Values('Adriana Vallejo')
Insert Personas Values('Ana Gómez')
Insert Personas Values('Daniel Pérez')

-- Insertando registros en la tabla Cursos


Insert Cursos Values('WIN FORMS')
Insert Cursos Values('ADO .NET')
Insert Cursos Values('SQL Server')

-- Insertando registros en la tabla PersonaCurso

Declare @idP int


Declare @idC int
Select @idP= (Select id_Persona From Personas Where Nombre like 'Adriana Vallejo')
Select @idC= (Select id_Curso From Cursos Where Descripcion like 'WIN FORMS')
Insert PersonaCurso Values(@idP, @idC)

Select @idP= (Select id_Persona From Personas Where Nombre like 'Adriana Vallejo')
Select @idC= (Select id_Curso From Cursos Where Descripcion like 'ADO .NET')
Insert PersonaCurso Values(@idP, @idC)

Select @idP= (Select id_Persona From Personas Where Nombre like 'Ana Gómez')
Select @idC= (Select id_Curso From Cursos Where Descripcion like 'WIN FORMS')
Insert PersonaCurso Values(@idP, @idC)

-- Verificar

Select * From Personas


Select * From Cursos
Select * From PersonaCurso

--[01] Mostrar Nombres de alumnos que llevan Cursos

18
Select Nombre
From Personas
Where id_persona
IN (Select id_Persona from PersonaCurso)

Select distinct A.Nombre


From Personas A INNER JOIN PersonaCurso B
on A.id_Persona =B.id_Persona

--[02] Mostrar la cantidad de personas que llevan


-- cursos

Select Count(*) as [Personas estudiando]


From Personas
where id_Persona in (Select distinct id_Persona From PersonaCurso)

--[03] Mostrar Nombres de alumnos que no llevan Cursos usando subconsultas

Select Nombre
From Personas
Where id_persona
NOT IN (Select id_Persona from PersonaCurso)

--[04] Mostrar Nombres de alumnos que no llevan Cursos usando subconsultas

Select * From Personas


Select * From Cursos
Select * From PersonaCurso

Select * from Personas A left join Personacurso B


on (A.id_Persona=B.id_Persona)

Select * from Personas A left join Personacurso B


on (A.id_Persona=B.id_Persona)
where B.id_Persona is null

--Introducción al Group by
--[05] Mostrar Nombres de alumnos y la descripción del curso que lleva

Select Nombre, Count(id_Curso) as [Cantidad de Cursos]


From Personas LEFT JOIN PersonaCurso
On Personas.id_Persona=PersonaCurso.id_Persona
Group By Nombre

Select Nombre, Count(id_Curso) as [Cantidad de Cursos]


From Personas INNER JOIN PersonaCurso
On Personas.id_Persona=PersonaCurso.id_Persona
Group By Nombre
ALTER TABLE ESTUDIANTES
DROP COLUMN MAXIMO,PROMEDIO

SELECT * FROM ESTUDIANTES

--SELECT * FROM #TEMPORAL

select * from ESTUDIANTES

insert into estudiantes (nombre,promedio) values ('Pedro',16)

select * from VW_PROM_ESTUDIANTES

create view VW_PROM_ESTUDIANTES

19
as
select nombre,promedio from estudiantes

SELECT
A.NOMBRE,
A.NOTA1,
A.NOTA2,
A.NOTA3,
A.NOTA4,
B.MAXIMO
FROM
ESTUDIANTES A INNER JOIN #TEMPORAL B
ON (A.NOMBRE=B.NOMBRE)

SELECT
A.NOMBRE,
A.NOTA1,
A.NOTA2,
A.NOTA3,
A.NOTA4,
B.MAXIMO
FROM
#TEMPORAL B LEFT JOIN ESTUDIANTES A
ON (A.NOMBRE=B.NOMBRE)

20
CREATE DATABASE CLIENTES

create table CLIENTES


(
NUM_CLIE INTEGER not null,
EMPRESA VARCHAR (50)not null,
REP_CLIE INTEGER not null,
LIMITE_CREDITO money not null);

create table REPVENTAS


(
NUM_EMPL integer not null,
NOMBRE varchar (30) not null,
Edad integer not null,
OFICINA_REP integer,
TITULO varchar (30) not null,
CONTRATO datetime not null,
DIRECTOR integer,
CUOTA money,
VENTAS money not null);

create table OFICINAS


( OFICINA integer not null,
CIUDAD varchar(30) not null,
REGION varchar (30) not null,
DIR integer not null,
OBJETIVO money not null,
VENTAS money not null);

create table PEDIDOS


(
NUM_PEDIDO integer not null,
FECHA_PEDIDO datetime not null,
CLIE integer not null,
REP integer not null,
FAB CHAR (3) not null,
PRODUCTO varchar (5) not null,
CANT integer not null,
IMPORTE money not null);

create table PRODUCTOS


(
ID_FAB char(3) not null,
ID_PRODUCTO varchar (5) not null,
DESCRIPCION varchar (30) not null,
PRECIO money not null,
EXISTENCIAS integer not null);

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2111,'JCP Inc.',103, 50000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2102,'Firts Corp.',101, 65000)

21
insert into CLIENTES
(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2103,'Acme Mfg.',105, 50000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2123,'Carter & Sons',102, 40000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2107,'Ace International',110, 35000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2115,'Smithson Corp',101, 20000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2101,'Jones Mfg.',106, 65000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2112,'Zetacorp',108, 50000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2121,'QMA Assoc.',103, 45000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2114,'Orion Corp',102, 20000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2124,'Peter Brothers',107, 40000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2108,'Holm & Landis',109, 55000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)

22
values
(2117,'J.P. Sinclair',106, 35000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2122,'Three-Way Lines',105, 30000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2120,'Rico Enterprises',102, 50000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2106,'Fred Lewis Corp.',102, 65000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2119,'Solomon Inc.',109, 25000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2118,'Midwest Systems',108, 60000)
insert into CLIENTES
(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2113,'Ian & Schmidt',104, 20000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2109,'Chen Associates',103, 25000)

insert into CLIENTES


(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2105,'AAA Investments',101, 45000)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(105,'Bill Adams',37,13,'Rep Ventas','1988-02-12',104,350000,367911)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(109,'Mary Jones',31,11,'Rep Ventas','1999-10-12',106,300000,392725)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(102,'Sue Smith',48,21,'Rep Ventas','1986-12-10',108,350000,474050)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(106,'Sam Clark',52,11,'VP Ventas','1988-06-14',NULL,275000,299912)

23
insert into REPVENTAS
(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(104,'Bob Smith',33,12,'Dir Ventas','1987-05-19',106,200000,142594)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(101,'Dan Roberts',45,12,'Rep Ventas','1986-10-20',104,300000,305673)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(110,'Tom Snyder',41,NULL,'Rep Ventas','1990-01-13',101,NULL,75985)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(108,'Larry Fitch',62,21,'Dir Ventas','1989-10-12',106,350000,361865)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(103,'Paul Cruz',29,12,'Rep Ventas','1987-03-01',104,275000,286775)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(107,'Nancy Angelli',49,22,'Rep Ventas','1988-11-14',108,300000,186042)

insert into oficinas


(OFICINA, CIUDAD, REGION, DIR, OBJETIVO, VENTAS)
values
(22,'Denver','Oeste',108,300000,186042)

insert into oficinas


(OFICINA, CIUDAD, REGION, DIR, OBJETIVO, VENTAS)
values
(11,'New York','Este',106,575000,692637)

insert into oficinas


(OFICINA, CIUDAD, REGION, DIR, OBJETIVO, VENTAS)
values
(12,'Chicago','Este',104,800000,735042)

insert into oficinas


(OFICINA, CIUDAD, REGION, DIR, OBJETIVO, VENTAS)
values
(13,'Atlanta','Este',105,350000,367911)

insert into oficinas


(OFICINA, CIUDAD, REGION, DIR, OBJETIVO, VENTAS)
values
(21,'Los Angeles','Oeste',108,725000,835915)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112961,'1989-12-17',2117,106,'REI','2A44L',7,31500)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)

24
values
(113012,'1990-01-11',2111,105,'ACI','41003',35,3745)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112989,'1990-01-03',2101,106,'FEA','114',6,1458)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113051,'1990-02-10',2118,108,'QSA','K47',4,1420)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112968,'1989-10-12',2102,101,'ACI','41004',34,3978)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(110036,'1990-01-30',2107,110,'ACI','4100Z',9,22500)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113045,'1990-02-02',2112,108,'REI','2A44R',10,45000)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112963,'1989-12-17',2103,105,'ACI','41004',28,3276)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113013,'1990-01-14',2118,108,'BIC','41003',1,652)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113058,'1990-02-23',2108,109,'FEA','112',10,1480)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112997,'1990-01-08',2124,107,'BIC','41003',1,652)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112983,'1989-12-27',2103,105,'ACI','41004',6,702)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113024,'1990-01-20',2114,108,'QSA','XX47',20,7100)

insert into PEDIDOS

25
(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113062,'1990-02-24',2124,107,'FEA','114',10,2430)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112979,'1989-10-12',2114,102,'ACI','4100Z',6,15000)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113027,'1990-01-22',2103,105,'ACI','4100Z',54,4104)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113007,'1990-01-08',2112,108,'IMM','773C',3,2925)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113069,'1990-03-02',2109,107,'IMM','775C',22,31350)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113034,'1990-01-29',2107,110,'REI','2A45C',8,632)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112992,'1989-11-04',2118,108,'ACI','41002',10,760)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112975,'1989-10-12',2111,103,'REI','2A44G',6,2100)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113055,'1990-02-15',2108,101,'ACI','4100X',6,150)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113048,'1990-02-10',2120,102,'IMM','779C',2,3750)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112993,'1989-01-04',2106,102,'REI','2A45C',24,1896)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113065,'1990-02-27',2106,102,'QSA','XK47',6,2130)

26
insert into PEDIDOS
(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113003,'1990-01-25',2108,109,'IMM','779C',3,5625)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113049,'1990-02-10',2118,108,'QSA','XK47',2,776)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112987,'1989-12-31',2103,105,'ACI','4100Y',11,27500)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113057,'1990-02-18',2111,103,'ACI','4100X',24,600)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(113042,'1990-02-02',2113,101,'REI','2A44R',5,22500)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('REI','2A45C','V Stago Trinquete',79,210)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('ACI','4100Y','Extractor',2750,25)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('QSA','XK47','Reductor',355,38)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('BIC','41672','Plate',180,0)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('IMM','779C','Riostra2-Tm',1875,9)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('ACI','41003','Articulo Tipo 3',107,207)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('ACI','41004','Articulo Tipo 4',117,139)

insert into PRODUCTOS

27
(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('BIC','41003','Manivela',652,3)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('IMM','877P','Perno Riostra',250,24)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('QSA','XK48','Reductor',134,203)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('REI','2A44L','Bisagra Izqda',4500,12)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('FEA','112','Cubierta',148,115)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('IMM','887H','Soporte Riostra',54,223)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('BIC','41089','Retn',225,78)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('ACI','41001','Articulo Tipo 1',55,277)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('IMM','775C','Riostra 1-Tm',1425,5)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('ACI','4100Z','Montador',2500,28)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('QSA','XK48A','Reductor',117,37)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('ACI','41002','Articulo Tipo 2',76,167)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values

28
('REI','2A44R','Bisagra Dcha.',4500,12)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('IMM','773C','Riostra 1/2-Tm',975,28)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('ACI','4100X','Ajustador',25,37)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('FEA','114','Bancada Motor',243,15)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('IMM','887X','Retenedor Riostra',475,32)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('REI','2A44G','Pasador Bisagra',350,14)

create table empleados


(nombre char(20),departamento varchar(25),codigo int)

insert into empleados values ('Bob Smith','Ventas',1834)


insert into empleados values ('Fred Sanders','Ventas',1051)
insert into empleados values ('Stan Humphries','Servicio Tecnico',3211)
insert into empleados values ('Fred Stanhope','Servicio Tecnico',6732)
insert into empleados values ('Sue Sommers','Logistica',4411)
insert into empleados values ('Lance Finepoint','Biblioteca',5522)
insert into empleados values ('Mark Mc Guire','Servicio Tecnico',1997)
insert into empleados values ('Sally Springer','Ventas',9998)
insert into empleados values ('Ludmila Valencia','Software',7773)
insert into empleados values ('Barbara Lint','Servicio Tecnico',8883)
insert into empleados values ('Jeffrey Vickers','Correo',8805)
insert into empleados values ('Jim Walker','Director Unidad',7779)

create table pagos


(horas_trabajadas int,costos int,ccodigo int)

insert into pagos values (40,10,3211)


insert into pagos values (40,9,6732)
insert into pagos values (52,10,4411)
insert into pagos values (39,11,5522)
insert into pagos values (51,10,1997)
insert into pagos values (40,8,9998)
insert into pagos values (55,10,7773)
insert into pagos values (49,9,8883)
insert into pagos values (60,7,8805)
insert into pagos values (37,11,7779)

Select * from Productos


Select * from Pedidos

/* union */

29
select id_fab,id_producto from productos where precio > 2000

select distinct fab,producto from pedidos where importe > 30000

select id_fab,id_producto from productos where precio > 2000


union
select distinct fab,producto from pedidos where importe > 30000

select id_fab,id_producto from productos where precio > 2000


union all
select distinct fab,producto from pedidos where importe > 30000

select * from repventas


select * from oficinas

select oficina_rep from repventas union


select oficina from oficinas

select oficina_rep from repventas


union all select oficina from oficinas order by 1

/* composicion (join) */

select * from oficinas


select * from repventas
drop table empleados
select * from empleados
select * from pagos

select nombre,departamento,horas_trabajadas from empleados,pagos


where codigo = ccodigo

select * from empleados,pagos where codigo = ccodigo /* relacion uno a uno */

select * from oficinas


select * from repventas

select nombre,ciudad,region from repventas, oficinas


where oficina_rep = oficina

select ciudad,nombre,titulo,objetivo from oficinas,repventas


where dir = num_empl

/* criterio de seleccion de fila */


select ciudad,nombre,titulo,objetivo from oficinas,repventas
where dir = num_empl and objetivo > 600000 /* uno a muchos */

select * from oficinas


select * from repventas /* columna calificada */

/* columna calificada: nombretabla.columnaambigua */


/* todas las columnas de una tabla: nombretabla.* */

select nombre,ventas,ciudad from repventas,oficinas


where oficina_rep = oficina

select nombre,repventas.ventas,ciudad from repventas,oficinas


where oficina_rep = oficina

select * from repventas,oficinas where oficina_rep = oficina

30
select repventas.*,ciudad,region from repventas,oficinas
where oficina_rep = oficina

/* columna calificada = nombre_tabla.nombre_columna_ambigua */

select nombre,r.ventas,ciudad from repventas r,oficinas


where oficina_rep = oficina /* uso del alias */

/* alias : nombre_tabla alias */

/* producto cartesiano */

select nombre,r.ventas,ciudad from repventas r,oficinas

select nombre,r.ventas,ciudad from repventas r,oficinas where 1 = 1

select nombre,r.ventas,ciudad from repventas r,oficinas


where 'c' = 'c'
create table CLIENTES
(
NUM_CLIE INTEGER not null,
EMPRESA VARCHAR (50)not null,
REP_CLIE INTEGER not null,
LIMITE_CREDITO money not null);

create table REPVENTAS


(
NUM_EMPL integer not null,
NOMBRE varchar (30) not null,
Edad integer not null,
OFICINA_REP integer,
TITULO varchar (30) not null,
CONTRATO datetime not null,
DIRECTOR integer,
CUOTA money,
VENTAS money not null);

create table OFICINAS


( OFICINA integer not null,
CIUDAD varchar(30) not null,
REGION varchar (30) not null,
DIR integer not null,
OBJETIVO money not null,
VENTAS money not null);

create table PEDIDOS


(
NUM_PEDIDO integer not null,
FECHA_PEDIDO datetime not null,
CLIE integer not null,
REP integer not null,
FAB CHAR (3) not null,
PRODUCTO varchar (5) not null,
CANT integer not null,
IMPORTE money not null);

create table PRODUCTOS


(
ID_FAB char(3) not null,

31
ID_PRODUCTO varchar (5) not null,
DESCRIPCION varchar (30) not null,
PRECIO money not null,
EXISTENCIAS integer not null);

insert into oficinas


(OFICINA, CIUDAD, REGION, DIR, OBJETIVO, VENTAS)
values
(22,'Denver','Oeste',108,300000,186042)

insert into REPVENTAS


(NUM_EMPL, NOMBRE, Edad, OFICINA_REP, TITULO, CONTRATO, DIRECTOR, CUOTA, VENTAS)
values
(105,'Bill Adams',37,13,'Rep Ventas','1988-02-12',104,350000,367911)
insert into CLIENTES
(NUM_CLIE, EMPRESA, REP_CLIE, LIMITE_CREDITO)
values
(2111,'JCP Inc.',103, 50000)

insert into PRODUCTOS


(ID_FAB, ID_PRODUCTO, DESCRIPCION, PRECIO, EXISTENCIAS)
values
('REI','2A45C','V Stago Trinquete',79,210)

insert into PEDIDOS


(NUM_PEDIDO, FECHA_PEDIDO, CLIE, REP, FAB, PRODUCTO, CANT, IMPORTE)
values
(112961,'1989-12-17',2117,106,'REI','2A44L',7,31500)

/* Consultas Sumarias o funciones agregadas */

select * from repventas


select avg(cuota),avg(ventas)from repventas

select avg(cuota)cuota_prom,avg(ventas)ventas_prom from repventas

select sum(ventas) as sum_ventas from repventas


select sum(ventas) sum_ventas from repventas

select sum(ventas) from repventas

select * from repventas


select avg(100*(ventas/cuota)) rendimiento_vend from repventas

/* avg: average */

select * from repventas


select sum(cuota) sum_cuota,min(cuota) min_cuota,
max(cuota) max_cuota,avg(cuota) prom_cuota,
count(cuota) valores_cuota from repventas
select * from repventas
select count(*) nro_filas_cuota,
count(cuota) valores_cuota from repventas

select titulo from repventas


select distinct titulo from repventas
select count(titulo)cant_titulos,count(distinct titulo) from repventas

select count(distinct especialidad) from alumnosfiis


/* respuesta: 2 */

32
select * from repventas
select oficina_rep from repventas where ventas > cuota
select distinct oficina_rep from repventas where ventas > cuota
select count(distinct oficina_rep) from repventas
where ventas > cuota

/* clausula GROUP BY */

select * from pedidos


select avg(importe) from pedidos

select rep,importe from pedidos order by rep

/* cuanto han vendido cada vendedor */


select * from pedidos

select REP, importe from PEDIDOS

select REP, importe from PEDIDOS order by rep

select rep,sum(importe) sum_importe


from pedidos group by rep

select rep, count(*) nro_colocaciones ,sum(importe) sum_importe


from pedidos group by rep

select rep,avg(importe) venta_promedio from pedidos group by rep

select rep,count(*) cant ,sum(importe) sum_importe,


avg(importe) venta_promedio from pedidos group by rep

/* agrupacion por mas de una columna, columna mandatoria */

select * from pedidos


select rep,clie,importe from pedidos order by rep,clie

select rep,clie,count(*) nro,sum(importe) sum_importe


from pedidos group by rep,clie order by 1

/* Clausula HAVING */

select rep,count(*) cant,sum(importe) sum_importe from pedidos group by rep

select rep,count(*) cant,sum(importe) sum_importe from pedidos group by rep


where sum(importe) > 30000

select rep,count(*) cant,sum(importe) sum_importe from pedidos group by rep


having sum(importe) > 30000

select rep,count(*) nro, avg(importe) prom_importe,


sum(importe) sum_importe
from pedidos group by rep
having sum(importe) > 30000
select SUM(cuota) from repventas
select count(*) nro, sum(cuota) sum_cuota,
sum(repventas.ventas) sum_ventas
from oficinas,repventas
where oficina = oficina_rep

33
select ciudad,count(*) nro, sum(cuota) sum_cuota,
sum(repventas.ventas) sum_ventas
from oficinas,repventas
where oficina = oficina_rep
group by ciudad
having count(*) >= 2

select * from oficinas


select * from repventas

select distinct oficina_rep from repventas having ventas > cuota

select rep,count(*) cant,sum(importe) sum_importe from pedidos group by rep


having sum(importe) >= 30000

select rep,count(*) cant,sum(importe) sum_importe from pedidos


having sum(importe) >= 30000
/* Subconsultas */

select * from oficinas


select * from repventas

select oficina,ciudad from oficinas


where objetivo > (select sum(cuota) from repventas
where oficina_rep = oficina)

34
CREATE DATABASE ESTUDIANTES

Create Table Personas(


id_Persona int Identity(1,1),
Nombre varchar(30)
)

Create Table Cursos(


id_Curso int Identity(1,1),
Descripcion varchar(30)
)

Create Table TipoDeNota(


id_TipoDeNota int Identity(1,1),
Descripcion varchar(30)
)

Create Table Notas(


id_TipoDeNota int Not NULL,
id_Persona int Not NULL,
id_Curso int Not NULL,
Nota int,
Fecha DateTime
)

----------------------------------Relacionando

Alter Table Personas


Add
Constraint PK_Persona Primary Key(id_Persona)

Alter Table Cursos


Add
Constraint PK_Curso Primary Key(id_Curso)

Alter Table TipoDeNota


Add
Constraint PK_TipoDeNota Primary Key(id_TipoDeNota)

Alter Table Notas


Add
Constraint FK_ConTipoDeNota Foreign Key(id_TipoDeNota) References
TipoDeNota(id_TipoDeNota),
Constraint FK_ConPersona Foreign Key(id_Persona) References Personas(id_Persona),
Constraint FK_ConCurso Foreign Key(id_Curso) References Cursos(id_Curso)

-- Insertando registros en la tabla Personas


Insert Personas Values('Juan Pérez')
Insert Personas Values('Ana Gutiérrez')

-- Insertando registros en la tabla Cursos


Insert Cursos Values('Visual Basic Fundamentals')
Insert Cursos Values('Visual Basic Programming')

-- Insertando registros en la tabla TipoDeNota


Insert TipoDeNota Values('Práctica 1')
Insert TipoDeNota Values('Práctica 2')
Insert TipoDeNota Values('Laboratorio 1')
Insert TipoDeNota Values('Laboratorio 2')
Insert TipoDeNota Values('Examen Parcial')
Insert TipoDeNota Values('Examen Final')

35
-- Insertando registros en la tabla Notas

Declare @idP int


Declare @idC int
Declare @idTN int
Select @idP= (Select id_Persona From Personas Where Nombre like 'Juan Pérez')
Select @idC= (Select id_Curso From Cursos Where Descripcion like 'Visual Basic
Fundamentals')
Select @idTN= (Select id_TipoDeNota From TipoDeNota Where Descripcion like
'Práctica 1')
Insert Notas Values(@idTN, @idP, @idC, 12, GetDate())

Declare @idP int


Declare @idC int
Declare @idTN int
Select @idP= (Select id_Persona From Personas Where Nombre like 'Ana Gutiérrez')
Select @idC= (Select id_Curso From Cursos Where Descripcion like 'Visual Basic
Fundamentals')
Select @idTN= (Select id_TipoDeNota From TipoDeNota Where Descripcion like
'Práctica 1')
Insert Notas Values(@idTN, @idP, @idC, 14, GetDate())

Declare @idP int


Declare @idC int
Declare @idTN int
Select @idP= (Select id_Persona From Personas Where Nombre like 'Juan Pérez')
Select @idC= (Select id_Curso From Cursos Where Descripcion like 'Visual Basic
Fundamentals')
Select @idTN= (Select id_TipoDeNota From TipoDeNota Where Descripcion like
'Práctica 2')
Insert Notas Values(@idTN, @idP, @idC, 13, GetDate())

Declare @idP int


Declare @idC int
Declare @idTN int
Select @idP= (Select id_Persona From Personas Where Nombre like 'Juan Pérez')
Select @idC= (Select id_Curso From Cursos Where Descripcion like 'Visual Basic
Fundamentals')
Select @idTN= (Select id_TipoDeNota From TipoDeNota Where Descripcion like
'Laboratorio 1')
Insert Notas Values(@idTN, @idP, @idC, 11, GetDate())

Declare @idP int


Declare @idC int
Declare @idTN int
Select @idP= (Select id_Persona From Personas Where Nombre like 'Juan Pérez')
Select @idC= (Select id_Curso From Cursos Where Descripcion like 'Visual Basic
Programming')
Select @idTN= (Select id_TipoDeNota From TipoDeNota Where Descripcion like
'Laboratorio 1')
Insert Notas Values(@idTN, @idP, @idC, 11, GetDate())

Declare @idP int


Declare @idC int
Declare @idTN int
Select @idP= (Select id_Persona From Personas Where Nombre like 'Juan Pérez')
Select @idC= (Select id_Curso From Cursos Where Descripcion like 'Visual Basic
Fundamentals')
Select @idTN= (Select id_TipoDeNota From TipoDeNota Where Descripcion like
'Laboratorio 2')
Insert Notas Values(@idTN, @idP, @idC, 11, GetDate())

36
-- Verificar

Select * From Personas


Select * From Cursos
Select * From TipoDeNota
Select * From Notas

-- [01] Mostrar Nombre de alumno, Descripción del curso, Descripción de tipo de nota,
Nota y Fecha de la nota

SELECT Nombre, Cursos.Descripcion As Curso, TipoDeNota.Descripcion AS [Tipo de Nota],


Nota, Notas.Fecha
FROM Cursos INNER JOIN
Notas ON Cursos.id_Curso = Notas.id_Curso
INNER JOIN Personas ON
Notas.id_Persona = Personas.id_Persona
INNER JOIN TipoDeNota ON
Notas.id_TipoDeNota = TipoDeNota.id_TipoDeNota

-- Otro modo

Select A.Nombre, B.Descripcion, D.Descripcion, C.Nota, C.Fecha


From Personas As A, Cursos As B, Notas As C, TipoDeNota As D
Where A.id_Persona=C.id_Persona And
B.id_Curso=C.id_Curso And
D.id_TipoDeNota=C.id_TipoDeNota

-- [02] Mostrar Nombre de alumno, Descripción del curso, Descripción de tipo de nota,
-- Nota y Fecha de la nota.
-- Ordenado por Nombre del alumno, Descripción del curso y
-- Descripción del tipo de nota

SELECT Nombre, Cursos.Descripcion As Curso, TipoDeNota.Descripcion AS [Tipo de Nota],


Nota, Notas.Fecha
FROM Cursos INNER JOIN
Notas ON Cursos.id_Curso = Notas.id_Curso INNER JOIN
Personas ON
Notas.id_Persona = Personas.id_Persona INNER JOIN
TipoDeNota ON
Notas.id_TipoDeNota = TipoDeNota.id_TipoDeNota
Order By Nombre, Cursos.Descripcion, TipoDeNota.Descripcion

-- [03] Mostrar Nombre de alumno, Descripción del curso, Descripción de tipo de nota,
Nota
-- y Fecha de la nota solo de alumno Juan Pérez.
-- Ordenado Descripci¢n del curso y descripción del tipo de nota

Select A.Nombre, B.Descripcion, D.Descripcion, C.Nota, C.Fecha


From Personas As A, Cursos As B, Notas As C, TipoDeNota As D
Where A.id_Persona=C.id_Persona And
B.id_Curso=C.id_Curso And
D.id_TipoDeNota=C.id_TipoDeNota And
A.Nombre='Juan Pérez'
Order By B.Descripcion, D.Descripcion

SELECT Getdate()

-- [04] Mostrar Nombre de alumno, descripción del curso, descripción de tipo de nota,
-- Nota y Fecha de la nota,
-- solo de los alumnos en el curso de Visual Basic Fundamentals.
-- Ordenado Nombre del alumno y descripción del tipo de nota

37
Select A.Nombre, B.Descripcion, D.Descripcion, C.Nota, C.Fecha
From Personas As A, Cursos As B, Notas As C, TipoDeNota As D
Where A.id_Persona=C.id_Persona And
B.id_Curso=C.id_Curso And
D.id_TipoDeNota=C.id_TipoDeNota And
B.Descripcion='Visual Basic Fundamentals'
Order By A.Nombre, D.Descripcion

-- [05] Mostrar Nombre de alumno y la nota de la práctica 1


-- en el curso de Visual Basic Fundamentals

Select A.Nombre, C.Nota


From Personas As A, Cursos As B, Notas As C, TipoDeNota As D
Where A.id_Persona=C.id_Persona And
B.id_Curso=C.id_Curso And
D.id_TipoDeNota=C.id_TipoDeNota And
B.Descripcion='Visual Basic Fundamentals' And
D.Descripcion='Práctica 1'
Order By A.Nombre

----------------------------------------------

-- Crear tablas Temporales con Select

Select A.Nombre, C.Nota


INTO #TablaTemporal
From Personas As A, Cursos As B, Notas As C, TipoDeNota As D
Where A.id_Persona=C.id_Persona And
B.id_Curso=C.id_Curso And
D.id_TipoDeNota=C.id_TipoDeNota And
B.Descripcion='Visual Basic Fundamentals' And
D.Descripcion='Práctica 1'
Order By A.Nombre

--Contenido de #TablaTemporal

Select * From #TablaTemporal

38