Instrucciones DML
Instrucciones DML
Instrucciones DML
DRA. ARAIZA
¿QUÉ ES DML?
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
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];
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
El símbolo * (asterisco) sirve para seleccionar todas las columnas de una tabla. Ejemplo:
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:
No es obligatorio utilizar la palabra AS, es igualmente válido dejar un espacio en blanco antes del alias:
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:
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:
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:
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 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:
Ejemplos:
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:
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.