Vous êtes sur la page 1sur 14

use MyDB

-- 8 de marzo 2012
-- informacin de la base de datos
sp_helpdb mydb
/* informacin
sobre filegroups*/
sp_helpfilegroup secundario
-- informacin sobre dispositivos lgigos
sp_helpfile mydb
USE master;
GO
CREATE DATABASE BookMaster
ON PRIMARY
( NAME = BM1,
FILENAME = 'D:\data\bm1.mdf',
SIZE = 3,
MAXSIZE = 10,
FILEGROWTH = 1 ),
FILEGROUP Secundario
( NAME = BM2,
FILENAME = 'D:\data\bm2.ndf',
SIZE = 3,
MAXSIZE = 10,
FILEGROWTH = 1 ),
( NAME = BM3,
FILENAME = 'D:\data\bm3.ndf',
SIZE = 3,
MAXSIZE = 10,
FILEGROWTH = 1 )
LOG ON
( NAME = BMlog1,
FILENAME = 'D:\log\Bmlog1.ldf',
SIZE = 1,
MAXSIZE = 3,
FILEGROWTH = 10% ),
( NAME = BMlog2,
FILENAME = 'D:\log\Bmlog2.ldf',
SIZE = 2,
MAXSIZE = 7,
FILEGROWTH = 10% ) ;
GO

---14 marzo 2012


Create table [Autor]
(
[codaut] Char(3) NOT NULL,
[nomaut] Varchar(30) NOT NULL,
[apeaut] Varchar(30) NULL,
Constraint [pk_Autor] Primary Key ([codaut])
)
on [primary]
DROP TABLE Autor
go
Create table [Libro]
(
[codlib] Char(3) NOT NULL,
[titulo] Varchar(30) NOT NULL,
[ISBN] Varchar(10) NOT NULL, UNIQUE ([ISBN]),
[fecpub] Datetime NULL,
[editorial] Varchar(30) NOT NULL,
[numpag] smallint NULL,
Constraint [pk_Libro] Primary Key ([codlib])
)
on [primary]
go
Create table [Ejemplar]
(
[numeje] Tinyint NOT NULL,
[codlib] Char(3) NOT NULL,
[costoejem] Numeric(9,2) NULL,
[disponible] Char(1) notNULL Constraint [CK_disponible] Check
(disponible in ('S','N')),
[CodLoc] Char(3) NOT NULL,
Constraint [pk_Ejemplar] Primary Key ([numeje],[codlib])
)
on secundario
go
Create table [Usuarios]
(
[codusu] Char(3) NOT NULL,
[nomusu] Varchar(30) NULL,
[apeusu] Varchar(30) NULL,
[fecreg] Datetime NULL,
[dirusu] Varchar(30) NULL,
[TotalMulta] Numeric(8,2) NULL,
[garante] Char(3) NOT NULL,
Constraint [pk_Usuarios] Primary Key ([codusu])
)
on secundario
go
Create table [telusu]
(

[codusu] Char(3) NOT NULL,


[numtel] Varchar(9) NOT NULL,
Constraint [pk_telusu] Primary Key ([codusu],[numtel])
)
on secundario
go
Create table [escribe]
(
[codaut] Char(3) NOT NULL,
[codlib] Char(3) NOT NULL,
[fecesc] Datetime NULL,
Constraint [pk_escribe] Primary Key ([codaut],[codlib])
)
on secundario
go
Create table [prestamo]
(
[codusu] Char(3) NOT NULL,
[numeje] Tinyint NOT NULL,
[codlib] Char(3) NOT NULL,
[fecpre] Datetime NOT NULL,
[fecdev] Datetime NULL,
Constraint [pk_prestamo] Primary Key ([codusu],[numeje],[codlib],
[fecpre])
)
on secundario
go
Create table [Localidad]
(
[CodLoc] Char(3) NOT NULL,
[Estanteria] Char(30) NULL,
[Sala] Smallint NULL,
[Piso] Smallint NULL,
Constraint [pk_Localidad] Primary Key ([CodLoc])
)
on secundario
go
Alter table [escribe] add Constraint [autor-escribe] foreign
key([codaut]) references [Autor] ([codaut]) on update cascade on
no action
go
Alter table [escribe] add Constraint [escribe-libro] foreign
key([codlib]) references [Libro] ([codlib]) on update cascade on
no action
go
Alter table [Ejemplar] add Constraint [libro-ejemplar] foreign
key([codlib]) references [Libro] ([codlib]) on update cascade on
no action
go
Alter table [prestamo] add Constraint [prestamo-ejemplar] foreign
key([numeje],[codlib]) references [Ejemplar] ([numeje],[codlib])
update cascade on delete no action

