0% encontró este documento útil (0 votos)
24 vistas40 páginas

Introducción a SQL: DDL y Vistas

Este documento describe el lenguaje SQL y sus principales comandos para la manipulación y definición de datos, incluyendo las tablas, vistas, índices y tipos de datos.

Cargado por

Mateo Vargas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
24 vistas40 páginas

Introducción a SQL: DDL y Vistas

Este documento describe el lenguaje SQL y sus principales comandos para la manipulación y definición de datos, incluyendo las tablas, vistas, índices y tipos de datos.

Cargado por

Mateo Vargas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

SQL (Structured Query Language)

Lenguaje no procedural: digo QUE no COMO

Constituido por comandos de:


- Manipulación de Datos (DML)
- Definición de datos (DDL)
Puede ejecutarse mediante:
- Sql interactivo
- Programas de aplicación
Data Definition Language
DDL
- CREATE TABLE
- ALTER TABLE
- DROP TABLE
- CREATE VIEW
- DROP VIEW
- CREATE INDEX
- DROP INDEX
DDL
CREATE TABLE
CREATE TABLE nombreTabla
(definiciónColumna [,definiciónColumna]...
[,definiciónClavePrincipal]
[,definiciónClaveAjena [,definiciónClaveAjena]... ]
);
DDL
Ejemplo CREATE TABLE

CREATE TABLE estudiante


( ci INTEGER NOT NULL,
nom CHAR(20) NOT NULL,
telf INTEGER,
PRIMARY KEY (ci)
);
DDL
Ejemplo CREATE TABLE

CREATE TABLE materia


( sigla CHAR(6) NOT NULL,
descrip CHAR(20) NOT NULL,
creditos SMALLINT NOT NULL,
PRIMARY KEY (sigla)
);
DDL
Ejemplo CREATE TABLE
CREATE TABLE nota
( ci INTEGER NOT NULL,
sigla CHAR(6) NOT NULL,
gestion SMALLINT NOT NULL,
calif SMALLINT NOT NULL,
PRIMARY KEY (ci,sigla,gestion),
FOREIGN KEY (ci) REFERENCES estudiante,
FOREIGN KEY (sigla) REFERENCES materia
);
DDL
Tipos de Datos Numéricos

- INTEGER (entero de 2 bytes)


- SMALLINT (entero de 1 byte)
- DECIMAL(p,q) (decimal con p dígitos y q a la derecha del
punto decimal)
- FLOAT(p) (Número de punto flotante con precisión de p
dígitos binarios)
-
DDL
Tipos de Datos Cadena/FechaHora
- CHARACTER(n) (Cadena de longitud fija: n bytes)
- VARCHAR(n) (Cadena de longitud variable <=n bytes)
- DATE (fecha)
- TIME (hora: hhmmss)
- TIMESTAMP (marca de tiempo: fechaHora)

Se manejan abreviaturas diferentes: CHAR/CHARACTER,


DEC/DECIMAL, INT/INTEGER
DDL
NULL: indicador de “Información Faltante”
Null < > ‘ ’ Null < > 0

SE DESCONOCE
- Fecha de nacimiento desconocida
- Paradero actual desconocido (expediente policíaco)
NO SE APLICA
- empleado (ci,nom,telf,direcc,ciJefe) El jefe máximo no
tiene jefe.

Trate de evitarlos: Problemas al hacer operaciones con nulos


DDL
ALTER TABLE
ALTER TABLE nomTabla ADD col tipoDato
Ejemplo:
ALTER TABLE materia ADD area VARCHAR(20);
Para todos los registros: valor del nuevo campo = NULL

Algunos manejadores permiten además:


-Eliminar un campo de una tabla
-Cambiar el tipo de datos de un campo
DDL
DROP TABLE
DROP TABLE nomTabla;

Borra toda la tabla (con todos sus registros) de la base de datos


DDL
INDICES
CREATE [UNIQUE] INDEX nomIndice
ON nomTabla (columna [orden] [, columna [orden]] ...)
[CLUSTER];

Orden: ASC o DESC (ASC por defecto)


CLUSTER: Indica que se trata de un índice de agrupamiento
UNIQUE: No pueden haber duplicados en los campos

Crea un índice
DDL
INDICES
Ejemplo:
CREATE UNIQUE INDEX xestudiante
ON estudiante (ci);
CREATE UNIQUE INDEX xmateria
ON materia (sigla);
CREATE UNIQUE INDEX xnota
ON nota (ci , sigla desc);
CREATE INDEX xamateria
ON materia (area)
DDL
INDICES
DROP INDEX nomIndice

Borra un índice
DDL
¿Para qué se usan los INDICES?
DDL
VISTAS
-Vista= tabla virtual (no existe pero para el usuario
parece existir)
- No se crea una tabla en si, pero la inf. de la vista se
guarda en el catálogo del sistema

