Instrucciones DML

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 33

Instrucciones DML

DRA. ARAIZA
¿QUÉ ES DML?

El DML (Lenguaje de Modificación de Datos) es una de las partes fundamentales del


lenguaje SQL. Lo forman las instrucciones capaces de modificar (añadir, cambiar o
eliminar) los datos de las tablas.

Al conjunto de instrucciones DML que se ejecutan consecutivamente, se le llama


transacción. Lo interesante de las transacciones es que podemos anularlas, ya que
forman una unidad lógica de trabajo que hasta que no se acepten, sus resultados no
serán definitivos.

En todas las instrucciones DML, el único dato devuelto por el sistema es el número de
filas que se han modificado al ejecutar la instrucción.
INSERCIÓN DE DATOS

Añadir datos a una tabla se realiza mediante la instrucción INSERT. Su


sintaxis fundamental es:
INSERT INTO tabla [(listaDeColumnas)]
VALUES (valor1 [,valor2 ...])
La tabla representa la tabla a la que queremos añadir el registro y los valores
que siguen a la cláusula 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 según fueron creados (para conocer
ese orden basta invocar al comando DESCRIBE).
INSERCIÓN DE DATOS

La lista de campos a rellenar se indica si no queremos rellenar todas las


columnas.
Las columnas no rellenadas explícitamente con la orden INSERT, se rellenan
con su valor por defecto (DEFAULT) o bien con NULL si no se indicó valor por
defecto alguno. Si alguna columna tiene restricción de obligatoriedad (NOT
NULL), ocurrirá un error si no indicamos un valor para dicha columna.
INSERCIÓN DE DATOS

Por ejemplo, supongamos que tenemos una tabla de clientes cuyos campos son: dni, nombre,
apellido1, apellido2, localidad y dirección
supongamos que ese es el orden de creación de los campos de esa tabla y que la localidad tiene
como valor por defecto Palencia y la dirección no tiene valor por defecto. En ese caso estas dos
instrucciones son equivalentes:
INSERT INTO clientes VALUES( ‘11111111’,’Pedro’,’Gutiérrez’, ‘Crespo’,DEFAULT,NULL);
INSERT INTO clientes(dni,nombre,apellido1,apellido2)
VALUES(‘11111111’,’Pedro’,’Gutiérrez’, ‘Crespo’);
Son equivalentes puesto que, en la segunda instrucción, los campos no indicados se rellenan con su
valor por defecto y la dirección no tiene valor por defecto.
Los valores por defecto se indican, durante la creación o modificación de la estructura de una tabla,
a través de la palabra clave DEFAULT.
MODIFICACIÓN DE DATOS
La modificación de los datos de las filas se realiza mediante la instrucción
UPDATE.
Su sintaxis es la siguiente:

UPDATE tabla
SET columna1=valor1 [,columna2=valor2...]
[WHERE condición];

Se modifican las columnas indicadas en el apartado SET con los valores


indicados. La cláusula WHERE permite especificar qué registros serán
modificados.
EJEMPLOS:
UPDATE clientes SET provincia=’Ourense’
WHERE provincia=’Orense’;
UPDATE productos SET precio=precio*1.16;
La primera instrucción actualiza la provincia de los clientes de Orense para que aparezca
como Ourense.

El segundo UPDATE incrementa los precios en un 16%. La expresión para el valor puede ser
todo lo compleja que se desee (en el ejemplo se utilizan funciones de fecha para conseguir
que los partidos que se jugaban hoy pasen a jugarse el siguiente martes):
UPDATE partidos SET fecha= NEXT_DAY(SYSDATE,’Martes’)
WHERE fecha=SYSDATE;
BORRADO DE DATOS

Se realiza mediante la instrucción DELETE:

DELETE [FROM] tabla [WHERE condición];


Esta instrucción, elimina las filas de la tabla que cumplan la condición
indicada. Ejemplo:

DELETE FROM empleados WHERE sección=23;


