Вы находитесь на странице: 1из 13

Universidad del Cauca Modelamiento y Diseo de Bases de Datos

SQL Lenguaje de Manipulacin de Datos DML

El lenguaje de Manipulacin de Datos o DML es un conjunto de instrucciones que permite


Consultar, actualizar y eliminar los elementos creados con el DDL, como tablas, ndices,
etc. Est basado en lgebra y clculo relacional.

Tienen las siguientes sentencias:

o Operaciones de Actualizacin:
INSERT - para insertar datos a una tabla.

UPDATE - para modificar datos existentes dentro de una tabla.

DELETE - elimina todos los registros de la tabla; no borra los espacios asignados
a los registros.

o Operacin de consulta o recuperacin:


SELECT - para obtener datos de una base de datos.

Operaciones de Actualizacin
Sintaxis para la insercin:

INSERT INTO <nombre tabla> [(columna [, columna]....)] VALUES < (valor [, valor].....)

El <nombre_tabla> representa la tabla a la que queremos aadir el registro y los valores


que siguen a VALUES son los valores que damos a los distintos campos del registro. Si no
se especifica la lista de campos, la lista de valores debe seguir el orden de las columnas
segn fueron creados.

La lista de campos a rellenar se indica si no queremos rellenar todos los campos. Los
campos no rellenados explcitamente con la orden INSERT, se rellenan con su valor por
defecto (DEFAULT) o bien con NULL si no se indic valor alguno. Si algn campo tiene
restriccin de obligatoriedad (NOT NULL), ocurrir un error si no rellenamos el campo con
algn valor.

Ejemplo 1:
INSERT INTO Sitios (codigo, nombre, sitiosreferenciadopor) VALUES (1004,'Blivar',100);

O lo que es lo mismo:
INSERT INTO sitios VALUES (1004,'Blivar', 100);

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

Ejemplo 2:
INSERT INTO clientes VALUES ('11111111','Pedro','Gutirrez', 'Crespo', DEFAULT, NULL);

O lo que es lo mismo:
INSERT INTO clientes (dni, nombre, apellido1, apellido2) VALUES ('11111111','Pedro',
'Gutirrez', 'Crespo');

Operaciones de Actualizacin
Sintaxis de la modificacin

UPDATE <nombre tabla> SET {<nombre de columna> = <valor> [,<nombre de columna> =


<valor>]...} [WHERE <condicin de bsqueda>]

Se modifican las columnas indicadas en el apartado SET con los valores indicados. La
clusula WHERE permite especificar qu registros sern modificados.

En la condicin se pueden usar:

Tambien se pueden usar:


BETWEEN Especifica un intervalo de valores.
LIKE Comparacin de un modelo
In Especifica registros de una base de datos

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

Ejemplo 1:
UPDATE sitios SET nombre = 'Popayn'
WHERE cdigo = 1001;

Ejemplo 2:
UPDATE ciudad set iddepartamento = 19
WHERE idciudad in (76001, 76520);

Ejemplo 3:
Actualiza la provincia de los clientes de Orense para que aparezca como Ourense.
UPDATE clientes SET provincia='Ourense'
WHERE provincia='Orense';

Ejemplo 4:
Incrementa los precios en un 16%. La expresin para el valor puede ser todo lo compleja
que se desee.
UPDATE productos SET precio=precio*1.16;

Ejemplo 5:

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

Sintaxis del borrado:

DELETE FROM <nombre tabla> [WHERE <condicin de bsqueda>]

Elimina los registros de la tabla que cumplan la condicin indicada.


Hay que tener en cuenta que el borrado de un registro no puede provocar fallos de
integridad y que la opcin de integridad ON DELETE CASCADE hace que no slo se borren
los registros indicados en el SELECT, sino todos los relacionados.

La instruccin DELETE elimina todos los registros de la tabla, pero con la condicin WHERE
podemos eliminar un registro especfico.

DELETE FROM PERSONA;

Ejemplo 1:
DELETE FROM sitios WHERE cdigo = 100103;

Ejemplo 2:
DELETE FROM Persona WHERE Estado = Activo;

Operacin de consulta o recuperacin:

En su forma bsica tiene 3 elementos principales:

Select, From, Where:

SELECT:
Corresponde a la operacin de Proyeccin.
Permite listar los atributos que se desean en el resultado de la consulta. La clusula SELECT
va seguida de la descripcin de lo que se desea ver, es decir, de los nombres de las
columnas que quieres que se muestren separadas por comas simples (" , ").

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

FROM:
Especifica los nombres de la(s) tabla(s) de donde los datos sern seleccionados.
Cuando son varias tablas las que aparecen en el FROM el sistema ejecuta una operacin
de Producto Cartesiano o de JOIN.

WHERE:
Corresponde a la operacin de Seleccin. La clusula WHERE seguida de un criterio de
seleccin o condicin. Esta parte es opcional.
La condicin se hace sobre los atributos de las tablas del FROM.

ORDER BY:
Clusula ORDER BY va seguida por un criterio de ordenacin. Esta parte es opcional.