CREATE VIEW nomVista [(columna [,columna]...)]


AS subconsulta
[WITH [cascaded | local] CHECK OPTION]
Subconsulta: sobre tablas o
DROP VIEW nomVista vistas
DDL
VISTAS
CREATE VIEW nomVista [(columna
[,columna]...)]
AS subconsulta
[WITH CHECK OPTION]
Si se incluye WITH CHECK OPTION =>
Los inserts y updates sobre la vista serán rechazados si violan cualquier restricción
de integridad implicada por la expresión que define la vista
DDL
Ejemplo: VISTAS
-Vista= tabla virtual (no existe pero para el usuario
parece existir)

CREATE VIEW mujeres


AS SELECT ci,nom,telf
FROM estudiante
WHERE sexo=‘f’
DDL
¿Para que se usan las VISTAS?
- Ofrecen una posibilidad de abreviar consultas
- Proporcionan seguridad automática para datos ocultos
- Permiten que los datos sean vistos de distinta forma
por diferentes usuarios al mismo tiempo.
- Pueden ofrecer la independencia lógica de los datos
DDL
¿Para que se usan las VISTAS?
-Vista=
OFRECE tabla virtual (no existe
LA POSIBILIDAD DEpero para el usuario
ABREVIAR CONSULTAS
parece existir)

El usuario
SELECT * FROM mujeres escribe su consulta
WHERE carrera=“SIS” sobre la tabla
virtual
Se traduce en:

SELECT ci,nom,telf FROM estudiante El sistema la


Traduce para trabajar
WHERE carrera=“SIS” and sexo=‘f’ con la tabla real
DDL
¿Para que se usan las VISTAS?
PROPORCIONAN SEGURIDAD AUTOMÁTICA PARA
DATOS OCULTOS
CREATE VIEW docentePaEstudiante
AS select ci,nom,mail
from docente

Vista para los estudiantes,


no necesitan saber su
teléfono ni dirección
Docente(ci,nom,mail,telf,
direcc,salario)
DDL
¿Para que se usan las VISTAS?
PERMITEN QUE LOS DATOS SEAN VISTOS DE DISTINTA FORMA
POR DIFERENTES USUARIOS AL MISMO TIEMPO

CREATE VIEW docentePaEstudiante


Vista para los
AS select ci,nom,mail
estudiantes (no
from docente les interesa
saber su salario
ni dirección)
CREATE VIEW docentePaAdministr
AS select ci,nom,mail,direcc,telf,fecIng,salario
from docente
Vista para los
Administrativos
(les interesa la
fecha de
ingreso y
Docente(ci,nom,mail,fec_ing, salario)
telf,direcc,salario,evaluación)
DDL
¿Para que se usan las VISTAS?
PUEDEN OFRECER LA INDEPENDENCIA LÓGICA DE LOS DATOS

Independencia lógica de datos= inmunidad de


los usuarios y programas de usuario ante los
cambios en la estructura lógica de la base de
datos (estructura lógica=nivel conceptual)

Dos aspectos relacionados con la


independencia lógica de datos:
a)Crecimiento: aumentar atributos o tablas
b)Reestructuración: Dividir una tabla en 2
DDL
¿Para que se usan las VISTAS?
PUEDEN OFRECER LA INDEPENDENCIA LÓGICA DE LOS DATOS

Ej:Se tiene una tabla


Materia(sigla, descrip, area,creditos,nivel)
Se la divide en
M1(sigla, descrip)
M2(sigla, area,creditos,nivel)
Para mantener la inmunidad, creamos una vista
materia:
CREATE VIEW materia AS
select m1.sigla as sigla, descrip,area, creditos, nivel
from m1,m2 where m1.sigla=m2.sigla
Las aplicaciones seguirán trabajando sobre materia, no se
enterarán de este cambio
DDL
Restricciones al operar sobre VISTAS
- Puede realizar todas las operaciones de consulta.
- Evitar operaciones de actualización: inserción, delete,
update (tomando en cuenta la naturaleza de la vista)
create view areas
as select area,creditos from materia
where creditos<5
Delete from areas where area=‘Progra’
No tiene la Clave principal, que registros borraría?
Borraría todas las materias de menos de 5 créditos y del área de progra
DDL
Tipos de vistas
- Vista de subconjunto de columnas
- Vista de subconjunto de filas
- Vista de reunión
- Vista de resumen estadístico
DDL
Restricciones al operar sobre VISTAS
create view areaCreditos create view siglaArea
as select area,creditos as select sigla,area
from materia from materia

En teoría, para las vistas de “subconjunto de columnas”:


-Se pueden actualizar las que incluyan la clave principal de la
tabla real (puedo identificar el registro afectado)
-No se pueden actualizar las que NO incluyan la clave principal
de la tabla real (no puedo identificar el registro afectado)
DDL
Puedo insertar un registro en la vista?
Sea materia(sigla,descrip,creditos,nivel,area)
create view areaCreditos create view siglaArea
as select area,creditos as select sigla,area
from materia from materia

Insertar (inf-200,progra) en siglaArea se traduce en


Insertar(inf-200,null,null,null,progra) en materia

Insertar (progra,5) en areaCreditos se traduce en


Insertar(null,null,5,null,progra) en materia

Clave principal no
puede ser nula!
DDL
Puedo modificar un campo ya existente en la vista?
Sea materia(sigla,descrip,creditos,nivel,area)
create view areaCreditos create view siglaArea
as select area,creditos as select sigla,area
from materia from materia

Update el área de inf-102 de progra a info se traduce en


Update el área de inf-102 de progra a info en materia

Update el registro (progra,6) por (BD,6) en areaCreditos


se traduce en
Update algún registro correspondiente en materia

Pero cuál?
DDL
Puedo eliminar un registro ya existente en la vista?
Sea materia(sigla,descrip,creditos,nivel,area)
create view areaCreditos create view siglaArea
as select area,creditos as select sigla,area
from materia from materia

Borrar (inf-120,progra) en siglaArea se traduce en


Borrar (inf-120,Programación I,6,1,progra) en materia

Borrar (progra,6) en areaCreditos se traduce en


Borrar algún registro (?,?,6,?,progra) en materia

Pero cuál?
DDL
Restricciones al operar sobre VISTAS
create view MateriasProgra
as select *
from materia
where area=`Programación’

En teoría, para las vistas de “subconjunto de filas”:


-Se pueden actualizar porque incluyen la clave principal de la
tabla base.
DDL
Restricciones al operar sobre VISTAS
create view DelMismoColegio
as select (ci_a,nom_a,colegio_a,ci_d,nom_d,colegio_d)
from alumno,docente
where colegio_a=colegio_d

En teoría, para las vistas de “reunión”:


-NO Se recomienda actualizar aunque incluyan la clave principal
de las tablas base:
Cambiar (1,juan,Sucre,2,pepe,Sucre) por (1,juan,Sucre,2,pepe,Bolivar)
en la vista, qué efectos tendría? Equivaldría a borrar el registro de la vista
DDL
Restricciones al operar sobre VISTAS
create view DelMismoColegio
as select (ci_a,nom_a,colegio_a,ci_d,nom_d,colegio_d)
from alumno,docente
where colegio_a=colegio_d
para las vistas de “reunión”:
Borrar (1,juan,Sucre,2,pepe,Sucre) de la vista qué efectos tendría?
Podría borrar 1 Juan Sucre de Alumno
Podría borrar 2 Pepe Sucre de Docente
Pero al hacerlo, también se borraría el segundo registro de la vista !
Ci_a Nom_a Colegio_a Ci_d Nom_d Colegio_d Ci_a Nom_a Colegio_a Ci_d Nom_d Colegio_d

1 Juan Sucre 2 Pepe Sucre 1 Juan Sucre 2 Pepe Sucre


5 Ana Boliv 3 Tere Sucre 1 Juan Sucre 3 Tere Sucre

Alumno Docente DelMismoColegio


Catálogo del sistema
- Base de datos del sistema con inf. Sobre los objetos de
interés
- Catálogo es diferente en cada sistema: inf. específica
del sistema
- - Estructura y contenido representativo de un
Catálogo:
- SYSTABLES (nomTab, usrDueño,totColumnas ...)
- SYSCOLUMNS (nomCol, nomTab,tipo, ...)
- SYSINDEXES (nomIndice, nomTab,usrDueño, ...)
- SYSVIEWS ( ...)
Catálogo del sistema
- Podemos ver el catálogo de la base de datos: Por ejemplo los
datos de sys.objetcts en SQLServer
SELECT name AS object_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,create_date
,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - 10
ORDER BY modify_date;
Catálogo: la tabla sys.objects

Que los objetos


creados por
nosotros son dbo

Note que
hay 102
objetos
Catálogo: la tabla sys.tables

Obtenemos las
tablas de nuestra
base de datos
Catálogo: la tabla sys.columns

Clave ajena,
identificador de Obtenemos las
la tabla a la que columnas de nuestra
pertenece la base de datos
columna
Catálogo: la tabla sys.indexes

Obtenemos los
índices de nuestra
base de datos que
empiezan con PK

Note que son índices sobre las claves principals que el gestor crea para que las
consultas sean más eficientes.

Indice creado por el usurio a través de la sentencia:


create unique index nomAlum on alumno(nom)
Catálogo
Para ver las vistas:
select * from sys.views

Para ver los índices:


select * from sys.indexes

………

También podría gustarte