delete

delete

delete

on

go
Alter table [prestamo] add Constraint [usuario-prestamo] foreign
key([codusu]) references [Usuarios] ([codusu]) on update cascade on
delete no action
go
Alter table [telusu] add Constraint [usuario-tel.usuario] foreign
key([codusu]) references [Usuarios] ([codusu]) on update cascade on
delete cascade
go
Alter table [Usuarios] add Constraint [Garante] foreign key([garante])
references [Usuarios] ([codusu]) on update no action on delete no action
go
Alter table [Ejemplar] add Constraint [ubicado_en] foreign key([CodLoc])
references [Localidad] ([CodLoc]) on update no action on delete cascade
go
29 marzo 2012-04-19
use bookmaster
select * from Autor
select * from escribe
select * from Libro
set dateformat dmy
insert
insert
insert
insert

into
into
into
into

escribe
escribe
escribe
escribe

values
values
values
values

('A01',
('A01',
('A02',
('A05',

'L01','01-01-1986')
'L02','20-07-1986')
'L03','01-03-1987')
'L05','01-01-1990')

select titulo
from Autor, escribe, Libro
where autor.codaut = escribe.codaut and escribe.codlib =
libro.codlib and nomaut='julio' and apeaut='verne'
-- 28 marzo 2012
-- batchs vs scripts
use BookMaster
go
-- consultas bsicas
select *
from Autor
-- recuperar columnas (proyeccin)
select nomaut, apeaut
from Autor
select apeaut, nomaut
from Autor
-- usando literales
select 'nombre del autor', nomaut
from Autor
-- estableciendo cabezeras

--a)
select 'nombre del autor' as 'literal' ,
nomaut as 'nombre'
from Autor
--b)
select literal='nombre del autor', nombre=nomaut
from Autor
-- manejo de datos numricos
select * from Libro
select * from Ejemplar
select * from Localidad
insert into Ejemplar values (1,'L01',25,'S','C01')
insert into Ejemplar values (2,'L01',30,'S','C01')
insert into Ejemplar values (3,'L01',30,'S','C01')
insert
insert
insert
insert

into
into
into
into

Ejemplar
Ejemplar
Ejemplar
Ejemplar

values
values
values
values

(1,'L02',10,'S','C02')
(2,'L02',10,'S','C02')
(3,'L02',15.25,'S','C02')
(4,'L02',15.75,'S','C02')

insert into Ejemplar values (1,'L03',50.45,'S','C03')


insert into Ejemplar values (2,'L03',50.55,'S','C03')
insert into Ejemplar values (3,'L03',50.55,'S','C03')
select
insert
insert
insert
insert
insert
insert

* from Localidad
into Localidad values
into Localidad values
into Localidad values
into Localidad values
into Localidad values
into Localidad values

('C01','Estanteria1',1,1)
('C02','Estanteria2',2,1)
('C03','Estanteria1',1,2)
('C04','Estanteria2',2,2)
('C05','Estanteria1',1,3)
('C06','Estanteria1',2,3)

delete
from Localidad
where Sala=2 and Piso=1
select * from Ejemplar
-- operadores aritmticos
-- listar el codigo del libro, el costo del ejemplar
-- y el costo incluido iva.
select codlib as'codigo libro', costoejem as 'costo',
(costoejem*1.12) as 'costo mas iva'
from Ejemplar
-- listar codigo libro y el precio dividido por 2 de ejem
select codlib as'codigo libro', costoejem as 'costo',
(costoejem/2) as 'mitad costo'
from Ejemplar
-- funcin matemtica
select codlib as'codigo libro', costoejem as 'costo',
round(costoejem/2,0) as 'mitad costo'
from Ejemplar
select POWER(2,3)