Sintaxis de la consulta:

SELECT nombre_columna, nombre_columna


FROM nombre_tabla
WHERE nombre_columna operador valor
[ORDER BY {expresinColumna [ASC | DESC],}];

Ejemplo:

Tener en cuenta para uso del SELECT:


Se pueden nombrar a las columnas anteponiendo el nombre de la tabla de la
que proceden, pero esto es opcional y quedara:
NombreTabla.NombreColumna

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

Si queremos incluir todas las columnas de una tabla podemos utilizar el


comodn asterisco ("*"). Quedara as: SELECT * FROM NombreTabla;
Tambin podemos ponerle alias a los nombres de las columnas. Cuando se
consulta una base de datos, los nombres de las columnas se usan como
cabeceras de presentacin. Si ste resulta largo, corto o poco descriptivo,
podemos usar un alias. Para ello a continuacin del nombre de la columna
ponemos entre comillas dobles el alias que demos a esa columna.

Ejemplo:

USO DE COUNT:
Permite contar los registros existentes en la columna segn un atributo determinado.

SELECT COUNT (*)


FROM usuario;

La respuesta de la consulta ser:

El uso del ORDER BY:


Se utiliza para especificar el criterio de ordenacin de la respuesta a la consulta. Por
defecto la ordenacin es ascendente, aunque se puede especificar un orden descendente.
La ordenacin se puede establecer sobre el contenido de columnas o sobre expresiones
con columnas.
Despus de cada columna de ordenacin se puede incluir el tipo de ordenacin
(ascendente o descendente) utilizando las palabras reservadas ASC o DESC. Por defecto, y
si no se pone nada, la ordenacin es ascendente.

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

A continuacin se puede ver un ejemplo de uso de la clusula ORDER BY en la que quiere


obtener un listado de los empleados ordenado de manera descendente por su salario y en
caso de igualdad de salario, ordenado ascendentemente por su nombre.

SELECT nombre, salario


FROM emp
ORDER BY salario DESC, nombre;

Debes saber que es posible ordenar por ms de una columna. Es ms, puedes ordenar no
solo por columnas sino a travs de una expresin creada con columnas, una constante
(aunque no tendra mucho sentido) o funciones SQL.

En el siguiente ejemplo, ordenamos por apellidos y en caso de empate por nombre:

SELECT nombre, apellidos


FROM USUARIOS
ORDER BY apellidos, nombre;

Uso del ALL:


La clusula ALL es opcional. Si se incluye la clusula ALL despus de SELECT, se indicar
que quieres seleccionar todas las filas estn o no repetidas. Es el valor por defecto y no se
suele especificar.

Uso del DISTINCT:


Cuando se realiza una consulta sobre una tabla en la que se extrae informacin de varias
columnas, puede ocurrir que, si no incluimos la/s columna/s que forman la clave principal,
obtengamos filas repetidas en la respuesta.

Si este comportamiento no nos resulta satisfactorio podemos utilizar la clusula DISTINCT


para eliminar las filas duplicadas obtenidas como respuesta a una consulta.

Podemos ver cmo funciona en el siguiente ejemplo, en el que preguntamos por los
distintos oficios de nuestros empleados.

SELECT oficio
FROM emp;

Sin utilizar la clusula DISTINCT obtendremos la siguiente respuesta.

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

Pero si incluimos la clusula DISTINCT la respuesta vara para adecuarse ms a nuestras


expectativas.

SELECT DISTINCT oficio


FROM emp;

Uso del GROUP BY:


SQL nos permite agrupar las filas resultado de una consulta en conjuntos y aplicar
funciones sobre esos conjuntos de filas.

La sintaxis es la siguiente:

SELECT {* | {columna,}}

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

FROM {tabla,}
WHERE condicin

GROUP BY {columna ,}
HAVING condicin

ORDER BY {expresinColumna [ASC | DESC],};

En la clusula GROUP BY se colocan las columnas por las que vamos a agrupar. Y en la
clusula HAVING se especifica la condicin que han de cumplir los grupos para pasar al
resultado.

La evaluacin de las diferentes clusulas en tiempo de ejecucin se efecta en el siguiente


orden:

WHERE filtra las filas


GROUP BY crea una tabla de grupo nueva

HAVING filtra los grupos

ORDER BY clasifica la salida

Las funciones de agrupamiento que se pueden usar son:

Ejemplo:
SELECT COUNT (nombre), oficio
FROM emp
GROUP BY oficio;

Ejemplo 2:
SELECT MAX (SALDO)
FROM USUARIO;

Teniendo la tabla:

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

La respuesta ser:

Las columnas que aparecen en el SELECT y que no aparezcan en la clusula GROUP BY


deben tener una funcin de agrupamiento. Si esto no se hace as producir un error. Otra
opcin es poner en la clusula GROUP BY las mismas columnas que aparecen en SELECT.

Ejemplo:
SELECT PROVINCIA, SUM (CREDITO)
FROM USUARIOS
GROUP BY PROVINCIA;

