You are on page 1of 59

FACULTAD DE INGENIERIA INDUSTRIAL Y

DE SISTEMAS

Lenguaje de Programacin II
Parte I

Prof. Ing. Alberto Moreno

Indice
1.- Modelamiento de Datos
2.-Entidad Relacion
3.- Entidades Fuertes y Debiles
4.-Ejercicios propuestos de Modelamiento
5.-SQL SERVER
6.- DML , DDL
7.- Consultas, Agrupamientos , subconsultas
8.-Vistas
9.-Store Procedure
10.-Paso del Modelo Fisico a sql (Rational Ross)

Bases de datos: Modelos de datos


Los modelos de datos aportan la base conceptual para disear aplicaciones que
hacen un uso intensivo de datos, as como la base formal para las herramientas y
tcnicas empleadas en el desarrollo y uso de sistemas de informacin.
Un modelo de datos es por tanto una coleccin de conceptos bien
definidos
matemticamente que ayudan a expresar las propiedades estticas y
dinmicas
de una aplicacin con un uso de datos intensivo. Conceptualmente, una aplicacin
puede ser caracterizada por:
Propiedades estticas: entidades (u objetos), propiedades (o atributos)12 de
esas entidades, y relaciones entre esas entidades.
Propiedades dinmicas: operaciones sobre entidades, sobre propiedades o
relaciones entre operaciones.
Reglas de integridad sobre las entidades y las operaciones (por
ejemplo,
transacciones).
Los modelos de datos clsicos son tres: el jerrquico, el de red y el relacional.
Modelo de datos relacional

Una Base de Datos Relacional es una base de datos en donde todos los
datos visibles al usuario estn organizados estrictamente como tablas de
valores y en donde todas las operaciones de la base de datos operan sobre estas
tablas .
Este modelo es el ms utilizado actualmente ya que utiliza tablas bidimensionales
para la representacin lgica de los datos y sus relaciones.
Algunas de sus principales caractersticas son:
Puede ser entendido y usado por cualquier usuario.
Permite ampliar el esquema conceptual sin modificar las aplicaciones
de gestin.
Los usuarios no necesitan saber donde se
encuentran
los
datos fsicamente.

Modelado conceptual de bases de datos relacionales: El modelo E/R


Consideramos que el modelado E/R se ha convertido en estndar para el
diseo de bases de datos relacionales, por lo que lo utilizaremos para describir
nuestra implementacin.
El modelo E/R aporta una herramienta de modelado para representar
las entidades, propiedades y relaciones: los diagramas Entidad/Relacin.
Mediante stos, el esquema conceptual abstracto puede ser mostrado
grficamente y mantener una independencia conceptual con respecto a
la implementacin propiamente dicha. En realidad, podemos hacer que los
diagramas sean un reflejo fiel de las relaciones, interrelaciones y atributos del
modelo relacional de datos o podemos englobar diversas relaciones en una
sola entidad o conjunto de
propiedades.
Los diagramas E/R son directamente proyectables sobre un esquema fsico
relacional excepto en lo que se refiere a las relaciones muchos a muchos. Los
diagramas E/R son parecidos a los diagramas de flujo (organigramas) clsicos en
que utilizan rectngulos, rombos y valos, pero los significados de estos
elementos son distintos. La Figura 1 muestra un ejemplo que nos servir para
mostrar cmo han de interpretarse estos diagramas.

Figura.1 Ejemplo de diagrama E/R


Los rectngulos representan entidades, los rombos relaciones y los
valos propiedades. Otra diferencia fundamental con los organigramas
es que stos tienen un principio y un final, mientras que un diagrama
E/R no. Esto es obvio, puesto que los organigramas representan procesos,
mientras que los diagramas E/R representan estados. El tipo de relacin
entre dos entidades se representa mediante 1s y Ms (tambin el smbolo
o n). En la Figura 64 la entidad E1 mantiene una relacin de uno a
muchos con la entidad E2 y una relacin de uno a uno con la entidad E3. Existen
otras convenciones que hemos querido mostrar en esta figura. Una propiedad
cuyo nombre est subrayado seala que sa es la propiedad que
identifica de forma nica a la entidad, y que se corresponder con
la clave primaria de una relacin en la implementacin relacional. Finalmente, un
rectngulo doble, como el de la entidad E2, significa que esa
entidad es dependiente o dbil, es decir, su existencia depende de la
existencia de otra entidad (E1) en nuestro ejemplo. En algunos diagramas E/R el
rombo que indica la relacin entre una entidad independiente y otra dependiente
tambin aparece con lneas dobles.
Finalmente, las relaciones tipo/subtipo (self-joint en la implementacin
relacional) se especifican mediante una relacin de una entidad consigo misma y
con las lneas de unin dirigidas, tales como las que muestra la relacin R4.
Para finalizar la exposicin del tipo de anlisis que se lleva a cabo mediante los
diagramas E/R, en la Figura 2 mostramos un modelado E/R de la disposicin
relacional que mostrbamos informalmente en la Figura 2.

Enunciado .-En una entidad academica hay departamento o falcultades , dentro


de un departamento hay varios profesores y cada docente esta a cargo de uno o
de varios cursos realizar el diagrama de entidad Relacion y asignar los atributos
mas necesarios.

Figura 2.Diagrama E/R proyectable sobre diseo relacional


Este modelo especifica la existencia de tres entidades, Profesor,
Curso y Departamento, que se corresponden con otras tantas relaciones. Un
departamento tiene muchos profesores y un profesor puede dar muchos cursos.
Para cada una
de las entidades existe una propiedad que las identifica nicamente y
que se
corresponde con la clave primaria (en este caso clave subrogada) de cada una de
las tablas en la implementacin relacional. Las entidades tienen otras propiedades
que las describen y que se corresponden con los distintos campos de
la tabla (relacin). Finalmente, las tres entidades contempladas son
consideradas como independientes, aunque tambin habramos podido
modelar la existencia de alguna
de
ellas
como
dependiente
de
otra; por ejemplo podramos haber establecido la restriccin de que un
profesor no puede existir sin estar adscrito a ningn departamento, o que un
curso no puede existir sin un profesor que lo imparta.

Ejemplo 2.Una empresa dedicada a la produccin de pelculas (titulo y ao), dispone de


casa de
estudios (nombre y direccin)donde puede producir una o mas pelculas adems en cada
pelcula participan uno o varios actores disear el modelo de entidad relacin .

Atributos estn representados con elipses y las relaciones con rombos


Atributos de Clave :Subrayados: adicionar atributos para su identificacin respectiva.

La Cardinalidad de una Relacin:

Ejercicio propuesto de Modelamiento:

Relaciones como Atributos:

Entidades fuertes y dbiles:


Entidad Debil.- No tienen atributos propios
- Necesitan otra entidad para ser representado.
Entidad Fuerte.- Tienen Clave propia

Traduccin de un modelo lgico a un modelo fsico de datos.

Las relaciones produce y acta traducida a datos seria:

-A veces es posible combinar las relaciones .


-

El caso tpico es la relacin de 1:N


Las relaciones de 1:1 deberan descartarse antes.

Tampoco es de tener relaciones en demasa en caso necesario se debera incluir.

Ejercicio Propuesto.

1.- La empresa ABC Import S.A. dedicada a la importacin de alimentos para la


venta a los principales supermercados de la capital. Cuenta con un
buen posicionamiento en el mercado por la calidad de sus productos y por su
eficiente servicio que ofrece a su clientela.
Para esta labor la empresa recibe las Guas de Pedidos de sus clientes, en la que
se detalla los productos requeridos y la cantidad solicitada, esta es recibida por el
departamento de ventas, el que consulta con almacn sobre la disponibilidad de
los mismos, de ser conforme, se procede al envo de la mercadera adjuntndose
la Gua de Remisin (para el almacn del Cliente) y la Factura
correspondiente
(para contabilidad del Cliente). Este proceso no demora ms de tres das.
Si el caso no hubiese disponibilidad de alguno de los productos, se har la consulta
al cliente sobre el envo o no de la mercadera existente y el
posterior cumplimiento de la orden original, considerndose que por cada envo se
adjuntar
la Gua de Remisin y la Factura correspondiente.
De haber algn reclamo por parte del cliente, este devolver la mercadera con
una Gua de Devolucin y la entrega del nuevo producto se har con
Gua de Remisin; la factura no ser alterada por ningn motivo, puesto
que de haber disconformidad est se anular.
La empresa nos solicita la elaboracin de un Sistema que permita llevar el control
de toda la operacin descrita, teniendo en cuenta que las facturas
sern canceladas en un mximo de tiempo de 5 das tiles, fuera del
plazo no se proceder con la atencin a dichos clientes hasta la cancelacin de su
deuda. Elaborar el MER mostrando: (10 ptos)
2.- Normalizar la siguiente relacin: (indicar la normalizacin usada) (6ptos)

Boleto de Transporte
BOLETO(Num_boleto,
Num_bus,
capacidad_bus,
placa,
fecha_viaje,
nombre_pasajero, edad_pasajero, DNI,
destino, nro_asiento, hora_salida,
hora_llegada, precio_pasaje)

1.- MS SQL Server 2000


Microsoft SQL Server 2000 es un conjunto de componentes que trabajan juntos para cubrir
las necesidades de almacenamiento y anlisis de datos de los sitios Web de mayor tamao y
de sistemas de procesamiento de datos corporativos. Los temas de la arquitectura de SQL
Server describen cmo trabajan juntos los diferentes componentes para administrar datos de
un modo eficaz.
En otras palabras es el mejor manejador de base de datos de Microsoft
Entre sus componentes tenemos el:

Administrador Corporativo .- Herramienta para crear y administrar


base de datos asi como acceso de usuarios, procedimientos almacenados,
restricciones, etc.
Para entrar debemos irnos al menu INICIO- PROGRAMAS - MICROSOFT SQL
SERVER ADMINISTRADOR CORPORATIVO

y nos debe salir la siguiente pantalla:

en la cual nos saldr la consola con los servidores de SQL Server que se unen por
grupos y cada grupo puede tener varios servidores en este caso solo tenemos un grupo y
tenemos tambien un solo servidor que toma el nombre de la pc. estos se crearon
automticamente al instalar SQL Server
Si quisiramos aadir un nuevo servidor nos vamos al grupo hacemos clic derecho
NUEVO REGISTRO DE SERVIDOR SQL SERVER

Nos saldra el sgte asistente:

Como se muestra en las figuras saldra un asistente para despus escoger el nombre de la
pc a la cual nos queremos conectar luego escogemos el modo de autenticacin si es con
la autenticacin de windows o de sql en este caso escogemos SQL luego escogemos el
usuario administrador por defecto que es SA de ah siguiente y finalizar.
Con eso hemos creado una nueva cuenta de servidor (Ojo que podemos tener varias
cuentas si lo deseamos)
NOTA: Debemos tener en cuenta que el servicio de SQL este activo para eso debemos
asegurarnos que le icono del SQL este en color verde . Este icono se mostrara en la
barra de tareas al costado del reloj.

En caso de no estar encendido el servicio debemos irnos a INICIO- PROGRAMAS MICROSOFT SQL SERVER - ADMINISTRADOR DE SERVICIOS
En servidor se mostrara el nombre
de la PC con al cual deseamos
trabajar y en servicios debemos
asegurarnos que este SQL Server.
No olvidar que el icono debe tomar
un color verde que indica que el
servicio esta activo de otra forma no
se podra trabajar con la base de datos.

CREAR BASE DE DATOS.- Para crear una base de datos escogemos la carpeta base
de datos clic derecho y NUEVA BASE DE DATOS de ah ponemos el nombre de la
base de datos y listo

Una vez creada la base de datos podemos crear tablas dentro de ella
En este caso se vamos a crear un tabla
dentro de la base de datos BDCOMPRA
miren que salen varias opciones y
nosotros debemos escoger TABLA clic
derecho NUEVA TABLA

aqu estamos
definiendo los
campos que tendra
esa tabla, se pone el
nombre del campo,
se escoge el tipo la
longitud y marcamos
si queremos permitir
valores nulos caso
contrario lo
desmarcamos.
Si queremos
establecer clave
principal a algun
campo lo
seleccionamos y
hacemos clic en el
icono de la llave o
sino clic derecho y
establecer clave
principal.
Una vez terminado de definir los campos de la tabla lo guardamos y el ponemos un
nombre (Se guarda haciendo clic en el icono de guardar o simplemente cerrando la
ventana)
Una vez cerrada la tabla si hubiera que hacer alguna modificacin seleccionamos la
tabla clic derecho DISEAR TABLA

Para llenar datos a la tabla


Clic derecho a la tabla Abrir
Tabla y DEVOLVER
TODAS LAS FILAS

Para llenar datos en


SQL Server es muy
similar a Access
solo llenamos los
datos y si en caso
queremos eliminar
alguno hacemos
clic derecho y
Eliminar o en todo
caso si queremos
desplazar la fila la
seleccionamos y la
arrastramos
DIAGRAMAS.- En esta parte podemos relacionar las tablas
Seleccionamos La base de
datos con la cual vamos a
trabajar luego Diagrama y
NUEVO DIAGRAMA,
despus de esto nos saldra
un asistente.

El asistente nos pedira que agreguemos las tablas las cual queremos relacionar

Para
relacionar las
tablas lo
primero que
se debe de
tener en
cuenta es que
tablas se van
a relacionar,
en este caso
vamos a
relacionar la
tabla cliente
con
facturacabe
ya que en la
tabla
facturacabe
se jala el
codigo del
cliente,
entonces lo que debemos hacer es escoger la tabla cliente(ya que de aqu se van a
jalar los codigos) exactamente escogemos el campo del cual vamos a jalar los datos
en este caso codcli y lo vamos a arrastrar y dejar encima de la tabla facturacabe
exactamente encima del campo codcli que esta en facturacabe de ah se mostrara
una ventana indicando la relacin que se ha creado , el nombre que se ha puesto, etc.
A lo cual damos aceptar.
IMPORTAR y EXPORTAR DATOS.- Otra de las herramientas que tiene el
administrador corporativo del SQL server es el de importar datos y exportarlos
Por ejemplo tenemos una base de datos y queremos exportarlo a Access.
Escogemos la base de datos clic derecho TODAS LAS TAREAS y EXPORTAR
DATOS

Nos saldra un asistente:


Aqu debemos escoger
el origen de datos que
en este caso seria SQL
Server (Proveedor
Microsoft OLE DB
para SQL Server)
Luego escogemos el
servidor donde se
encuentra la base de
datos y escogemos la
autenticacin si es sql
debemos poner el
usuario SA.
Por ultimo en base de
datos escogemos la
base de datos la cual
se va a exportar

Despus de escoger el
origen ahora
escogemos el destino
en este caso es
Microsoft Access, en
nombre de archivo
escogemos la base de
datos de access que
debe estar vacia para
exportar los datos
hasta alla.
Luego damos
siguiente y escogemos
Copiar Tablas de ah
nos saldra otra
pantalla en la cual
debemos marcar que
tablas queremos
exportar, siguiente y
de ahi Finalizar a lo cual nos saldra un mensaje indicando el resultado.

NOTA: Debemos de tener en cuenta que la base de datos debe estar creada (vacia), Si
queremos exportar a excel en destino debemos escoger Microsoft Excel 8.0 o si
queremos exportarla aun documento de texto escogemos Archivo de Texto
Para Importar es igual no olvidar que en origen se escoge de donde se va a jalar los
datos y en destino a donde se va a copiar los datos.
Generar SCRIPT

Un script es un codigo en este caso un codigo para crear base de datos.


Para esto escogemos la base de datos clic derecho Todas las Tareas y escogemos
Generar Secuencia de Comandos SQL
Hacemos clic en el boton MOSTRAR TODO y luego marcamos INCLUIR TODOS
LOS OBJETOS y damos aceptar, Sql Server respondera mostrando una ventana en la
cual nos pedira guardar ese script a lo cual debemos escoger en donde queremos
guardarlo y que nombre le ponemos.
Lo que se graba es un archivo similar a un archivo de texto que tiene extensin SQL el
cual se podra abrir con el analizador de consultas y tendra codigo que creara base de
datos, tablas , etc.
BACKUP Y RESTAURAR BASE DE DATOS.- Para realizar una copia de seguridad
debemos hacer lo siguinte:
Escogemos la base de datos clic derecho TODAS LAS TAREAS luego escogemos
COPIA DE SEGURIDAD DE LA BASE DE DATOS

Una vez que sale esta ventana


hacemos clic en AGREGAR

Luego en donde dice nombre de


archivo ponemos la ruta donde
queremos guardar la copia de
seguridad o en todo caso hacemos
clic en el boton (...) para escoger
la ruta donde queremos guardar el
backup
Luego damos aceptar.aceptar y
nos debe salir un mensaje que
todo salio bien.
Restaurar
Para restaurar la
base de datos
debemos escoger
la base de datos en
la cual queremos
restaurar clic
derecho TODAS
LAS TAREAS y
RESTAURAR
BASE DE
DATOS.
Al salir esta
pantalla
escogemos
DESDE
DISPOSITIVO y
despus hacemos
clic en el boton
DISPOSITIVOS

Luego hacemos clic en Agregar


y nos saldra esta pantalla en
donde debemos escoger el
backup que queremos restaurar
y le damos aceptar luego
debemos irnos a OPCIONES y
marcar Forzar restauracion

NOTA: Para restaurar la base


de datos debe tener el mismo
nombre de la base de datos de
la cual se hizo el backup, si en
caso tienen nombre distintos
debemos modificar algunas
cosas.