-- elevar al cuadrado el precio del libro


select codlib as'codigo libro', costoejem as 'costo',
power(costoejem,2) as 'costo al cuadrado'
from Ejemplar
-- manejo de datos string
/* listar la primera inicial del nombre y su apellido
de los autores*/ J. Verne / G. Garca
select SUBSTRING(nomaut,1,1)+'. '+ apeaut as 'InicialApellido'
from Autor
select * from Autor
update Autor
set apeaut='Spyri'
where codaut='A05'
-- 29 marzo 2012
------------------ Funciones de Fecha
/*determinar cuantos aos han transcurrido
desde la escritura del libro con cdigo 'L01' */
select * from escribe
select GETDATE()
select codlib, 'fue escrito hace:' as ' ',
DATEDIFF(year,fecesc,GETDATE())as 'aos'
from escribe
where codlib='L01'
-- funciones de sistema
/* listar el nombre de usuario y de login */
select USER_NAME() as 'usuario',
SUSER_NAME() as 'login',
CURRENT_USER, SESSION_USER , SYSTEM_USER
-- SESSION_USER devuelve el nombre de usuario del contexto
actual en la base de datos actual.
-- SYSTEM_USER Permite insertar en una tabla un valor
proporcionado por el sistema para el inicio de sesin actual
cuando no se especifica ningn valor predeterminado.
-- CONVERSION DE DATOS
-- CONVERT Y CAST
select codlib as'codigo libro', costoejem as 'costo',
round(costoejem/2,0) as 'mitad costo',
CONVERT (int, round(costoejem/2,0))
as 'mitad de costo sin decimales'
from Ejemplar
usar convert y cast para formatear la salida del campo mitad costo
sin los decimales

select codlib as'codigo libro', costoejem as 'costo',


CAST(ROUND((costoejem/2),0) as int) as 'mitad costo'
from Ejemplar
-- basados en comparaciones de rangos
-- BETWEEN
select * from escribe
-- listar los codigos de libros escritos entre el 1/jun/86 y
-- el 1/jun/87
select codlib, fecesc
from escribe
where fecesc>= '1-06-1986' and fecesc <= '1-06-1987'
select codlib, fecesc
from escribe
where fecesc between '1-06-1986' and '1-06-1987'
-- basados en comparaciones con listas
-- listar los autores cuya nacionalidad es Ec, Co
alter table autor add nacaut char(2) null
select * from Autor
select codaut, nacaut
from Autor
where nacaut= 'EC'OR nacaut='CO'
select codaut, nacaut
from Autor
where nacaut IN ('EC','CO')
-- 4 abril 2012
----------------- LIKE
/* Listar los nombres de autores que inicien por la letra J */
select nomaut
from autor
where nomaut like 'J%'
/* adems debe tener nicamente 5 letras' */
select nomaut
from autor
where nomaut like 'J___'
/* listar los nombres cuya primera letra no sea G */
select nomaut
from autor
where nomaut like '[^G]%'

insert into Autor values ('A06','Mario','Benedetti','UR')