CONSULTAS SIMPLES CON SELECT
sintaxis sencilla del comando SELECT
SELECT * | {[DISTINCT] columna | expresión [[AS] alias], ...}
FROM tabla;
Donde:
*. El asterisco significa que se seleccionan todas las columnas
DISTINCT. Hace que no se muestren los valores duplicados.
columna. Es el nombre de una columna de la tabla que se desea mostrar
expresión. Una expresión válida SQL
alias. Es un nombre que se le da a la cabecera de la columna en el resultado de
esta instrucción. No es imprescindible usar la palabra AS.
EJEMPLOS:

/*Selección de todos los registros de la tabla clientes*/


SELECT * FROM Clientes;
/* Selección de algunos campos*/
SELECT nombre, apellido1, apellido2 FROM Clientes;
USO DEL ASTERISCO

El símbolo * (asterisco) sirve para seleccionar todas las columnas de una tabla. Ejemplo:

SELECT * FROM empleados;


Sólo se puede utilizar tras la palabra SELECT y no puede estar acompañado de ninguna
expresión. Por ejemplo, no es correcto:

SELECT *, precio+iva
FROM empleado;
--Incorrecto, el asterisco no puede estar acompañado de
--ninguna otra expresión
ALIAS
Los alias sirven para dar otro nombre a una columna. Por ejemplo:

SELECT id_trabajo AS identificador, nombre FROM trabajos;

La columna id_trabajo ha sido renombrada por la palabra identificador. No es un renombrado permanente,


sólo se utiliza en la ejecución de la instrucción SELECT. No estamos realmente cambiando de nombre a la
columna, por ello lo que se dice es que estamos poniendo un alias a esa expresión.

No es obligatorio utilizar la palabra AS, es igualmente válido dejar un espacio en blanco antes del alias:

SELECT id_trabajo identificador, nombre FROM trabajos;

Usar o no AS es cuestión de gustos. Sus defensores lo hacen porque la instrucción SELECT es más legible.

En los alias, es muy normal utilizar espacios en blanco para indicar el nombre a fin de conseguir nombres
más claros. En ese caso se debe utilizar comillas dobles para especificar el alias:

SELECT id_trabajo “identificador de trabajo”, nombre

FROM trabajos;

Con comillas dobles podemos utilizar cualquier carácter para dar nombre al alias.
CÁLCULOS

Los operadores + (suma), - (resta), * (multiplicación) y / (división), se pueden utilizar para hacer cálculos en
las consultas. Cuando se utilizan como expresión en una consulta SELECT, no modifican los datos originales,
sino que como resultado de la vista generada por SELECT, aparece una nueva columna. Ejemplo:

SELECT nombre, precio, precio*1.16 FROM artículos;

Esa consulta obtiene tres columnas. La tercera muestra el resultado de la operación. Al no indicar nombre
alguno, se toma la propia expresión (precio*1,16) como cabecera de esa columna. Eso significa que no tiene
un nombre válido, por lo que se debería siempre utilizar alias:

SELECT nombre, precio, precio*1.16 AS precio_con_iva FROM artículos;

La prioridad de esos operadores es la habitual en todos los lenguajes de programación

Tienen más prioridad las operaciones de multiplicación y división que las de suma y la resta.

En caso de igualdad de prioridad, se realiza primero la operación que esté más a la izquierda. Como es
lógico, se puede evitar cumplir esa prioridad usando paréntesis; el interior de los paréntesis es lo que se
ejecuta primero.

Cuando una expresión aritmética se aplica sobre valores NULL, el resultado es el propio valor NULL.

Se puede utilizar cualquiera de los operadores aritméticos: suma (+), resta (-), multiplicación (*), división
(/). Como es habitual, la multiplicación y la división tienen preferencia sobre la suma y la resta en el orden de
ejecución de la instrucción; dicho orden se puede alterar mediante el uso de los paréntesis.
CONCATENACIÓN DE TEXTOS
El operador de concatenar texto permite unir dos textos. Normalmente se
usa para juntar resultados de diferentes expresiones en una miasma
columna de una tabla. Todas las bases de datos incluyen algún operador
para encadenar textos. En SQL Server y otros gestores es el signo + (suma),
en Oracle son los signos ||. Ejemplo (Oracle):
SELECT tipo, modelo, tipo || ‘-’ || modelo “Clave Pieza” FROM piezas;
El resultado sería:
Tipo Modelo Clave Pieza
AR 6 AR-6
AR 7 AR-7
AR 8 AR-8
AR 9 AR-9
AR 12 AR-12
AR 15 AR-15
CONDICIONES

