Está en la página 1de 40

Bases de Datos

SQL, Structured Query Language


Fernn Alonso Villa Garzn
Brevemente:
SQL es el lenguaje de consulta universal para bases
de datos.

SQL ANSI 92 es el estndar SQL.

Existen otras variantes que lo extienden como: T-


SQL (Transact-SQL) y PL/SQL (Procedure Language /
SQL)

SQL proporciona tres conjuntos bsicos de


sentencias:
D.M.L (lenguaje de manipulacin de datos).
D.D.L (Lenguaje de definicin de datos).
D.C.L (Lenguaje de Control de Datos).
Lenguaje de Definicin de Datos DDL
Este lenguaje se utiliza para la definicin de tablas,
vistas e ndices entre otros en la base de datos.

Comandos:
CREATE para crear objetos
ALTER para modificar la estructura de objetos
DROP para eliminar objetos
TRUNCATE para eliminar todos los registros de una
tabla.
COMMENT para agregar comentarios de un objeto al
diccionario de datos
RENAME para cambiar el nombre de un objeto
Lenguaje de Manipulacin de Datos DML
Como su nombre lo indica provee comandos
para la manipulacin de los datos, es decir,
podemos seleccionar, insertar, eliminar y
actualizar datos.

Comandos:
SELECT para consultar datos.
INSERT Insertar datos.
UPDATE actualizar datos.
DELETE eliminar algunos o varios registros.
Lenguaje de Control de Datos DCL
Este lenguaje provee comandos para
manipular la seguridad de la base de datos,
respecto al control de accesos y privilegios
entre los usuarios.

Comandos:
GRANT Para otorgar privilegios a un usuario
sobre un objeto.
REVOKE Para quitar privilegios dados a un
usuario sobre un objeto.
Componentes del Lenguaje SQL
Tipos de Datos: SQL posee varios tipos de datos
para almacenar informacin, los tipos de datos
pueden ser:

Numricos (con o sin decimales).


Alfanumricos.
Fecha y Hora
Lgico

Adems, la mayora de gestores de BD actuales


soportan el tipo: BLOB (Binary Large Object),
para almacenar archivos.
Componentes del Lenguaje SQL

Dependiendo de cada gestor de bases de


datos en general se pueden tener los
siguientes tipos de datos:

Nmericos Alfanmericos Fecha Lgico BLOB


Integer char(n) Date Bit Image
Numeric(n,m) varchar(n) DateTime Text
Decimal(n)
Float
Componentes del Lenguaje SQL
Operadores:
Aritmticos + Suma
- Resta
* Producto
/ Divisin
**^ Potencia
Relacionales < Menorque
<= Menoroigualque
> Mayorque
>= Mayoroigualque
<>!= Distinto
!< Nomenorque
!> Nomayorque
Lgicos AND
Losoperadoreslgicospermitencompararexpresioneslgicas
OR
devolviendosiempreunvalorverdaderoofalso.Los
NOT
operadoreslgicosseevalandeizquierdaaderecha.
Concatenacin + Seempleaparaunirdatosdetipoalfanumrico.
Componentes del Lenguaje SQL
Funciones Agregadas: permiten realizar
clculos sobre datos de las tablas.
Estas funciones se incorporan en las consultas
SELECT y retornan un nico valor al operar
sobre un grupo de registros.
Algunas:
MAX() Devuelveelvalormximo.
MIN() Devuelveelvalormnimo.
SUM() Devuelveelvalordelasumatoria
COUNT() Devuelveelnmerodefilas
AVG() Devuelveelpromediodelosvaloresdelcampo
Componentes del Lenguaje SQL
Predicados: son condiciones que se indican
en clausula WHERE de una consulta SQL.
BETWEEN...AND Compruebaqueelvalordeuncampoestdentrode
unintervalo
LIKE Comparauncampoconunacadenaalfanumrica.
LIKEadmiteelusodecaracterescomodines
ALL Sealaatodosloselementosdelaseleccindela
consulta
ANY Indicaquelacondicinsecumplirsilacomparacin
esciertaparaalmenosunelementodelconjunto.
EXISTS Devuelveunvalorverdaderosielresultadodeuna
subconsultadevuelveresultados.
IN Compruebasiuncamposeencuentradentrodeun
determinadorango.Elrangopuedeserunasentencia
SELECT.
Componentes del Lenguaje SQL
Caracteres Comodines: es un carcter que
representa cualquier otro carcter o cadena de
caracteres.
Aunque no son propios de SQL, vale la pena
recordarlos:

Si se desea reemplazar cero un solo carcter:


? (signo de interrogacin) _ (guin bajo)
Si se desea reemplazar cero o varios caracteres:
* (Asterisco) % (Porcentaje)
Si se desea reemplazar un dgito cualquiera (0-9)
# (signo de nmero)
Componentes del Lenguaje SQL
Nomenclatura: la mayora de la sintaxis de
SQL se basa en el estndar, Extended
BackusNaur Form.
Smbolo Significado

<> Encierranparmetrosdeunaordenqueelusuariodebe
sustituiralescribirdichaordenporlosvaloresque
queramosdaralosparmetros.
[] Indicaquesucontenidoesopcional.
{} Indicaquesucontenidopuederepetirseunaoms
veces.
| Separadordeexpresiones.Sedebeponeralmenosuno
delalista.
Componentes del Lenguaje SQL
Nomenclatura, por ejemplo:
CREATE TABLE <nombre_tabla>
(
<nombre_campo> <tipo_datos>
{,<nombre_campo> <tipo_datos>}
);

Se aplica la notacin:
CREATE TABLE tbEmpresa
(
nit varchar(150),
nombre varchar(255),
ubicacion varchar(255),
);
Creacin de tablas con SQL en Oracle

CREATE TABLE <nombre_tabla>


(
<nombre_campo> <tipo_datos(tamao)>
[null | not null] [default <valor_por_defecto>]
{,<nombre_campo> <tipo_datos(tamao)>
[null | not null] [default <valor_por_defecto>]}
[, constraint <nombre>
primary key (<nombre_campo>)] }
[, constraint <nombre>
foreign key (<nombre_campo>
{,<nombre_campo>})
references <tabla_referenciada>
( <nombre_campo> {,<nombre_campo>} ) ]
);
Creacin de tablas, ejemplo 1.

CREATE TABLE tbAutos


(
matricula char(8) not null,
marca varchar(255),
modelo varchar(255),
color varchar(255) not null,
numero_kilometros numeric(14,2) default 0,
constraint PK_Coches primary key (matricula)
);
Creacin de tablas, ejemplo 2-1.
CREATE TABLE tbProveedor
(
id numeric(10) not null,
nombre varchar2(50) not null,
correo varchar2(50),

CONSTRAINT pk_tbProveedor
PRIMARY KEY (id, nombre)
);
Creacin de tablas, ejemplo 2-2.
CREATE TABLE tbProducto (
id numeric(10) not null,
tbProveedor_id numeric(10) not null,
tbProveedor_nombre varchar2(50) not null,
nombre varchar2(50) not null,
cantidad numeric(10) not null,
CONSTRAINT pk_tbProducto
PRIMARY KEY (id, tbProveedor_id,
tbProveedor_nombre),
CONSTRAINT fk_tbProducto_tbProveedor
FOREIGN KEY (tbProveedor_id,
tbProveedor_nombre)
REFERENCES tbProveedor(id, nombre) );
Algunas Aclaraciones
Despus de crear las tablas del ejemplo 2, cul
seria el orden de eliminacin?
DROP TABLE <nombre_tabla>;

Cul es la diferencia entre char, varchar, varchar2?


char(n): Se usa para almacenar cadenas de longitud fija. Si
la longitud de la cadena es menor que n, el espacio
restante NO es liberado.
varchar2(n): Se usa para almacenar cadenas de longitud
variable. Si la longitud de la cadena es menor que n, el
espacio restante es liberado.
varchar(n): funciona igual que varchar2; sin embargo, no
es recomendado usarlo, dado que Oracle lo tiene
reservado para usos futuros,
Modificacin de tablas con SQL en Oracle

ALTER TABLE <table_name>


add [CONSTRAINT constraint_name
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ...
column_n);;

Permite:
Aadir campos a la estructura inicial de una tabla.
Aadir restricciones y referencias.

Nota: para ver los atributos de una tabla, se usa el


comando

DESCRIBE <nombre_tabla>;
Modificacin de tablas, ejemplo 1.

-- Veamos los campos de la tabla tbProducto antes de


modificarla.
DESCRIBE tbProducto;

-- Se agregan dos campos:


ALTER TABLE tbProducto ADD calidad number(10) default 4;
ALTER TABLE tbProducto ADD calidad2 number(10) default
5;

-- Veamos los campos de la tabla tbProducto despues de


modificarla.
DESCRIBE tbProducto;
Modificacin de tablas, ejemplo 2.

-- Veamos los campos de la tabla tbProducto


antes de modificarla.
DESCRIBE tbProducto;

-- Se elimina un campo:
ALTER TABLE tbproducto DROP COLUMN
calidad2;

-- Veamos los campos de la tabla tbProducto


despues de modificarla.
DESCRIBE tbProducto;
Modificacin de tablas, ejemplo 3.

-- Ahora se desea que el campo CALIDAD haga parte