/* listar los nombres cuya primera letra no sea G o M */
select nomaut
from autor
where nomaut like '[^FM]%'
/* listar los nombres cuya primera Sea DESDE G hasta M */
select nomaut
from autor
where nomaut like '[^G-M]%'
-- caractr de escape.
WHERE comment LIKE '%30!%%' ESCAPE '!'
/* escape_character
Es un carcter que se coloca delante de un carcter comodn
para indicar que el comodn no debe interpretarse como un
comodn, sino como un carcter normal. escape_character es una
expresin de caracteres que no tiene ningn valor predeterminado
y se debe evaluar como un nico carcter.
*/
-- NULL - ausencia de valor
alter table usuarios add genero char(1) null
select * from usuarios
insert usuarios (codusu,nomusu,apeusu,dirusu,garante)
values ('U01','Diego','Lopez','La Gasca','U01')
insert usuarios (codusu,nomusu,apeusu,dirusu,garante)
values ('U02','Myriam','Perez','La Gasca','U01')
insert usuarios (codusu,nomusu,apeusu,dirusu,garante)
values ('U03','David','Correa','Av. Shyris','U02')
insert Usuarios
values ('U04','Zoila','Vaca','01-01-2012','Machachi',0,'U01','F')
/*listar usuarios que no tienen definido su genro en el registro */
select nomusu+' '+apeusu as 'nombre', genero
from Usuarios
where genero is not null
/*DUPLICADOS*/
----------------select * from autor
/* listar las nacionalidades de los autores */
select Distinct nacaut
from Autor
-- ORDENAR
/* listar las nacionalidades de los autores ordenado ascendente*/

select Distinct nacaut


from Autor
order by nacaut -- por default es siempre ascendente
select Distinct nacaut
from Autor
order by nacaut asc
select Distinct nacaut
from Autor
order by nacaut desc
select * from Libro
select codlib, titulo, numpag
from Libro
where titulo like 'L%' or codlib='L03' and numpag>200
select codlib, titulo, numpag
from Libro
where titulo like 'L%' or (codlib='L03' and numpag>200)
select codlib, titulo, numpag
from Libro
where (titulo like 'L%' or codlib='L03') and numpag>200
/* 11 abril 2012 */
/* constraints
de entidad
- pk, uk */
-- declarativo
create table T1
(a char(1) not null primary key,
b tinyint not null,
c char(1) null
)
create table T1
(a char(1) not null,
b tinyint not null,
c char(1) null )
alter table t1
add constraint pk_a primary key (a)
-- se crea un ndice agrupado en a - que es?
/* orden de los regs en disco corresponden a la tabla
en agrupado los niveles leaf(hoja) corresponde
a las pginas de datos, solo admite 1 indice
agrupado en la tabla*/
sp_help t1
-- unique key (Uk)
alter table t1
add constraint uk_c unique nonclustered (c)
/* crea un ndice no agrupado , los niveles leaf(hoja)
no corresponde a las pags de datos, los registros

no estan en orden de acuerdo al ndice unique creado,


pueden haber varios indices no agrupados en una tabla */
/* uk puede ser usado como clave alterna */
-- INTEGRIDAD DE DOMINIO
-- Declarativo
-- Ck constraint
alter table T1
add constraint ck_b
check (b<=20)
sp_help t1
alter table t1 drop constraint ck_c
insert into T1 values ('a',1,'1')
insert into T1 values ('b',2,'6')
alter table t1
add constraint ck_b
check (b in ('1','2','5'))
alter table t1 drop constraint ck_b
alter table t1
add constraint ck_b
check (b like '[125]')
insert into T1 values ('b',2,'6')
-- pueden haber multiples checks en una misma columna
-- Default df
/* valor que se inserta cuando no hay ingresado
valor alguno en forma explcita */
alter table t1
add constraint df_b
default 5 for b
select * from t1
insert into T1 values ('c',default,'2')
insert into T1 (a,c) values ('d','3')
alter table t1
add constraint df_b
default 4 for b
insert into T1 (a,c) values ('e','5')
/*- consideraciones.
- default no debe ir contra ninguna regla
- default debe coincidir con el tipo de datos o
ser compatible con el tipo de datos de la col
- debe estar conforme al tamao de la col
*/
-- crear 2 checks, 2 defaults y 1 uk
-- DE DOMINIO PROCEDURALES
-- RULES

-- DEFAULT
/* 12 abril 2012 */
-- DE DOMINIO PROCEDURALES
-- RULES
alter table t1 drop constraint ck_b
sp_help t1
/* @xxx corresponde a variable local,
declare @variable
@@xxx variables informativas globales */
print @@VERSION
print @@LANGUAGE
-- crear la regla
create rule r_b
as @b like '[125]'
----------------select *
from sys.objects
where type='r'
-- enlazar la regla
sp_bindrule r_b,'t1.b'
---------------select * from T1
-- borrar, primero se desenlaza la regla y luego se la elimina
sp_unbindrule 't1.b'
drop rule r_b
-- probar en clase si pueden borrar una tabla que tenga
-- una regla definida.

