COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de...

21
COMANDOS SQL

Transcript of COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de...

Page 1: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

COMANDOS SQL

Page 2: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Bases de datos relacionalesServidor de base de datos

Base de datos “Demo”

Base de datos “Finanzas”

Base de datos “Test”

Page 3: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

En la figura anterior se observa que el database server con acceso a las tres bases de datos: demo, finanzas y test.

Con el comando psql finanzas se puede conectar a la base de datos finanzas

Para ver una lista de las bases de datos, teclear psql -l

Page 4: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Crear una tabla

• Vamos a crear una tabla llamada empleado en alguna base de datos, por ejemplo test.

test=> CREATE TABLE empleado (test(> nombre VARCHAR(20),test(> apellido VARCHAR(20),test(> sueldo FLOAT,test(> sexo CHAR(1),test(> edad INTEGER,test(> transaccion TIMESTAMP DEFAULT

CURRENT_TIMESTAMP,test(> ingreso DATE);

Page 5: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Insertar datos

test=> INSERT INTO empleado (nombre, apellido, sueldo, sexo, edad, ingreso) VALUES

test-> ('Javier', 'Ramírez', 34452.89, 'M', 23, '4-06-08');

Observamos que se ponen las columnas en las que se va a insertar, no se puso la columna transaccion ya que esta se inserta por default con la hora y la fecha actuales.

Page 6: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Seleccionar

Obtener toda la tabla empleado

test=> SELECT * FROM empleado;

Obtener algunas columnas y todos los renglones de la tabla empleado

test=> SELECT apellido, sueldo, ingreso FROM empleado;

Page 7: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Seleccionar renglones específicos

En SELECT se usa la cláusula WHERE, donde se especifican los renglones que se quieren obtener. Por ejemplo el nombre y apellido de los empleados cuya edad sea mayor ó igual a 25 años.

test=> SELECT nombre, apellido FROM empleadotest-> WHERE edad >=25;

O bien, los que su apellido sea Ramíreztest=> SELECT nombre, apellido FROM empleadotest-> WHERE apellido = 'Ramírez';Como se trata de columnas tipo caracter, se usan

apóstrofes y debe escribirse exactamente como esté en la base de datos.

Page 8: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Removiendo datos con DELETE

• Con DELETE podemos mover uno ó bien todos los renglones de una tabla, por ejemplo DELETE FROM empleado; eliminaría todos los datos de la tabla empleado. Si utilizamos la cláusula WHERE se eliminan los renglones que cumplan la condición, por ejemplo:

test=> DELETE FROM empleadotest-> WHERE ingreso = '2008-12-24’;

Page 9: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Modificando datos con UPDATE

En una base de datos además de insertar y eliminar datos hay que actualizar. Por ejemplo, la edad del empleado Javier Pérez es de 35 años.

test=> UPDATE empleado SET edad = 35 WHERE apellido = 'Pérez';

La cláusula WHERE controla los renglones en los que se llevará a cabo la modificación. Si no se pone esta cláusula, se cambiarían la edad de todos los empleados a 35.

Page 10: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Ordenando datos con ORDER BY

Cuando hacemos un SELECT, los renglones se despliegan con un orden no determinado. Si se quieren obtener los renglones en un orden específico, es necesario aumentar la cláusula ORDER BY al final del SELECT.

test=> SELECT * FROM empleado ORDER BY apellido;Para invertir el orden se usa DESCtest=> SELECT * FROM empleado ORDER BY edad

DESC;Se puede ordenar por distintas columnas, si en la primera

hay dos valores iguales, se usa la siguiente para ver cual va primero.

Page 11: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Destruyendo tablas con DROP

• Cuando queremos eliminar completamente la tabla escribimos:

DROP TABLE empleado;

• Si queremos eliminar todos los datos de una tabla pero conservar su estructura utilizamos (no ejecutarla):

DELETE FROM empleado;

Page 12: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Caracteres especialesSi el empleado que vamos a insertar tiene un

apóstrofe en el nombre, por ejemplo: test=> INSERT INTO empleado (nombre,

apellido, sueldo, sexo, edad, ingreso) VALUES

test-> ('Jack', 'O'Donnell', 34452.89, 'M', 23, '4-06-08');

Me marca un error: test'>Para resolverlo:'O''Donnell',se ponen dos apóstrofes ó'O\'Donnell' se pone una diagonal invertida

Page 13: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Etiquetado de columnas y Comentarios

• El nombre que aparece en la salida de un SELECT hasta arriba es la etiqueta de la columna que corresponde al nombre del atributo. Se puede cambiar usando la palabra clave AS, por ejempo:

test=> SELECT nombre AS Razón_Social FROM cuenta;test=> SELECT 1 + 3 AS total;

• Con dos guiones -- indica que hasta el final del renglón es un comentario

• Con /* al principio y con */ al final indica que todo lo que está contenido es un comentario

test=> /*Esto es un comentariotest*> y no ejecuta nada*/;

Page 14: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Uso de AND/ORAND y OR se usan para conectar condiciones simples. Insertaremos más datos en empleado:test=> INSERT INTO empleado (nombre, apellido, sueldo, sexo, edad,

ingreso)VALUES ('María', 'Pérez', 2317.89, 'F', 23, '30-07-2005');test=> INSERT INTO empleado (nombre, apellido, sueldo, sexo, edad,

ingreso)VALUES ('Alejandro', 'Padilla', 4317.86, 'M', 24, '12-08-2006');test=> INSERT INTO empleado (nombre, apellido, sueldo, sexo, edad,

ingreso)VALUES ('Raquel', 'Carmona', 5817.86, 'F', 24, '15-02-2006');test=> INSERT INTO empleado (nombre, apellido, sueldo, sexo, edad,

ingreso)VALUES ('Armando', 'Pinillos', 7317.86, 'M', 24, '13-08-2005');test=> INSERT INTO empleado (nombre, apellido, sueldo, sexo, edad,

ingreso)test-> VALUES ('María', 'Romero', 11317.89, 'F', 23, '30-08-2004');

Page 15: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

AND se usa para combinar las dos comparaciones que conecta, ejemplo:

test=> SELECT * FROM empleado WHERE nombre='María' AND apellido='Pérez';

OR verifica que se cumpla una de las dos comparaciones al menos, ejemplo:

test=> SELECT * FROM empleado WHERE sexo = 'F' OR edad = 24;Si se combinan ANDs y ORs en un mismo query es mejor agrupar los

ANDs y los ORs usando paréntesis. Los ANDs se evalúan primero. Por ejemplo, si se quieren los de apellido Pérez y que sean hombres ó mujeres si no usamos paréntesis el resultado es incorrecto, ya que se evalúa el AND primero:

test=> SELECT * FROM empleado WHERE apellido='Pérez' AND sexo='M' OR sexo='F'; Me da los de apellido Pérez Y son de sexo M pero también todos los de sexo F´, ya que primero se ejecuta el AND y después el OR.

Lo correcto es:test=> SELECT * FROM empleado WHERE apellido='Pérez' AND

(sexo='M' OR sexo='F'); Este me da los que son de apellido Pérez y que son de sexo M ó F.

Page 16: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Between y LikeSi queremos aquéllos empleados que están entre 24 y 30

años de edad:test=> SELECT * FROM empleado WHERE edad >= 24

AND edad <= 30;test=> SELECT * FROM empleado WHERE edad

BETWEEN 24 AND 30;Para obtener los datos de los empleados cuyo apellido

inicia con la letra R:test=> SELECT * FROM empleado WHERE apellido LIKE

'R%';Obtener los que ingresaron en 2008:test=> SELECT * FROM empleado WHERE ingreso LIKE

'2008%';

Page 17: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Comparaciones con LIKE

Empieza con una D LIKE ‘D%’

Contiene una D LIKE ‘%D%’

Tiene D en 2da posición LIKE ‘_D%’

Empieza con D y tiene una e LIKE ‘D%e%’

No empieza con D NOT LIKE ‘D%’

Page 18: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Agregación

A veces es necesario resumir cierta información. En lugar de ver renglones, solo se necesita saber cuántos son. Para esto se usan las siguientes palabras clave:

COUNT(*) cuenta renglonesSUM(nombre_col) totalMAX(nombre_col) máximoMIN(nombre_col) mínimoAVG(nombre_col) promedio

Page 19: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

Ejemplos

Contar número de renglones test=> SELECT COUNT(*) FROM empleado;Obtener la suma de los sueldostest=> SELECT SUM(sueldo) FROM empleado;Obtener el sueldo máximotest=> SELECT MAX(sueldo) FROM empleado;Obtener la edad mínimatest=> SELECT MIN(edad) FROM empleado;Obtener el sueldo promediotest=> SELECT AVG(sueldo) FROM empleado;

Page 20: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

GROUP BYEn los ejemplos anteriores nos regresó un renglón como

resultado y sólo se usó una columna con el agregado.Usando los agregados con GROUP BY se tendrá la

aplicación del agregado en una columna, en los renglones agrupados por otra columna.

SELECT COUNT(*) FROM empleado, regresa el número de renglones en la tabla.

Si queremos contar cuántos son sexo M y cuantos F:test=> SELECT sexo, COUNT(*) FROM empleado

GROUP BY sexo; Si por sexo se quiere saber datos del salario y de la edad:test=> SELECT sexo,MIN(edad),MAX(edad),AVG(sueldo)

FROM empleado GROUP BY sexo ORDER BY 4 DESC;

Page 21: COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de datos “Finanzas” Base de datos “Test”

HAVING

Permite probar condiciones en los valores agregados. A menudo se usa con GROUP BY. Con HAVING se pueden incluir o excluir grupos basados en el valor de agregación para ese grupo.

En el ejemplo de contar los empleados por sexo, podemos limitar para que despliegue solo aquéllos que sean más de 3, el query que cuenta empleados por sexo es:

test=> SELECT sexo, COUNT(*) FROM empleado GROUP BY sexo;

Sólo los que sean más de 3 empleados de ese sexo:test=> SELECT sexo, COUNT(*) FROM empleado

GROUP BY sexo HAVING COUNT(*)>3;