You are on page 1of 31

Unidad III

Lenguaje de Definicin y manipulacin de datos SQL.


SQL
SQL (por sus siglas en ingls Structured Query Language) es
un lenguaje declarativo de acceso a bases de datos relacionales
que permite especificar diversos tipos de operaciones en ellas.
DDL
El lenguaje de definicin de datos (en ingls Data Definition Language, o DDL), es el
que se encarga de la modificacin de la estructura de los objetos de la base de
datos. Incluye rdenes para modificar, borrar o definir las tablas en las que se
almacenan los datos de la base de datos. Existen cuatro operaciones bsicas:
CREATE, ALTER, DROP y TRUNCATE.
DML
Un lenguaje de manipulacin de datos (Data Manipulation Language, o DML en
ingls) es un lenguaje proporcionado por el sistema de gestin de base de datos que
permite a los usuarios llevar a cabo las tareas de consulta o manipulacin de los
datos, organizados por el modelo de datos adecuado.
Tipos de Datos
NOMBRE DESCRIPCION Ejemplos/Consideraciones
Cadena de caracteres de longitud fija, tiene un tamao n bytes.
Si no se especifica n la ORACLE le da un tamao de 255 bytes.
CHAR(n) El tamao mximo en BD es 2000 bytes y el mnimo 1 byte.
El tamao mximo en PL/SQL es 32767 bytes y el minimo 1 byte.
CHARACTER es sinonimo de CHAR. Ver NCHAR.
Usando VARCHAR2 en lugar de
Cadena de caracteres de longitud variable, tiene un tamao CHAR ahorramos espacio de
mximo de n bytes. almamcenamiento:
Es obligatorio especificar el tamao.
VARCHAR2(n)
El tamao mximo en BD es 4000 bytes y el mnimo 1 byte. Un char(10) almacenar 'PEPE
El tamao mximo en PL/SQL es 32767 bytes y el minimo 1 byte. '
STRING y VARCHAR son sinonimos de VARCHAR2. Ver NVARCHAR2. Un varchar2(10) almacenar
'PEPE'
El valor 7,456,123.89 se
Nmero de p digitos de los cuales s son decimales. almacenar como:
No es obligatorio especificar el tamao. NUMBER(9) 7456124
El tamao de p va de 1 a 38 y el s desde -84 a 127. NUMBER(9,1) 7456123.9
El tamao en PL/SQL 1E-130 .. 10E125. NUMBER(*,1) 7456123.9
NUMBER(p,s) Sinonimos: NUMBER(9,2) 7456123.89
* numeros de coma fija: DEC,DECIMAL,NUMERIC NUMBER(6) [error]
* enteros:INTEGER (sinonimo de NUMBER(38)),INT,SMALLINT NUMBER(7,-2) 7456100
* coma flotante:DOUBLE PRECISION FLOAT REAL. NUMBER 7456123.89
* Ver tambien: PLS_INTEGER, BINARY_INTEGER FLOAT 7456123.89
FLOAT(12) 7456000.0
El timestamp es un fecha que contiene un granularidad superior al
tipo DATE, eso significa que contiene fracciones de segundo.
TIMESTAMP (f) Con f definimos el numero de digitos que queremos en la fraccin
de segundo. Asi, f puedes valer desde 0 hasta 9, el valor por defecto
es 6.
Cadena hexadecimal que representa de forma nica una fila en una
ROWID
tabla (pero no unica en cualquier tabla). Ver funcin ROWID.
Cadena hexadecimal que representa de forma nica una fila
UROWID ORDENADA en una tabla (pero no unica en cualquier tabla). Ver
funcin ROWID.
Objeto binario de longitud variable.
Es obligatorio especificar el tamao.
RAW(n)
El tamao mximo en BD es 2000 bytes y el mnimo 1 byte.
El tamao mximo en PL/SQL es 32767 bytes y el minimo 1 byte.
Objeto binario de longitud variable.
LONG RAW El tamao mximo en BD es 2 Gigabytes.
El tamao mximo en PL/SQL es 32767 bytes y el minimo 1 byte.
Fecha vlida.
DATE Desde el 1 de enero del 4712 AC hasta el 31 de diciembre del 9999
DC.
Cadena de caracteres de longitud variable. Es una versin ms
LONG grande de VARCHAR2.
El tamao mximo en BD es 2 Gigabytes.
Cadena de caracteres de longitud variable. Es una versin ms
CLOB grande de VARCHAR2. Es recomendable usar CLOB o
El tamao mximo en BD es 4 Gigabytes. Ver NCLOB. BLOB en lugar de LONG.
Objeto binario de longitud variable. Es una versin ms grande de
BLOB RAW.
El tamao mximo en BD es 4 Gigabytes.
Puntero a un fichero en disco.
BFILE
El tamao mximo en BD es 4 Gigabytes.
Creacin de Tablas
Al crear una tabla debemos resolver qu campos (columnas) tendr y que tipo de datos
almacenarn cada uno de ellos, es decir, su estructura.
La tabla debe ser definida con un nombre que la identifique y con el cual accederemos a ella.