Se pueden realizar consultas que restrinjan los datos


de salida de las tablas. Para ello se utiliza la cláusula
WHERE. Esta cláusula permite colocar una condición
que han de cumplir todos los registros, los que no la
cumplan no aparecen en el resultado.
Ejemplo:
SELECT Tipo, Modelo FROM Pieza WHERE Precio>3;
OPERADORES DE COMPARACIÓN
Se pueden utilizar en la cláusula WHERE, son:
Operador Significado
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
= Igual
<> Distinto
!= Distinto

Se pueden utilizar tanto para comparar números como para comparar textos y
fechas. En el caso de los textos, las comparaciones se hacen en orden alfabético.
VALORES LÓGICOS
Son:

perador Significado
Devuelve verdadero si las expresiones
AND a su izquierda y derecha son ambas
verdaderas
Devuelve verdadero si cualquiera de
OR las dos expresiones a izquierda y
derecha del OR, son verdaderas
Invierte la lógica de la expresión que
NOT está a su derecha. Si era verdadera,
mediante NOT pasa a ser falso.
EJEMPLOS:
/* Obtiene a las personas de entre 25 y 50 años*/
SELECT nombre, apellido1,apellido2 FROM personas
WHERE edad>=25 AND edad<=50;
/*Obtiene a la gente de más de 60 años o de menos de 20*/
SELECT nombre, apellido1,apellido2 FROM personas
WHERE edad>60 OR edad<20;
/*Obtiene a la gente de con primer apellido entre la
A y la O */
SELECT nombre,apellido1,apellido2 FROM personas
WHERE apellido1>’A’ AND apellido2<’Z’;
BETWEEN
El operador BETWEEN nos permite obtener datos que se encuentren en un
rango. Uso:

SELECT tipo,modelo,precio FROM piezas WHERE precio BETWEEN 3 AND 8;

Saca piezas cuyos precios estén entre 3 y 8 (ambos incluidos). En realidad,


es una forma más rápida de hacer esta consulta:

SELECT tipo,modelo,precio FROM piezas WHERE precio>=3 AND precio<=8;


IN
Permite obtener registros cuyos valores estén en una lista de
valores:

SELECT tipo, modelo, precio


FROM piezas
WHERE precio IN (3,5,8);

Obtiene piezas cuyos precios sean 3, 5 u 8 (no valen ni el precio


4 ni el 6, por ejemplo).
LIKE
Se usa sobre todo con textos, permite obtener registros cuyo valor en un
campo cumpla una condición textual. LIKE utiliza una cadena que puede
contener estos símbolos:
Símbolo Significado
% Una serie cualquiera de caracteres
_ Un carácter cualquiera

Ejemplos:

/* Selecciona nombres que empiecen por S */

SELECT nombre FROM personas WHERE nombre LIKE ‘S%’;

/*Selecciona las personas cuyo apellido sea Sanchez, Senchez, Sánchez,...*/

SELECT apellido1 FROM Personas WHERE apellido1 LIKE ‘S nchez’;


IS NULL

En SQL para valorar los nulos, es frecuente cometer este error:


SELECT nombre, apellidos FROM personas WHERE teléfono=NULL
Esa expresión no es correcta. No debemos usar los operadores de
comparación normales con valores nulos. La consulta anterior no muestra a
las personas sin teléfono (que es lo que pretendemos).
Lo correcto es usar el operador destina a comprobar si un determinado dato
es nulo:
SELECT nombre,apellidos FROM personas WHERE teléfono IS NULL
Esa instrucción selecciona a la gente que no tiene teléfono.
Existe también la expresión contraria: IS NOT NULL que devuelve verdadero
en el caso contrario, ante cualquier valor distinto de nulo.
PRECEDENCIA DE OPERADORES

