COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de...
-
Author
aldonza-magallanez -
Category
Documents
-
view
370 -
download
13
Embed Size (px)
Transcript of COMANDOS SQL. Bases de datos relacionales Servidor de base de datos Base de datos “Demo” Base de...
-
COMANDOS SQL
-
Bases de datos relacionalesServidor de base de datosBase de datos DemoBase de datos FinanzasBase 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 finanzasPara ver una lista de las bases de datos, teclear psql -l
-
Crear una tablaVamos 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);
-
Insertar datostest=> INSERT INTO empleado (nombre, apellido, sueldo, sexo, edad, ingreso) VALUEStest-> ('Javier', 'Ramrez', 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.
-
Seleccionar Obtener toda la tabla empleadotest=> SELECT * FROM empleado;
Obtener algunas columnas y todos los renglones de la tabla empleadotest=> SELECT apellido, sueldo, ingreso FROM empleado;
-
Seleccionar renglones especficosEn SELECT se usa la clusula 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 aos.test=> SELECT nombre, apellido FROM empleadotest-> WHERE edad >=25;
O bien, los que su apellido sea Ramreztest=> SELECT nombre, apellido FROM empleadotest-> WHERE apellido = 'Ramrez';Como se trata de columnas tipo caracter, se usan apstrofes y debe escribirse exactamente como est en la base de datos.
-
Removiendo datos con DELETECon DELETE podemos mover uno bien todos los renglones de una tabla, por ejemplo DELETE FROM empleado; eliminara todos los datos de la tabla empleado. Si utilizamos la clusula WHERE se eliminan los renglones que cumplan la condicin, por ejemplo:test=> DELETE FROM empleadotest-> WHERE ingreso = '2008-12-24;
-
Modificando datos con UPDATEEn una base de datos adems de insertar y eliminar datos hay que actualizar. Por ejemplo, la edad del empleado Javier Prez es de 35 aos.test=> UPDATE empleado SET edad = 35 WHERE apellido = 'Prez';La clusula WHERE controla los renglones en los que se llevar a cabo la modificacin. Si no se pone esta clusula, se cambiaran la edad de todos los empleados a 35.
-
Ordenando datos con ORDER BYCuando hacemos un SELECT, los renglones se despliegan con un orden no determinado. Si se quieren obtener los renglones en un orden especfico, es necesario aumentar la clusula 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.
-
Destruyendo tablas con DROPCuando 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;
-
Caracteres especialesSi el empleado que vamos a insertar tiene un apstrofe en el nombre, por ejemplo: test=> INSERT INTO empleado (nombre, apellido, sueldo, sexo, edad, ingreso) VALUEStest-> ('Jack', 'O'Donnell', 34452.89, 'M', 23, '4-06-08');Me marca un error: test'>Para resolverlo:'O''Donnell',se ponen dos apstrofes 'O\'Donnell' se pone una diagonal invertida
-
Etiquetado de columnas y ComentariosEl 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 Razn_Social FROM cuenta;test=> SELECT 1 + 3 AS total;
Con dos guiones -- indica que hasta el final del rengln es un comentarioCon /* al principio y con */ al final indica que todo lo que est contenido es un comentariotest=> /*Esto es un comentariotest*> y no ejecuta nada*/;
-
Uso de AND/ORAND y OR se usan para conectar condiciones simples. Insertaremos ms datos en empleado:test=> INSERT INTO empleado (nombre, apellido, sueldo, sexo, edad, ingreso)VALUES ('Mara', 'Prez', 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 ('Mara', 'Romero', 11317.89, 'F', 23, '30-08-2004');
-
AND se usa para combinar las dos comparaciones que conecta, ejemplo:test=> SELECT * FROM empleado WHERE nombre='Mara' AND apellido='Prez';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 parntesis. Los ANDs se evalan primero. Por ejemplo, si se quieren los de apellido Prez y que sean hombres mujeres si no usamos parntesis el resultado es incorrecto, ya que se evala el AND primero:test=> SELECT * FROM empleado WHERE apellido='Prez' AND sexo='M' OR sexo='F'; Me da los de apellido Prez Y son de sexo M pero tambin todos los de sexo F, ya que primero se ejecuta el AND y despus el OR.Lo correcto es:test=> SELECT * FROM empleado WHERE apellido='Prez' AND (sexo='M' OR sexo='F'); Este me da los que son de apellido Prez y que son de sexo M F.
-
Between y LikeSi queremos aqullos empleados que estn entre 24 y 30 aos de edad:test=> SELECT * FROM empleado WHERE edad >= 24 AND edad 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%';
-
Comparaciones con LIKEEmpieza con una DLIKE D%Contiene una D LIKE %D%Tiene D en 2da posicinLIKE _D%Empieza con D y tiene una e LIKE D%e%No empieza con DNOT LIKE D%
-
AgregacinA veces es necesario resumir cierta informacin. En lugar de ver renglones, solo se necesita saber cuntos son. Para esto se usan las siguientes palabras clave:COUNT(*)cuenta renglonesSUM(nombre_col) totalMAX(nombre_col) mximoMIN(nombre_col) mnimoAVG(nombre_col) promedio
-
EjemplosContar nmero de renglones test=> SELECT COUNT(*) FROM empleado;Obtener la suma de los sueldostest=> SELECT SUM(sueldo) FROM empleado;Obtener el sueldo mximotest=> SELECT MAX(sueldo) FROM empleado;Obtener la edad mnimatest=> SELECT MIN(edad) FROM empleado;Obtener el sueldo promediotest=> SELECT AVG(sueldo) FROM empleado;
-
GROUP BYEn los ejemplos anteriores nos regres un rengln como resultado y slo se us una columna con el agregado.Usando los agregados con GROUP BY se tendr la aplicacin del agregado en una columna, en los renglones agrupados por otra columna.SELECT COUNT(*) FROM empleado, regresa el nmero de renglones en la tabla.Si queremos contar cuntos 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;
-
HAVINGPermite 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 agregacin para ese grupo. En el ejemplo de contar los empleados por sexo, podemos limitar para que despliegue solo aqullos que sean ms de 3, el query que cuenta empleados por sexo es:test=> SELECT sexo, COUNT(*) FROM empleado GROUP BY sexo; Slo los que sean ms de 3 empleados de ese sexo:test=> SELECT sexo, COUNT(*) FROM empleado GROUP BY sexo HAVING COUNT(*)>3;