Electiva Postgresql (Guia SQL)

32
¿QUÉ ES SQL? • El Lenguaje de Consultas estructurado (Structured Query Language) es un conjunto de instrucciones diseñadas para acceder a las bases de datos y realizar operaciones típicas como búsqueda, inserción, actualización y eliminación de registros así como también realizar mantenimiento de las bases de datos, crear tablas, relaciones, índices y muchas otras. Todo esto, a través de código.

description

Electiva Postgresql (Guia SQL)

Transcript of Electiva Postgresql (Guia SQL)

Page 1: Electiva Postgresql (Guia SQL)

¿QUÉ ES SQL?

• El Lenguaje de Consultas estructurado (Structured Query Language) es un conjunto de instrucciones diseñadas para acceder a las bases de datos y realizar operaciones típicas como búsqueda, inserción, actualización y eliminación de registros así como también realizar mantenimiento de las bases de datos, crear tablas, relaciones, índices y muchas otras. Todo esto, a través de código.

Page 2: Electiva Postgresql (Guia SQL)

VERSIONES DE SQL

• En la actualidad, la mayoría de los gestores de bases de datos incluyen una versión de SQL con algunas variaciones dependiendo del motor.

• Asi PostgreSQL soporta instrucciones SQL. Lo mismo ocurre con Oracle, Clarion, MySQL y otros programas similares.

Page 3: Electiva Postgresql (Guia SQL)

TIPOS DE INSTRUCCIONES SQL

En SQL (no importa en qué motor se utilice), existen diversos tipos de instrucciones. Estas son:

• Consultas de Selección• Consultas de Actualización

Existen también las Consultas de Mantenimiento que no serán tratadas por razones de tiempo. Se emplean para creación de tablas, alterar la estructura de las mismas y otras operaciones similares.

Page 4: Electiva Postgresql (Guia SQL)

CONSULTAS DE SELECCIÓN

Permiten realizar búsquedas dentro de las tablas de una BD y seleccionar aquellos registros que cumplan con las condiciones especificadas por el usuario.

La instrucción básica para la selección de registros es el SELECT

Page 5: Electiva Postgresql (Guia SQL)

ESTRUCTURA (SINTAXIS) DEL SELECT

SELECT campo1,campo2,campon FROM mitabla

Se lee: “Selecciona estos campos desde la tabla llamada mitabla”. El resultado incluye todos los registros.

Page 6: Electiva Postgresql (Guia SQL)

ESTRUCTURA (SINTAXIS) DEL SELECT

Ejemplo: SELECT cedula,apellido,nombre FROM alumnos

Selecciona los campos cedula, apellido y nombre de la tabla alumnos. Incluye todos los registros de esa tabla

Page 7: Electiva Postgresql (Guia SQL)

ESTRUCTURA (SINTAXIS) DEL SELECT

Ejemplo: SELECT * FROM alumnos

Selecciona todos los campos de la tabla alumnos. Incluye todos los registros de la tabla.

El uso del asterisco (*) indica “todos”.

Page 8: Electiva Postgresql (Guia SQL)

ESTRUCTURA (SINTAXIS) DEL SELECT

A veces es necesario extraer sólo aquellos registros que cumplan con ciertas condiciones. Por ejemplo, aquellos alumnos mayores de 20 años.

En este caso, se utiliza la cláusula WHERE

Page 9: Electiva Postgresql (Guia SQL)

ESTRUCTURA (SINTAXIS) DEL SELECT

Ejemplo:SELECT * FROM alumnos WHERE edad>20

Selecciona todos los campos de la tabla alumnos, pero muestra sólo aquellos registros donde la edad del alumno sea mayor que 20

Page 10: Electiva Postgresql (Guia SQL)

ESTRUCTURA (SINTAXIS) DEL SELECT

Ejemplo:SELECT * FROM alumnos WHERE

cedula=‘15069973’

Selecciona todos los campos de la tabla alumnos, pero muestra sólo aquellos registros donde la cédula sea igual a 15069973

Page 11: Electiva Postgresql (Guia SQL)

ALERTA, MUY IMPORTANTE

Si el valor a buscar es de tipo texto, se coloca entre comillas simples (apóstrofes).

Ejm: cedula=‘15069973’

Si el valor a buscar es un número (entero, decimal, etc) se coloca sólo el valor

Ejm: edad>=18

Page 12: Electiva Postgresql (Guia SQL)

ALERTA, ALERTA MUY IMPORTANTE

