Introduccion Al Lenguaje SQL
Introduccion Al Lenguaje SQL
Introduccion Al Lenguaje SQL
SQL es un lenguaje normalizado que nos permite realizar todo tipo de operaciones en las
bases de datos relacionales. Para esto utiliza un conjunto de comandos que se pueden
clasificar en:
Comandos DDL que permiten crear y definir nuevas bases de datos, campos e
indices.
Comandos DML que permiten generar consultas para ordenar, filtrar y extraer
datos de la base de datos.
Esta consulta devuelve un conjunto de registros con los campos nombre y telfono de la
tabla clientes.
SQL puede filtrar los registros de una consulta de seleccin con el fin de recuperar
solamente aquellos que cumplan unas condiciones preestablecidas. Para ello utiliza la
clusula WHERE:
El *(Asterisco) se utiliza como un comodn que hace referencia a todos los campos de las
tablas. En este caso nuestra consulta nos dar como resultado un conjunto de registros o
filas con todos los campos (o columnas) de la tabla Empleados, y solo se mostraran las
filas que cumplan con la condicin de que el campo Estado sea igual a 'Soltero'. "Es decir
listar a todos los empleados solteros"
Operadores y conectores.
= Igual
<> Desigual
> Mayor
< Menor
>= Mayor igual
<= Menor igual
ID LAST NAME
202 Johnson
209 Brown
211 Parker
ID LAST_NAME
211 Parker
ID Last Name
202 Johnson
203 Adams
205 Thompson
211 Parker
El ejemplo anterior ilustra que el conector AND es ms exigente que el OR, en el primer
caso solo obtenemos 1 registro dado que se deben cumplir todas las condiciones (que sea
programador y que adems gane ms de 5000), mientras que en el segundo caso
obtenemos 3 registros dado que solo exigiamos que se cumpla al menos 1 de las
condiciones (que sea programador o que gane ms de 5000). Los conectores AND y OR
pueden combinarse para realizar consultas un poco ms elaboradas, y pueden utilizarse
parntesis para que el motor interprete las condiciones en el orden correcto.
ID SALARY
203 4500
207 4500
El operador LIKE es un operador muy til que se utiliza para comparar campos de texto
que coincidan en partes con cadenas de caracteres. Desde ya que no nos sirve de nada
para otro tipo de datos que no sea texto. Supongamos ahora que queremos listar a los
empleados cuyo apellido termine en 'SON':
ID LAST_NAME
202 Johnson
205 Thompson
La clusula ORDER BY se utiliza al final de la consulta para ordenar los registros por un
campo dado en forma ascendente (con el sufijo ASC) o en forma descendente (con el
sufijo DESC), la forma ascendente es predeterminada, y por ello no es obligatorio usar
ASC.
ID LAST_NAME
205 Thompson
202 Johnson
Consultas multitabla
En este punto vamos a estudiar las consultas multitabla llamadas as porque estn basadas
en ms de una tabla. Existen dos tipos de consultas multitabla:
La UNION de tablas.
La COMPOSICION de tablas.
La Unin de tablas se utiliza cuando tenemos dos tablas con las mismas columnas y
queremos obtener una nueva tabla con las filas de la primera y las filas de la segunda. En
este caso la tabla resultante tiene las mismas columnas que la primera tabla (que son las
mismas que las de la segunda tabla).
Por ejemplo tenemos una tabla de libros nuevos y una tabla de libros antiguos y
queremos una lista con todos los libros que tenemos. En este caso las dos tablas tienen las
mismas columnas, lo nico que vara son las filas, adems queremos obtener una lista de
libros (las columnas de una de las tablas) con las filas que estn tanto en libros nuevos
como las que estn en libros antiguos, en este caso utilizaremos este tipo de operacin.
El operador que permite realizar esta operacin es el operador UNION.
La composicin de tablas
La composicin de tablas consiste en concatenar filas de una tabla con filas de otra.
Obtenemos una tabla con las columnas de la primera tabla unidas a las columnas de la
segunda tabla, y las filas de la tabla resultantes son concatenaciones de filas de la primera
tabla con filas de la segunda.
A diferencia de la unin la composicin permite obtener una fila con datos de las dos
tablas, esto es muy til cuando queremos visualizar filas cuyos datos se encuentran en
dos tablas.
Tipos de composicin
El producto cartesiano
El INNER JOIN
Outer Joins: LEFT / RIGHT JOIN
El producto cartesiano
El producto cartesiano se indica poniendo en la clusula FROM las tablas que queremos
componer separadas por comas, podemos obtener as el producto cartesiano de dos, tres,
o ms tablas. Tabla puede ser un nombre de tabla o un nombre de consulta. Si todas las
tablas estn en una base de datos externa, aadiremos la clusula IN basedatosexterna
despus de la ltima tabla. Pero para mejorar el rendimiento y facilitar el uso, se
recomienda utilizar una tabla vinculada en lugar de la clusula IN.
Hay que tener en cuenta que el producto cartesiano obtiene todas las posibles
combinaciones de filas por lo tanto si tenemos dos tablas de 100 registros cada una, el
resultado tendr 100x100 filas, si el producto lo hacemos de estas dos tablas con una
tercera de 20 filas, el resultado tendr 200.000 filas (100x100x20) y estamos hablando de
tablas pequeas. Se ve claramente que el producto cartesiano es una operacin costosa
sobre todo si operamos con ms de dos tablas o con tablas voluminosas.
Se puede componer una tabla consigo misma, en este caso es obligatorio utilizar un
nombre de alias por lo menos para una de las dos. Por ejemplo:
Se observa que tenemos las dos filas de la primera consulta combinadas con las dos filas
de la segunda. Esta operacin no es de las ms utilizadas, normalmente cuando queremos
componer dos tablas es para aadir a las filas de una tabla, una fila de la otra tabla, por
ejemplo aadir a los empleados el nombre de su correspondiente departamento, esto
equivaldra a un producto cartesiano con una seleccin de filas:
Combinamos todos los empleados con todos los departamentos pero luego seleccionamos
los que cumplan que el cdigo de departamento de la tabla de empleados sea igual al
cdigo de departamento de la tabla de departamentos, por lo tanto nos quedamos con los
datos de empleados combinados con los datos del departamento correspondiente. Las
columnas que aparecen en la clusula WHERE de nuestra consulta anterior se denominan
columnas de emparejamiento ya que permiten emparejar las filas de las dos tablas. Las
columnas de emparejamiento no tienen por qu estar incluidas en la lista de seleccin.
Normalmente emparejamos tablas que estn relacionadas entre s y una de las columnas
de emparejamiento es clave principal, pues en este caso, cuando una de las columnas de
emparejamiento tienen un ndice definido es ms eficiente utilizar otro tipo de
composicin, el INNER JOIN.
El INNER JOIN
Se pueden combinar ms de dos tablas. En este caso hay que sustituir en la sintaxis una
tabla por un INNER JOIN completo. Por ejemplo:
SELECT * FROM (pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie)
INNER JOIN empleados ON pedidos.rep = empleados.numemp
En vez de tabla1 hemos escrito un INNER JOIN completo, tambin podemos escribir:
Ejemplo:
Tabla1 y tabla2 son especificaciones de tabla, (nombre de tabla con alias o no, nombre de
consulta guardada), de las tablas cuyos registros se van a combinar. Pueden ser las dos la
misma tabla, en este caso es obligatorio definir al menos un alias de tabla. Observar que
dentro de la clusula ON los nombres de columna deben ser nombres cualificados (llevan
delante el nombre de la tabla y un punto). col1, col2 son las columnas de
emparejamiento. Las columnas de emparejamiento deben contener la misma clase de
datos, las dos de tipo texto, de tipo fecha etc... comp representa cualquier operador de
comparacin ( =, <, >, <=, >=, o <> ) y se utiliza para establecer la condicin de
emparejamiento.
Supongamos que tenemos que listar los departamentos de la cia. con sus respectivos
empleados a partir de las siguientes tablas:
Y el resultado es:
ID NOMBRE LEGAJO NOMBRE DEPTO
1 COMPRAS 29003 Lopez Mario 1
1 COMPRAS 29043 Gimenez Leticia 1
1 COMPRAS 28009 Romario Pedro 1
2 MARKETING 28750 Fernandez Ricardo 2
2 MARKETING 27773 Abramovich Juan 2
El problema de este listado, es que no nos muestra los departamentos que no tienen
empleados, sino que simplemente los obvia. Si quisieramos mostrar aquellos registros
cuya tabla1 no se corresponde con ningun registro de la tabla2 tenemos que utilizar un
outer join. En este caso utilizamos un LEFT JOIN para mostrar todos los registros de la
tabla1 (o tabla izquierda) incluso aquellos que no tienen correspondencia con ningun
registro de la tabla2, para estos que no se corresponden con otros valores se les concatena
un conjunto de valores null.
Si el caso fuera inverso, digamos que existiesen empleado que no esten asignados a
ningun departamento, lo correcto para mostrar todos los empleados, incluso aquellos que
no tengan departamento, sera utilizar un RIGHT JOIN. De todos modos esto depende
del orden en que se tomen las tablas al realizar la consulta, o sea que si usamos RIGHT
JOIN es porque suponemos que empleado es la segunda tabla que mencionamos (la del
lado derecho).
Las funciones
SQL cuenta con un conjunto de funciones muy tiles para realizar clculos y operaciones
sobre los registros de una tabla o consulta. Dependiendo del motor de base de datos que
se utilice podr encontrarse con mayor o menor nmero de funciones, pero a
continuacin se nombran las ms usuales en todas las bases de datos.
AVG - Promedio:
Avg(expr)
Donde expr representa el campo que contiene los datos numricos para los que se desea
calcular la media o una expresin que realiza un clculo utilizando los datos de dicho
campo. La media calculada por Avg es la media aritmtica (la suma de los valores
dividido por el nmero de valores). La funcin Avg no incluye ningn campo Null en el
clculo.
Count(expr)
En donde expr contiene el nombre del campo que desea contar. Los operandos de expr
pueden incluir el nombre de un campo de una tabla, una constante o una funcin (la cual
puede ser intrnseca o definida por el usuario pero no otras de las funciones agregadas de
SQL). Puede contar cualquier tipo de datos incluso texto. Aunque expr puede realizar un
clculo sobre un campo, Count simplemente cuenta el nmero de registros sin tener en
cuenta qu valores se almacenan en los registros. La funcin Count no cuenta los
registros que tienen campos null a menos que expr sea el carcter comodn asterisco (*).
Si utiliza un asterisco, Count calcula elnmero total de registros, incluyendo aquellos que
contienen campos null. Count(*) es considerablemente ms rpida que Count(Campo).
No se debe poner el asterisco entre dobles comillas ('*').
Min(expr)
Max(expr)
En donde expr es el campo sobre el que se desea realizar el clculo. Expr pueden incluir
el nombre de un campo de una tabla, una constante o una funcin (la cual puede ser
intrnseca o definida por el usuario pero no otras de las funciones agregadas de SQL).
Sum - Suma:
Sum(expr)
En donde expr respresenta el nombre del campo que contiene los datos que desean
sumarse o una expresin que realiza un clculo utilizando los datos de dichos campos.
Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante
o una funcin (la cual puede ser intrnseca o definida por el usuario pero no otras de las
funciones agregadas de SQL).
Agrupar registros
GROUP BY sirve para agrupar varios registros de una tabla que coincidan en el campo
especificado junto a la clusula GROUP BY en un nico registro.
Ahora bien, la base de datos ha obtenido de nuestra tabla original solo dos registros, uno
para cada departamento, que es el criterio de agrupacin en nuestra clusula GROUP
BY, sin embargo que aparezcan los valores [Gomez-1250; Perez-1300] es totalmente
arbitrario ya que la base de datos ha tomado alguna funcin predeterminada para resumir
dichos valores. En otras bases de datos como Access se nos pedir que pongamos
explicitamente una funcin para los campos que no estan enumerados en la clusula
GROUP BY.
As que bien, el objetivo de agrupar los registros de una tabla es entonces poder calcular
en base a estos grupos algn tipo de funcin como las que enumeramos arriba (Count,
Max, Min, AVG.. y otras tantas). De este modo SQL nos servir para algo ms til como
por ejemplo calcular el salario promedio de todos los empleados, o de los grupos de
empleados por departamento.
AVG(Salario)
1250
Departamento AVG(Salario)
COMPRAS 1100
CONTABLE 1400
WHERE Y HAVING
Como ya sabemos la clusula Where se utiliza para filtrar registros de una tabla en base a
algn criterio. Having tambin sirve para filtrar registros, pero filtra los registros que han
sido agrupados. Por lo tanto Having se usa despus del Group By y antes de Order By.
Select Departamento, AVG(Salario) From Empleados Where Salario > 1000 Group By
Departamento
Departamento AVG(Salario)
COMPRAS 1250
CONTABLE 1400
Departamento AVG(Salario)
COMPRAS 1100
CONTABLE 1400
Si quisiramos conocer que departamentos superan los 1300 pesos de salario promedio
teniendo en cuenta solo a los empleados con un salario superior a 1000, tendramos:
Select Departamento, AVG(Salario) From Empleados Where Salario > 1000 Group by
Departamento Having AVG(Salario) > 1300
Y el resultado es:
Departamento AVG(Salario)
CONTABLE 1400