Está en la página 1de 43

Bases de Datos

SQL, Structured Query


Language
Brevemente:

 SQL es el lenguaje de consulta universal para bases de


datos.

 SQL ANSI 92 es el estándar SQL.

 Existen otras variantes que lo extienden como: T-SQL


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

 SQL proporciona tres conjuntos básicos de sentencias:


 D.M.L (lenguaje de manipulación de datos).
 D.D.L (Lenguaje de definición de datos).
 D.C.L (Lenguaje de Control de Datos).
Lenguaje de Definición de Datos DDL
 Este lenguaje se utiliza para la definición 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 Manipulación de Datos DML
 Como su nombre lo indica provee comandos para la
manipulación 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 información, los tipos de datos pueden ser:

 Numéricos (con o sin decimales).


 Alfanuméricos.
 Fecha y Hora
 Lógico

Además, la mayoría 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:

Númericos Alfanúmericos Fecha Lógico BLOB


Integer char(n) Date Bit Image
Numeric(n,m) varchar(n) DateTime   Text
Decimal(n)         
Float        
Componentes del Lenguaje SQL
 Operadores:
Aritméticos + Suma
- Resta
* Producto
/ División
**   ^ Potencia
Relacionales <        Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
<>   !=  Distinto
!< No menor que
!> No mayor que
AND
Lógicos Los operadores lógicos permiten comparar expresiones
OR
lógicas devolviendo siempre un valor verdadero o falso.
NOT
Los operadores lógicos se evalúan de izquierda a derecha.
Componentes del Lenguaje SQL
 Funciones Agregadas: permiten realizar cálculos 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() Devuelve el valor máximo.
MIN() Devuelve el valor mínimo.
SUM() Devuelve el valor de la sumatoria
COUNT() Devuelve el número de filas
AVG() Devuelve el promedio de los valores del campo
Componentes del Lenguaje SQL
 Predicados: son condiciones que se indican en clausula
WHERE de una consulta SQL.
BETWEEN...AND Comprueba que el valor de un campo esté dentro de
un intervalo
LIKE Compara un campo con una cadena alfanumérica.
LIKE admite el uso de caracteres comodines
ALL Señala a todos los elementos de la selección de la
consulta
ANY Indica que la condición se cumplirá si la comparación
es cierta para al menos un elemento del conjunto.
EXISTS Devuelve un valor verdadero si el resultado de una
subconsulta devuelve resultados.
IN Comprueba si un campo se encuentra dentro de un
determinado rango. El rango puede ser una sentencia
SELECT.
Componentes del Lenguaje SQL
 Caracteres Comodines: es un carácter que representa
cualquier otro carácter o cadena de caracteres.
 Aunque no son propios de SQL, vale la pena recordarlos:

 Si se desea reemplazar cero un solo carácter:


 ? (signo de interrogación) ó _ (guión bajo)
 Si se desea reemplazar cero o varios caracteres:
 * (Asterisco) ó % (Porcentaje)
 Si se desea reemplazar un dígito cualquiera (0-9)
 # (signo de número)
Componentes del Lenguaje SQL
 Nomenclatura: la mayoría de la sintaxis de SQL se basa
en el estándar, Extended Backus–Naur Form.

Símbolo Significado

<> Encierran parámetros de una orden que el usuario debe


sustituir al escribir dicha orden por los valores que
queramos dar a los parámetros.
[] Indica que su contenido es opcional.
{} Indica que su contenido puede repetirse una o más
veces.
| Separador de expresiones. Se debe poner al menos uno
de la lista.
Componentes del Lenguaje SQL
 Nomenclatura, por ejemplo:
CREATE TABLE <nombre_tabla>
(
<nombre_campo> <tipo_datos>
{,<nombre_campo> <tipo_datos>}
);

 Se aplica la notación:
CREATE TABLE tbEmpresa
(
nit varchar(150),
nombre varchar(255),
ubicacion varchar(255),
);
Creación de tablas con SQL en Oracle

CREATE TABLE <nombre_tabla>


(
<nombre_campo> <tipo_datos(tamaño)>
[null | not null] [default <valor_por_defecto>]
{,<nombre_campo> <tipo_datos(tamaño)>
[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>} ) ]
);
Creación 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)
);
Creación 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)
);
Creación 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
 Después de crear las tablas del ejemplo 2, ¿cuál seria el orden
de eliminación?
DROP TABLE <nombre_tabla>;

 ¿Cuál 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,
Modificación 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:
 Añadir campos a la estructura inicial de una tabla.
 Añadir restricciones y referencias.

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

DESCRIBE <nombre_tabla>;
Modificación 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;
Modificación 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;
Modificación 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.


Modificación 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' ;
Modificación de tablas, ejemplo 3.

En la siguiente dirección pueden encontrarse más ejemplos


sobre el uso de ALTER.
http://www.techonthenet.com/sql/tables/alter_table.php

Por ejemplo, cambiar el nombre de un campo:

ALTER TABLE <table_name>


 RENAME COLUMN <old_name> to <new_name>;
Sentencias de Inserción
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;
Definición de Índices
 Es una estructura de datos que mejora la velocidad de las
operaciones, permitiendo un rápido acceso a los registros
de una tabla.

 Al aumentar drásticamente la velocidad de acceso, se


suelen usar sobre aquellos campos sobre los cuales se
hagan frecuentes búsquedas.

 El índice tiene un funcionamiento similar al índice de un


libro, guardando parejas de elementos: el elemento que se
desea indexar y su posición en la base de datos.
Definición de Índices
 Sin embargo, los índices se actualizan automáticamente
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]})
                  );
Definición de Índices, Ejemplo

CREATE UNIQUE INDEX UIX_tbProducto


ON tbProducto (nombre);

Por definición 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;


Definición de Vistas
 Una vista es una consulta, que refleja el contenido de una
o más tablas, desde la que se puede acceder a los datos
como si fuera una tabla.

 Las vistas no tienen una copia física 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 serán visibles desde la vista.
Definición 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)
);
Definición 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)
);
Definición de Sinónimos
 Un sinónimo 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 Selección

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 Selección

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 Selección
Sean las relaciones:
VINOS ( Num , Nombre, Ano, Grados)
PRODUCTORES ( Num , Apellido, Nombre, Región)
COSECHAS ( Nprod, Nvin , Cantidad)

¿Cuáles 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 Selección - Taller

Se recomienda repasar las consultas de datos,


realizando el Taller Publicado en:

http://grupo-
ingenieriaysoftware.udea.edu.co/~bddatos/esquema
BdeD.html
Creación 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.
 Además, 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 Descripción
Select Permitir realizar consultas de selección.
Insert Permitir agregar registros en la tabla o vista.
Update Permitir actualizar registros en la tabla o vista.
Delete Permitir eliminar registros en la tabla o vista.
Permitir crear restricciones de referecia sobre alguna
References
tabla.
Alter Permitir cambiar la estructura de una tabla.
Index Permitir crear índices sobre la tabla.
ALL Todos los privilegios
Sintaxis:
grant <privilegio>{,<privilegio>} on <objeto> to <user>;
revoke <privilegio>{,<privilegio>} on <objeto> from <user>;
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