jueves, 1 de diciembre de 2011

Recordatorio de SQL

CONCEPTOS GENERALES

Características generales

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 estas. 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.
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.
Ámbitos de aplicación
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. Es muy utlizado en los sistemas relacionales, si bien no cumple completamente el modelo relacional.

Sentencias de definición de datos
El lenguaje de definición de datos (en inglés Data Definition Language, o DDL), es el que se encarga de la modificación 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 las base de datos. Existen cuatro operaciones básicas: CREATE, ALTER, DROP y TRUNCATE.

 

 

 

CREATE

Este comando crea un objeto dentro de la base de datos. Principalmente se utiliza para crear tablas (Puede crear también dominios, esquemas, etc) En Mysql, puede usarse para crear una base de datos: CREATE DATABASE
CREATE TABLE NOMBRETABLA (NOMBREATRIBUTO1 TIPOATRIBUTO1,... NOMBREATRIBUTO N, TIPOATRIBUTO N);
 
CREATE TABLE empleado (codempleado VARCHAR2(7) nombre VARCHAR2(50)
Edad NUMBER (3); 

 

Tipos  principales de datos para los campos de una tabla

Char (Longitud)

Varchar2(longitud)=> No rellena hasta el final

Long

Number(longitud, decimales)

Number(3)=>Enteros, 3 dígitos => 125

Number(3,2)=> Enteros 3 dígitos en total => 2 decimales, por ejemplo 1,21

 

Restricciones.

La declaración de la clave primaria puede seguir la sintaxis siguiente:

CREATE TABLE Editorial (Codigo_E Number(7), Nombre VARCHAR2(7), Dirección VARCHAR2(60) NOT NULL,

PRIMARY KEY (Codigo_E),

UNIQUE (Nombre_E));

NOT NULL indica la obligatoriedad de un valor

PRIMARY KEY precisa qué campo o campos son clave primaria

UNIQUE indica la condición de unicidad para una clave alternativa

 

La integridad referencial se consigue mediante la siguiente definición de clave ajena

 

FOREIGN KEY (Nombre_E ) REFERENCES TO Editorial

ON UPDATE CASCADE

ON DELETE NO ACTION,

 

Supuesta esta declaración, lógicamente, al final de la creación de otra tabla, por ejemplo, documento

 

 

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 disparador, etc.

Ejemplo (agregar columna a una tabla)

ALTER TABLE 'TABLA_NOMBRE' (
   ADD NUEVO_CAMPO INT UNSIGNED meel
)

 

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

DROP TABLE empleado;

TRUNCATE

Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando DROP, 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 sólo 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

TRUNCATE TABLE ''TABLA_NOMBRE1''
 
 
SENTENCIAS DE MANIPULACIÓN DE DATOS
 

Definición

SELECT

Select Lista de campos

FROM Tabla1, Tabla2,…

WHERE condición

GROUP BY

HAVING condición

ORDER BY campo ASC DESC

 

Operadores para las condiciones

AND

OR

NOT

=

<> 

!=

* =>Todos los registros

ALL=> Todas

BETWEEN Valor1 AND Valor2

Campo LIKE

 

Ejemplo:

SELECT * FROM clientes WHERE ciudad = “Madrid”

 

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 iguales. 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, numero) VALUES ('Roberto Jeldrez', 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 las únicas columnas de la tabla 'agenda_telefonica'):
INSERT INTO agenda_telefonica VALUES ('Roberto Jeldrez', 080473968);

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'', [''valor1b,...'']), (''value2a'', [''value2b,...'']),...
Esta característica es soportada por DB2, PostgreSQL (desde la versión 8.2), MySQL, y H2.
Ejemplo (asumiendo que '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', '4556550');
Notar que las sentencias separadas pueden tener semántica diferente (especialmente con respecto a los triggers), y puede tener diferente rendimiento que la sentencia de inserción múltiple.
Para insertar varias filas en MS SQL puede utilizar esa construcción:
INSERT INTO phone_book
SELECT 'John Doe', '555-1212'
UNION ALL
SELECT 'Peter Doe', '555-2323';
Tenga en cuenta que no se trata de una sentencia SQL válida de acuerdo con el estándar SQL (SQL: 2003), debido a la cláusula subselect incompleta.
Para hacer lo mismo en Oracle se usa DUAL TABLE, siempre que se trate de solo una simple fila:
INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM DUAL
UNION ALL
SELECT 'Peter Doe','555-2323' FROM DUAL
Una implementación conforme al estándar de esta lógica se muestra el siguiente ejemplo, o como se muestra arriba (no aplica en Oracle):
INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM LATERAL ( VALUES (1) ) AS t(c)
UNION ALL
SELECT 'Peter Doe','555-2323' FROM LATERAL ( VALUES (1) ) AS t(c)
 

UPDATE

Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla.

Ejemplo

UPDATE My_table SET field1 = 'updated value asd' WHERE field2 = 'N';

 

DELETE

Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.

 

Forma básica

SQL="DELETE FROM ''tabla'' WHERE ''columna1'' = ''valor1''"

Ejemplo

DELETE FROM My_table WHERE field2 = 'N';
 

Disparadores

