domingo, 11 de septiembre de 2011

LENGUAJE SQL

El lenguaje de consulta estructurado o SQL (por sus siglas en inglés structured query language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en éstas. Una de sus características es el manejo del álgebra y el cálculo relacional permitiendo efectuar consultas con el fin de recuperar -de una forma sencilla- información de interés de una base de datos, así como también hacer cambios sobre ella.

Características generales del SQL

El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones en éstos últimos.

Es un lenguaje declarativo de "alto nivel" o "de no procedimiento", que gracias a su fuerte base teórica y su orientación al manejo de conjuntos de registros, y no a registros individuales, permite una alta productividad en codificación y la orientación a objetos. De esta forma una sola sentencia puede equivaler a uno o más programas que se utilizarían en un lenguaje de bajo nivel orientado a registros.

Optimización

Como ya se dijo arriba, y suele ser común en los lenguajes de acceso a bases de datos de alto nivel, el SQL es un lenguaje declarativo. O sea, que especifica qué es lo que se quiere y no cómo conseguirlo, por lo que una sentencia no establece explícitamente un orden de ejecución.

El orden de ejecución interno de una sentencia puede afectar gravemente a la eficiencia del SGBD, por lo que se hace necesario que éste lleve a cabo una optimización antes de su ejecución. Muchas veces, el uso de índices acelera una instrucción de consulta, pero ralentiza la actualización de los datos. Dependiendo del uso de la aplicación, se priorizará el acceso indexado o una rápida actualización de la información. La optimización difiere sensiblemente en cada motor de base de datos y depende de muchos factores.

Existe una ampliación de SQL conocida como FSQL (Fuzzy SQL, SQL difuso) que permite el acceso a bases de datos difusas, usando la lógica difusa. Este lenguaje ha sido implementado a nivel experimental y está evolucionando rápidamente.

.CREATE

Este comando crea un objeto dentro de la base de datos. Puede ser una tabla, vista, índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte.

Ejemplo 1 (creación de una tabla):

CREATE TABLE TABLA_NOMBRE (

cl integer not null

nombre VARCHAR (50)

fecha_nac DATE NOT NULL,

PRIMARY KEY (my_field1, my_field 2)

.ALTER

Este comando permite modificar la estructura de un objeto- Se pueden agregar / quitar campos a una tabla, modificar el tipo de un campo, agregar / quitar índices a una tabla, modificar un trigger, etc.

Ejemplo 1 (agregar columna a una tabla):

ALTER TABLE TABLA NOMBRE (

ADD NUEVO_ CAMPO INT UNSIGNED

)

DROP

Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista, índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia ALTER.

Ejemplo 1:

DROP TABLE TABLA_NOMBRE

Ejemplo 2:

ALTER TABLE TABLA_NOMBRE

(

DROP COLUMN CAMPO_NOMBRE 1

)

TRUNCATE

Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando DELETE, es que si se quiere borrar todo el contenido de la tabla, es mucho más rápido, especialmente si la tabla es muy grande, la desventaja es que TRUNCATE solo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no se permite la cláusula WHERE. Si bien, en un principio, esta sentencia parecería ser DML (Lenguaje de Manipulación de Datos), es en realidad una DDL, ya que internamente, el comando truncate borra la tabla y la vuelve a crear y no ejecuta ninguna transacción.

Ejemplo 1:

TRUNCATE TABLE TABLA_NOMBRE

Lenguaje de Manipulación de datos (LMD)

.INSERT

Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional.

.Forma básica

INSERT INTO tabla (columna1,[columna2,…]) VALUES (valor1, [valor2,…])

Las cantidades de columnas y valores deben ser las mismas. Si una columna no se especifica, le será asignado el valor por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila y se devuelve un error.

Ejemplo:

INSERT INTO agenda.telefonica (nombre, número) VALUES (`Roberto Fernández`, `4886850`)

Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia acortada.

INSERT INTO tabla VALUES (valor1,; [valor2,…])

Ejemplo (asumiendo que `nombre` y `número` son los únicas columnas de la tabla ` agenda_telefonica`):

INSERT INTO agenda_telefonica VALUES (`Roberto Fernández”, `4886850`)

.Formas avanzadas

.Inserciones en múltiples filas

Una característica de SQL (desde SQL-92) es el uso de constructores de filas para insertar múltiples filas a la vez, con una sola sentencia SQL:

INSERT INTO tabla (columna1, [columna2,…]) VALUES (valor1a, [valor16,…], (value2a, [value26,…]),…

Ejemplo (asumiendo ese `nombre` y `número `son las únicas columnas en la tabla `agenda_telefonica`):

INSERT INTO agenda_telefonica VALUES (`Roberto Fernández`, `4886850`), (` Alejandro Sosa`, `4556550`); que podía haber sido realizado por las sentencias.

INSERT INTO agenda_telefonica VALUES (`Roberto Fernández`, `4886850`);

INSERT INTO agenda_telefonica VALUES (`Alejandro Sosa`, `0`);

Notar que las sentencias separadas pueden tener semántica diferente (especialmente con respecto a los triggers), y puede tener diferente performance que la sentencia de inserción múltiple.

Sistemas de gestión de base de datos.

Los sistemas de gestión de base de datos con soporte SQL más utilizados son, por orden alfabético:

.DBZ

.Firebird

.Informix

.Interbase

.MySQL

.Oracle

.Postgre SQL

.SQL Server

.Sysbase ASE

SQL : El lenguaje de definición de datos (DDL)

El lenguaje de definición de datos permite:

.Definir y crear una nueva tabla

.Suprimir una tabla que ya no se necesita

.Cambiar la definición de una tabla existente

.Definir una tabla virtual (o vista) de datos)

.Construir un índice para hacer más rápido el acceso a una tabla

.Controlar el almacenamiento físico de los datos por parte del SGBD

Sentencias sobre Creación de Tablas

Sintaxis General de la sentencia CREATE TABLE

CREATE TABLE

(nombre_columna 1 tipo [restricción de columna],

nombre:columnaN tipo [restricción de columna],

[restricción_de_tabla])

La sentencia CREATE TABLE se utiliza para crear una tabla dentro de la cual habrá columnas que contienen datos y restricciones.

22.2.2.2. Más en detalle

CREATE TABLE

(

[NOT NULL][UNIQUE][CONSTRAINT< nombre restrcción>[PRIMARY KEY]

[REFERENCES][DEFAULT][CHECK>]

| [PRIMARY KEY (< lista columnas>)]

| [FOREIGN KEY ()]

| UNIQUE()][CONSTRAINT ], [2…])

| [CHECK (condición de búsqueda)]

Tipos de datos

Tipo de dato Descripción

Char (tamaño) Almacena datos de tipo carácter de longitud fija, con un máximo de 2000 caracteres)

Varchar2 (tamaño) Almacena datos de tipo carácter de longitud variable, con un tamaño máximo de 4000

Varchar Actualmente es igual que char

Long Almacena datos de tipo carácter de longitud variable, hasta 2 gigabytes. Solo se permite un Long por tabla. Una columna de tipo Long no puede utilizarse como parte de un índice. Una función almacenada no puede devolver un Long. Las cláusulas Where, Group By, Order By, Unique, o Connect By no pueden referenciar a una columna Long.

Blob Es un objeto binario de gran tamaño, siendo el tamaño máximo 4GB (gigabytes). Normalmente un blob se utiliza para almacenar una imagen datos de voz, o cualquier otro bloque de datos grande no estructurado.

Date Almacena fechas desde el 1 de enero del 4712 a.c. hasta el 31 de diciembre del 4712 d.c.

Integer Un número entero que no tiene parte fraccionaria

Normalmente un Integer será un valor de 32 bits con un rango de -2147483648 a + 2147483647

Smallint Representa un número entero que no contiene parte fraccionaria. Su precisión nunca será mayor que la de un Integer. Es un valor de 16bits entre -32768 y +32767

Number (1,d) Almacena datos de tipo numérico, siendo “1” la longitud y “d” el número de dígitos decimales.

Raw (tamaño) Datos binarios puros con una longitud máxima de 2000 bytes. Sirven para almacenar datos de tipo binario como sonido e imágenes digitalizadas.

Restricciones de columnas

NOT NULL. La columna no permitirá valores nulos.

CONSTRAINT. Permite asociar un nombre a una restricción

DEFAULT valor. La columna tendrá un valor por defecto. El SBGD utiliza este valor cuando no se especifica un valor para dicha columna,

PRIMARY KEY. Permite indicar que esta columna es la clave primaria.

REFERENCES. Es la manera de indicar que este campo, es clave ajena y hace referencia a una clave candidata de otra tabla. Esta foreign Key es sólo 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 (condición) Permite indicar una condición que debe de cumplir esa columna.

22.2.5. Restricciones de tablas

PRIMARY KEY (columna1, columna2…) Permite indicar las columnas que forman la clave primaria.

FOREIGN KEY (columna1, columna2…) REFERENCES NombreTabla

Indica las columnas que son clave ajena referenciando a una clave candidata de otra tabla.

UNIQUE (columna1, columna2…) El valor combinado de una o varias columnas es único.

CHECK (condición) Permite indicar una condición que deben cumplir las filas de la tabla.

Puede afectar a varias columnas.

La cláusula Foreign Key tiene unas opciones que se explican a continuación (no soportadas) en su totalidad por Oracle)

-Tratamiento de nulos: Se puede indicar cómo debe tratar el SGBD un valor NULL en una o más columnas de la clave ajena, cuando lo compare con las filas de la tabla padre.

-Modo de borrado: Para determinar la acción que se debe realizar cuando se elimina una fila referenciada, se debe utilizar una regla de supresión opcional para la relación (CASCADE, SET NUL, SET DEFAULT, NO ACTION)

Ejemplos

áreas (codigo, nombre, departamento) (código es la clave primaria)

departamentos (código_dpto, nombre) (código_dpto es la clave primaria)

La tabla áreas tiene una clave ajena

áreas. departamento departamentos

CREATE TABLE áreas

(

código char (3) not null,

nombre char (55) not null

departamento char (3) not null,

Primary Key (código)

Foreign key (departamento) REFERENCES departamentos

ON DELETE SET NULL ON UPDATE CASCADE);

ON DELETE SET NULL Significa que si se borra algún departamento de la tabla.

departamentos el campo departamento de las filas de la tabla areas que le reverenciaban se pone como Null.

ON UPDATE CASCADE Significa que si se modifica el código_dpto de una fila de la tabla.

departamento, también se modificara en las filas de la tabla áreas que le referencian.

CREATE TABLE departamentos

(

código_dpto char (3) not null,

nombre char (40) not null,

Primary Key (código_dpto)

);

Renombrar una tabla

RENAME TABLE< nombre tabla existente> TO< nuevo nombre tabla>

Eliminar una tabla de la base de datos

DROP TABLE[CASCADE, RESTRICT]

Ejemplos

DROP TABLE DEPARTAMENTOS CASCADE

(La tabla se borra, así como las posibles restricciones relativas a esta tabla)

DROP TABLE DEPARTAMENTOS RESTRICT

(La tabla se borra sólo si no se hace referencia a ella en ninguna restricción, p.e. en la definición de claves ajenas.)

Modificar una tabla

ALTER TABLE

La sentencia Alter Table se utiliza para cambiar una tabla existente. Dentro de la tabla podemos Add (añadir) o Drop (borrar) columnas y restricciones (PRIMARY KEY , FORING KEY, UNIQUE, CHECK CONSTRAINT)

{ ADD [NOT NULL]

MODIFY < nombre columna> [DAFAULT| DROP DEFAULT] valor

DROP < nombre columna> [CASCADE| RESTRICT]

ADD [PRIMARY KEY(nombre columna)|

FOREIGN KEY (nombre columna) REFERENCES nombre_tabla | UNIQUE (nombre columna)| CHECK (condición)

DROP CONSTRAINT nombre_restricción [CASCADE| RESTRICT]

Ejemplos

Agregar a la tabla áreas el campo Responsable de tipo char (30)

alter table áreas

ADD responsable char (30) not null;

Modificar el campo nombre de la tabla departamentos a char (50)

alter table departamentos

MODIFY nombre char (50);

Sentencias sobre sinónimos

Un sinónimo es un nombre que puede utilizarse como sustituto o alias del nombre real de una tabla. Puede ser útil para simplificar algunas expresiones.

Crear un sinónimo

CREATE SYNONYMFOR

Create synonym are for areas;

Create synonym dep for departamentos;

Borrar un sinónimo

DROP SYNONYM < nombre sinónimo>

Drop synonym are

Gestión de Dominios (SI en SQL - NO en ORACLE)

Los dominios se usan como tipos de datos en la definición de columnas al crear tablas. Permiten definir los valores aceptados en las columnas, así como la definición de valore por defecto.

Creación de Dominios:

CREATE DOMAIN < nombre Dominio>AS

[DEFAULT < valor defecto>]

[

{[CONSTRAINT < nombre restricción>] CHECK (< condición check> )}…];

Ejemplos:

CREATE DOMAIN Seisdigitos AS CHAR (6) DEFAULT `000000`;

CREATE DOMAIN Seisdigitos AS CHAR (6) DEFAULT `000000` CHECK (VALUE IS NOT NULL) CHECK (CHAR_LENGTH (TRIM (VALUE))=6 AND VALUE

BETWEEN `000000`AND `500000`);

Borrado de Dominios:

DROP DOMAIN

Modificado de Dominios:

ALTER DOMAIN < Nombre Dominio> { SET DEFAULT < Valor Defecto | DROP DEFAULT}

ALTER DOMAIN < Nombre Dominio> DROP CONSTRAINT < Nombre Restricción < [RESTRICT | CASCADE]

No hay comentarios:

Publicar un comentario