A veces las expresiones que se producen en los SELECT son muy extensas y
es difícil saber que parte de la expresión se evalúa primero. Por ello es
necesario conocer la tabla de precedencia que indica qué operadores tienen
prioridad entre sí. Los que están al nivel 1 tienen la máxima prioridad.
La tabla completa es la siguiente:
Orden de precedencia Operador
1 *(Multiplicar) /(dividir)
2 + (Suma) - (Resta)
3 || (Concatenación)
4 Comparaciones (>, <, !=, ...)
IS NULL, IS NOT NULL, LIKE, IN,
5
NOT IN
6 NOT, NOT BETWEEN
7 NOT
8 AND
9 OR
PRECEDENCIA DE OPERADORES

Las reglas de prioridad se pueden alterar mediante paréntesis. Por ejemplo, supongamos
que tenemos esta expresión:
SELECT nombre, apellido1, apellido2
FROM alumnos
WHERE id_clase=11 OR id_clase=13 AND nota>=5;
Parece que queremos obtener el nombre y apellidos de los alumnos aprobados (nota>=5)
de las clases número 11 y 13. Pero como AND tiene prioridad sobre el OR, sacaremos los
alumnos aprobados de la clase 13 y además se mostrarán todos los alumnos de la clase 11
(hayan aprobado o no).
Lo correcto hubiera sido usar paréntesis:
SELECT nombre, apellido1, apellido2
FROM alumnos
WHERE (id_clase=11 OR id_clase=13) AND nota>=5;
ORDENACIÓN
Las filas que resultan de una instrucción SELECT no guarda más que una relación respecto
al orden en el que fueron introducidos, y ese orden normalmente no tiene ningún interés.
Para ordenar en base a criterios más interesantes, se utiliza la cláusula ORDER BY. Esa es
a cláusula que permite hacer efectiva una de las reglas relacionales más importantes: que
el orden de introducción de las filas no importa

En esa cláusula se coloca una lista de campos por los que queremos ordenar los
resultados. Se ordena primero por el primer campo de la lista, si hay coincidencias por el
segundo, si ahí también las hay por el tercero, y así sucesivamente.

Se puede colocar las palabras ASC O DESC (por defecto se toma ASC). Esas palabras
permiten ordenar en ascendente (de la A a la Z, de los números pequeños a los grandes) o
en descendente (de la Z a la a, de los números grandes a los pequeños) respectivamente.
Por defecto, si no se indica nada, la ordenación es ascendente.
ORDENACIÓN
Sintaxis de SELECT (para una sola tabla), incluida la cláusula ORDER BY:
SELECT {* | [DISTINCT] {columna | expresión} [[AS] alias], ... }
FROM tabla
[WHERE condición]
[ORDER BY expresión1 [,expresión2,…][{ASC|DESC}]];

Las expresiones de la cláusula ORDER BY pueden ser cualquiera que haga referencia a una
columna o a cálculos sobre la columna. Ejemplo:
SELECT nombre,apellido1,apellido2
FROM alumnos
ORDER BY apellido1, apellido2, nombre;
Obtendrá la lista de alumnos ordenados por su primer apellido, luego por el segundo y
luego por el nombre.
ASCENDENTE Y DESCENDENTE
Normalmente ordena en ascendente, pero si usamos DESC ordenará en descendente:
SELECT nombre, apellido1, apellido2, f_n fecha_nacimiento
FROM alumnos
ORDER BY f_n DESC;
Mostrará la lista de alumnos ordenada de forma que aparezcan primero los más
jóvenes.
Además, podemos usar el alias en lugar del nombre de la columna:

SELECT nombre, apellido1, apellido2, f_n fecha_nacimiento