Analizador de Consultas.Esta es una herramienta en el cual podremos crear base de datos, tablas, etc mendiante
codigo sql (Lenguaje SQL podriamos hacer lo mismo que hemos hecho con el
administrador corporativo pero con puro codigo)
Para entrar debemos irnos a
INICIO- PROGRAMASMICROSOFT SQL SERVER
ANALIZADOR DE
CONSULTAS
En servidor escogemos la PC a la
cual queremos conectarnos si
ponemos punto significa que nos
estamos conectando a la PC local,
marcamos la opcion INICIAR
SQL si esta detenido escogemos la
autenticacin si es sql en usuario
ponemos SA Y ACEPTAR.
Despus de esto nos saldr una
pantalla en blanco en la cual
podremos escribir codigo sql para crear base de datos, tablas ,vistas, etc.

Lo primero que debemos de tener en cuenta es de


seleccionar la base de datos con la cual se va a
trabajar, o en todo caso lo podemos hacer con codigo
sql con la instruccin USE que ya veremos mas
adelante.
Para ver los objetos que hay en el SQL Server presionamos F8 (Examinador de objetos)
y nos saldra una ventana parecida a la del administrador corporativo.

2.- Lenguaje SQL


El SQL (Structured query language), lenguaje de consulta estructurado, es un lenguaje
surgido de un proyecto de investigacin de IBM para el acceso a bases
de datos relacionales. Actualmente se ha convertido en un estndar de lenguaje
de bases de datos, y la mayora de los sistemas de bases de datos lo soportan, desde
sistemas para ordenadores
personales, hasta
grandes
ordenadores. Por supuesto, a partir del estndar cada sistema
ha desarrollado su propio SQL que puede variar de un sistema a otro, pero
con cambios que no suponen ninguna complicacin para alguien que conozca
un SQL concreto.
Como su nombre indica, el SQL nos permite realizar consultas a la base de datos.
Pero el nombre se queda corto ya que SQL adems realiza funciones de definicin,
control y gestin de la base de datos. Las sentencias SQL se clasifican
segn su finalidad dando origen a tres lenguajes o mejor dicho sublenguajes:
DML (Data Manipulation Language), lenguaje de manipulacin de datos, nos
permite recuperar los datos almacenados en la base de datos y tambin incluye
rdenes para permitir al usuario actualizar la base de datos aadiendo nuevos
datos, suprimiendo datos antiguos o modificando datos previamente
almacenados.
DDL (Data Description Language), lenguaje de definicin de datos,
incluye rdenes para definir, modificar o borrar las tablas en las que se
almacenan los datos y de las relaciones entre estas. (Es el que ms varia de un
sistema a otro)
DCL (Data Control Language), lenguaje de control de datos, contiene elementos
tiles para trabajar en un entorno multiusuario, en el que es
importante la proteccin de los datos, la seguridad de las tablas y
el establecimiento de restricciones en el acceso, as como elementos para
coordinar la comparticin de datos por parte de usuarios concurrentes,
asegurando que no interfieren unos con otros.
Tipos de Datos en SQL Server
bigint .-Datos enteros (nmeros enteros grandes)
int .- Datos enteros (nmeros enteros)
smallint.- Datos enteros pequeos
tinyint.- Datos enteros comprendidos 0 y 255.
bit .- Datos enteros con valor 1 0.
decimal .- Datos de precisin y escala numrica(Enteros y decimales)
numeric .- Funcionalmente equivalente a decimal.

money.- Valores de moneda comprendidos con una precisin de una diezmilsima de


la unidad monetaria.
smallmoney .- Valores de moneda (mas pequeo) con una precisin de una
diezmilsima de la unidad monetaria.
float .- Nmeros con precisin de coma flotante
real .- Nmeros con precisin de coma flotante
datetime .- Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de
diciembre de 9999, con una precisin de 3,33 milisegundos.
smalldatetime.- Datos de fecha y hora comprendidos entre el 1 de enero de 1900 y el 6
de junio de 2079, con una precisin de un minuto.
char.- Datos de caracteres de longitud fija con una longitud mxima de 8.000
caracteres.
varchar.- Datos de longitud variable con un mximo de 8.000 caracteres.
text.- Datos de longitud variable con una longitud mxima de 231 - 1 (2.147.483.647)
caracteres.
image.- Datos binarios de longitud variable con una longitud mxima de 231 - 1
(2.147.483.647) bytes.
Otros tipos de datos

cursor.- Una referencia a un cursor.


table.- Un tipo de datos especial que se utiliza para almacenar un conjunto de resultados
para un proceso posterior.
timestamp.- Un nmero nico para toda la base de datos que se actualiza cada vez que
se actualiza una fila

Lenguaje de Definicion de Datos.-(DDL)


El lenguaje de definicin de datos permite:
Definir y crear una nueva tabla.
Suprimir una tabla que ya no se necesita.
Cambiar la definicin de una tabla existente.
Definir una tabla virtual (o vista) de datos.
La concesin de privilegios sobre un objeto de la base de datos.
La revocacin de privilegios sobre un objeto de la base de datos.
Construir un ndice para hacer ms rpido el acceso a la tabla.
1.- Comando USE .- Use sirve para activar alguna base de datos por
ejemplo si queremos trabajar con la base de datos NORTHWIND debemos poner en el
analizador
de consultas USE NORTHWIND (Por defecto cuando se abre el analizador de consultas
se esta en la base de datos MASTER)
2.- Objeto SYSDATABASES.- Es una tabla del sistema que se encuentra en la base de
datos MASTER en esa tabla se almacena todos los objetos creados en el SQL Server.En
el campo name se guarda el nombre de las bases de datos creadas.
SELECT * FROM SYSDATABASES
3.- Objeto SYSOBJECTS .- Es una tabla del sistema que se almacena en cada base de
datos y tiene guarda el nombre, fecha de creacin, tipo, etc de todos los objetos creados

en esa base de datos. El campo name hace referencia al nombre del objeto y el campo
type hace referencia a que clase de objeto es por ejemplo si es U es una tabla hecha
por el usuario, si es P es un procedimiento almacenado.
Aqu los posibles tipos
C = Restriccin CHECK,
D = Valor predeterminado o restriccin DEFAULT,
F = Restriccin FOREIGN KEY
K = Restriccin PRIMARY KEY o UNIQUE,
L = Restriccin,
P = Procedimiento almacenado,
R = Regla,
RF = Procedimiento almacenado de filtro de duplicacin
S = Tabla del sistema
TF = Funcin de tabla
TR = Desencadenador,
U = Tabla de usuario,
V = Vista
,X = Procedimiento almacenado extendido
4.- Crear una Base de Datos.- CREATE DATABASE Nombre
Ejemplo: Crear una base de Datos llamada BDUTP:
CREATE DATABASE BDUTP
5.-Eliminar una Base de Datos.- DROP DATABASE Nombre
Ejemplo: Borrar la base de datos llamada BDUTP
DROP DATABASE BDUTP
6.- Crear una tabla.CREATE TABLE Nombre (Campo tipo,Campo2 tipo....)
Ejemplo:
Crear la tabla AREAS areas(codigo, nombre, departamento)
CREATE TABLE areas (codigo varchar(3),nombre varchar(55),departamento
varchar(3))
Hay que tener en cuenta que debemos estar en la base de datos donde queremos crear
las tablas antes de hacer esto.
Restricciones(CONSTRAINT)
Son reglas de validacin a algunos campos se puede declarar al momento de crear la
tabla o despus modificando la tabla
NOT NULL. La columna no permitir valores nulos.
CONSTRAINT. Permite asociar un nombre a una restriccin.
DEFAULT . La columna tendr un valor por defecto.
PRIMARY KEY. Permite indicar que esta columna forma parte de la clave primaria.
FOREIGN KEY Indica que campo/s, es/son clave externa y hace referencia a la clave
primaria de otra tabla.
REFERENCES. Es la manera de indicar que este campo, es clave externa y hace
referencia a la clave primaria de otra tabla. Esta foreign key es slo de una columna.
UNIQUE. Obliga a que los valores de una columna tomen valores nicos (no puede

haber dos filas con igual valor). Se implementa creando un ndice para dicha(s)
columna(s).
CHECK (condicin). Permite indicar que condicin debe de cumplir esa columna.

Ejemplo:Crear una tabla carrera que el campo codcar tenga la restriccin de que
solo acepte letras
1.- Esta es una forma se pone al constraint al momento de crear la tabla y al costado del
campo:
create table carrera(codcar varchar(1) primary key not null constraint rscodcar
check(codcar like '[a-z]'), nomcar varchar(15))
2.- Esta otra forma tambien es cuando se crea la tabla pero el constraint se pone al final
de haber declarado todos los campos
create table carrera(codcar varchar(1) primary key not null,
nomcar varchar(15),
constraint rscodcar check(codcar like '[a-z]'))
3.- Primero se crea la tabla y luego se aade el constraint
create table carrera(codcar varchar(1) primary key not null,
nomcar varchar(15))
Alter table Carrera Add constraint rscodcar check(codcar like '[a-z]')
En los 3 casos se creo un constraint llamado RscodCar, para borrar un constraint seria:
Alter table Carrera Drop constraint rscodcar
Ejemplo: Crear una tabla llamada Alumno con los campos CODALU, NOMALU,
FECHANAC, SEXO y CIUDAD donde no se permita ingresar ningun valor NULL
ademas de que el campo CODALU sea clave primaria ,en el campo CIUDAD darle un
valor por defecto que sea LIMA , y al campo sexo solo se pueda ingresar M o F