create table T2
(a char(3) not null primary key,
b int null,
c char(2)null )
select *from T2
insert into T2 values ('a',5,'bb')

create rule r_c


as @b like '[125]'
sp_bindrule r_c,'t2.b'
drop TABLE T2
SI SE PUEDE BORRAR LA TABLA

insert into t1 values ('e',4,'a')


----------------------create table T2
(a char(3) not null primary key,
b int null,
c char(2)null )
select *from T2
insert into T2 values ('a',5,'bb')

create rule r_c


as @b like '[125]'
sp_bindrule r_c,'t2.b'
drop RULE R_C
/* diferencias entre rules y check
1.- rules es procedural, check es dri
2.- check solo puede ser aplicado en la columna definida,
rule en cualquier columna
de cualquier tabla en la base de datos.
3.- un check puede hacer referencia a otra columna en la tabla,
rules no tiene esta capacidad
4.- check solo se aplica en DRI con el campo que se cre,
rules puede aplicarse incluso a tipos de datos creados
por el usuario
5.- una columna o un tipo de datos de alias solo puede tener
enlazada una regla, sin embargo una columna puede tener una
regla y una o ms restricciones check asociadas a ella
-- DEFAULT */
alter table t1 drop constraint df_b
create default df_b
as 5
sp_bindefault df_b,'t1.b'
-- borrar
sp_unbindefault 't1.b'
drop default df_b
/*para establecer defaults
1.- debe ser del tipo de datos definido en la columna o compatible
2.- no debe ir contra ninguna regla o check definidos en esa columna
3.- no debe exceder la longitud definida en esa columna
--------------------------------------INTEGRIDAD REFERENCIAL ---- DRI */
Alter table [escribe] add Constraint [autor-escribe]
foreign key([codaut]) references [Autor] ([codaut])
on update cascade on delete no action

go
alter table t2 add constraint fk_b
foreign key (b) references t1(b)
/* 18 abril 2012 */
-- MODIFICACION DE DATOS.
select * from t1
1.insert into t1 values ('e',2,'4')
2.insert into T1 (a,c) values ('f','2')
3.insert into T1 default values
-- que pasa con la columna b???
-- default / null
-- error bajo null????
insert into T1 (a,b) values ('f',8)
insert into T1 (a,b) values ('g',5)
-- uk no permite el ingreso de dos valores nullos
-- en la columna c
insert into t1 values ('g',default,null)
-- b es not null y el default se aplica si no es
-- explcito para definiciones null
alter table t1 add d integer identity(1,1)
-- forza que la columna d sea not null
insert into T1 values ('g',5,8)
-- identity tiene el valor 7
delete from T1 where a='g'
insert into T1 values ('g',5,8)
-- generar el valor 7 nuevamente
select * from t1
-- no, se inserta el8
dbcc checkident (t1,reseed,6)
-4.select * into #tmp from T1
select * from #tmp
select * into t3 from T1 where 1=2
select * from t3
select * into ##tmp from T1

select * from #tmp


select * from ##tmp
-- diferencia???? existencia en sesiones
alter table t3 drop column d
5.-- copiar los datos de t1 a t3 con la columna d ordenada
insert into t3
select * from T1
select * from t3
delete from t3
insert into t3
select * from T1
where c>3
order by c desc
--- update
update T1
set b=2
where a='a'
delete from t1
insert into T1
select * from #tmp
select * from
select * from
/* para todos
se encuentren
actualizada a

T1
t3
los valores de a en la tabla t1 que
en la tabla t3, la columna b ser
7 */

update T1
set b=7
from T1, t3
where t1.a = t3.a
-- delete
delete from t1 where <condicion>
tambin basado en otras tablas

Vous aimerez peut-être aussi