FROM alumnos
ORDER BY fecha_nacimiento DESC;
ASCENDENTE Y DESCENDENTE
Incluso podemos utilizar el número de columna:
SELECT nombre, apellido1, apellido2, f_n fecha_nacimiento
FROM alumnos
ORDER BY 4 DESC;
También es posible mezclar ordenaciones en ascendente y descendente:
SELECT nombre, apellido1, apellido2, f_n fecha_nacimiento, id_clase
FROM alumnos
ORDER BY id_clase, f_n DESC;
Este último SELECT muestra los datos de los alumnos de forma que salgan
ordenados en ascendente por el número de clase. Dentro de cada clase saldrán
primero por fecha de nacimiento, pero ordenando en descendente la fecha.
ORDEN POR NÚMERO DE COLUMNAS
Oracle permite ordenar en base a números que representan las columnas en el
orden en el que aparecen en esta instrucción. Ejemplo:
SELECT nombre, apellido1, apellido2, fecha_nacimiento, id_clase
FROM alumnos
ORDER BY 2,3,1;
En este ejemplo se ordena por primer apellido, luego por segundo y luego por el
nombre.
Este formato se puede combinar con los vistos antes. Ejemplo:
SELECT nombre, apellido1, apellido2, fecha_nacimiento, id_clase
FROM alumnos
ORDER BY 2,3,nombre;
MANEJO DE NULOS EN LAS ORDENACIONES
Como se ha comentado en varias ocasiones, los valores nulos nunca cumplen las
condiciones ni de ordenación ni las condiciones de las cláusulas WHERE.
A la hora de ordenar si tenemos valores nulos en las columnas por las que estamos
ordenando, las filas con valores nulos aparecen al final de la consulta.
Pero podemos indicar si queremos que los nulos vayan al principio o al final indicándolo
de manera correcta tras la cláusula ORDER BY. Posibilidades:
NULLS LAST
NULLS FIRST
Ejemplo:
SELECT nombre, apellido1, apellido2, teléfono FROM alumnos
ORDER BY teléfono NULLS FIRST;
En esta consulta los nulos aparecen al principio de la consulta. Por defecto las consultas
usan NULLS LAST la cual coloca los nulos al final de la consulta.
VARIABLES DE SUSTITUCIÓN
Es posible tener que repetir consultas en las que sólo cambia un dato. Por ejemplo, esta
consulta:
SELECT nombre, apellido1 “Primer Apellido”, apellido2 “Segundo Apellido”
edad, salario
FROM trabajadores
WHERE cod_trabajador=198;
Muestra los datos del trabajador 198. Si ahora quisiéramos los datos del trabajador 199,
repetiríamos la consulta, pero modificando el 198 por un 199.
Cuando se detecta este tipo de consultas repetitivas en las que varía un solo dato (o unos
pocos), algunos Sistemas de Bases de Datos proporcionan un mecanismo conocido como
variables de sustitución.
En realidad, no forman parte del lenguaje SQL, pero casi todos los sistemas las incluyen. En el
caso de Oracle se utilizan mediante el operador ampersand (&). Tras este símbolo se indica el
nombre de la variable, que será cualquier nombre válido. Esa validez es la misma que las de
los nombres de tablas y columnas en Oracle: 64 caracteres, nada de espacios en blanco, etc.
EJEMPLO:
ELECT nombre, apellido1 “Primer Apellido”, apellido2 “Segundo Apellido”
edad, salario
FROM trabajadores
WHERE cod_trabajador=&codigo_trabajador;
Al ejecutar la consulta Oracle permite indicar el valor que deseamos para la variable. Por ejemplo, de
la forma que se muestra en esta imagen:

En él podremos indicar el
código de trabajador que
queremos ver. De esa
forma ya no modificaremos
el código, sino que
indicaremos el valor de la
variable.
La sustitución es literal de modo que si ejecutamos la consulta:
SELECT nombre, apellido1 “Primer Apellido”, apellido2 “Segundo Apellido” , edad, salario
FROM trabajadores
WHERE nombre=&v_nombre;
Y luego, cuando Oracle nos lo reclame, escribimos Antonio como valor para sustituir en la variable,
no se nos mostrarán los datos de Antonio, sino que ocurrirá un error. La razón está en que, al
sustituir el valor de la variable, se obtendría esta consulta:
SELECT nombre, apellido1 “Primer Apellido”, apellido2 “Segundo Apellido”, edad, salario
FROM trabajadores
WHERE nombre=Antonio;
El error ocurre porque faltan las comillas. Para no tener ese problema, que obliga a introducir las
comillas en el cuadro, debemos hacer lo siguiente:
SELECT nombre, apellido1 “Primer Apellido”, apellido2 “Segundo Apellido”, edad, salario
FROM trabajadores
WHERE nombre=’&v_nombre’;
El uso de variables de sustitución no sólo está restringido a la cláusula WHERE, se pueden utilizar en
cualquier cláusula.

También podría gustarte