CREATE TABLE ALUMNO(


CODALU INT NOT NULL PRIMARY KEY,
NOMALU VARCHAR(30) NOT NULL,
FECHANAC DATETIME NOT NULL,
SEXO VARCHAR(1) NOT NULL CONSTRAINT PKSEXO CHECK
(SEXO LIKE '[M,F]'),
CIUDAD VARCHAR(15) NOT NULL CONSTRAINT PKCIU DEFAULT
'LIMA',
CODCUR VARCHAR(4) NOT NULL
)
7.- Borrar un tabla tabla.- DROP TABLE Nombre Ejem: DROP TABLE CURSO
Se esta eliminando la tabla curso
8.- Modificar tabla .Ejemplo tenemos la tabla CURSO con 2 campos CODALU, NOMALU

Aadir un campo ALTER TABLE Nombre ADD NombreCampo Tipo


Ejemplo: Agregar el campo CODPROF de tipo INT a la tabla curso
ALTER TABLE CURSO ADD CODPROF INT

Eliminar un campo: ALTER TABLE Nombre DROP COLUMN NombreCampo


Ejemplo: borrar el campo CODPROF de la tabla curso
ALTER TABLE CURSO DROP COLUMN CODPROF
Modificar un Campo: ALTER TABLE Nombre ALTER COLUMN Nombre Tipo
Ejemplo: Modificar el campo nomcur para que tenga 10 caracteres
ALTER TABLE CURSO ALTER COLUMN NOMCUR VARCHAR(10)

Ejemplos:
Tenemos la base de Datos BDBANCO y tenemos las sgtes tablas:
create table banco(codban varchar(4) not null primary key,
nomban varchar(30) not null)
go
create table cuenta(nrocta int primary key not null,
nomcli varchar(70) not null,
dircli varchar(40) not null,
fecaper datetime not null,
saldoaper numeric(8,2) not null,
tipocta varchar(1) not null,
codban varchar(4) not null,
foreign key(codban) references banco(codban)
on delete cascade
on update cascade
--Foreign key es para crear un clave foranea es decir Codban es una clave foranea que
va a ser jalada de la tabla banco del campo codban
--Se pone on delete cascade y on update cascade para eliminar y actualizar en cascada
es --decir si se elimina un banco se eliminaran las cuentas de ese banco.
Go
create table movimiento(nromov int identity(100001,1) primary key not null,
tipomov varchar(1) not null,
fechamov datetime not null,
monto numeric(8,2) not null)
--Identity(100001,1) quiere decir que es autonumerico empieza del 100001 y va avanzar
de 1 en 1
--Agregar un campo Ciudad a la tabla banco que tenga Lima como valor x defecto.
alter table banco add ciudad varchar(15) default 'lima'
--Modificar el campo nomcli de la tabla cuenta
alter table cuenta alter column nomcli varchar(50)
--Agregar una restriccion al campo fecaper y poner la fecha actual x defecto

alter table cuenta add constraint resfechaaper default getdate() for fecaper
--Agregar una restriccion a la tabla cuenta al campo tipocta que solo acepte S o D
alter table cuenta add constraint restipocta check(tipocta like '[s,d]')
--Eliinar el campo dircli de cuenta
alter table cuenta drop column dircli
alter table movimiento add constraint restipomov check(tipomov like '[D,R]')
--Agregar un campo nrocta a Movimiento que sea clave foramea es decir va a jalar los ---datos de nrocta de la tabla cuenta
alter table movimiento add nrocta int foreign key(nrocta) references cuenta(nrocta)
on update cascade
on delete cascade
Nota:Si el campo nrocta ya hubiera existido y solo queremos crear el constraint que
haga la relacion con la tabla cuenta la sentencia seria asi:
alter table movimiento add constraint pkNro foreign key(nrocta) references
cuenta(nrocta)
--Agregar una restriccion al campo monto que solo acepte numeros del 0 al 1000
alter table movimiento add constraint resmonto check(monto between 0 and 1000)

Lenguaje de Manipulacin de Datos


Comandos DML
Comando Descripcin
Utilizado para consultar registros de la base de datos que satisfagan
SELECT
un criterio determinado
INSERT

Utilizado para cargar lotes de datos en la base de datos en


una nica operacin.

UPDATE

Utilizado para modificar


registros especificados

DELETE

Utilizado para eliminar registros de una tabla de una base de datos

los

valores

de

los

campos

Clusulas
Las clusulas son condiciones de modificacin utilizadas para definir los datos
que desea seleccionar o manipular.
Clusula
FROM
WHERE

Descripcin
Utilizada para especificar la tabla de la cual se van a
seleccionar
los
registros
Utilizada
para especificar las condiciones que deben reunir
los registros que se van a seleccionar

GROUP
BY

Utilizada para separar


grupos especficos

los

registros

seleccionados

en

HAVING

Utilizada para expresar la condicin que debe satisfacer cada grupo

ORDER
BY

Utilizada para ordenar los registros seleccionados de acuerdo con


un orden especfico

Operadores Lgicos
Operador Uso
Es el "y" lgico. Evalua dos condiciones y devuelve un valor
AND
de verdad slo si ambas son ciertas.
Es el "o" lgico. Evala dos condiciones y devuelve un valor
de verdar si alguna de las dos es cierta.

OR

NOT
Negacin lgica. Devuelve el valor contrario de la expresin.
1.5 Operadores de Comparacin
Operador
<

Uso
Menor que

>

Mayor que

<>

Distinto de

<=

Menor Igual que

>=

Mayor Igual que

Igual que

BETWEEN

Utilizado para especificar un intervalo de valores.

LIKE

Utilizado en la comparacin de un modelo

In

Utilizado
datos

para

especificar

registros

de

una

base

de

Funciones de Agregado
Las funciones de agregado se usan dentro de una clusula SELECT en
grupos de
registros para devolver un nico valor que se aplica a un grupo de
registros.

Funcin Descripcin
AVG
Utilizada para calcular el promedio de los valores de un campo determinado
COUNT Utilizada para devolver el nmero de registros de la seleccin

MAX

Utilizada para devolver la suma de todos los valores


campo determinado
Utilizada para devolver el valor ms alto de un campo especificado

MIN

Utilizada para devolver el valor ms bajo de un campo especificado

SUM

de

un

Consultas de Seleccin

Las consultas de seleccin se utilizan para indicar al


motor de datos que devuelva informacin de las bases de
datos.
Sintaxis
SELECT listaSeleccin[Campo1/Expresin,..]
[INTO nuevaTabla_]
FROM origenTabla
[WHERE condicinBsqueda]
[GROUP BY expresinAgruparPor]
[HAVING condicinBsqueda]
[ORDER BY expresinOrden [ASC | DESC] ]
En la seleccin de campos tambin se pueden emplear
SELECT [ ALL | DISTINCT ] {TOP entero | TOP entero PERCENT} ]
<listaSeleccin>[COMPUTE nombre=expresin]

Compute
Genera totales que aparecen como columnas de resumen adicionales al final del
conjunto de resultados. Cuando se utiliza con BY, la clusula COMPUTE genera
interrupciones de control y subtotales en el conjunto de resultados. Puede especificar
COMPUTE BY y COMPUTE en la misma consulta.
Sintaxis
[ COMPUTE
Argumentos

AVG | COUNT | MAX | MIN | SUM


Especifica la funcin de agregado que se va a realizar. Con la clusula COMPUTE se
utilizan estas funciones de agregado de filas.
Para localizar la informacin de resumen que producen GROUP BY y COUNT(*),
utilice una clusula COMPUTE sin BY.

Clausula from
Especifica las tablas de las que se van a obtener filas. La clusula FROM es necesaria
excepto cuando la lista de seleccin slo contiene constantes, variables y expresiones
aritmticas (no nombres de columna). Para obtener ms informacin, consulte FROM.

Sintaxis
[ FROM {<origenTabla>} [,...n] ]
<tipoCombinacin> ::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[ <sugerenciaCombinacin> ] JOIN ]
Especifica las tablas, vistas, tablas derivadas y tablas combinadas de la instruccin
SELECT.
nombreTabla [ [AS] aliasTabla ]
Especifica el nombre de una tabla y un alias opcional.
Es un conjunto de resultados producto de una o ms tablas; por ejemplo:
FROM tab1 LEFT OUTER JOIN tab1.c3 = tab2.c3
RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
ON tab3.c1
ON tab2.c3 = tab4.c3

INNER
Especifica que se devuelvan todos los pares de filas coincidentes. Descarta las filas no
coincidentes de las dos tablas. ste es el valor predeterminado si no se especifica ningn
tipo de combinacin.

LEFT [OUTER]

Especifica que todas las filas de la tabla de la izquierda que no cumplan la condicin
especificada se incluyan en el conjunto de resultados, adems de todas las filas que
devuelva la combinacin interna. Las columnas de salida de la tabla de la izquierda se
establecen a NULL.