Los disparadores, también conocidos como desencadenantes (triggers en inglés) son definidos sobre la tabla en la que opera la sentencia INSERT, los desencadenantes son evaluados en el contexto de la operación. Desencadenantes BEFORE INSERT permiten la modificación de los valores que se insertará en la tabla. Desencadenantes AFTER INSERT no puede modificar los datos de ahora en adelante, pero se puede utilizar para iniciar acciones en otras tablas, por ejemplo para aplicar mecanismos de auditoría.

Sentencias De control: Seguridad en SQL

Confidencialidad
Para conceder privilegios se emplea
GRANT <privilegios> ON <nombre de objeto>
Ejemplo:
GRANT DELETE ON empleados
TO Juan;
Para eliminar los privilegios se utiliza la orden revoke
REVOKE [GRANT OPTION FOR]
<privilegios>
ON <nombre de objeto>


SQL embebido
Una aplicación con código SQL incrustado es una unidad de compilación formada por código fuente en el lenguaje anfitrión y una parte escrita en lenguaje SQL. Cada uno de los lenguajes y SQL se rigen por sus propios estándares de codificación. La parte SQL incrustada está formada por una o más secciones SQL. De este modo, las bases de datos pueden ser gestionadas por un lenguaje híbrido, de un lado el lenguaje procedimental huésped y por otro SQL, obteniéndose un mayor aprovechamiento de las cualidades de ambos lenguajes: facilidad de acceso a datos por parte de SQL y potencia de programación en los lenguajes anfitrión.

SQL dinámico
Las órdenes incrustadas puede que no sepan cuándo se utilizarán, ni cuáles son los campos o variables que se emplean, por lo que hay que introducir dichos datos de forma dinámica en tiempo de ejecución. En este caso, se emplea SQL dinámico que forma parte del SQL-2000. SQL dinámico permite construir órdenes en tiempo de ejecución
Las órdenes de SQL dinámico no están incrustadas en el lenguaje fuente, ya que se construyen en tiempo de ejecución, por lo que se almacenan en caracteres, variables, o archivos que posteriormente se integran en el programa. LA ventaja del SQL dinámico consiste en que permite al usuario generar las órdenes que necesite cuando lo precise.
Se emplea SQL dinámico cuando no se sabe la orden SQL a emplear (con todos los parámetros que la afectan), cuando no se sabe el número de variabels huésped, por lo que tampoco se conoce su tipo, ya que no están definidos de antemano.

Ejemplo de programa php con acceso a una base de datos mediante SQL dinámico

<form action="BaseDatos5.php" method="post">
<table border="0" summary=" ">
 <tr>
<td>Código</td><td> <input type="text" name="Codigo" size="20"></td>
</tr>
<tr>
<td>Nombre</td><td> <input type="text" name="Nombre" size="20"></td>
</tr>
<tr>
<td>Dirección Postal</td><td><input type="text" name="Direccion" size="20"></td>
</tr>
<td>E-mail</td><td> <input type="text" name="Email" size="20"></td>
</tr>
</table>
<input type="submit" value="Enviar">
</form>

<?PHP
$c=mysql_connect("localhost","root","");
if(!$c){
die("Conexión fallida");}
$s=mysql_select_db("mibd3",$c);
$consulta="INSERT INTO fichas values ('$Codigo','$Nombre','$Direccion','$Email')";

$resultado=mysql_query($consulta);
?>

Estándares para SQL
En la actualidad el SQL es el estándar de facto de la inmensa mayoría de los SGBD comerciales. Y, aunque la diversidad de añadidos particulares que incluyen las distintas implementaciones comerciales del lenguaje es amplia, el soporte al estándar SQL-92 es general y muy amplio.
El ANSI SQL sufrió varias revisiones y agregados a lo largo del tiempo:
Año
Nombre
Alias
Comentarios
SQL-87
Primera publicación hecha por ANSI. Confirmada por ISO en 1987.

Revisión menor.
SQL2
Revisión mayor.
SQL2000
Se agregaron expresiones regulares, consultas recursivas (para relaciones jerárquicas), triggers y algunas características orientadas a objetos.

Introduce algunas características de XML, cambios en las funciones, estandarización del objeto sequence y de las columnas autonumericas

ISO/IEC 9075-14:2006 Define las maneras en las cuales el SQL se puede utilizar conjuntamente con XML. Define maneras importar y guardar datos XML en una base de datos SQL, manipulándolos dentro de la base de datos y publicando el XML y los datos SQL convencionales en forma XML. Además, proporciona facilidades que permiten a las aplicaciones integrar dentro de su código SQL el uso de XQuery, lenguaje de consulta XML publicado por el W3C (World Wide Web Consortium) para acceso concurrente a datos ordinarios SQL y documentos XML.

Permite el uso de la cláusula ORDER BY fuera de las definiciones de los cursores. Incluye los disparadores del tipo INSTEAD OF. Añade la sentencia TRUNCATE. (Ver [1].)


Bibliografía
Fundamentos y modelos de bases de datos, de Adoración de Miguel y Mario Piattini, Editorial RA-MA
Sistemas Gestores de bases de datos, de Gregorio Cabrera Sánchez, Editorial Paraninfo
La página de wikipedia: http://es.wikipedia.org/wiki/SQL

No hay comentarios:

Publicar un comentario