de la clave primaria de la tabla Producto.

-- Consultar las columnas que pertenecen a la clave


primaria de la tabla TBPRODUCTO.
SELECT COLUMN_NAME FROM user_cons_columns
ucc
JOIN user_constraints uc
ON ucc.constraint_name=uc.constraint_name
WHERE ucc.TABLE_NAME = 'TBPRODUCTO' AND
uc.CONSTRAINT_NAME = 'PK_TBPRODUCTO' ;

-- Las tablas en rojo son del sistema.


Modificacin de tablas, ejemplo 3.

-- Modificar la clave primaria de TBPRODUCTO.


ALTER TABLE tbproducto DROP CONSTRAINT
PK_TBPRODUCTO;

ALTER TABLE tbProducto ADD CONSTRAINT pk_tbProducto


PRIMARY KEY (id, tbProveedor_id, tbProveedor_nombre,
calidad);

-- Se comprueba si efectivamente se hizo el cambio.


SELECT COLUMN_NAME FROM user_cons_columns ucc
JOIN user_constraints uc
ON ucc.constraint_name=uc.constraint_name
WHERE ucc.TABLE_NAME = 'TBPRODUCTO' AND
uc.CONSTRAINT_NAME = 'PK_TBPRODUCTO' ;
Modificacin de tablas, ejemplo 3.

En la siguiente direccin pueden encontrarse


ms ejemplos sobre el uso de ALTER.
http://www.techonthenet.com/sql/tables/alter_ta
ble.php

Por ejemplo, cambiar el nombre de un campo:

ALTER TABLE <table_name>


RENAME COLUMN <old_name> to
<new_name>;
Sentencias de Insercin
INSERT INTO <nombre_tabla>
[(<campo1>[,<campo2>,...])]
VALUES
(<valor1>,<valor2>,...);

INSERT INTO tbProveedor(id, nombre, correo) VALUES


(12, 'Lina Rosario', 'lina@msn.com');

INSERT INTO tbproducto(id, tbproveedor_id,


tbproveedor_nombre, nombre, cantidad)
VALUES (18, 12, 'Lina Rosario', 'Manzana', 10);

commit;
Definicin de ndices
Es una estructura de datos que mejora la
velocidad de las operaciones, permitiendo un
rpido acceso a los registros de una tabla.

Al aumentar drsticamente la velocidad de


acceso, se suelen usar sobre aquellos campos
sobre los cuales se hagan frecuentes bsquedas.

El ndice tiene un funcionamiento similar al


ndice de un libro, guardando parejas de
elementos: el elemento que se desea indexar y
su posicin en la base de datos.
Definicin de ndices
Sin embargo, los ndices se actualizan
automticamente cuando realizamos
operaciones de escritura en la base de datos. Lo
cual reduce el rendimiento.

Sintaxis:

CREATE [UNIQUE] INDEX <nombre_indice>


ON <nombre_tabla>(
<nombre_campo> [ASC | DESC]
{,<nombre_campo> [ASC | DESC]})
);
Definicin de ndices, Ejemplo

CREATE UNIQUE INDEX UIX_tbProducto


ON tbProducto (nombre);

Por definicin todos los campos de la clave


primaria pertenecen a un ndice, que tiene el
mismo nombre de la clave: pk_producto.

DROP INDEX UIX_tbProducto;


Definicin de Vistas
Una vista es una consulta, que refleja el
contenido de una o ms tablas, desde la que se
puede acceder a los datos como si fuera una
tabla.

Las vistas no tienen una copia fsica de los datos,


son consultas a los datos que hay en las tablas.

Si actualizamos los datos de una vista, estamos


actualizando realmente la tabla, y si
actualizamos la tabla estos cambios sern
visibles desde la vista.
Definicin de Vistas
Sintaxis
CREATE VIEW <nombre_vista>
AS
(<sentencia_select>);

CREATE VIEW vProductosxProveedor


AS
(
SELECT Prov.ID Proveedor_ID,
Prov.NOMBRE Proveedor_Nombre,
Prov.Correo Proveedor_Correo,
Prod.Id Producto_ID,
Prod.Cantidad Producto_Cantidad
FROM tbProducto Prod,
tbProveedor Prov
WHERE ( Prod.Tbproveedor_Id = Prov.Id
and Prod.Tbproveedor_Nombre = Prov.Nombre)
);
Definicin de Vistas
Eliminarla
DROP VIEW vProductosxProveedor;

