You are on page 1of 32

QU ES SQL?

El Lenguaje de Consultas estructurado


(Structured Query Language) es un conjunto
de instrucciones diseadas para acceder a las
bases de datos y realizar operaciones tpicas
como bsqueda, insercin, actualizacin y
eliminacin de registros as como tambin
realizar mantenimiento de las bases de datos,
crear tablas, relaciones, ndices y muchas
otras. Todo esto, a travs de cdigo.

VERSIONES DE SQL
En la actualidad, la mayora de los gestores de
bases de datos incluyen una versin de SQL
con algunas variaciones dependiendo del
motor.
Asi PostgreSQL soporta instrucciones SQL. Lo
mismo ocurre con Oracle, Clarion, MySQL y
otros programas similares.

TIPOS DE INSTRUCCIONES SQL


En SQL (no importa en qu motor se utilice), existen
diversos tipos de instrucciones. Estas son:
Consultas de Seleccin
Consultas de Actualizacin
Existen tambin las Consultas de Mantenimiento que no
sern tratadas por razones de tiempo. Se emplean para
creacin de tablas, alterar la estructura de las mismas y
otras operaciones similares.

CONSULTAS DE SELECCIN
Permiten realizar bsquedas dentro de las tablas
de una BD y seleccionar aquellos registros que
cumplan con las condiciones especificadas por
el usuario.
La instruccin bsica para la seleccin de
registros es el SELECT

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.

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

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.

ESTRUCTURA (SINTAXIS) DEL SELECT


A veces es necesario extraer slo aquellos
registros que cumplan con ciertas condiciones.
Por ejemplo, aquellos alumnos mayores de 20
aos.
En este caso, se utiliza la clusula WHERE

ESTRUCTURA (SINTAXIS) DEL SELECT


Ejemplo:
SELECT * FROM alumnos WHERE edad>20

Selecciona todos los campos de la tabla


alumnos, pero muestra slo aquellos
registros donde la edad del alumno sea mayor
que 20

ESTRUCTURA (SINTAXIS) DEL SELECT


Ejemplo:
SELECT * FROM alumnos WHERE
cedula=15069973
Selecciona todos los campos de la tabla
alumnos, pero muestra slo aquellos
registros donde la cdula sea igual a
15069973

ALERTA, MUY IMPORTANTE


Si el valor a buscar es de tipo texto, se coloca
entre comillas simples (apstrofes).
Ejm: cedula=15069973
Si el valor a buscar es un nmero (entero,
decimal, etc) se coloca slo el valor
Ejm: edad>=18

ALERTA, ALERTA MUY IMPORTANTE


Para las fechas, se debe revisar la documentacin
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'

ESTRUCTURA (SINTAXIS) DEL SELECT


Se pueden utilizar varias condiciones en la misma
instruccin SQL. Suponga que quiere buscar todos
los alumnos solteros mayores de 21 aos, as:

SELECT * FROM alumnos WHERE EdoCivil= Soltero


AND edad>21
El operador lgico AND implica que los registros deben
cumplir obligatoriamente las dos condiciones.

ESTRUCTURA (SINTAXIS) DEL SELECT


Tambin existe el operador OR para incluir aquellos
registros que cumplan una condicin u otra (no
ambas) y el NOT que niega la condicin.
Para mayor informacin, busque en internet u otras
fuentes. No se explicarn en profundidad en este
curso por razones de tiempo.

ESTRUCTURA (SINTAXIS) DEL SELECT


Puedo ordenar resultados una vez que los obtengo
con la clusula ORDER BY. Suponga que tengo
una lista de 1000 alumnos y selecciono slo
aquellos mayores de edad, pero debo ordenarlos
por apellido para mayor facilidad de anlisis.
SELECT * FROM alumnos WHERE edad>=18 ORDER
BY apellido

CASOS ESPECIALES: EL GROUP BY


Cuando tenemos registros idnticos en alguna(s)
tablas, podemos mostrarlo como un nico
registro con la clusula 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

ALUMNOS
CEDULA
15069973
15380415
81185154
15069973
15380415

NOMBRE
ALFREDO
JOSE
MARIA
ALFREDO
JOSE

