Lenguaje de Definición de Datos SQL

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 7

Lenguaje de definición de datos (DDL)[editar]

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 los datos de la
base de datos. Existen cuatro operaciones básicas: CREATE, ALTER, DROP y
TRUNCATE.
CREATE | CREAR[editar]
Este comando permite crear objetos de datos, como nuevas bases de datos, tablas, vistas
y procedimientos almacenados.
Ejemplo (crear una tabla)
CREATE TABLE 'CUSTOMERS';
ALTER | MODIFICAR[editar]
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 (agregar columna a una tabla)
ALTER TABLE 'ALUMNOS' ADD EDAD INT UNSIGNED;
DROP | ELIMINAR[editar]
Este comando elimina un objeto de la base de datos. Puede ser una
tabla, vista, índice, trigger, función, procedimiento o cualquier objeto que el motor de la
base de datos soporte. Se puede combinar con la sentencia ALTER.
Ejemplo
DROP TABLE 'ALUMNOS';.
TRUNCATE | BORRAR TABLA[editar]
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 'NOMBRE_TABLA';

Lenguaje de manipulación de datos DML(Data


Manipulation Language)[editar]
Definición[editar]
Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es
un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los
usuarios llevar a cabo las tareas de consulta o manipulación de los datos, organizados por
el modelo de datos adecuado.
El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y
manipular datos en una base de datos relacional.
SELECT | SELECCIONAR[editar]
La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la
base de datos.
Forma básica[editar]

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 ]}]]

SELECT Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de selección.
Indica que queremos seleccionar todos los valores.Es el valor por defecto y no suele
ALL
especificarse casi nunca.
DISTINCT Indica que queremos seleccionar sólo los valores distintos.
Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que
exista más de una tabla se denomina a la consulta "consulta combinada" o "join". En las
FROM
consultas combinadas es necesario aplicar una condición de combinación a través de
una cláusula WHERE.
Especifica una condición que debe cumplirse para que los datos sean devueltos por la
WHERE
consulta. Admite los operadores lógicos AND y OR.
GROUP Especifica la agrupación que se da a los datos. Se usa siempre en combinación con
BY funciones agregadas.
Especifica una condición que debe cumplirse para que los datos sean devueltos por la
consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de
HAVING
resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la
condición debe estar referida a los campos contenidos en ella.
Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse
ORDER
con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado
BY
es ASC.
Ejemplo:
Para formular una consulta a la tabla Coches y recuperar los campos matricula, marca,
modelo, color, numero_kilometros, num_plazas debemos ejecutar la siguiente consulta.
Los datos serán devueltos ordenados por marca y por modelo en orden ascendente, de
menor a mayor. La palabra clave FROM indica que los datos serán recuperados de la tabla
Coches.

SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas


FROM Coches
ORDER BY marca,modelo;

Ejemplo de Consulta simplificada a través de un comodín de Campos (*):


El uso del asterisco indica que queremos que la consulta devuelva todos los campos que
existen en la tabla y los datos serán devueltos ordenados por marca y por modelo.
SELECT * FROM Coches ORDER BY marca, modelo;

Cláusula WHERE[editar]
La cláusula WHERE es la instrucción que nos permite filtrar el resultado de una
sentencia SELECT. Habitualmente no deseamos obtener toda la información existente en
la tabla, sino que queremos obtener sólo la información que nos resulte útil en ese
momento. La cláusula WHERE filtra los datos antes de ser devueltos por la consulta.
Cuando en la Cláusula WHERE queremos incluir un tipo texto, debemos incluir el valor
entre comillas simples.
Ejemplos:
En nuestro ejemplo, se desea consultar un coche en concreto, para esto se agregó una
cláusula WHERE. Esta cláusula especifica una o varias condiciones que deben cumplirse
para que la sentencia SELECT devuelva los datos. En este caso la consulta devolverá sólo
los datos del coche con matrícula para que la consulta devuelva sólo los datos del coche
con maricula  MF-234-ZD  o bien la matrícula  FK-938-ZL  . Se puede utilizar la
cláusula WHERE solamente, ó en combinación con tantas condiciones como queramos.

SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas


FROM Coches
WHERE matricula = 'MF-234-ZD'
OR matricula = 'FK-938-ZL' ;

Una Condición WHERE puede ser negada a través del Operador Lógico NOT. La
Siguiente consulta devolverá todos los datos de la tabla Coches, menos el que tenga la
Matrícula  MF-234-ZD  .

SELECT matricula,marca, modelo, color, numero_kilometros, num_plazas


FROM coches
WHERE NOT matricula = 'MF-234-ZD';

La Siguiente consulta utiliza la condicional DISTINCT, la cual nos devolverá todos los


valores distintos formados por los Campos Marca y Modelo. de la tabla coches.

SELECT DISTINCT marca, modelo FROM coches;

Cláusula ORDER BY[editar]


La cláusula ORDER BY es la instrucción que nos permite especificar el orden en el que
serán devueltos los datos. Podemos especificar la ordenación ascendente o descendente
a través de las palabras clave ASC y DESC. La ordenación depende del tipo de datos que
este definido en la columna, de forma que un campo númerico será ordenado como tal, y
un alfanúmerico se ordenará de la A a la Z, aunque su contenido sea númerico. El valor
predeterminado es ASC si no se especifica al hacer la consulta.
Ejemplos:
SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM coches
ORDER BY marca ASC,modelo DESC; Este ejemplo, selecciona todos los campos
matricula, marca, modelo, color, numero_kilometros y num_plazas de la tabla coches,
ordenándolos por los campos marca y modelo, marca en forma ascendente y modelo en
forma descendente.

SELECT matricula,
marca,
modelo,
color,
numero_kilometros, num_plazas
FROM coches
ORDER BY 2;

Este ejemplo, selecciona todos los campos matrícula, marca, modelo, color,
numero_kilometros y num_plazas de la tabla coches, ordenándolos por el campo marca,
ya que aparece en segundo lugar dentro de la lista de campos que componen la SELECT.
INSERT | INSERTAR[editar]
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[editar]
INSERT INTO 'tablatura' ('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[editar]
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 nombreTabla VALUES ('valor1', ['valor2,...'])
Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla
'agenda_telefonica'):
INSERT INTO agenda_telefonica
VALUES ('Jhonny Aguiar', 080473968);
Formas avanzadas[editar]
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)
Copia de filas de otras tablas[editar]
Un INSERT también puede utilizarse para recuperar datos de otros, modificarla si es
necesario e insertarla directamente en la tabla. Todo esto se hace en una sola sentencia
SQL que no implica ningún procesamiento intermedio en la aplicación cliente. Un
SUBSELECT se utiliza en lugar de la cláusula VALUES. El SUBSELECT puede
contener JOIN, llamadas a funciones, y puede incluso consultar en la misma TABLA los
datos que se inserta. Lógicamente, el SELECT se evalúa antes que la operación INSERT
esté iniciada. Un ejemplo se da a continuación.
INSERT INTO phone_book2

SELECT *
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')
Una variación es necesaria cuando algunos de los datos de la tabla fuente se está
insertando en la nueva tabla, pero no todo el registro. (O cuando los esquemas de las
tablas no son iguales.)
INSERT INTO phone_book2 ( [name], [phoneNumber] )

SELECT [name], [phoneNumber]


FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')
El SELECT produce una tabla (temporal), y el esquema de la tabla temporal debe coincidir
con el esquema de la tabla donde los datos son insertados.
UPDATE[editar]
Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de
registros existentes en una tabla.
Ejemplo[editar]
UPDATE My_table SET field1 = 'updated value asd' WHERE field2 =
'N';
DELETE[editar]
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.
Forma básica[editar]
DELETE FROM tabla WHERE columna1 = 'valor1'
Ejemplo[editar]
DELETE FROM My_table WHERE field2 = 'N';

Recuperación de clave[editar]
Los diseñadores de base de datos que usan una clave suplente como la clave principal
para cada tabla, se ejecutará en el ocasional escenario en el que es necesario recuperar
automáticamente la base de datos, generando una clave primaria de una sentencia SQL
INSERT para su uso en otras sentencias SQL. La mayoría de los sistemas no permiten
sentencias SQL INSERT para retornar fila de datos. Por lo tanto, se hace necesario aplicar
una solución en tales escenarios.
Implementaciones comunes incluyen:

 Utilizando un procedimiento almacenado específico de base de datos que genera


la clave suplente, realice la operación INSERT, y finalmente devuelve la clave
generada.
 Utilizando una sentencia SELECT específica de base de datos, sobre una tabla
temporal que contiene la última fila insertada. DB2 implementa esta característica de la
siguiente manera:

SELECT *
FROM NEW TABLE ( INSERT INTO phone_book VALUES ( 'Cristobal
Jeldrez','0426.817.10.30' ) ) AS t
 Utilizando una sentencia SELECT después de la sentencia INSERT con función
específica de base de datos, que devuelve la clave primaria generada por el registro
insertado más recientemente.
 Utilizando una combinación única de elementos del original SQL INSERT en una
posterior sentencia SELECT.
 Utilizando un GUID en la sentencia SQL INSERT y la recupera en una
sentencia SELECT.
 Utilizando la función de PHP mysql_insert_id() de MySQL después de la sentencia
INSERT.
 Utilizando un INSERT con la cláusula RETURNING para Oracle, que sólo se
puede utilizar dentro de un PL/SQL bloque, en el caso de PostgreSQL se puede usar
también tanto con SQL como con PL/SQL.

INSERT INTO phone_book VALUES ( 'Cristobal


Jeldrez','0426.817.10.30' )
RETURNING phone_book_id INTO v_pb_id

 En el caso de MS SQL se puede utilizar la siguiente instrucción:

SET NoCount ON;


INSERT INTO phone_book VALUES ( 'Cristobal
Jeldrez','0426.817.10.30' );
SELECT @@IDENTITY AS ID

Disparadores[editar]
Los disparadores, también conocidos como desencadenantes (triggers en inglés) son
definidos sobre la tabla en la que opera la sentencia INSERT, y son evaluados en el
contexto de la operación. Los desencadenantes BEFORE INSERT permiten la
modificación de los valores que se insertarán en la tabla. Los 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.

También podría gustarte