Obtenemos la suma de crditos de nuestros usuarios agrupados por provincia. Si


estuviramos interesados en la suma de crditos agrupados por provincia pero
nicamente de las provincias de Cdiz y Badajz nos quedara:

SELECT PROVINCIA, SUM(CREDITO)


FROM USUARIOS
GROUP BY PROVINCIA
HAVING PROVINCIA = 'CDIZ' OR PROVINCIA= 'BADAJOZ';

Uso del LIKE:


El operador LIKE permite utilizar comodines en la clusula WHERE en la declaracin de un
SELECT. Esto permite realizar la adaptacin de modelos.

La condicin LIKE se puede utilizar en cualquier declaracin de SQL vlida - Select, Insert,
Update, o Delete.

Los comodines que se pueden usar son:

% Permite sustituir cualquier cadena de caracteres de cualquier longitud


(incluyendo longitud cero).
Permite sustituir solo un carcter:

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

Selecciona todos clientes que su nombre empiece por la letra A.


SELECT * FROM clientes
WHERE nombre_cliente like 'A%';

Ahora queremos aquellos empleados cuyo apellido comienza por R:


SELECT nombre
FROM EMPLEADOS
WHERE APELLIDO1 LIKE 'R%';

Obtenemos aquellos apellidos que empiezan por "A" y tiene una "o" en su
interior:
SELECT APELLIDO
FROM JUGADORES
WHERE APELLDIOS LIKE 'A%O%';

Para obtener todos los clientes que su nombre contenga los caracteres 'to'.
SELECT * FROM clientes
WHERE nombre_ciente like '%to%';

Uso del comodin _

Para devolver todos los cliente que su nombre empiece por 'Jua' y que el cuarto
caracter sea cualquiera.
SELECT * FROM clientes
WHERE nombre_codigo_cliente like 'Jua_';

SALIDA DE DATOS:
Utilizando expresiones con operadores es posible obtener salidas en las cuales una
columna sea el resultado de un clculo y no un campo de una tabla.

Mira este ejemplo en el que obtenemos el salario aumentado en un 5% de aquellos


empleados que cobran menos de 1000:

SELECT SALARIO*1,05
FROM EMPLEADOS
WHERE SALARIO<=1000;

Cuando una expresin aritmtica se calcula sobre valores NULL, el resultado es el propio
valor NULL. Para concatenar cadenas de caracteres existe el operador de concatenacin ("

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

|| "). Oracle puede convertir automticamente valores numricos a cadenas para una
concatenacin.
En la tabla EMPLEADOS tenemos separados en dos campos el primer y segundo apellido
de los empleados, si necesitramos mostrarlos juntos podramos crear la siguiente
consulta:

SELECT Nombre, Apellido1 || Apellido2


FROM EMPLEADOS;

Si queremos dejar un espacio entre un apellido y otro, debemos concatenar tambin el


espacio en blanco de la siguiente manera:

SELECT Nombre, Apellido1 || ' ' ||Apellido2


FROM EMPLEADOS;

USO DE OPERADORES LOGICOS


Si queremos obtener aquellos empleados en cuyo historial salarial tengan sueldo menor o
igual a 800 o superior a 2000:

SELECT empleado_dni
FROM HISTORIAL_SALARIAL
WHERE salario<=800 OR salario>2000;

Utilizando las tablas y datos de la empresa JuegosCA, vamos a realizar una consulta donde
obtengamos todos nombres de trabajos menos el de contable.

SELECT NOMBRE_TRAB
FROM TRABAJOS
WHERE NOMBRE_TRAB NOT IN ('CONTABLE');

Seleccionar a los clientes cuyo nmero de cliente est contenido entre el rango 1309 y
1950.

SELECT NUMCLI, NOMCLI


FROM CLIENTE
WHERE NUMCLI >= 1309 AND NUMCLI <= 1950;

Se obtiene el mismo resultado utilizando la palabra reservada BETWEEN, la cual especifica


que un valor sea menos o igual que un valor y mayor o igual que otro valor.

SELECT NUMCLI, NOMCLI


FROM CLIENTE
WHERE NUMCLI BETWEEN 1309 AND 1950;

13
Universidad del Cauca Modelamiento y Diseo de Bases de Datos

PRACTICA:
Teniendo en cuenta las siguientes tablas:

Se deben realizar las sentencias requeridas para cada uno de los siguientes puntos.

Crear el cdigo necesario para crear las tablas mostradas anteriormente.


Realizar las sentencias requeridas para insertar al menos dos filas en cada una de
las tablas creadas.
Obtener todos los detalles de todos los artculos de SEVILLA.
Obtener todos los valores de P# para los proveedores que abastecen el artculo T1.
Obtener la lista de pares de atributos (COLOR, CIUDAD) de la tabla componentes
eliminando los pares duplicados.
Obtener de la tabla de artculos los valores de T# y CIUDAD donde el nombre de la
ciudad acaba en D o contiene al menos una E.

13

Вам также может понравиться