APELLIDO
DIAZ
PEREZ
LOPEZ
DIAZ
PEREZ

Note que los registros


azules son idnticos.
Lo mismo ocurre con
los registros
marcados en rojo

Si se analiza la instruccin:
SELECT cedula,nombre,apellido FROM ALUMNOS
GROUP BY cedula,nombre, apellido

CASOS ESPECIALES: EL GROUP BY


El resultado
obtenido
sera:
Compare con la
tabla original

ALUMNOS
CEDULA
15069973
15380415
81185154

ALUMNOS
CEDULA
15069973
15380415
81185154
15069973
15380415

NOMBRE
ALFREDO
JOSE
MARIA

NOMBRE
ALFREDO
JOSE
MARIA
ALFREDO
JOSE

APELLIDO
DIAZ
PEREZ
LOPEZ

APELLIDO
DIAZ
PEREZ
LOPEZ
DIAZ
PEREZ

CASOS ESPECIALES: EL INNER JOIN


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 comn y es ste
campo, el que se debe comparar para generar los
resultados: As:

CASOS ESPECIALES: EL INNER JOIN


SELECCIONA los campos DESDE tabla1
COMBINATE 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


ALUMNOS
CEDULA
15069973
15380415
81185154

NOMBRE
ALFREDO
JOSE
MARIA

MATERIAS
CODIGOMATE
001
002
003

APELLIDO
DIAZ
PEREZ
LOPEZ
AXM
CODIGOMATE
001
002
001
003
003

NOMBRE
MATEMATICA
LENGUAJE
PROGRAMACION I

CEDULA
15069973
15069973
15380415
15380415
81185154

CASOS ESPECIALES: EL INNER JOIN


Imagine que deseamos obtener una lista con la
cdula, nombre y apellido del alumno, as
como tambin el cdigo y nombre de la(s)
materia(s) que haya inscrito.
Es decir:
Cedula, Nombre, Apellido, CodigoMate, Nombre

CASOS ESPECIALES: EL INNER JOIN


Los campos Cedula, nombre y apellido estn en la
tabla alumnos
Los campos CodigoMate y Nombre estn en la
tabla materias
Si ejecutamos:
SELECT * FROM alumnos
SELECT * FROM materias
Obtendramos la lista de alumnos y materias
respectivamente.

CASOS ESPECIALES: EL INNER JOIN


Pero en este caso, se obtendran una lista de
alumnos separada de la lista de materias
Cmo 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

CASOS ESPECIALES: EL INNER JOIN


Para eso, se utiliza el INNER JOIN. Veamos:
SELECT
alumnos.cedula,alumnos.nombre,alumnos.apel
lido,materias.codigomate,materias.nombre
FROM alumnos
INNER JOIN axm ON alumnos.cedula=axm.cedula
INNER JOIN materias ON
materias.codigomate=axm.codigomate

CASOS ESPECIALES: EL INNER JOIN


Entonces, 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
comn es codigomate y se encuentra tanto en la tabla
materias como en axm
INNER JOIN materias ON
materias.codigomate=axm.codigomate

CONSULTAS DE ACTUALIZACIN
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.

CONSULTAS DE ACTUALIZACIN
Para 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 clusula WHERE. Si
no lo hace, el UPDATE actualizar todos los
registros y los resultados podran ser inesperados
(preprese para su despido)

CONSULTAS DE ACTUALIZACIN
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 fsicamente y de forma irreversible.
Coloque siempre el WHERE.

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 clusula WHERE, HAVING u


ORDER BY en la consulta SQL despus del ltimo
INNER JOIN

CONSIDERACIONES FINALES
Se recomienda que las palabras reservadas de SQL
como SELECT, FROM, WHERE, etc, se escriban en
mayscula, mientras que para los nombres de
tablas y campos es casi obligatorio el uso de
minsculas.
Si un nombre de campo tiene espacios en blanco Ej.
Nombre del Alumno, debe estar entre corchetes
en la instruccin SQL.
Ej. SELECT [Nombre del Alumno] FROM alumnos

CONSIDERACIONES FINALES
Revise siempre la documentacin 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 ms
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 prdida o corrupcin
de los datos.

You might also like