RIGHT [OUTER]

Especifica que todas las filas de la tabla de la derecha que no cumplan la condicin
especificada se incluyan en el conjunto de resultados, adems de las que devuelva la
combinacin interna. Las columnas de salida de la tabla de la derecha se establecen a
NULL.

JOIN

Indica que las tablas o vistas especificadas deben combinarse.


ON <condicinBsqueda>
Especifica la condicin en la que se basa la combinacin. La condicin puede
especificar cualquier predicado, aunque se suelen utilizar columnas y operadores de
comparacin; por ejemplo:
SELECT Pedido.NroPed, NomCli
FROM Pedido JOIN Cliente
ON (Pedido.Codcli = Cliente.Codcli)

Consultas bsicas

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 Cli_nom, Cli_cre FROM Clientes
O tambien puede mostrar todos los campos
SELECT * FROM Clientes

Adicionalmente se puede especificar el orden en que se desean recuperar los registros


de las tablas mediante la clasula ORDER BY Lista de Campos. En donde
Lista de campos representa los campos a ordenar. Ejemplo:
SELECT * FROM Clientes ORDER BY Cli_nom;

Incluso se puede especificar el orden de los registros: ascendente mediante la clasula


(ASC -se toma este valor por defecto) descendente (DESC)
SELECT * FROM Clientes ORDER BY
Cli_cre DESC , Cli_nom asc
Ordena los clients por linea de credito de mayor a menor si tuviesen creditos iguales los
ordena por Nombre

Consultas con Predicado


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

Predicado
TOP

Descripcin
Devuelve un determinado nmero de registros de la tabla

DISTINCT

Omite los registros cuyos campos seleccionados coincidan totalmente

DISTINCTROW

Omite los registros duplicados basndose en la totalidad del registro y


no slo en los campos seleccionados.

TOP
Devuelve un cierto nmero de registros que entran entre al principio o al final de un
rango especificado por una clusula ORDER BY. Supongamos que queremos recuperar
los nombres los 10 primeros clientes con mayor linea de credito :
SELECT TOP 25
Cli_cod, cli_nom
ORDER BY Cli_cre DESC

cli_cre

FROM Clientes

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.
Por ejemplo, varios vendedores realizan ventas , si se desea Mostar los vendedores que
hayan hecho ventas sin que se repita el codigo .
SELECT DISTINCT ven_cod FROM Fac_cabe
Con 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 apellido (igual que el campo devuelto) se llame Empleado. En
este caso procederamos de la siguiente forma:
SELECT DISTINCTROW Apellido AS Empleado FROM Empleados

EJEMPLOS.Para ver los objetos que hay en el SQL Server presionamos F8 (Examinador de objetos) y nos
saldra una ventana parecida a la del administrador corporativo.

Lenguaje de Definicin de datos

Tenemos la base de Datos BDBANCO y tenemos las sgtes tablas:


create table banco(codban varchar(4) not null primary key,
nomban varchar(30) not null)
go
create table cuenta(nrocta int primary key not null,
nomcli varchar(70) not null,
dircli varchar(40) not null,
fecaper datetime not null,
saldoaper numeric(8,2) not null,
tipocta varchar(1) not null,
codban varchar(4) not null,
foreign key(codban) references banco(codban)
on delete cascade
on update cascade
--Foreign key es para crear un clave foranea es decir Codban es una clave foranea
que va a ser jalada de la tabla banco del campo codban
--Se pone on delete cascade y on update cascade para eliminar y actualizar en
cascada es --decir si se elimina un banco se eliminaran las cuentas de ese banco.
go
create table movimiento(nromov int identity(100001,1) primary key not null,
tipomov varchar(1) not null,
fechamov datetime not null,
monto numeric(8,2) not null)
--Identity(100001,1) quiere decir que es autonumerico empieza del 100001 y va
avanzar de 1 en 1

--Agregar un campo Ciudad a la tabla banco que tenga Lima como valor x defecto.
alter table banco add ciudad varchar(15) default 'lima'
--Modificar el campo nomcli de la tabla cuenta
alter table cuenta alter column nomcli varchar(50)
--Agregar una restriccion al campo fecaper y poner la fecha actual x defecto
alter table cuenta add constraint resfechaaper default getdate() for fecaper
--Agregar una restriccion a la tabla cuenta al campo tipocta que solo acepte S o D
alter table cuenta add constraint restipocta check(tipocta like '[s,d]')
--Eliinar el campo dircli de cuenta
alter table cuenta drop column dircli

alter table movimiento add constraint restipomov check(tipomov like '[D,R]')


--Agregar un campo nrocta a Movimiento que sea clave foramea es decir va a jalar los
----datos de nrocta de la tabla cuenta
alter table movimiento add nrocta int foreign key(nrocta) references cuenta(nrocta)
on update cascade
on delete cascade
Nota:Si el campo nrocta ya hubiera existido y solo queremos crear el constraint que
haga la relacion con la tabla cuenta la sentencia seria asi:
alter table movimiento add constraint pkNro foreign key(nrocta) references
cuenta(nrocta)
--Agregar una restriccion al campo monto que solo acepte numeros del 0 al 1000
alter table movimiento add constraint resmonto check(monto between 0 and 1000)

MAnipulacion de Datos
Ejemplo: Tomando la base de datos del ejemplo Anterior BDBANCO llenemos datos
--Esta es una forma de llenar datos poniendo los campos y los valores
insert into banco (codban,nomban) values('b','latino')
--Esta es mas sencilla no se pone los campos solo los valores
insert into banco values('a','wiese',default)
insert into banco values('c','credito',default)
insert into banco values('d','continental','piura')
go
insert into cuenta values(10001,'ana suarez','01/01/2001',100.20,'s','a')
insert into cuenta values(10002,'luis salas',default,500.00,'s','a')
insert into cuenta values(10003,'pedro chang','04/10/1998',750.50,'d','c')
go
insert into movimiento values('d',default,140,10001)
insert into movimiento values('d',default,90,10001)
insert into movimiento values('r','01/10/2002',123,10001)
insert into movimiento values('r','11/03/2002',200,10002)
NOTA: Observen que en algunos campos se pone DEFAULT y esto se debe a que al
campo se le ha puesto una restriccin para que tome un valor x defecto ademas en la
tabla movimiento no se esta llenando el campo nromov y esto se debe a que ese
campo es autonumerico.

Practica dirigida DDL y DML


--lenguaje de definicion de datos
--use activa la base de datos
--en este caso se activa la base de datos master
use master
--go continua con la line de abajo
go
--sysdatabases es una tabla del sistema y en el campo name se almacena --el nombre de
las bases de datos que han sido creadas
--exists devuelve true si cumple la condicion o false si no cumple
if exists(select name from sysdatabases where name=BDUTP')
bejn
--drop database elimina la base de datos
drop database BDUTP
end
go
--create database crea una base de datos
create database BDUTP
go
--se activa la base de datos BDUTP
use BDUTP
go
--create table crea una tabla
create table alumno(codalu int,nomalu varchar(50),diralu varchar(50),numlocal
varchar(2))
go
create table curso(codcur varchar(4),nomcur varchar(50),precur numeric(8,2))
go
create table nota(codalu int,codcur varchar(4),np int,nf int,susti int,prom int)
go
--lenguaje de manipulacion de datos
--sentencia insert
insert into alumno (codalu,nomalu,diralu,numlocal)values(1001,'juan perez','jr arica
1234','01')
insert into alumno (codalu,nomalu,diralu,numlocal)values(1002,'miguel solis','jr tarma
123','01')
insert into alumno (codalu,nomalu,diralu,numlocal)values(1003,'ana salas','jr peru
3454','02')
insert into alumno (codalu,nomalu,diralu,numlocal)values(1004,'nadia chu','jr lima
1221','02')
insert into alumno (codalu,nomalu,diralu,numlocal)values(1005,'mario espinoza','jr
piura 334','03')
go
insert into curso values('mate','matematica',43.20)
insert into curso values('lp-1','lenguaje de programacion i',50.00)
insert into curso values('lp-2','lengaaa',55.50)
go
insert into nota (codalu,codcur,np,nf)values(1001,'mate',12,09)

insert into nota (codalu,codcur,np,nf)values(1001,'lp-1',05,12)


insert into nota (codalu,codcur,np,nf)values(1001,'lp-2',15,16)
insert into nota (codalu,codcur,np,nf)values(1002,'mate',14,12)
insert into nota (codalu,codcur,np,nf)values(1002,'lp-1',20,12)
insert into nota (codalu,codcur,np,nf)values(1003,'mate',17,15)
go
--sentencia update
--modificar el nombre del curso lp-2
update curso set nomcur='lenguaje de programacion ii' where codcur='lp-2'
--actualizar los promedios de las notas
update nota set prom=(np+nf)/2
--el alumno 1001 en el examen sustitutorio de matematica saco 12 actualizar su nota
update nota set susti=12 where codalu=1001 and codcur='mate'
--reemplazar la nota menor con la nota del susti
update nota set nf = susti where codalu=1001 and codcur='mate'
--volver a calcular el promedio
update nota set prom=(np+nf)/2 where codalu=1001 and codcur='mate'
go
--sentencia delete
--eliminar todos los alumnos jalados en el promedio final
delete from nota where prom<=11
--eliminar a todos los alumnos que esten jalados y que sean del curso de matematica
delete from nota where prom<=10 and codcur='mate'
--sentencia select
select * from nota
--1 visualiza el promedio y el codigo de los alumnos aprobados
select prom,codalu from nota where prom>10
--2 visualiza el codigo de los alumnos que no han dado examen sustitutorio
select codalu from nota where susti is null
--3 visualiza el codigo de los alumnos que no han dado examen sustitutorio sin repetir el
codigo
select distinct codalu from nota where susti is null
--4 visualiza el codigo de los alumno que han dado examen susti sin repetir el codigo
select distinct codalu from nota where susti is not null
--5 visualiza las notas que tengan como promedio 12 y 15
select * from nota where prom between 12 and 15
--6 mostrar la nota mas alta y mas baja
select max(prom) as nota_mayor,min(prom) as nota_menor from nota
--7 mostrar el codigo del alumno,promedio y el codigo del curso de los alumnos y
ordenar el promedio en forma descendente y el codigo del alumno en forma ascendente
select codalu,prom,codcur from nota order by prom desc,codalu
--8 mostrar los 3 primeros puestos (codigo del alumno,promedio y el codigo del curso
de los alumnos y ordenar el promedio en forma descendente y el codigo del alumno en
forma ascendente)
select top 3 codalu,prom,codcur from nota order by prom desc,codalu
--9 mostrar los registros de los alumno que vivan en jiron arica

select * from alumno where diralu like 'jr arica%'


--10 mostrar los alumnos que pertenecen al local 01 o 02
select * from alumno where numlocal in('01','02')
--11 mostrar las notas cuyo promedio sea 12,14,15 o 16
select * from nota where prom in(12,14,15,16)
--12 mostrar cuantos alumnos hay
select count(*) as total from alumno
--13 mostrar el precio promedio de los cursos
select avg(precur) from curso
--14 visualiza el nombre del alumno,codigo del curso,np,nf susti y su promedio
select nomalu,codcur,np,nf,susti,prom
from alumno inner join nota on alumno.codalu=nota.codalu
--otra forma
select nomalu,codcur,np,nf,susti,prom
from alumno,nota where alumno.codalu=nota.codalu
--15 visualiza el nombre del alumno,el nombre del curso y el promedio
select nomalu,nomcur,prom from alumno inner join nota on alumno.codalu=nota.codalu
inner join curso
on nota.codcur=curso.codcur
--otra forma
select nomalu,nomcur,prom
from alumno,curso,nota where alumno.codalu=nota.codalu and
curso.codcur=nota.codcur

--funciones de fecha
alterar la tabla alumno y agregar fecha de inicio
--mostrar el nombre del alumno la fecha de matricula (fechamat)y la fecha de inicio de
clases(10 dias despues de la matricula)
select nomalu,fechamat,dateadd(dd,10,fechamat) as fecha_inicio from alumno
--mostrar el nombre del alumno el ao,y el mes en que se matricularon
select nomalu,datepart(yy,fechamat) as anio,datepart(mm,fechamat) as mes from
alumno

--mostrar el nombre del alumno la fecha de matricula y la cantidad de dias que han
pasado desde que se matriculo

select nomalu,fechamat,datediff(dd,fechamat,getdate()) as cantidias from alumno


--mostrar el nombre del alumno la fecha de matricula el nombre del dia y el nombre del
mes de la matricula
select nomalu,fechamat,datename(dw,fechamat) as dia,datename(mm,fechamat) as
mes from alumno
--mostrar el mes el dia y el ao de la fecha actual y la fecha actual

select year(getdate()),month(getdate()),day(getdate()),getdate()

--autogenerar el codigo con el ultimo digito del codalu + el primer carater del apellido+
los 2 primeros caracteres del nombre + los tres primeros cararcateres del mes + los 2
ultimos caracteres del ao.

select left(convert(varchar(4),codalu),1) from alumno


select substring(nomalu,charindex(' ',nomalu) + 1 ,len(nomalu)) from alumno
select upper(left(datename(mm,fechamat),3)) from alumno
select cast(right(year(fechamat),2) as varchar(2)) from alumno
--ahora juntamos todo y el rsultado seria:
select alumno.*,right(convert(varchar(4),codalu),1) + substring(nomalu,charindex(' '
,nomalu)+1,1) +
left(nomalu,2) + upper(left(datename(mm,fechamat),3)) + right(cast(year(fechamat) as
varchar(4)),2)
from alumno

--USO DEL CASE WHEN THEN


SELECT NOTA.*,
OBS = CASE
WHEN PROM <=10 THEN 'DESAPROBADO'
WHEN PROM >10 THEN 'APROBADO'
END
FROM NOTA
Crear Vistas: Crea una tabla virtual que representa los datos de una o ms tablas de
una forma alternativa. CREATE VIEW debe ser la primera instruccin en una
secuencia de consultas.
Ejemplo:
CREATE VIEW titles_view
AS
SELECT title, type, price, pubdate
FROM titles
Se ha creado una vista llamada titles_view con algunos campos de la tabla titles, a
esta vista se le puede hacer los mismos procesos que a una tabla.
Para eliminar se pone DROP VIEW Nombre de la Vista

Crear Indices.-Crea un ndice de una vista o una tabla dada.


Ejemplo:
CREATE UNIQUE INDEX titles_ind
ON titles (title,type)
Aqui se esta creando un indice llamado titles_ind indicando que el campo title y type
no se podran repetir.
Para borrar un indice seria DROP INDEX TITLES.TITLES_IND (Va el nombre de la
tabla. El nombre del indice)

Funciones de fecha y hora


Estas funciones escalares realizan una operacin sobre un valor de fecha y
hora de
entrada, y devuelven un valor de cadena, numrico o de fecha y hora.
Esta tabla presenta las funciones de fecha y hora.
DATEPART.- DATEPART ( datepart , date )

Datepart.- Es el parmetro que especifica la parte de la fecha que se va a devolver. La


tabla enumera las partes de las fechas y abreviaturas reconocidas por Microsoft
SQL Server.
Parte de la fecha
Abreviaturas
Year

yy, yyyy

Quarter

qq, q

Month

mm, m

Dayofyear(dia del ao son 365


dias por ao)

dy, y

Day

dd, d

Week(Numero de semana Tome wk, ww


en cuenta que le mes tiene 4
semanas mas o menos)
Weekday(Numero de dia Ejemplo: 1 Dw
lunes,2 martes etc)
Hour

Hh

Minute

mi, n

Second

ss, s

Millisecond

Ms

Date .- es la fecha con la cual se va a operar


Ejemplo:
SELECT DATEPART(MM,'01/08/2003') .- Esto Devuelve el mes de la fecha 01-08-03
Otras Funciones.Funcin
Concepto
DATEADD

Devuelve un valor que es la suma de un intervalo a la fecha


especificada.
Sintaxis

DATEADD ( datepart , number, date )


En este ejemplo a un campo fecha llamado pubdate se le esta
sumando 21 dias.
USE pubs
GO
SELECT DATEADD(day, 21, pubdate) FROM titles
DATEDIFF

Devuelve la diferencia de fecha y hora que hay entre


dos fechas especificadas.
Sintaxis

DATEDIFF ( datepart , startdate , enddate )


Ejemplos

En este ejemplo se determina la diferencia en das entre


la fecha actual y la fecha de publicacin de los ttulos de la
base de datos pubs.
USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) FROM titles

DATENAME

Devuelve una cadena de caracteres que representa la parte de


la fecha especificada de la fecha especificada.
Sintaxis

DATENAME ( datepart , date )


Ejemplos

En este ejemplo se extrae el nombre del mes de la


fecha devuelta por GETDATE.
SELECT DATENAME(month, getdate()) AS 'Month Name'

DAY

Devuelve un entero que representa la parte del da de la fecha


especificada.
Sintaxis

DAY ( date )
Equivale a DATEPART(dd,Fecha)
GETDATE

Devuelve la fecha y hora actual


Sintaxis

GETDATE ( )
MONTH

Devuelve un entero que representa el mes de una


fecha especificada.
Sintaxis

MONTH ( date )
Equivale a DATEPART(mm,Fecha)
YEAR

Devuelve un entero que representa la parte de ao de la fecha


especificada.
Sintaxis

YEAR ( date )
Equivale a DATEPART(yy,Fecha)

Funciones matemticas
Estas funciones escalares realizan un clculo, normalmente basado en valores de entrada
proporcionados como argumentos, y devuelven un valor numrico.
ABS
Devuelve
el DEGREES Dado un ngulo RAND Devuelve un valor
valor absoluto, positivo en radianes,
devuelve
el float aleatorio de 0 a 1.
de
la expresin ngulo
correspondiente en
Sintaxis
numrica dada.
grados.
Sintaxis

ABS
)

RAND
(numeric_expression)
(numeric_expression DEGREES(numeric_expression) Ejem: SELECT RAND(5)

ACOS
Devuelve
el
ngulo,
en
radianes,
cuyo coseno
es
la
expresin de tipo float
dada;
tambin
denominado arcocoseno.

Sintaxis

EXP Devuelve
el
valor ROUND Devuelve una
exponencial de la expresin float expresin
numrica,
dada.
redondeada a la longitud
o precisin especificada.
Sintaxis
Sintaxis

EXP ( float_expression )

ROUND(
numeric_expression , length
)

Sintaxis

ACOS ( float_expression )
ASIN ASIN

FLOOR Devuelve el entero ms


grande
menor
o
igual
la expresin numrica
Devuelve
el
ngulo, que
en radianes, cuyo seno dada.
es la expresin float
Sintaxis
dada
(denominado
tambin
FLOOR ( numeric_expression )
arcoseno).

SIGN
Devuelve
el
signo positivo
(+1),
cero (0) o negativo (1)
de
la
expresin especificada.
Sintaxis

SIGN ( numeric_expression
Sintaxis

ASIN ( float_expression )
ATAN ATAN

LOG Devuelve el logaritmo SIN Devuelve el seno


natural
de
la
expresin trigonomtrico
del
ngulo especificado
(en
Devuelve
el
ngulo, float dada.
radianes)
en
una
en radianes, cuya tangente
Sintaxis
expresin
numrica
es la expresin float
aproximada (float).
dada (denominado
LOG
(
float_expression
)
tambin
Sintaxis
arcotangente).
SIN ( float_expression )

Sintaxis

ATAN ( float_expression )
ATN2 ATN2

LOG10
Devuelve
el SQUARE Devuelve
logaritmo en base 10 de la cuadrado
de
Devuelve
el
ngulo, expresin float dada.
expresin especificada.
en radianes, cuya tangente
Sintaxis
es un
valor
entre Sintaxis
las
dos expresiones
SQUARE
float dadas LOG10 ( float_expression )
float_expression )
(denominado
tambin
arcotangente).

el
la

Sintaxis

ATN2 ( float_expression
,
float_expression )
CEILING Devuelve el PI Devuelve el valor
entero ms pequeo mayor constante de PI.
o
igual
que
la
expresin numrica dada. Sintaxis

SQRT Devuelve la raz


cuadrada
de
la
expresin especificada.
Sintaxis

PI ( )

SQRT ( float_expression )
Sintaxis

CEILING
numeric_expression )

COS Funcin matemtica


que
devuelve
el
coseno
trigonomtrico
del ngulo dado
(en
radianes)
en
la
expresin de entrada.
Sintaxis

POWER Devuelve el valor de la TAN Devuelve la tangente


expresin indicada elevada a de la expresin de entrada.
la potencia especificada.
Sintaxis
Sintaxis

TAN ( float_expression )
POWER ( numeric_expression ,
y)

COS ( float_expression )
COT Funcin matemtica
que devuelve la cotangente
trigonomtrica
del
ngulo especificado (en
radianes) en la expresin
float.

RADIANS
Devuelve
los
radianes de una expresin
numrica en grados.
Sintaxis

RADIANS(numeric_expression)
Sintaxis

COT ( float_expression )
Todas las funciones matemticas, excepto RAND, son funciones
deterministas;
devuelven siempre el mismo resultado cada vez que se les llama con un
conjunto especfico de valores de entrada. RAND es determinista slo cuando se
especifica un parmetro de inicializacin

Funciones de cadena
Estas funciones escalares realizan una operacin sobre una cadena de
entrada y
devuelven un valor de cadena o un valor numrico.
ASCII
NCHAR
SOUNDEX
CHAR

PATINDEX

SPACE

CHARINDEX

REPLACE

STR

DIFFERENCE

QUOTENAME

STUFF

LEFT

REPLICATE

SUBSTRING

LEN

REVERSE

UNICODE

LOWER

RIGHT

UPPER

LTRIM

RTRIM

ASCII.- Devuelve el cdigo ASCII del carcter ms a la izquierda de una expresin de


caracteres.

Sintaxis

ASCII ( character_expression )
SELECT ASCII('\').- Esta funcion devolvera 92

CHAR.- Una funcin de cadena que convierte un cdigo ASCII int en un carcter.
Sintaxis

CHAR ( integer_expression )
SELECT CHAR('64').- Esta funcion devolvera @

CHARINDEX.- Devuelve la posicin inicial de la expresin especificada en


una cadena de caracteres.
Sintaxis

CHARINDEX (Caracter a buscar,Cadena en donde se busca, [opcional desde


que carcter se quiere buscar])
SELECT CHARINDEX(S,'CASA').- Esta funcion devolvera 3 que es la posicin
SELECT CHARINDEX(S,'CASA',4).- Esta funcion devolvera 0 por que
no se
encontro el carcter S a partir de la posicin 4.

LEFT.- Devuelve la parte de una cadena de caracteres que comienza en un nmero de


caracteres especificado a partir de la izquierda.
LEFT ( character_expression , integer_expression )
SELECT LEFT(REFRIGERADORA, 5) Esta funcion devolvera REFRI

RIGHT.- Devuelve la parte de una cadena de caracteres que comienza en el nmero de


caracteres especificado en integer_expression a partir de la derecha.
RIGHT ( character_expression , integer_expression )
SELECT RIGHT(REFRIGERADORA, 5) Esta funcion devolvera ADORA

LEN.- Devuelve la longitud de la cadena.


LEN ( string_expression )
SELECT LEN(CASA) Esta funcion devolvera 4
LOWER.- Devuelve una cadena convertida en minscula
SELECT LOWER(casa) .- Esto devuelve CASA
UPPER.- Devuelve una cadena convertida en mayscula.
SELECT UPPER(CASA) .- Esto devuelve casa
LTRIM.- Suprime los espacios en blanco a la izquierda
SELECT LTRIM( CASA) .- Esto devuelve CASA
RTRIM .- Suprime los espacios en blanco a la derecha
SELECT RTRIM (CASA ) .- Esto devuelve CASA

SPACE.- Devuelve una cadena de espacios repetidos.


SELECT LA + SPACE ( 2 ) + CASA .-Esto devuelve LA CASA

REPLACE .- Reemplaza por una tercera expresin todas las apariciones de la segunda
expresin de cadena proporcionada en la primera expresin de cadena.
Sintaxis

REPLACE ( 'cadena donde se busca' , 'cadena a buscar' , 'cadena a reemplazar' )


SELECT REPLACE(ABCDEF,DEF,XX) El resultado seria ABCXXX

REPLICATE.- Repite una expresin de caracteres un nmero especificado de veces.


Sintaxis

REPLICATE ( cadena ,cantidad a repetir)


SELECT REPLICATE(ABC,2) El resultado seria ABCABC
REVERSE.- Devuelve invertida una expresin de carcter.
SELECT REVERSE(CASA) El resultado seria ASAC
SUBSTRING.- Devuelve una subcadena a raiz de otra
SUBSTRING ( expression , start , length )
SELECT SUSBTRING(ABCD,2,2) El resultado seria BC

Otras funciones CAST y CONVERT


Convierten explcitamente una expresin de un tipo de datos en otro. CAST y
CONVERT proporcionan funciones similares.
Uso de CAST:
CAST ( expression AS data_type )
Uso de CONVERT:
CONVERT ( data_type , expression )
Ejemplo:
SELECT * FROM TITLES WHERE CAST(PRICE AS VARCHAR(7)) LIKE '19%'
SELECT * FROM TITLES WHERE CONVERT(VARCHAR(7),PRICE) LIKE '19%'
En ambos casos el campo Price es numerico y usando el CAST y el Convert (se puede
usar cualquiera de los dos) el campo se esta cambiando a varchar(7) por eso podemos
usar el like

Segunda practica:
instructor y

Teniendo la BDD BDTRANSITO que sera proporcionada por el

sus tablas :
CREATE TABLE INFRACCION(
INFCOD CHAR (3) Primary key ,
INFDES varchar (25) NULL ,
INFIMP numeric (8, 1) NULL
)

CREATE TABLE VEHICULO (


NROPLA char (6) NOT NULL primary key,
NOMPRO char(25) NULL ,
Codigo Infraccion , Descripcin (Infdes)
COLOR
varchar (15) NULL ,
e Importe de Multa(InfImp)MODELO VARCHAR(20) NULL
)
NroPla=>Nro de Placa
NomPro=>Nombre Propietario

CREATE table POLICIA(


IDPOLI char(4) NOT NULL Primary key ,
POL_NOM varchar (25) NULL ,
NROPAT CHAR(3) NULL
)

CREATE TABLE PAPELETA(


NROPAP char (6) Primary Key ,
NROPLA CHAR (6) NOT NULL,
INFCOD char (3) NOT NULL ,
IDPOLI CHAR (4) NULL ,
PAPFECHA DATETIME NULL

IdPoli=>Codigo del Policia

I.- Elaborar las siguientes consultas en SQL (14 puntos cada pregunta 2 puntos)
1.- Mostrar todos los vehculos que sean de color Rojo y Modelo Datsun
NropLa, Nompro, Modelo , Color
2.- Mostrar Todos papeletas del ao 2005
NroPap, Papfecha, Nropla
3-Mostrar todas las infracciones del Vehiculo con Numero Placa igual a V00001

Nropap, Papfecha, InfDes , InfImp


..
4.- Mostrar las papeletas impuestas del Polica con cdigo P001 y del ao 2005
Nropap, papFecha, InfCod

5.- Todas las papeletas impuestas del ao 2004 y cuyos meses estn comprendidas entre
mayo y octubre=> Nropap , PapFecha, Nompro,

6.- Mostrar las cantidades de papeletas y el total monto


2005
Mes
Enero ,

por cada mes, respecto al ao

Cantidad
Total
.

Capitulo 2.- Store Procedure


Crea un procedimiento almacenado, que es una coleccin guardada de
instrucciones Transact-SQL que puede tomar y devolver los parmetros
proporcionados por el usuario.
Los procedimientos se pueden crear para uso permanente o para uso temporal
en una sesin (procedimiento local temporal) o para su uso temporal en todas
las sesiones (procedimiento temporal global).
Los procedimientos almacenados se pueden crear tambin para que se
ejecuten automticamente cuando se inicia Microsoft SQL Server .
Sintaxis

CREATE PROC [ EDURE ] procedure_name [ ; number ]


[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
AS
Declare @v1 t1 , @v2 t2

-- declaracion de variables dentro del store

sql_statement [ ...n ]

Argumentos

procedure_name
Es el nombre del nuevo procedimiento almacenado. Los nombres de procedimiento
deben seguir las reglas de los identificadores y deben ser nicos en la base de datos y
para su propietario..
@parameter
Es un parmetro del procedimiento. En una instruccin CREATE
PROCEDURE se pueden declarar uno o ms parmetros. El usuario debe
proporcionar el valor de cada parmetro declarado cuando se ejecuta el
procedimiento, a menos que se haya definido
un valor predeterminado para el parmetro. Un procedimiento almacenado puede tener
un mximo de 2.100 parmetros.
Especifique un nombre de parmetro con un signo (@) como el primer carcter. Los
nombres
de
los
parmetros
deben
cumplir
las
reglas
de
los
identificadores. Los parmetros son locales para el procedimiento; los
mismos nombres de parmetro se pueden utilizar en otros procedimientos. De
forma predeterminada, los parmetros slo pueden ocupar el lugar de constantes;
no se pueden utilizar en lugar de nombres de tablas, nombres de columnas o
nombres de otros objetos de base de datos.
data_type
Es el tipo de datos del parmetro. Todos los tipos de datos,
incluidos
text, ntext
e
image,
se
pueden
utilizar
como
parmetros de un procedimiento almacenado. Sin embargo, el tipo
de datos cursor slo se puede utilizar en parmetros OUTPUT.
Procedimientos almacenados del sistema

Los procedimientos almacenados del sistema se crean y se almacenan en


la base
de
datos
master,
con el prefijo
sp_
(stored
procedure).
Estos procedimientos
se
pueden
ejecutar
desde
cualquier
base
de
datos
sin necesidad de
calificar totalmente su nombre mediante el de la base de datos master.
No es recomendable utilizar el prefijo sp_ para crear procedimientos
almacenados. SQL Server siempre busca procedimientos almacenados que
empiezan con sp_ siguiendo este orden:
1.
2.

El procedimiento almacenado en la base de datos master.


El procedimiento almacenado basndose en cualquiera de los calificadores
especificados (nombre o propietario de la base de datos).

3.

El procedimiento almacenado mediante el propietario dbo, si no se especifica


otro.

Por lo tanto, aunque en la base de datos actual pueda haber un procedimiento


almacenado creado por el usuario y que empiece por sp_, en primer lugar se
comprueba siempre la base de datos master incluso cuando el procedimiento
est calificado con el nombre de la base de datos.

Importante

Si algn procedimiento almacenado creado por un usuario tiene

el mismo nombre que un procedimiento almacenado del sistema, el que


haya creado el usuario no llegar a ejecutarse.

Ejemplos:
EMPLEANDO LA BASE BDFACTURA
CREATE procedure actu_stock
@p1 char(5),@p2 numeric(4,0)
as
update articulos set art_stock= Art_stock - @p2

where Art_codigo=@p1

RETURN
GO

-- GENERA FACTURA

CREATE procedure Genera_fac


@cf char(12) output
as
DECLARE @X CHAR(5)
DECLARE @y NUMERIC(4)

if (select count(*) from fac_cabe)>0


begin
SELECT
select
SELECT
end
else

@x=max(fac_numero) from fac_cabe


@y=convert(INT ,right(@x,4))+1
@cf="F"+right("000"+ LTRIM(@Y),4)

select @cf="F0001"
RETURN

-- GRABAR fACTURA

CREATE PROCEDURE Grabar_cabfac

@P1 CHAR(12),@P2

datetime ,@P3 char(5), @P4 char (1)

AS
INSERT INTO Fac_cabe
(FAC_numero,fac_fecha,Cli_codigo,fac_IGV) VALUES (@P1,@P2,@p3,@P4)
RETURN

GRABAR DETALLE

CREATE PROCEDURE Grabar_detfac


@P1 CHAR(12),@P2

char(5),@p3

Numeric(4,0), @P4 NUmeric (9,1)

AS
INSERT INTO Fac_deta
VALUES (@P1,@P2,@p3,@P4)
RETURN

-- Cantidad de articulos por mes y ao


CREATE PROCEDURE sp_CanArticulos

@Mes int , @an as Int

AS
Select A.Art_Nombre, cantidad=sum(art_cantidad)
From Fac_cabe F,Articulos A, Fac_deta as D
where A.Art_codigo=D.Art_codigo and F.Fac_numero = D.Fac_Numero and
Month(Fac_fecha)=@mes and Year(Fac_fecha)=@an
Group By Art_nombre
Return

-- por fechas
CREATE procedure sp_fechas
@f1 datetime,
@f2 datetime
as

SELECT fac_numero,cli_codigo,fac_fecha,fac_igv from fac_cabe where fac_fecha


between

@f1 and @f2

-- total venta

CREATE PROCEDURE sp_TotalVenta AS

select

Mes=Datename(mm, Fac_fecha), total=sum(Art_cantidad*A.Art_precio)

from Fac_cabe F, Fac_deta

D, articulos A

Where D.art_codigo=A.Art_codigo and

F.fac_numero=D.fac_numero
Group By Datename(mm,fac_fecha)

-- porcentaje de ventas por ao


CREATE PROCEDURE sp_VenPorcentaje
declare @total
select

@an int

AS

Numeric(10,2)

@total =sum(D.art_cantidad*A. art_precio ) from Fac_deta D, Articulos A,

fac_cabe f
Where f.Fac_numero=D.fac_numero and D.art_codigo =A.Art_codigo and
year(fac_fecha)=@an

Select C.cli_codigo, C.Cli_nombre,


Porcentaje=str((sum(d.art_cantidad*a.art_precio)/@TOTAL )*100,8,2)
FROM Fac_cabe F, Fac_deta D, Articulos A , CLientes C
where f.fac_numero =D.Fac_numero and
year(fac_fecha)=@an

D.Art_codigo=A.Art_codigo and

and C.Cli_codigo=F.Cli_codigo

group by c.Cli_codigo,c.Cli_nombre

La Base de Datos BDVENTAS ser entregada por el Instructor, se pide elaborar los
siguientes Procedimientos:
1..- Pasando un cdigo de vendedor que muestre todos sus ventas realizadas.
2.- Pasando un cdigo del cliente, que muestre todas sus facturas con su importe
respectivo
Fac_num,Fac_fecha y Total
3.- Pasando un ao que muestre, por cada mes la cantidad de facturas y su Importe Total

Mes , Cantidad , Total


4.-Pasando el ao y un numero de mes que muestre las facturas de ese mes con su
importe total
Fac_num, Total
5.- Pasando los primeros caracteres de un nombre de cliente que muestre todos los
clientes, que tienen esa coincidencia
6.- Pasando un ao que muestre la cantidad de productos vendidos en ese ao
Art_nom, Cantidad total
7.-Pasando un ao que muestre por cada cliente , la cantidad de facturas y su importe
total
Cli_cod,Cli_nom, Cantidad y Total
8.-Pasando un ao que muestre los porcentajes vendidos por cada vendedor.
Ven_cod, Ven_nom, Porcentaje
9.- Procedimiento que permita grabar nuevos clientes
10.- Procedimiento que permite grabar nuevos vendedores devolviendo el cdigo de
vendedor
11.-Procedimiento que permita generar cdigos del cliente a partir de (C0001)
12.-pasando un ao que muestre todos los vendedores, que no hayan hecho ventas en
ese ao.
13.- Pasando un ao que muestre los clientes, con mayor venta en ese ao

Paso del Modelo Fisico a a SQL


1.- Abrir Rational Ross
2.- Disear el modelo fisico de datos

You might also like