CREATE TABLE Nombre_tabla (


Nombre_columna Tipo_Dato,
Nombre_columna2 Tipo_Dato
);

EJ:
CREATE TABLE USUARIOS(
ID INTEGER,
NOMBRE VARCHAR2(20)
);
Estructura de tabla y Borrado de una
Tabla
Para ver la estructura definida de una tablas, podemos hacer:
DESCRIBE Nombre_Tabla; o DESC Nombre_Tabla;

Para eliminar una tabla usamos "drop table"


DROP TABLE Nombre_Tabla;
Constraint: Primary Key
Una clave primaria es un campo (o varios) que identifica 1 solo
registro (fila) en una tabla.
Para un valor del campo clave existe solamente 1 registro. Los
valores no se repiten ni pueden ser nulos.
Para definir un campo como clave primaria agregamos
"primary key" luego de la definicin de todos los campos y
entre parntesis colocamos el nombre del campo que
queremos como clave.
Tambin se puede definir un nombre para la restriccion de
primary key.
Constraint: Primary Key
CREATE TABLE USUARIOS( CREATE TABLE USUARIOS(
ID INTEGER, ID INTEGER PRIMARY KEY,
NOMBRE VARCHAR2(20), NOMBRE VARCHAR2(20)
PRIMARY KEY (ID) );
);

CREATE TABLE USUARIOS(


ID INTEGER,
NOMBRE VARCHAR2(20),
CONSTRAINT USUARIOS_PK PRIMARY KEY (ID)
);
Constraint: Foreign Key
CREATE TABLE USUARIOS(
ID INTEGER,
NOMBRE VARCHAR2(20),
ID_PAIS INTEGER,
CONSTRAINT USUARIOS_PK PRIMARY KEY (ID),
FOREIGN KEY (ID_PAIS) REFERENCES PAIS(ID)
);
CREATE TABLE USUARIOS(
ID INTEGER,
NOMBRE VARCHAR2(20),
ID_PAIS INTEGER,
CONSTRAINT USUARIOS_PK PRIMARY KEY (ID),
CONSTRAINT USUARIOS_FK FOREIGN KEY (ID_PAIS) REFERENCES PAIS(ID)
);
Constraint Unique
Esta constraint tambin es un ndice nico, se crea con
"unique", los valores deben ser nicos y diferentes, aparece un
mensaje de error si intentamos agregar un registro con un
valor ya existente. Permite valores nulos y pueden definirse
varios por tabla. Podemos darle un nombre, si no se lo damos,
se coloca uno por defecto.
Ej: Unique
CREATE TABLE USUARIOS(
ID INTEGER,
NOMBRE VARCHAR2(20),
UNIQUE (NOMBRE)
);

CREATE TABLE USUARIOS(


ID INTEGER,
NOMBRE VARCHAR2(20),
CONSTRAINT USUARIOS_UK UNIQUE (NOMBRE)
);
Valores Null
Se puede restringir si una columna de una tabla puede recibir
valores nulos o no con la clausula Not Null.

CREATE TABLE USUARIOS(


ID INTEGER,
NOMBRE VARCHAR2(20) NOT NULL
);
Valores Default
Podemos establecer valores por defecto para los campos
cuando creamos la tabla. Para ello utilizamos "default" al
definir el campo.

CREATE TABLE USUARIOS(


ID INTEGER,
NOMBRE VARCHAR2(20) DEFAULT Desconocido NOT NULL
);
Modificar Estructura de una tabla
Para modificar la estructura de una tabla existente, usamos "alter table".
"alter table" se usa para:
- agregar nuevos campos,
- eliminar campos existentes,
- modificar el tipo de dato de un campo,
- agregar o quitar modificadores como null , default
- cambiar el nombre de un campo,
- agregar o eliminar la clave primaria,
- agregar y eliminar ndices,
- renombrar una tabla.
"alter table" hace una copia temporal de la tabla original, realiza los
cambios en la copia, luego borra la tabla original y renombra la copia.
Agregar columna a una tabla
Usamos "alter table" seguido del nombre de la tabla y "add"
seguido del nombre del nuevo campo con su tipo y los
modificadores.