Para las fechas, se debe revisar la documentación del motor de BD utilizado. En Access, los valores buscados deben encerrarse entre numerales (#).

Ejemplo: FechaNac=#23/01/1980#

Sin embargo, para PostgreSQL y MySQL, van entre comillas simples.

Ejemplo: FechaNac=‘1980-01-23'

Page 13: Electiva Postgresql (Guia SQL)

Se pueden utilizar varias condiciones en la misma instrucción SQL. Suponga que quiere buscar todos los alumnos solteros mayores de 21 años, así:

SELECT * FROM alumnos WHERE EdoCivil=‘ Soltero’ AND edad>21

El operador lógico AND implica que los registros deben cumplir obligatoriamente las dos condiciones.

ESTRUCTURA (SINTAXIS) DEL SELECT

Page 14: Electiva Postgresql (Guia SQL)

También existe el operador OR para incluir aquellos registros que cumplan una condición u otra (no ambas) y el NOT que niega la condición.

Para mayor información, busque en internet u otras fuentes. No se explicarán en profundidad en este curso por razones de tiempo.

ESTRUCTURA (SINTAXIS) DEL SELECT

Page 15: Electiva Postgresql (Guia SQL)

Puedo ordenar resultados una vez que los obtengo con la cláusula ORDER BY. Suponga que tengo una lista de 1000 alumnos y selecciono sólo aquellos mayores de edad, pero debo ordenarlos por apellido para mayor facilidad de análisis.

SELECT * FROM alumnos WHERE edad>=18 ORDER BY apellido

ESTRUCTURA (SINTAXIS) DEL SELECT

Page 16: Electiva Postgresql (Guia SQL)

Cuando tenemos registros idénticos en alguna(s) tablas, podemos mostrarlo como un único registro con la cláusula GROUP BY.

Suponga el siguiente caso de una tabla alumnos que no está indexada, por lo tanto, tiene registros redundantes

CASOS ESPECIALES: EL GROUP BY

Page 17: Electiva Postgresql (Guia SQL)

• ALUMNOS• CEDULA NOMBRE APELLIDO• 15069973 ALFREDO DIAZ• 15380415 JOSE PEREZ• 81185154 MARIA LOPEZ• 15069973 ALFREDO DIAZ• 15380415 JOSE PEREZ

CASOS ESPECIALES: EL GROUP BYNote que los registros

azules son idénticos. Lo mismo ocurre con los registros marcados en rojo

Si se analiza la instrucción:

SELECT cedula,nombre,apellido FROM ALUMNOS GROUP BY cedula,nombre, apellido

Page 18: Electiva Postgresql (Guia SQL)

• ALUMNOS• CEDULA NOMBRE APELLIDO• 15069973 ALFREDO DIAZ• 15380415 JOSE PEREZ• 81185154 MARIA LOPEZ

CASOS ESPECIALES: EL GROUP BYEl resultado

obtenido sería:

• ALUMNOS• CEDULA NOMBRE APELLIDO• 15069973 ALFREDO DIAZ• 15380415 JOSE PEREZ• 81185154 MARIA LOPEZ• 15069973 ALFREDO DIAZ• 15380415 JOSE PEREZ

Compare con la tabla original

Page 19: Electiva Postgresql (Guia SQL)

Se aplica cuando queremos mostrar registros de una tabla padre que tienen correspondencia directa con los de una tabla hija.

Para que se pueda ejecutar un INNER JOIN, tabla1 y tabla2 deben tener un campo común y es éste campo, el que se debe comparar para generar los resultados: Así:

CASOS ESPECIALES: EL INNER JOIN

Page 20: Electiva Postgresql (Guia SQL)

SELECCIONA los campos DESDE tabla1COMBINATE CON tabla2 EN tabla1.campo_comun=tabla2.campo_comun

Puedo incluir condiciones WHERE, ORDER BY, etc.Nota: Si existen registros en tabla1 que no tienen

hijos en tabla2, estos son ignorados y no se muestran en el resultado

Se pueden mostrar campos de tabla1 y tabla2 si se desea.

CASOS ESPECIALES: EL INNER JOIN

Page 21: Electiva Postgresql (Guia SQL)

ALUMNOSCEDULA NOMBRE APELLIDO15069973 ALFREDO DIAZ15380415 JOSE PEREZ81185154 MARIA LOPEZ

CASOS ESPECIALES: EL INNER JOIN

MATERIASCODIGOMATE NOMBRE001 MATEMATICA 002 LENGUAJE003 PROGRAMACION I

AXMCODIGOMATE CEDULA001 15069973002 15069973001 15380415003 15380415003 81185154

Page 22: Electiva Postgresql (Guia SQL)

CASOS ESPECIALES: EL INNER JOIN• Imagine que deseamos obtener una lista con la

cédula, nombre y apellido del alumno, así como también el código y nombre de la(s) materia(s) que haya inscrito.

Es decir:Cedula, Nombre, Apellido, CodigoMate, Nombre

Page 23: Electiva Postgresql (Guia SQL)

CASOS ESPECIALES: EL INNER JOIN• Los campos Cedula, nombre y apellido están en la

tabla alumnos• Los campos CodigoMate y Nombre están en la

tabla materiasSi ejecutamos:

SELECT * FROM alumnosSELECT * FROM materias

Obtendríamos la lista de alumnos y materias respectivamente.

Page 24: Electiva Postgresql (Guia SQL)

CASOS ESPECIALES: EL INNER JOINPero en este caso, se obtendrían una lista de

alumnos separada de la lista de materias…

¿Cómo logramos determinar y “emparejar” las materias que ha inscrito cada alumno?

Recordemos que un alumno puede haber inscrito una o varias materias y no necesariamente todas las que aparecen en la tabla materias

Page 25: Electiva Postgresql (Guia SQL)

CASOS ESPECIALES: EL INNER JOINPara eso, se utiliza el INNER JOIN. Veamos:

SELECT alumnos.cedula,alumnos.nombre,alumnos.apellido,materias.codigomate,materias.nombre

FROM alumnosINNER JOIN axm ON alumnos.cedula=axm.cedulaINNER JOIN materias ON

materias.codigomate=axm.codigomate

Page 26: Electiva Postgresql (Guia SQL)

CASOS ESPECIALES: EL INNER JOINEntonces, se seleccionan los campos deseados para el

resultado (debe indicar de qué tabla provienen).

Luego, se combina la tabla alumnos con la tabla axm (que es la tabla que contiene los campos comunes entre alumnos y materias). Esto se nota cuando aparece INNER JOIN axm ON alumnos.cedula=axm.cedula

Y por último, se combina con la tabla materias ya que tenemos que mostrar el nombre de la materia. Note que el campo común es codigomate y se encuentra tanto en la tabla materias como en axm

INNER JOIN materias ON materias.codigomate=axm.codigomate

Page 27: Electiva Postgresql (Guia SQL)

CONSULTAS DE ACTUALIZACIÓN

Para crear un nuevo registro en una tabla se utiliza el INSERT INTO, así:

INSERT INTO alumnos (cedula,nombre,apellido) VALUES(‘15069973’,’Alfredo’,’Diaz’)

Nota: Si se indican 3 campos, debe incluir 3 valores. De lo contrario, se generará un error.

Page 28: Electiva Postgresql (Guia SQL)

CONSULTAS DE ACTUALIZACIÓNPara actualizar registros previamente creados en

una tabla se utiliza el UPDATE , así:

UPDATE alumnos SET nombre=‘Alfred’ WHERE cedula=‘15069973’

Nota: Recuerde siempre incluir la cláusula WHERE. Si no lo hace, el UPDATE actualizará todos los registros y los resultados podrían ser inesperados (prepárese para su despido)

Page 29: Electiva Postgresql (Guia SQL)

CONSULTAS DE ACTUALIZACIÓN

Para eliminar registros de una tabla se utiliza el DELETE, así:

DELETE FROM alumnos WHERE cedula=‘15069973’Nota: El “*” se omite (aunque en Access no

importa si se coloca o no). Los registros se eliminan físicamente y de forma irreversible.

Coloque siempre el WHERE.

Page 30: Electiva Postgresql (Guia SQL)

OBSERVACIONES IMPORTANTES

Puede que un alumno exista en la tabla alumnos y que no haya inscrito materias. En este caso, este registro se ignora en el INNER JOIN

Existen variantes del INNER JOIN como LEFT JOIN o RIGHT JOIN que pueden ser revisados por usted con mayor detenimiento

Puede incluir una cláusula WHERE, HAVING u ORDER BY en la consulta SQL después del último INNER JOIN

Page 31: Electiva Postgresql (Guia SQL)

CONSIDERACIONES FINALES

Se recomienda que las palabras reservadas de SQL como SELECT, FROM, WHERE, etc, se escriban en mayúscula, mientras que para los nombres de tablas y campos es casi obligatorio el uso de minúsculas.

Si un nombre de campo tiene espacios en blanco Ej. Nombre del Alumno, debe estar entre corchetes en la instrucción SQL.

Ej. SELECT [Nombre del Alumno] FROM alumnos

Page 32: Electiva Postgresql (Guia SQL)

CONSIDERACIONES FINALESRevise siempre la documentación de SQL de acuerdo al

motor de bases de datos utilizado. Recuerde que siempre hay variaciones entre unos y otros.

No crea saberlo todo. Hasta los programadores más expertos se equivocan. Tampoco de por hecho que una consulta “funciona” sin haberla probado. Todo puede pasar.

Cuidado con el uso del INSERT, UPDATE y DELETE ya que los resultados pueden ocasionar pérdida o corrupción de los datos.