Actualizarla
CREATE VIEW vProductosxProveedor
AS
(
SELECT Prov.ID Proveedor_ID,
Prov.NOMBRE Proveedor_Nombre,
Prov.Correo Proveedor_Correo,
Prod.Id Producto_ID,
Prod.Cantidad Producto_Cantidad,
Prod.Canlidad Producto_Calidad
FROM tbProducto Prod,
tbProveedor Prov
WHERE ( Prod.Tbproveedor_Id = Prov.Id
and Prod.Tbproveedor_Nombre = Prov.Nombre)
);
Definicin de Sinnimos
Un sinnimo es un nombre alternativo que
identifica un tabla o vista en la base de datos.

CREATE SYNONYM <nombre_sinonimo>


FOR <nombre_tabla>;

CREATE SYNONYM sPxP


FOR vProductosxProveedor;

CREATE SYNONYM sProd FOR tbProducto;

DROP SYNONYM sProd;


Sentencias de Seleccin

SELECT [ALL | DISTINCT ]


<nombre_campo>[{,<nombre_campo>}]
FROM<nombre_tabla>|<nombre_vista>
[{,<nombre_tabla>|<nombre_vista>}]
[WHERE<condicion>[{AND|OR<condicion>}]]
[GROUP BY <nombre_campo>[{,<nombre_campo>}]]
[HAVING<condicion>[{AND|OR<condicion>}]]
[ORDER BY<nombre_campo>|<indice_campo>[ASC|DESC]
[{,<nombre_campo>|<indice_campo>[ASC|DESC]}]]
Sentencias de Seleccin

SELECT [ALL | DISTINCT ]


<nombre_campo>[{,<nombre_campo>}]
FROM<nombre_tabla>|<nombre_vista>
[{,<nombre_tabla>|<nombre_vista>}]
[WHERE<condicion>[{AND|OR<condicion>}]]
[GROUP BY <nombre_campo>[{,<nombre_campo>}]]
[HAVING<condicion>[{AND|OR<condicion>}]]
[ORDER BY<nombre_campo>|<indice_campo>[ASC|DESC]
[{,<nombre_campo>|<indice_campo>[ASC|DESC]}]]
Sentencias de Seleccin
Sean las relaciones:
VINOS( Num,Nombre,Ano,Grados)
PRODUCTORES( Num,Apellido,Nombre,Regin)
COSECHAS( Nprod, Nvin,Cantidad)

Cules productores producen por lo menos tres vinos diferentes? Para


cada productor seleccionado, requerimos su nombre y apellido.

SELECT p.nombre, p.apellido


FROM productores p, cosechas c, vinos v
WHERE p.num = c.nprod AND
c.nvin = v.num
GROUP BY p.num, p.nombre, p.apellido
HAVING COUNT(DISTINCT v.nombre) >= 3;
Sentencias de Seleccin - Taller

Serecomiendarepasarlasconsultasdedatos,
realizandoelTallerPublicadoen:

http://grupo-
ingenieriaysoftware.udea.edu.co/~bddatos/esquema
BdeD.html
Creacin de Usuarios
-- Create the user
CREATE USER fernan
identified by "123"
default tablespace USERS
temporary tablespace TEMP
profile DEFAULT;

-- Grant/Revoke role privileges


grant resource to fernan;
grant connect to fernan;
-- Grant/Revoke system privileges
grant unlimited tablespace to fernan;
Permisos sobre los objetos
Supongamos que:
El usuario fernan tiene la tabla tbProductos.
Adems, existe la usuaria rosario, y esta necesita
consultar la tabla de productos de fernan.
Rosario intentar: select * from fernan.tbproveedor;

Pero no puede, necesita que fernan desde su


cuenta le otorgue los permisos necesarios:
grant select on tbproveedor to rosario;

En un momento dado fernan puede considerar


que rosario ya no necesita del privilegio:
revoke select on tbproveedor from rosario;
Los privilegios que se pueden otorgar o
denegar.
Privilegio Descripcin
Select Permitir realizar consultas de seleccin.
Permitir agregar registros en la tabla o
Insert
vista.
Permitir actualizar registros en la tabla o
Update
vista.
Permitir eliminar registros en la tabla o
Delete
vista.
Permitir crear restricciones de referecia
References
sobre alguna tabla.
Permitir cambiar la estructura de una
Alter
Sintaxis: tabla.
grant
Index<privilegio>{,<privilegio>} on sobre
Permitir crear ndices <objeto> to
la tabla. <user>;
revoke <privilegio>{,<privilegio>} on <objeto> from <user>;
ALL Todos los privilegios
Referencias
http://en.wikipedia.org/wiki/Extended_Backus
%E2%80%93Naur_Form

http://www.devjoker.com/contenidos/Tutorial-SQL

http://www.exforsys.com/tutorials/oracle-10g/

http://www.orafaq.com/faq/

http://msdn.microsoft.com/en-
us/library/ms941658.aspx

http://www.techonthenet.com/oracle/

También podría gustarte