ALTER TABLE USUARIOS ADD PASSWORD VARCHAR2(30) NOT NULL;


Eliminar campos de una tabla
"alter table" nos permite alterar la estructura de la tabla,
podemos usarla para eliminar un campo.

ALTER TABLE USUARIOS DROP COLUMN PASSWORD;


Eliminar campos de una tabla
Si se borra un campo de una tabla que es parte de un ndice,
tambin se borra el ndice.
Si una tabla tiene slo un campo, ste no puede ser borrado.
Si eliminamos un campo clave, la clave tambin se elimina.
Modificar campos de una tabla
Usamos "alter table" seguido del nombre de la tabla y "modify"
seguido del nombre del campo con su tipo y los modificadores.

ALTER TABLE USUARIOS MODIFY NOMBRE VARCHAR(100) NOT NULL;


Modificar campos de una tabla
Hay que tener cuidado al alterar los tipos de los campos de
una tabla que ya tiene registros cargados. Si tenemos un
campo de texto de longitud 50 y lo cambiamos a 30 de
longitud, no se podr realizar el cambio.
Igualmente, si un campo fue definido permitiendo valores
nulos, se cargaron registros con valores nulos y luego se lo
define "not null", no se podr realizar el cambio.
Para redefinir la precisin de un campo numrico, la tabla no
debe contener datos.
Cambiar el nombre de un campo de
una tabla
Con "alter table" podemos cambiar el nombre de los campos de
una tabla.

ALTER TABLE USUARIOS RENAME COLUMN NOMBRE TO NOMBRE2;


Agregar y eliminar la clave primaria
Con "alter table" podemos agregar una clave primaria a una
tabla existente.

ALTER TABLE USUARIOS RENAME COLUMN NOMBRE TO NOMBRE2;

Si intentamos agregar otra clave primaria, aparecer un


mensaje de error porque (recuerde) una tabla solamente
puede tener una clave primaria.
Agregar y eliminar la clave primaria
Tambin usamos "alter table" para eliminar una clave primaria.

ALTER TABLE USUARIOS DROP PRIMARY KEY;

Con "alter table" y "drop primary key" eliminamos una clave


primaria definida al crear la tabla o agregada luego.
Renombrar tablas
Podemos cambiar el nombre de una tabla con "alter table".

RENAME USUARIOS TO PERSONAS;


Carga de registros a una tabla
Un registro es una fila de la tabla que contiene los datos
propiamente dichos. Cada registro tiene un dato por cada columna.
Al ingresar los datos de cada registro debe tenerse en cuenta la
cantidad y el orden de los campos.

INSERT INTO Nombre_Tabla(Campo1,Campo2,) VALUES (Valor1,


Valor2,)

Note que los datos ingresados, como corresponden a campos de


cadenas de caracteres se colocan entre comillas simples.
Borrado de registros de una tabla
Para eliminar los registros de una tabla usamos el comando
"delete

DELETE FROM Nombre_Tabla;

La ejecucin del comando indicado en la lnea anterior borra


TODOS los registros de la tabla.
Borrado de registros de una tabla
Si queremos eliminar uno o varios registros debemos indicar cul o
cules, para ello utilizamos el comando "delete" junto con la
clausula "where"

DELETE FROM Nombre_Tabla WHERE Nombre_Campo = Patron;

Si solicitamos el borrado de un registro que no existe, es decir,


ningn registro cumple con la condicin especificada, no se
borrarn registros, pues no encontr registros con ese dato.
Modificacin de registros de una tabla
Para modificar uno o varios datos de uno o varios registros
utilizamos "update

UPDATE Nombre_Tabla SET Nombre_Campo = Valor;

El cambio afectar a todos los registros.


Modificacin de registros de una tabla
Podemos modificar algunos registros, para ello debemos
establecer condiciones de seleccin con "where".

UPDATE Nombre_Tabla SET Nombre_Campo = Valor WHERE


Nombre_Campo = Patron;

Si no encuentra registros que cumplan con la condicin del


"where", ningn registro es afectado.
Modificacin de registros de una tabla
Tambin se puede actualizar varios campos en una sola
instruccin:

UPDATE Nombre_Tabla SET Nombre_Campo = Valor,


Nombre_Campo2 = Valor2 WHERE Nombre_Campo = Patron;