32
LENGUAJE SQL SQL es una herramienta para organizar, gestionar y recuperar datos almacenados en una base de datos informática. El nombre "SQL" es una abreviatura de Structured Query Languaje (Lenguaje de consultas estructurado). Como su propio nombre indica, SQL es un lenguaje informático que se puede utilizar para interaccionar con una base de datos y más concretamente con un tipo especifico llamado base de datos relacional. SQL es a la vez un lenguaje fácil de aprender y una herramienta completa para gestionar datos. Las peticiones sobre los datos se expresan mediante sentencias, que deben escribirse de acuerdo con unas reglas sintácticas y semánticas de este lenguaje. Su aprendizaje no solo sirve para esta aplicación sino , también, para todas las existentes en el mercado que soporten este lenguaje ya que es un lenguaje estándar por haberse visto consolidado por el Instituto Americano de Normas (ANSI) y por la Organización de Estándares Internacional (ISO). Sentencias de selección o consultas Las consultas son el corazón del lenguaje SQL. La sentencia SELECT, que se utiliza para expresar consultas en SQL, es la más potente y compleja de las sentencias SQL. La sentencia SELECT recupera datos de una base de datos y los devuelve en forma de resultados de la consulta. Consta de seis cláusulas: las dos primeras (SELECT y FROM) obligatorias y las otras cuatro opcionales. La forma de la sentencia SELECT es: SELECT [DISTINCT] {* | expresión_columna, ...} FROM nombretabla [alias_tabla] ... [WHERE expresión1 operador expresion2] [GROUP BY {expresión_columna, ...} ] [HAVING {condición} ] [UNION [ALL] (SELECT ...)] [ORDER BY {expresión_orden [DESC | ASC], ... ]

sql ADO.pdf

Embed Size (px)

Citation preview

Page 1: sql ADO.pdf

LENGUAJE SQL

SQL es una herramienta para organizar, gestionar y recuperar datos almacenados en una base de datos informática. El nombre "SQL" es una abreviatura de Structured Query Languaje (Lenguaje de consultas estructurado). Como su propio nombre indica, SQL es un lenguaje informático que se puede utilizar para interaccionar con una base de datos y más concretamente con un tipo especifico llamado base de datos relacional.

SQL es a la vez un lenguaje fácil de aprender y una herramienta completa para gestionar datos. Las peticiones sobre los datos se expresan mediante sentencias, que deben escribirse de acuerdo con unas reglas sintácticas y semánticas de este lenguaje.

Su aprendizaje no solo sirve para esta aplicación sino , también, para todas las existentes en el mercado que soporten este lenguaje ya que es un lenguaje estándar por haberse visto consolidado por el Instituto Americano de Normas (ANSI) y por la Organización de Estándares Internacional (ISO).

Sentencias de selección o consultas

Las consultas son el corazón del lenguaje SQL. La sentencia SELECT, que se utiliza para expresar consultas en SQL, es la más potente y compleja de las sentencias SQL.

La sentencia SELECT recupera datos de una base de datos y los devuelve en forma de resultados de la consulta. Consta de seis cláusulas: las dos primeras (SELECT y FROM) obligatorias y las otras cuatro opcionales.

La forma de la sentencia SELECT es:

SELECT [DISTINCT] {* | expresión_columna, ...}

FROM nombretabla [alias_tabla] ...

[WHERE expresión1 operador expresion2]

[GROUP BY {expresión_columna, ...} ]

[HAVING {condición} ]

[UNION [ALL] (SELECT ...)]

[ORDER BY {expresión_orden [DESC | ASC], ... ]

Page 2: sql ADO.pdf

Cláusula SELECT

La cláusula SELECT lista los datos a recuperar. Los elementos o datos a seleccionar pueden ser columnas de la base de datos o columnas a calcular por SQL cuando efectúa la consulta o también el asterisco (* ) para recuperar todos los campos de una tabla.

expresión_columna puede ser un simple nombre de campo (por ejemplo CLAVE). Expresiones más complejas pueden incluir operaciones matemáticas o de manipulación de caracteres. Mas adelante se verán estas expresiones de forma más amplia.

Las expresiones de columnas deben ir separadas por comas si existen más de una (por ejemplo CLAVE, DESCRIPCION, TIPO, ...).

Los nombres de campos pueden ir precedidos por el nombre de la tabla o su alias. Por ejemplo ACTIVOS.CLAVE o A.CLAVE donde A es el alias para la tabla ACTIVOS.

El operador DISTINCT, si se incluye, debe preceder la primera expresión de columna. Este operador elimina las filas o registros duplicados del resultado de la consulta. Por ejemplo la sentencia:

SELECT DISTINCT FREGISTRO FROM ACTIVOS

mostrará las distintas fechas de las altas de los activos.

FUNCIONES DE AGRUPAMIENTO

Las funciones de agrupamiento pueden ser también parte de una cláusula SELECT. Devuelven un único valor de un conjunto de registros.

Pueden usarse con un nombre de campo (por ejemplo, AVG(PROY_COSTO) o en combinación con una expresión de columna más compleja (por ejemplo, AVG(PROY_COSTO* 1.07).

La expresión de columna puede ir precedida por el operador DISTINCT. El operador DISTINCT eliminará los valores repetidos de una expresión de agrupamiento. Por ejemplo,

SELECT COUNT(DISTINCT RESP_CLAVE) FROM ACTIVOS

En este ejemplo, sólo aparecerán el nº de los responsables que se encuentran en ACTIVOS

Las funciones de agrupamiento permitidas son:

Page 3: sql ADO.pdf

SUM Devuelve la suma total de los valores de una expresión de columna o campo numérica . Por ejemplo, SUM(COSTOS) devolverá el total costos de los proyectos.

AVG Devuelve la media de los valores de una expresión de columna. Por ejemplo, AVG(COSTOS) devolverá la media de costos de los proyectos.

COUNT Devuelve el número de valores en una expresión de columna. Por ejemplo, COUNT(AREA_CLAVE) devolverá el número de registros con valores no nulos en ese campo. Un ejemplo especial es COUNT(*), que nos devuelve el número de registros incluyendo aquellos registros con valores nulos.

MAX Devuelve el valor más alto de los contenidos en una expresión de columna. Por ejemplo, MAX(FREGISTRO) devolverá la fecha de registro mas lata que existe en el tabla ACTIVOS.

MIN Devuelve el valor más bajo de los contenidos en una expresión de columna. Por ejemplo, SELECT MIN(FREGISTRO) FROM ACTIVOS nos devolverá la fecha de mas antigua.

CLÁUSULA FROM

La cláusula FROM lista las tablas que contienen los datos a recuperar por la consulta. El formato de esta cláusula es:

FROM nombre_tabla [alias_tabla] ...

nombre_tabla puede el nombre de una o mas tabla.

alias_tabla es un nombre que se usa para referirse a la tabla en el resto de la sentencia SELECT para abreviar el nombre original y hacerlo más manejable, en el caso de existir más de una tabla en la consulta y, también para poder realizar consultas uniendo varias veces la misma tabla. Por ejemplo,

SELECT CLAVE, DESCRIPCION FROM EQUIPOS E, ACTIVOS A WHERE E.ACTIVO_CLAVE = A.CLAVE AND E.MARCA='Alaska'

es mucho más práctico y sencillo que:

SELECT CLAVE, DESCRIPCION FROM EQUIPOS, ACTIVOS WHERE EQUIPOS.ACTIVO_CLAVE = ACTIVOS.CLAVE AND EQUIPOS.MARCA='Alaska'

Page 4: sql ADO.pdf

Las dos sentencias son idénticas y nos devolverían los clave y descripcion del activo cuya marca sea Alaska.

El nombre de tablas junto al nombre de campo es obligatorio cuando existan campos con nombre idéntico en las tablas que formen parte de la sentencia. Así en el ejemplo anterior CLAVE y ACTIVO_CLAVE no lo necesitarían (aunque este puesto) pero si tuviera CLAVE la tabla EQUIPO si lo necesitaria porque en las dos tablas existe un campo con ese nombre.

CLÁUSULA WHERE

La cláusula WHERE dice a SQL que incluya solo ciertas filas o registros de datos en los resultados de la consulta, es decir, que tienen que cumplir los registros que se desean ver. La cláusula WHERE contiene condiciones en la forma:

WHERE expresión1 operador expresion2

expresión1 y expresion2 pueden ser nombres de campos, valores constantes o expresiones.

operador es un operador relacional que une dos expresiones. Más tarde se verán los distintos operadores que se puede utilizar.

Por ejemplo, la siguiente sentencia nos muestra el nº de proyectos que terminaran con posterioridad a 1996.

SELECT COUNT(*) FROM PROYECTOS WHERE YEAR(FTERMINO) > 1996

CLÁUSULA GROUP BY

La cláusula GROUP BY especifica una consulta sumaria. En vez de producir un fila de resultados por cada fila de datos de la base de datos, una consulta sumaria agrupa todas las filas similares y luego produce una fila sumaria de resultados para cada grupo.

Seguido de la cláusula GROUP BY se especifican los nombres de uno o más campos cuyos resultados se desean agrupados. Tiene la forma:

GROUP BY expresión_columna

expresión_columna debe coincidir con la expresión de columna utilizada en la cláusula SELECT. Puede ser uno o más nombres de campo de una tabla, separados por coma o una o más expresiones separadas por comas.

Page 5: sql ADO.pdf

SELECT RUBRO_CLAVE, COUNT(*) FROM ACTIVOS WHERE TIPO = 'Compra' GROUP BY RUBRO_CLAVE

Esta sentencia nos devolverá una fila por cada area RUBRO_CLAVE, y el numero de veces de cada uno.

CLÁUSULA HAVING

La cláusula HAVING dice a SQL que incluya solo ciertos grupos producidos por la cláusula GROUP BY en los resultados de la consulta. Al igual que la cláusula WHERE, utiliza una condición de búsqueda para especificar los grupos deseados. En otras palabras, especifica la condición que deben de cumplir los grupos. Sólo es válida si previamente se ha especificado la cláusula GROUP BY. La cláusula HAVING tiene la forma:

HAVING expresión1 operador expresión2

expresión1 y expresión2 pueden ser nombres de campos, valores constantes o expresiones y estas deben coincidir con una expresión de columna en la cláusula SELECT.

operador es un operador relacional que une las dos expresiones. Más tarde se verán los distintos operadores que se pueden utilizar.

La sentencia siguiente nos mostrará el número de RUBRO_CLAVE, y el numero de los mismos en cada RUBRO_CLAVE cuyo numero supera el 1:

SELECT RUBRO_CLAVE, COUNT(*) FROM ACTIVOS WHERE TIPO = 'Compra' GROUP BY RUBRO_CLAVE HAVING RUBRO_CLAVE > 1

OPERADOR UNION

El operador UNION combina el resultado de dos sentencias SELECT en un único resultado. Este resultado se compone de todos los registros devueltos en ambas sentencias. Por defecto, los registros repetidos se omiten. Para no quitarlos se empleará la palabra ALL. Tiene la forma:

SELECT sentencia UNION [ALL] SELECT sentencia

Cuando se utilice el operador UNION, la lista de selección para cada sentencia SELECT debe tener el mismo número de expresiones de columnas con el mismo tipo de datos y en el mismo orden. Por ejemplo,

Page 6: sql ADO.pdf

SELECT ACTIVO_CLAVE, TITULO FROM LIBROS

UNION

SELECT ACTIVO_CLAVE, NOMBRE FROM REVISTAS

Este ejemplo tiene el mismo nº de columnas y cada columna en orden con el mismo tipo de datos. Nos devolverá una lista única de ACTIVOS_CLAVE, TITULO.

CLÁUSULA ORDER BY

La cláusula ORDER BY ordena los resultados de la consulta en base a los datos de una o más columnas. Si se omite, los resultados saldrán ordenados por el primer campo que sea clave en el índice que se haya utilizado.

Por tanto, indica como deben clasificarse los registros que se seleccionen. Tiene la forma:

ORDER BY {expresión_orden [DESC | ASC], ... ]

expresión_orden puede ser el nombre de un campo, expresión o el número de posición que ocupa la expresión de columna en la cláusula SELECT.

Por defecto se ordenan ASCendentemente (de menor a mayor). Si se deseará de mayor a menor se empleará DESC (DESCendente).

Por ejemplo, para mostrar los proyectos ordenados de mayor a menor fecha de terminacion, se utilizaría:

SELECT CLAVE, NOMBRE FTERMINO FROM PROYECTOS ORDER BY FTERMINO DESC

Para obtener un listado de los proyectos por su clave y nombre ordenado por rubros_clave y clave_lania :

SELECT CLAVE, DESCRIPCION, CLAVE_LANIA, RUBRO_CLAVE FROM ACTIVOS ORDER BY RUBRO_CLAVE, CLAVE_LANIA

ENLACE DE VARIAS TABLAS

Los ejemplos visto hasta el momento solo extraen datos de una única tabla y pocas cosas podríamos hacer si no pudiéramos interrelacionar varios ficheros para obtener las consultas que deseáramos.

Page 7: sql ADO.pdf

Para unir o relacionar dos tablas para realizar una consulta, se conoce con el término de JOIN.

Por ejemplo, deseamos un listado alfabético con los Clave y Descripcion de todos los activos existentes.

El fichero de ACTIVOS contiene todos los datos generales del ACTIVO, entre ellos Clave y Descripcion, y el fichero PROYECTOS los distintos datos de los diferentes proyectos, entre ellos el clave_proyecto y nombre

Para extraer los datos deseados deberemos de buscar un campo que contenga información común en los dos ficheros, es decir, aquel por el que están relacionados ambos. Este campo es la clave, que da la casualidad que tiene el mismo nombre en las dos tablas: PROYECTOS y ACTIVOS será este campo el que nos sirva para efectuar el JOIN:

SELECT ACTIVOS.CLAVE, DESCRIPCION, NOMBRE FROM ACTIVOS, PROYECTOS WHERE ACTIVOS.PROY_CLAVE = PROYECTOS.CLAVE ORDER BY NOMBRE

El Join se indica en la cláusula WHERE como otra condición más, en este caso, el nº de CLAVE en las dos tabla debe existir y, si no es así, el ACTIVO no aparecerá en la relación, aunque figure en uno de las dos.

ALIAS DE LAS TABLAS

Los alias son un instrumento para abreviar los nombres de las tablas o ficheros y poder referirse a ellos en toda la sentencia. En el ejemplo anterior podríamos emplear alias de la siguiente forma:

SELECT ACTIVOS.CLAVE, DESCRIPCION, NOMBRE FROM ACTIVOS A, PROYECTOS P WHERE A.PROY_CLAVE = P.CLAVE ORDER BY NOMBRE

Los campos que tienen nombre único en las sentencias no necesitan ir precedidos por el nombre de la tabla o su alias. En el ejemplo DESCRIPCION y NOMBRE solo existen en el fichero ACTIVO y por esa razón no se les ha precedido por ACTIVO o su alias A.

ORDEN DE LAS TABLAS EN LA CLÁUSULA FROM

Especial mención merece el orden de enumeración de las tablas en la cláusula FROM. El manejador de SQL, cuando existe un JOIN entre dos tablas, recorre la tabla que figura en primer lugar, y por cada registro que encuentra que satisface el resto de restricciones, comprueba si existe correspondencia en la otra tabla.

Page 8: sql ADO.pdf

Pongamos un ejemplo práctico: Si tenemos en la tabla de ACTIVOS 500 registros y en la tabla PROYECTOS 150, de los cuales solo 10 son del año 1996 y del tipo oficial, el manjador realiza 10 lecturas del fichero PROYECTOS y 10 más de ACTIVOS. Si los enumeráramos al revés, se realizarían 500 lecturas de ACTIVOS y 500 más de PROYECTOS.

SELECT COMPLEJAS

Pueden existir consultas a la Base de Datos que requieran una restricción que sea el resultado de otra consulta.

Por ejemplo: Deseamos saber la descripcion de un activo y nombre del proveedor relacionados entre si.

SELECT A.DESCRIPCION, P.NOMBRE FROM ACTIVOS A, FACTURAS F, PROVEEDORES P WHERE A.FACTURA_CLAVE = F.CLAVE AND F.PROVEEDOR_CLAVE = P.CLAVE

EXPRESIONES SQL

Las expresiones se utilizan en las cláusulas WHERE, HAVING y ORDER BY de las sentencias SELECT.

Las expresiones nos permiten utilizar operaciones matemáticas como también cadenas de caracteres y operadores de manipulación de fechas para construir consultas complejas.

Los elementos que compones las expresiones son:

Nombres de campos

Operadores numéricos

Operadores de fechas

Operadores lógicos

Constantes

Operadores de caracteres

Operadores de relación

Funciones

NOMBRES DE CAMPOS

Las expresiones más comunes son los nombres de campos. Se pueden combinar con otros elementos de las expresiones

Page 9: sql ADO.pdf

CONSTANTES

Las constantes son valores que no cambian. Por ejemplo, en la expresión FECHA_NACIMIENTO + 30, el valor 30 es una constante y FECHA NACIMIENTO es un nombre de campo.

Las constantes de caracteres se deben encerrar con una comilla simple ( ) o una doble ( ). Para que una comilla simple o doble aparezca en una constante se pone doble.(Por ejemplo, si la constante deseada es ODonnel deberá figurar como O Donnel .

Las constantes de fechas deberán estar encerradas entre comillas simples ( ), por ejemplo, 01/30/89 representa la fecha 30 de Enero de 1989. El formato de las fechas es MM/DD/YY o MM/DD/YYYY (MM = mes, DD = día y YY = Año).

OPERADORES NUMÉRICOS

Para realizar operaciones numéricas se puede utilizar los operadores:

operador significado

+ Suma

- Resta

* Multiplicación

/ División

** o ^ Exponenciación

OPERADORES DE CARACTERES

Las expresiones de caracteres pueden incluir los siguientes operadores:

operador significado

|| Concatenación manteniendo espacios en blanco

Si por ejemplo, NOMBRE contiene Antonio y APELLIDOS Rodríguez

ejemplo

Page 10: sql ADO.pdf

Valor resultado

NOMBRE || APELLIDOS Antonio Rodríguez

OPERADORES DE RELACIÓN

Los operadores de relación que pueden separar dos expresiones pueden ser cualquiera de los siguientes:

OPERADOR SIGNIFICADO

= Igual a

<> Distinto de

> Mayor que

>= Mayor o igual que

< Menor que

<= Menor o igual que

Like Coincidencia con un patrón

Not Like No coincidencia con un patrón

Is Null Igual a nulo (vacío)

Is Not Null No es nulo (no está vacío)

Between Rango de valores entre una cota inferior y otra superior

In Pertenencia a un conjunto de valores o ser miembro de una subconsulta

Exist Cierto si una subconsulta devuelve como mínimo un registro

Any Compara un valor con cada valor devuelto por una subconsulta retornando cierto si uno cualquiera de ellos cumple la condición. Any debe ir precedido de =, <>, <, >, >= o >=. = Any es equivalente a In.

Page 11: sql ADO.pdf

All Compara un valor con cada valor devuelto por una subconsulta retornando cierto si todos ellos cumplen la condición. All debe ir precedido de =, <>, <, >, >= o >=.

Ejemplos que utilizan operadores de relación:

evaluacion = F

Apellidos LIKE Rodri%

Grupo IS NULL

Anno BETWEEN 1985 AND 1995

WHERE M.ESTUDIOS = ANY (SELECT ESTUDIO FROM ESTUDIOS WHERE NIVEL = 1 )

WHERE NOTA > ALL (SELECT NOTA FROM CALIFICA WHERE VALOR1 > 4)

Sentencia INSERT

La sentencia de INSERT se utiliza para añadir registros a las tablas de la base de datos. El formato de la sentencia es:

INSERT INTO nombre_tabla [(nombre_columna, ...)] VALUES (expr, ...)

nombre_tabla puede ser únicamente el nombre de la tabla.

nombre_columna es una lista opcional de nombres de campo en los que se insertarán valores en el mismo número y orden que se especificarán en la cláusula VALUES. Si no se especifica la lista de campos, los valores de expr en la cláusula VALUES deben ser tantos como campos tenga la tabla y en el mismo orden que se definieron al crear la tabla.

expr es una lista de expresiones o valores constantes, separados por comas, para dar valor a los distintos campos del registro que se añadirá a la tabla. Las cadenas de caracteres deberán estar encerradas entre comillas .

Ejemplo para añadir un registro a una tabla:

INSERT INTO RUBROS (CLAVE, NOMBRE) VALUES 9, 'Otros');

Page 12: sql ADO.pdf

Cada sentencia INSERT añade un único registro a la tabla. En el ejemplo solo se han especificado 2 campos con sus respectivos valores, el resto de campos quedaran a nulo. Un valor nulo NULL no significa blancos o ceros sino simplemente que el campo nunca ha tenido un valor.

Sentencia UPDATE

La sentencia UPDATE se utiliza para cambiar el contenido de los registros de una tabla de la base de datos. Su formato es:

UPDATE nombre_tabla SET nombre_columna = expr, ...

[WHERE { condición }]

nombre_tabla puede ser únicamente el nombre de la tabla.

nombre_columna es el nombre de columna o campo cuyo valor se desea cambiar.

En una misma sentencia UPDATE pueden actualizarse varios campos de cada registro de la tabla.

expr es el nuevo valor que se desea asignar al campo que le precede. La expresión puede ser un valor constante o una subconsulta. Las cadenas de caracteres deberán estar encerradas entre comillas . Las subconsultas entre paréntesis.

La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y determina que registros se modificarán.

Por ejemplo, cambiar los nombres de los de la tabla RUBROS de aquellos de aquelos cuya clave sea mayor que 2, sería:

UPDATE RUBROS SET NOMBRE = 'Nuevo' WHERE CLAVE = 9,

Sentencia DELETE

La sentencia DELETE se utiliza para borrar registros de una tabla de la base de datos. El formato de la sentencia es:

DELETE FROM nombre_tabla [WHERE { condición }]

nombre_tabla puede ser únicamente el nombre de la tabla.

Page 13: sql ADO.pdf

La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y determina que registros se borrarán.

Cada sentencia DELETE borra los registros que cumplen la condición impuesta o todos si no se indica cláusula WHERE.

DELETE FROM RUBROS WHERE CLAVE = 9

Con el ejemplo anterior se borrarían todos los registros de la tabla rubros cuya clave sea igual a 2.

Llave primaria

Una llave primaria en una tabla está compuesta de uno o más campos consecutivos de la tabla, Una tabla solo puede tener una llave primaria.

La clave primaria de una tabla identifica a cada registro en la tabla, por tanto, dos registros cualesquiera no pueden tener los mismos valores en los campos que forman la clave primaria.

Esta se crea cuando se crea la tabla indicandole en el campo que se desea que se llave, o despues de creada alterando la tabla e indicandole cual sera la llave

CREATE TABLE RUBROS ( CLAVE NUMBER(8,0) NOT NULL, PRIMARY KEY NOMBRE VARCHAR2(25) NOT NULL

);

Esta seria la instruccion necesaria para indicar que el campo CLAVE sea llave primaria, despues de que la tabla RUBROS fue creada

ALTER TABLE RUBROS ADD CONSTRAINT RUBRO_PK PRIMARY KEY (CLAVE)

Llave foranea

Cuando un campo en un tabla hace referencia a otra tabla se le llama llave foranea,

(esto iria despues de la declaracion de los campos de la tabla ACTIVOS, para hacer la llave foranea relacionada con la tabla RUBROS)

FOREING KEY RUBRO_CLAVE REFERENCES RUBROS (CLAVE)

Page 14: sql ADO.pdf

Cuando se ha creado la tabla y se desea agregar una llave foranea se introduce la siguiente instruccion:

ADD CONSTRAINT ACTIVO_RUBRO_FK FOREIGN KEY (RUBRO_CLAVE) REFERENCES RUBROS (CLAVE)

Creación

La primera fase de cualquier base de datos comienza siempre con sentencias DDL, ya que antes de poder almacenar información debemos definir los objetos básicos donde agrupar la información. Los objetos básicos con que trabaja SQL son las tablas. Una tabla es un conjunto de celdas agrupadas en filas y columnas donde se almacenan elementos de información.

Antes de llevar a cabo la creación de una tabla conviene planificar:

nombre de la tabla,

nombre de cada columna,

tipo y tamaño de los datos almacenados en cada columna,

información adicional, restricciones, etc.

Hay que tener en cuenta también ciertas restricciones en la formación de los nombres de las tablas: longitud máxima de 30 caracteres, no puede haber nombres de tabla duplicados, deben comenzar con un carácter alfabético, permitir caracteres alfanuméricos y el guión bajo '_', y Oracle no distingue entre mayúsculas y minúsculas.

La sintaxis del comando que permite crear un tabla es la siguiente:

CREATE TABLE [esquema.]tabla ({columna tipoColumna [NOT NULL],}+, {CONSTRAINT nombreRestricción {UNIQUE ([column,]+)| DEFAULT expresion| CHECK (condicion)| PRIMARY KEY ([column,]+)| FOREIGN KEY (column) REFERENCES tabla(columna)},}* )

Del examen de la sintaxis de la sentencia Create Table se pueden concluir que necesitamos conocer los distintos tipos de columna y las distintas restricciones que se pueden imponer al contenido de las columnas. Vayamos por partes.

Tipos de Columnas

Page 15: sql ADO.pdf

Existen varios tipos de datos en SQL. De esta manera, cada columna puede albergar una información de naturaleza distinta. Los tipos de datos más comunes y sus características se resumen en la siguiente tabla.

Tipo de Dato Descripción

VARCHAR2(tamaño) Almacena datos de tipo carácter alfanumérico de longitud variable, con un tamaño máximo de 2.000.

CHAR(tamaño) Almacena datos de tipo carácter alfanumérico de longitud fija, con un tamaño máximo de 255.

LONG Almacena datos de tipo carácter alfanumérico de longitud variable con un tamaño máximo de hasta 2 Gb.

NUMBER(dig,dec) Almacena datos numéricos de dig dígitos, de los cuales dec son decimales. El tamaño máximo es de 38 dígitos.

DATE Almacena fechas desde el 1-Ene-4712 AC hasta el 31-Dic-4712 DC.

RAW(tamaño) Almacena datos de longitud variable, con un tamaño máximo de 255 bytes.

LONG RAW Almacena datos de longitud variable, con un tamaño máximo de 2 Gb.

Sentencias para crear o destruir índices

Las tablas de la aplicación disponen de sus propios índices que no deben ser modificados ni destruidas. Si el usuario lo hiciera es bajo su propia responsabilidad. No obstante se da la posibilidad de crearse los índices para sus propias tablas o añadir otros a las de la aplicación. Como también borrar los propios.

La sentencia para crear un índice es

CREATE INDEX CLAVE

y para destruirlo

DROP INDEX CLAVE.

Creación de Vistas

Page 16: sql ADO.pdf

Una vista es un objeto que no contiene datos por si mismo, Es una clase de tabla cuyos contenidos son tomados de otras tablas por medio de la ejecucion de una consulta.

CREATE VIEW VREVISTAS AS SELECT A.*, R.* FROM ACTIVOS A, REVISTAS R WHERE R.ACTIVO_CLAVE = A.CLAVE

Para borrar una vista:

DROP VIEW VREVISTAS;

Características generales

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 sobre los mismos.

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. De esta forma una sola sentencia puede equivaler a uno o más programas que utilizasen un lenguaje de bajo nivel orientado a registro.

Funcionalidad

El SQL proporciona una rica funcionalidad más allá de la simple consulta (o recuperación) de datos. Asume el papel de lenguaje de definición de datos (LDD), lenguaje de definición de vistas (LDV) y lenguaje de manipulación de datos

(LMD). Además permite la concesión y denegación de permisos, la implementación de restricciones de integridad y controles de transacción, y la alteración de esquemas.

Las primeras versiones del SQL incluían funciones propias de lenguaje de definición de almacenamiento (LDA) pero fueron suprimidas en los estándares más recientes con el fin de mantener el lenguaje sólo a nivel conceptual y externo.

Modos de uso

El SQL permite fundamentalmente dos modos de uso:

Un uso interactivo, destinado principalmente a los usuarios finales avanzados u ocasionales, en el que las diversas sentencias SQL se escriben y ejecutan en línea de comandos, o un entorno semejante.

Page 17: sql ADO.pdf

Un uso integrado, destinado al uso por parte de los programadores dentro de programas escritos en cualquier lenguaje de programación anfitrión. En este caso el SQL asume el papel de sublenguaje de datos.

Optimización

Como ya se dijo arriba, y como 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 que es lo que se quiere y no como 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 la ejecución de la misma.

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.

[editar]

Sistemas de gestión de base de datos

Algunos de los sistemas de gestión de base de datos que utilizan el lenguaje SQL son:

DB2

Ingres (SQL)

MySQL

Oracle

PervasiveSQL

PostgreSQL

SQL Server

Sybase

[editar]

Page 18: sql ADO.pdf

Ejemplos de consultas SQL

SELECT Nombre From Tabl_fich_personales where Edad >=18;

Muestra el Campo "Nombre" de todos los individuos mayores de 18 años de la tabla "Tabl_fich_personales"

UPDATE Tabl_fich_personales SET edad =persona.edad

FROM Tabl_fich_personales,persona

WHERE persona.Dni=Tabl_fich_personales.dni

Actualiza el campo edad de la tabla Tabl_fich_personales con el valor que tenga el campo edad de la tabla persona y que las dos tablas coincidan el valor DNI.

Lenguaje de definición de datos (DDL Data Definition Language)

Un esquema de bases de datos se representa mediante un sublenguaje especial llamado lenguaje de definición de datos. El resultado de la compilación de estas instrucciones es un conjunto de tablas, relaciones y reglas cuyas definiciones quedan almacenadas en un archivo (tabla u otro medio de almacenamiento) que contiene metadatos , esto es, datos acerca de datos. Este archivo comúnmente llamado diccionario de datos (o catalogo del sistema) es el que se consulta toda vez que se quiere leer, modificar o eliminar los datos de la base de datos.

Las Sentencias del lenguaje de definición de datos (DDL) que posee SQL operan en base a tablas. Las Principales sentencias DDL son las siguientes:

CREATE TABLE

DROP TABLE

ALTER TABLE

CREATE INDEX

DROP INDEX

Las sentencias antes mencionadas restringen la atención a los aspectos que son de directo interés para el usuario y no los aspectos que tienen que ver con el nivel interno del sistema (tales detalles son de importancia para el DBA[15]).

Una tabla base se define en los sistemas relacionales como una fila de encabezados de columnas más cero o más filas con valores de datos. Esta tabla es creada usando la sentencia CREATE TABLE del DDL de SQL. La fila de encabezados de columna especifica una o más columnas asociadas cada una a sus respectivos tipos de datos. Cada fila de datos contiene exactamente un valor de dato para cada columna.

Page 19: sql ADO.pdf

No existe un orden de filas, pero es posible imponer un orden sobre ellas. Las columnas están ordenadas de izquierda a derecha pero este orden no es parte del modelo relacional. Las Tablas son autónomas e independientes a diferencia de las vistas las cuales no existen en su propio espacio pero si se derivan de una o más tablas.

A.1.1. Comando CREATE TABLE

El comando CREATE TABLE se usa para especificar una nueva relación por medio de un nombre y especificando cada uno de sus atributos. A cada atributo se le da un nombre, un tipo de datos (para especificar su dominio) y algunas constraints[16]

sobre el atributo. La sintaxis del comando es :

CREATE TABLE nombre_de_tabla (definicion_de_columna [,definicion_de_columna ] ...) donde la definición de columna es de la forma : nombre_de_columna tipo_de_dato [ NOT NULL ] Ejemplo : create table DUENOS ( RUT INTEGER not null, NOMBRE CHAR(30) not null, TELEFONO CHAR(10) , DIRECCION CHAR(50) );

A.1.1.1. Definición de NOT NULL (no nulo)

Puesto que SQL permite valores nulos como valores de atributos, una constraint NOT NULL puede ser especificada en un atributo para indicar que no se permiten valores nulos para este atributo. En general NOT NULL debe ser especificado para los atributos que componen la llave primaria de cada relación.

A.1.1.2. Tipos de datos SQL

Los siguientes tipos de datos son los comúnmente soportados por el estándar SQL.

Datos Numéricos

INTEGER Entero con signo de 31 bits

SMALLINT Entero con signo de 15 bits

DECIMAL(p,q) Número con signo de p dígitos, q decimales

FLOAT(p) Número de punto flotante, p bits de

Page 20: sql ADO.pdf

precisión

Datos String

CHAR(n) Cadena de texto de largo fijo de n

bytes

VARCHAR(n) Cadena de texto de largo variante, hasta los n bytes

GRAPHIC(n) Cadena de texto de largo fijo, n*2 bytes

VARGRAPHIC(n)

Cadena de texto de largo variante, hasta los n*2 bytes

Datos de Fecha y Hora

DATE Fecha (aaaammmdd)

TIME Hora (hhmmss)

TIMESTAMP Combinación de fecha y hora Tabla A-1 - Tipos de datos de SQL

Comando DROP TABLE

El comando DROP TABLE se usa para eliminar una relación y su definición de atributos como también borra del catálogo la tupla relacionada a esta.

La sintaxis de la Instrucción es : DROP TABLE nombre_de_tabla; Ejemplo : drop table DUENOS;

Comando ALTER TABLE

El comando ALTER TABLE es usado para agregar un atributo a una de las tablas de la base de datos. Además cambia las tuplas en el catalogo de sistema de la BD. El nuevo atributo tendrá el valor nulo (NULL) en todas la tuplas de la relación inmediatamente después de ejecutada la instrucción, puesto que no se permite la constraint NOT NULL. La sintaxis de este comando es :

ALTER TABLE nombre_de_tabla ADD nombre_de_columna tipo_de_dato; Ejemplo: alter table DUENOS add VIGENCIA CHAR(1);

Comando CREATE INDEX

Page 21: sql ADO.pdf

El Comando CREATE INDEX se usa para crear un índice. Cada índice tiene un nombre el cual será usado para borrarlo en caso de que no se necesite más. La sintaxis de este comando es la siguiente: CREATE [ UNIQUE ] INDEX nombre_de_indice ON nombre_de_tabla ( nombre_de_columna [orden] [,nombre_de_columna [orden] ] ... ) [CLUSTER];

CLUSTER: La especificación opcional CLUSTER[17] en un comando CREATE INDEX indica si este índice estará el cluster. Una tabla dada puede tener un sólo índice en cluster en un momento dado. ORDER: Toda especificación ORDER en una sentencia SQL CREATE INDEX debe ser ya sea ASC (ascendente) o DESC (descendente) y por lo tanto especifica el orden en que se organizarán los datos, el valor por defecto para ORDER es ASC. UNIQUE: La opción UNIQUE en una sentencia SQL CREATE INDEX especifica que no se permitirán dos registros en la tabla a indexar que tengan el mismo valor para el campo (o la combinación de estos) para el cual se está creando el índice.

Ejemplo: create unique index DUENO_PK on DUENOS (RUT asc);

A.1.5. Comando DROP INDEX

El comando SQL DROP INDEX se usa para soltar el índice de la tabla relacionada y borrar la tupla correspondiente desde el catalogo de sistema de la base de datos. Una razón para borrar índices es que es costoso mantenerlos cada vez que la relación base es actualizada y por lo tanto se requiere espacio adicional. Los índices que especifican una constraint de llave (primaria, alterna o externa) no se pueden borrar a menos que se quiera borrar también la constraint asociada. La sintaxis de la cláusula DROP INDEX es: DROP INDEX nombre_de_indice; Ejemplo: drop index DUENO_PK;

DataBase Administrator . Administrador de la base de datos. Una Constraint es una regla que se debe aplicar a un atributo de una tabla. Las constraints proveen un mecanismo rápido y eficiente para asegurar la integridad de la base de datos sin importar los cambios que requiera el usuario. La técnica de clustering involucra el tratar de almacenar en disco lo más cerca posible los registros que están relacionados lógicamente, de manera de poder mejorar el rendimiento.

Page 22: sql ADO.pdf

Lenguaje de manipulación de datos (DML Data Manipulation Language)

Un D.M.L. es un sublenguaje de consulta y manipulación de datos.

Se entenderá por manipulación de datos la :

Recuperación de Información.

Inserción de nueva Información.

Eliminación (Borrado) de información existente.

Modificación de Información Almacenada.

SQL provee cuatro sentencias de manipulación de datos (DML). Esas son:

SELECT

UPDATE

DELETE

INSERT

Comando SELECT

El comando DML SELECT es la sentencia SQL básica para la recuperación de información desde una base de datos. (nótese que el comando SELECT de SQL no guarda relación con el operador de selección del álgebra relacional). La sintaxis del comando es la siguiente:

SELECT [DISTINCT] ítem(s) FROM tabla(s) [ WHERE condición ] [ GROUP BY campo(s) ] [ HAVING condición ] [ ORDER BY campos] [ UNION SQL_SELECT]

La palabra clave DISTINCT se usa para indicar que los valores duplicados o redundantes deben ser eliminados antes que la función sea ejecutada. DISTINCT puede ser especificada con las funciones agregadas COUNT y AVG pero es totalmente irrelevante para las funciones MAX y MIN. No se puede usar esta cláusula junto con la función especial COUNT(*). La palabra Clave UNIQUE es un sinónimo para DISTINCT y las dos se pueden usar sin distinción.

Ejemplo: select COUNT(DISCTINCT MARCA)

Page 23: sql ADO.pdf

FROM MOVIL;

Retorna el número de Marcas de autos que tiene la empresa

Funciones Agregadas de la cláusula SELECT

SQL provee algunas funciones especiales que pueden ser usadas con el comando SELECT. Esas funciones son las siguientes:

COUNT

SUM

AVG

MAX

MIN

COUNT(*)

COUNT : La función COUNT se usa para obtener el número de valores en la columna. Opera sobre una colección de valores en una columna de la tabla. La palabra clave DISTINCT se puede usar conjuntamente con COUNT. Si el resultado del argumento es el conjunto vacío la función COUNT retorna el valor cero. Un ejemplo de COUNT es: SELECT COUNT (DISTINCT MARCA) FROM MOVIL;

SUM : La función SUM se usa para sumar los valores de una columna. La función opera sobre una colección de valores en una columna de la tabla. Los valores deben ser numéricos. Si el resultado del argumento es el conjunto vacío, SUM retorna NULL. Un ejemplo de SUM es: SELECT SUM (HORA_HASTA - HORA_DESDE) FROM VIAJE WHERE PATENTE_MOVIL = 'HL-8483';

AVG : La Función AVG se usa para promediar todos los valores seleccionados en una columna, opera sobre una colección de valores (numéricos) en una sola columna de la tabla. La función AVG puede ir precedida por la palabra clave DISTINCT lo cual promediará sólo los valores únicos. Si el resultado del argumento es el conjunto vacío, AVG retorna NULL. Ejemplo : SELECT AVG (HORA_HASTA - HORA_DESDE) FROM VIAJE WHERE PATENTE_MOVIL = 'HL-8483';

Page 24: sql ADO.pdf

MIN (MAX): La función MIN (MAX) se usa para obtener el menor (mayor) valor en una columna. Ambas funciones operan sobre una colección de valores en una columna. Los valores no necesitan ser numéricos. Si el resultado del argumento es el conjunto vacío, ambas retornan NULL. Ejemplo:

SELECT MAX (HORA_HASTA - HORA_DESDE) FROM VIAJE;

SELECT MIN (HORA_HASTA - HORA_DESDE) FROM VIAJE;

COUNT(*): La función COUNT(*) se usa para contar la cardinalidad de una tabla sin eliminación de valores duplicados. En las funciones anteriores, cualquier valor nulo en el argumento se elimina antes que la función se aplique (indiferentemente de si se usa o no la cláusula DISTINCT) . COUNT(*) retorna cero si el resultado del argumento es el conjunto vacío. Ejemplo: SELECT COUNT(*) FROM VIAJES WHERE PATENTE_MOVIL = 'HL-8483';

Cláusula GROUP BY

La cláusula GROUP BY en una sentencia SELECT reordena lógicamente la tabla representada por la cláusula FROM en grupos, tal que dentro de cada grupo todas las filas tienen el mismo valor para el campo dado en la cláusula GROUP BY (esto es conceptual; la tablas no se reordena físicamente en la base de datos). Cada expresión en la cláusula SELECT debe ser reducible a valor simple dentro de un grupo, es decir, que puede ser ya sea el mismo campo evaluado en la Cláusula GROUP BY (o talvez una expresión que lo contenga), un literal, o una función tal como SUM que opera sobre todos los valores de un grupo dentro de un campo y que reduce todos aquellos valores a un valor simple.

GROUP BY no implica ORDER BY; para garantizar que el resultado aparezca en un determinado orden se debe especificar también la cláusula ORDER BY.

Ejemplo:

SELECT PATENTE_MOVIL, SUM(HORA_HASTA - HORA_DESDE) FROM VIAJE GROUP BY PATENTE_MOVIL;

Page 25: sql ADO.pdf

Cláusula HAVING

La cláusula HAVING en una sentencia SELECT se usa para eliminar grupos, (tal como se usa WHERE para eliminar filas). Si se especifica, debe existir una cláusula GROUP BY también. La Expresión en la cláusula HAVING debe ser reducible a valor simple dentro de un grupo.

Ejemplo :

SELECT PATENTE_MOVIL, SUM(HORA_HASTA - HORA_DESDE) FROM VIAJE GROUP BY PATENTE_MOVIL HAVING SUM(HORA_HASTA - HORA_DESDE) > 10;

Cláusula ORDER BY

Esta cláusula se utiliza en un comando SELECT para producir como resultado una relación en un orden específico. En general, la relación resultado no se garantiza que esté en un orden particular. De ahí que la cláusula ORDER BY se utilice para ordenar el resultado en alguna secuencia particular antes de que los datos sean desplegados.

AL igual que la cláusula ORDER del comando CREATE INDEX el argumento puede ser ya sea ASC o DESC. ASC es el valor por defecto.

También es posible identificar columnas por su número de columna en lugar de su nombre, esto es, por la posición ordinal (de izquierda a derecha) de la columna en cuestión dentro de la tabla resultado. Esta característica hace posible ordenar un resultado en base a una columna que no tiene nombre.

Ejemplo:

SELECT RUT, NOMBRE FROM CHOFER WHERE SYSDATE < FECHA_LCENCIA_HASTA ORDER BY 2 DESC;

Cláusula EXIST

La cláusula EXISTS en un comando SELECT representa el calificador de existencia. La expresión se avaluara como verdadera, si y sólo si, el resultado de evaluar la sentencia SELECT ... FROM ... no es vacía, esto es, si y sólo si, existe un registro en la tabla dada en FROM desde el nivel más externo de la consulta. La negación (NOT EXISTS) es especialmente importante para una cierta clase de consultas

Page 26: sql ADO.pdf

bastante más complejas que el común.

Ejemplo :

SELECT PATENTE FROM MOVIL WHERE EXISTS ( SELECT * FROM VIAJE WHERE MOVIL.PATENTE = VIAJE.PATENTE_MOVIL);

Subconsultas.

Una Subconsulta en una cláusula SELECT es una expresión de la forma SELECT - FROM - WHERE - GROUP BY - HAVING que se anida dentro de otra expresión. Las Subconsultas se usan comúnmente para representar un conjunto de valores que se buscan por medio de una condición IN condición . El sistema evalúa toda la consulta evaluando la Subconsultas anidadas.

Ejemplos :

* Retorna todos los móviles que tienen más de 10 horas de viaje.

SELECT CHOFER.NOMBRE, MOVIL.PATENTE FROM MOVIL, CHOFER WHERE PATENTE IN ( SELECT PATENTE_MOVIL FROM VIAJE WHERE (HORA_HASTA - HORA_DESDE) > 10) AND MOVIL.RUT_CHOFER = CHOFER.RUT;

Comando UPDATE

El comando DML UPDATE se usa para modificar valores de atributos de una o más tuplas seleccionadas. Al igual que con el comando SELECT la cláusula WHERE es la que selecciona la o las tuplas que serán modificadas desde una relación simple. La cláusula adicional SET especifica los atributos que serán modificados y sus nuevos valores.

La Sintaxis de UPDATE es la siguiente

UPDATE nombre_de_tabla SET campo = expresion_escalar [, campo = expresion_escalar ] ...

Page 27: sql ADO.pdf

[ WHERE condicion ] ; Todos los registros en la tabla que satisfagan la condición serán modificados de acuerdo a sus asignaciones ( campo = expresion_escalar ) en la cláusula SET.

El siguiente ejemplo demuestra el uso del comando UPDATE en un Registro.

UPDATE CHOFER SET DIRECCION = Otra Dirección , TELEFONO = 5555555 WHERE RUT = 12657378 El siguiente ejemplo demuestra el uso del comando UPDATE para un conjunto de registros.

UPDATE CHOFER SET VIGENCIA = N WHERE SYSDATE > FECHA_LICENCIA_HASTA;

Comando DELETE

El comando DML DELETE borra tuplas desde una relación. Al igual que el comando UPDATE puede incluir la cláusula WHERE para seleccionar las tuplas a ser eliminadas. Las tuplas son borradas sólo desde una tabla a la vez. Dependiendo del número de tuplas seleccionadas por la condición en la cláusula WHERE será la cantidad (cero, una o más) de tuplas que serán eliminadas con un sólo comando DELETE. Si se omite la cláusula WHERE se asume que todas las tuplas de la relación deben ser borradas, sin embargo la tabla permanece en la base de datos como una tabla vacía. (el comando DROP TABLE se usa para eliminar completamente la tabla, aún si esta no está vacía).

La sintaxis del comando DELETE es la siguiente :

DELETE FROM table [ WHERE condition ] ;

El siguiente ejemplo borra una sola tupla en la tabla base:

DELETE FROM MOVIL WHERE PATENTE = 'HL-8205' ;

El siguiente ejemplo borra todas las tuplas que satisfagan la condición

DELETE FROM MOVIL

Page 28: sql ADO.pdf

WHERE ANO <= 1960;

Comando INSERT

El comando DML INSERT en su forma más simple se usa para agregar una sola tupla a una relación. Se debe especificar el nombre de la relación y una lista de los valores que se agregarán para la tupla. La lista de valores se debe proporcionar en el mismo orden que sus respectivos atributos. Es posible también insertar múltiples registros de una sola vez por medio de una subconsulta.

La sintaxis es la siguiente:

INSERT INTO TABLE [ ( campo [, campo ] ... ) ] VALUES ( literal [, literal ] ... ) ; o

INSERT INTO TABLE [ ( campo [, campo ] ... ) ] subconsulta;

En el primer formato se inserta una fila en la tabla especificada dados los valores para los campos respectivos. En el segundo formato, la subconsulta será evaluada y se insertará en la tabla una copia de su resultado. Omitir la lista de campos es equivalente a especificar una lista con todos los campos de la tabla (en orden de creación, de izquierda a derecha).

El siguiente es un ejemplo de la inserción de un sólo registro.

INSERT INTO DUENO ( RUT, NOMBRE, VIGENCIA ) VALUES ( 12657378, MARIO CISTERNA , S); El siguiente ejemplo muestra la inserción por medio de una Subconsultas.

INSERT INTO CHOFER (RUT, NOMBRE, TELEFONO, DIRECCION, VIGENCIA) SELECT RUT, NOMBRE, TELEFONO, DIRECCION, VIGENCIA FROM DUENO WHERE VIGENCIA = S

Otras características de SQL.

Además de los dos tipos de sublenguajes mencionados anteriormente, SQL puede ser utilizado para otras características propias que no poseen los lenguajes formales de consultas, estas son:

Page 29: sql ADO.pdf

Definición de vistas. El DDL de SQL incluye instrucciones para la definición de vistas.

Autorización. El DDL de SQL incluye instrucciones para la especificación de los derechos de acceso a los objetos de la base de datos.

Integridad. El DDL de SQL también incluye un conjunto de sentencias para la especificación de restricciones de integridad.

Control de transacciones. SQL incluye ordenes para la especificación de los estados de una transacción, algunas implementaciones permiten además el bloqueo explicito de objetos de datos con el fin de manejar control de concurrencia.

Para los efectos de este trabajo se anexa en el apéndice A una breve descripción de los sublenguajes de Definición y manipulación de datos.

Las sentencias SQL pertenecen a dos categorías principales: Lenguaje de Definición de Datos, DDL y Lenguaje de Manipulación de Datos, DML. Estos dos lenguajes no son lenguajes en sí mismos, sino que es una forma de clasificar las sentencias de lenguaje SQL en función de su cometido. La diferencia principal reside en que el DDL crea objetos en la base de datos y sus efectos se pueden ver en el diccionario de la base de datos; mientras que el DML es el que permite consultar, insertar, modificar y eliminar la información almacenada en los objetos de la base de datos.

Cuando se ejecutan las sentencias DDL de SQL, el SGBD confirma la transacción actual antes y después de cada una de las sentencias DDL. En cambio, las sentencias DML no llevan implícito el commit y se pueden deshacer. Existe pues un problema al mezclar sentencias DML con DDL, ya que estas últimas pueden confirmar las primeras de manera involuntaria e implicita, lo que en ocasiones puede ser un problema.

A continuación se presenta una tabla con las sentencias SQL más comunes, clasificadas según el lenguaje al que pertenecen.

Sentencia DDL

Objetivo

Alter procedure

Recompilar un procedimiento almacenado.

Alter Table Añadir o redefinir una columna, modificar la asignación de almacenamiento.

Analyze Recoger estadísticas de rendimiento sobre los objetos de la BD para utilizarlas en el optimizador basado en costes.

Create Table

Crear una tabla.

Page 30: sql ADO.pdf

Create Index

Crear un índice.

Drop Table Eliminar una tabla.

Drop Index Eliminar un índice.

Grant Conceder privilegios o papeles, roles, a un usuario o a otro rol.

Truncate Eliminar todas las filas de una tabla.

Revoke Retirar los privilegios de un usuario o rol de la base de datos.

Sentencia DML

Objetivo

Insert Añadir filas de datos a una tabla.

Delete Eliminar filas de datos de una tabla.

Update Modificar los datos de una tabla.

Select Recuperar datos de una tabla.

Commit Confirmar como permamentes las modificaciones realizadas.

Rollback Deshacer todas las modificaciones realizadas desde la última confirmación.

Page 31: sql ADO.pdf
Page 32: sql ADO.pdf

This document was created with Win2PDF available at http://www.daneprairie.com.The unregistered version of Win2PDF is for evaluation or non-commercial use only.