009-4 DML SQL
009-4 DML SQL
DML
• Facultad: Ingenierías y Arquitectura
• Departamento: Eléctrica, Electrónica, Sistemas y
Telecomunicaciones
• Código: 167401
• Tipo: Teórico practica
• Docente: Francisco Alexis Vera Peña.
DML – ALTER TABLE
Para cambiar la estructura de una tabla existente, utiliza ALTER TABLE
sintaxis básica:
acciones:
• Para modificar varias columnas, hay que realizarlo cada columna por separado. Se
puede omitir la palabra reservada COLUMN :
• Cambiar el tipo de dato (SET DATA TYPE) y el tamaño del dato. En principio podemos
cambiar el tipo de dato de una columna sin problemas, aunque en algunos casos nos dará
un error por el contenido de los registros. Las palabras reservadas COLUMN y SET DATA se
pueden omitir.
• Antes de utilizar el comando ALTER TABLE para agregar una clave primaria, necesitará
asegurarse de que el campo esté definido como NOT NULL, en otras palabras, NULL no
puede aceptarse como valor para ese campo.
DML – ALTER TABLE
declarar la restricción:
CHECK Condicion;
DML – ALTER TABLE
• sintaxis CHECK:
CHECK(condición);
• sintaxis UNIQUE
UNIQUE (Campo);
SELECT & DROP:
• Para ver la estructura de una tabla consultaremos una tabla propia del PostgreSQL:
• Para eliminar una tabla usamos "drop table" junto al nombre de la tabla a eliminar:
Si intentamos eliminar una tabla que no existe, aparece un mensaje de error indicando tal
situación y la sentencia no se ejecuta, podemos escribir una variante de drop table verificando
si existe la tabla:
Ejemplo:
PRIMARY KEY(codigo);
Usamos "insert into", luego el nombre de la tabla, detallamos los nombres de los campos
entre paréntesis y separados por comas y luego de la cláusula "values" colocamos los valores
para cada campo, también entre paréntesis y separados por comas.
Creación de la tabla:
Para recuperar los registros que contengan el valor "null" en algún campo, debemos utilizar los
operadores "is null" (es igual a null) y "is not null" (no es null):
Signo Descripción
= Igual
<> Distinto
> Mayor
< Menor
>= Mayor o Igual
<= Menor o Igual
DML – SELECT-WHERE
Recuperar algunos registros (WHERE)
Podemos recuperar registros específicos, sólo los que cumplan con ciertas condiciones
indicadas con la cláusula WHERE.
Ejemplo:
Queremos ver los libros que el precio sea mayor a 60, para ello utilizamos WHERE y luego de
ella, la condición:
• (), paréntesis
• Ver los libros cuya EDITORIAL sea " CENGAGE " y/o cuyo autor sea " MICHAEL SIPSER ":
SELECT * FROM BOOKS
WHERE author='MICHAEL SIPSER' OR EDITORIAL = 'CENGAGE';
“Los registros recuperados con una sentencia que une 2 condiciones con el operador "or",
cumplen 1 de las condiciones o ambas”.
OPERADORES LOGICOS
and - or - not
• Recuperar los libros que NO cumplan la condición dada, por ejemplo, aquellos
cuya editorial NO sea "Planeta":
SELECT * FROM BOOKS
WHERE NOT EDITORIAL ='CENGAGE';
El operador NOT invierte el resultado de la condición a la cual antecede.
• Los paréntesis se usan para encerrar condiciones, para que se evalúen como una
sola expresión.
Si bien los paréntesis no son obligatorios en todos los casos, se recomienda utilizarlos
para evitar confusiones.
OPERADORES LOGICOS
and - or - not
El orden de prioridad de los operadores lógicos es el siguiente:
Si no queremos eliminar todos los registros, sino solamente algunos, debemos indicar cuál o
cuáles, para ello utilizamos el comando DELETE junto con la clausula WHERE con la cual
establecemos la condición que deben cumplir los registros a borrar.
DELETE FROM usuario Antes de hacer DELETE
WHERE nombre = 'Marcelo'; realizar un SELECT.
La sentencia TRUNCATE TABLE vacía la tabla (elimina todos los registros) y vuelve a crear la
tabla con la misma estructura.
La diferencia con DROP TABLE es que esta sentencia borra la tabla, TRUNCATE TABLE la vacía.
La diferencia con DELETE es la velocidad, es más rápido TRUNCATE TABLE que DELETE (se
nota cuando la cantidad de registros es muy grande) ya que éste borra los registros uno a uno.
DML – UPDATE
actualizar registro
Decimos que actualizamos un registro cuando modificamos alguno de sus valores.
Para modificar uno o varios datos de uno o varios registros utilizamos UPDATE.
Por ejemplo, en la tabla BOOKS, queremos cambiar los valores de todos los precios, por 0:
colocamos UPDATE, el nombre de la tabla, SET junto al nombre del campo y el nuevo valor y
separado por coma, el otro nombre del campo con su nuevo valor.
-------------
1. Relacionales o de comparación.
2. Lógicos.
3. Aritméticos.
4. Concatenación.
Son: multiplicación (*), división (/) y módulo (%) (el resto de dividir números enteros), suma
(+) y resta (-).
Es posible obtener salidas en las cuales una columna sea el resultado de un cálculo y no un
campo de una tabla.
COLUMNAS CALCULADAS
operadores aritméticos y de concatenación
• Si queremos ver los títulos, precio y cantidad de cada libro escribimos la siguiente
sentencia:
SELECT TITLE, PRICE, STOCK
FROM BOOKS;
Por ejemplo, tenemos la tabla "agenda" con un campo "nombre" (entre otros) en el cual se
almacena el nombre y apellido de nuestros amigos; queremos que al mostrar la información
de dicha tabla aparezca como encabezado del campo "nombre" el texto "nombre y apellido",
para ello colocamos un alias de la siguiente manera:
SELECT TITLE AS TITULO, AUTHOR AS AUTOR, PRICE AS PRECIO
FROM BOOKS;
ORDER BY campo;
Por ejemplo, recuperamos los registros de la tabla "libros" ordenados por el título:
ORDER BY TITLE;
ORDER BY
Ordenar registros
• Colocar el número de orden del campo por el que queremos que se ordene en lugar de su
nombre, es decir, referenciar a los campos por su posición en la lista de selección. Por
ejemplo, queremos el resultado del SELECT ordenado por "precio":
Por defecto, si no aclaramos en la sentencia, los ordena de manera ascendente (de menor a
mayor).
• Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave "DESC":
• Ordenar en distintos sentidos, por ejemplo, por "titulo" en sentido ascendente y "editorial"
en sentido descendente:
Debe aclararse al lado de cada campo, pues estas palabras claves afectan al campo
inmediatamente anterior.
Para recuperar de la tabla “BOOKS" los libros con precio mayor o igual a 20 y menor
o igual a 40, como usar BETWEEN:
• Este operador se puede emplear con tipos de datos numéricos y tipos de datos
fecha y hora (incluye sólo el valor mínimo).
Recuperamos los libros cuyo precio NO se encuentre entre 20 y 35, es decir, los
menores a 15 y mayores a 25:
En la siguiente sentencia usamos IN para averiguar si el valor del campo autor está incluido en
la lista de valores especificada (en este caso, 2 cadenas).
SELECT * FROM BOOKS
WHERE AUTHOR IN ('MICHAEL SIPSER ',' ROBERT LAFORE');
Para recuperar los libros cuyo autor no sea 'MICHAEL SIPSER ',' ROBERT LAFORE’ usábamos:
SELECT * FROM BOOKS WHERE AUTHOR NOT IN ('MICHAEL SIPSER ',' ROBERT LAFORE');
Recuerde: siempre que sea posible, emplee condiciones de búsqueda positivas ("IN"), evite las
negativas ("NOT IN") porque con ellas se evalúan todos los registros y esto hace más lenta la
recuperación de los datos.
LIKE - NOT LIKE
Búsqueda de patrones
Para comparar porciones de cadenas utilizamos los operadores LIKE Y NOT LIKE se usa
exclusivamente para realizar comparaciones de cadenas.
Entonces, podemos comparar trozos de cadenas de caracteres para realizar consultas. Para
recuperar todos los registros cuyo autor contenga la cadena "Borges" debemos tipear:
Note que el símbolo "%" ya no está al comienzo, con esto indicamos que el título
debe tener como primera letra la "M" y luego, cualquier cantidad de caracteres.
Así como "%" reemplaza cualquier cantidad de caracteres, el guion bajo "_"
reemplaza un carácter, es otro carácter comodín. Por ejemplo, queremos ver los
libros de "Lewis Carroll" pero no recordamos si se escribe "Carroll" o "Carrolt",
entonces digitamos esta condición:
También podemos utilizar esta función junto con la cláusula WHERE para una
consulta más específica. Queremos saber la cantidad de libros de la editorial
"Planeta":
Para contar los registros que tienen precio (sin tener en cuenta los que tienen valor
nulo), usamos la función COUNT() y en los paréntesis colocamos el nombre del
campo que necesitamos contar:
Todas las funciones de agregado, excepto "count(*)", excluye los valores nulos de los
campos. "count(*)" cuenta todos los registros, incluidos los que contienen "null".
COUNT - SUM - MIN - MAX - AVG
Funciones de agrupamiento
Todas estas funciones retornan NULL si ningún registro cumple con la condición del WHERE,
excepto COUNT que en tal caso retorna cero.
El tipo de dato del campo determina las funciones que se pueden emplear con ellas.
La función “SUM()" retorna la suma de los valores que contiene el campo especificado. Si
queremos saber la cantidad total de libros que tenemos disponibles para la venta, debemos
sumar todos los valores del campo STOCK:
Entonces, dentro del paréntesis de la función colocamos el nombre del campo del cuál
queremos el máximo valor.
La función AVG() retorna el valor promedio de los valores del campo especificado. Queremos
saber el promedio del precio de los libros referentes a “SQL":
Podemos generar valores de resumen para un solo campo, combinando las funciones de
agregado con la cláusula GROUP BY, que agrupa registros para consultas detalladas.
Queremos saber la cantidad de libros de cada editorial, podemos tipear la siguiente sentencia:
También se puede agrupar por más de un campo, en tal caso, luego del "group by" se listan los
campos, separados por comas. Todos los campos que se especifican en la cláusula "group by"
deben estar en la lista de selección.
Para calcular el promedio del valor de los libros agrupados por editorial:
Si incluye una cláusula WHERE, sólo se agrupan los registros que cumplen
las condiciones.
GROUP BY EDITORIAL
Veamos otros ejemplos combinando WHERE y HAVING. Queremos la cantidad de libros, sin
considerar los que tienen precio NULL, agrupados por EDITORIAL, sin considerar la EDITORIAL
'CENGAGE' :
SELECT editorial, COUNT(*) FROM libros
WHERE precio IS NOT NULL
GROUP BY EDITORIAL
HAVING EDITORIAL <> 'CENGAGE';
Aquí, selecciona los registros rechazando los que no cumplan con la condición dada en
WHERE, luego los agrupa por EDITORIAL y finalmente rechaza los grupos que no cumplan con
la condición dada en el HAVING.
HAVING
Seleccionar grupos
Se emplea la cláusula HAVING con funciones de agrupamiento, esto no puede hacerlo la
cláusula WHERE. Por ejemplo queremos el promedio de los precios agrupados por editorial,
de aquellas editoriales que tienen más de 2 libros:
SELECT EDITORIAL, AVG(PRICE) FROM BOOKS GROUP BY EDITORIAL HAVING COUNT(*) > 2;
Podemos encontrar el mayor valor de los libros agrupados y ordenados por editorial y
seleccionar las filas que tengan un valor menor a 100 y mayor a 30:
SELECT EDITORIAL, MAX(PRICE) AS mayor • Entonces, usamos la cláusula HAVING para
FROM libros restringir las filas que devuelve una salida
GROUP BY editorial GROUP BY.
HAVING MIN(precio)<100 AND • Va siempre después de la cláusula
MIN(precio)>30 GROUP BY y antes de la cláusula
ORDER BY editorial; ORDER BY si la hubiere.
DISTINCT
Registros duplicados
Con la cláusula DISTINCT se especifica que los registros con ciertos datos
duplicados sean obviadas en el resultado. Por ejemplo, queremos conocer
todos los autores de los cuales tenemos libros, si utilizamos esta sentencia:
Para contar los distintos autores, sin considerar el valor "null" usamos:
Note que si contamos los autores sin DISTINCT, no incluirá los valores null pero si los
repetidos:
También puede utilizarse con GROUP BY para contar los diferentes autores por
editorial:
La cláusula DISTINCT afecta a todos los campos presentados. Para mostrar los títulos y
editoriales de los libros sin repetir títulos ni editoriales, usamos:
Los registros no están duplicados, aparecen títulos iguales pero con editorial
diferente, cada registro es diferente.
CLÁUSULAS LIMIT Y OFFSET DEL COMANDO SELECT
• Las cláusulas LIMIT y OFFSET se usan para restringir los registros que se retornan en
una consulta SELECT.
Si digitamos:
Ejemplo:
ejemplo: