Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. SQL
1
SQL por sus siglas en ingles (Structured Querry Languaje) es un
lenguaje de dominio especifico, usado en la programación y diseñado para ad-
ministrar los datos mantenidos en los sistemas de gestion de bases de datos
relacionales (RDBMS).
Originalmente fue basado en el álgebra relacional y en calculo relacional
de tuplas, SQL se compone de un lenguaje de manipulación de datos (LMD),
un lenguaje de definición de datos (LDD) y un lenguaje de control de datos
(LCD).
LMD
SQL
LDD LCD
1
1.1. Lenguaje de manipulación de datos: LDM
Normalmente, cuando un SGBD relacional implementa el lenguaje SQL, to-
das las acciones que se pueden llevar a cabo sobre el sistema se realizan mediante
sentencias de este lenguaje. Dentro de SQL hay varios tipos de sen- tencias que
se agrupan en tres conjuntos:
2
2.2. Clausulas:
Son condiciones utilizadas para concretar que datos son los que se desea
seleccionar o manipular.
FROM :Especifica la(s) tabla(s) de la cual se van a seleccionar los registros.
3
3. Consultas básicas
Las consultas de selección se utilizan para indicar al servidor de base de
datos que devuelva información de las bases de datos.
1 SELECT *
2 FROM tracks_expensives ;
Podemos modificar el orden en que se muestran los registros utilizando la
clausula ORDER BY <lista de campos>. En donde lista de campos represen-
tan los campos a ordenar.
1 SELECT *
2 FROM invoice
3 ORDER BY invoicedate ;
Podemos especificar el criterio de ordenamiento mediante las opciones ASC
y DESC.
2 SELECT *
3 FROM invoice
4 ORDER BY invoicedate ASC , total DESC ;
4
3.2. Consultas con predicados:
Una manera de limitar el número de filas que devuelve el servidor es utilizar
predicados en la selección. El predicado se incluye entre la claúsula y el primer
nombre del campo a recuperar, los posibles predicados son: * , DISTINCT,
DISTINCT ON (colum_name)
1 SELECT DISTINCT
2 customerid as clienteid , billingcity as ciudad
3 FROM invoice as factura
4 WHERE factura . billingcity = ’ Paris ’;
1 SELECT *
2 FROM invoice as cliente
3 WHERE ( total >= 5 and total <= 11)
4 and billingcountry = ’ France ’;
1 SELECT *
2 FROM invoice as cliente
3 WHERE NOT ( total >= 5 and total = < 11)
4 and billingcountry = ’ France ’;
1 SELECT *
2 FROM invoice as cliente
3 WHERE ( total BETWEEN 5 and 11) -- inclusive
4 and billingcountry = ’ France ’;
5
Operador IN: Este operador devuelve aquellos registros cuyo campo indicado
coincide con alguno de los en una lista.
2 SELECT *
3 FROM invoice as factura
4 WHERE NOT ( total BETWEEN 5 and 11)
5 and billingcountry IN ( ’ France ’ , ’ USA ’ , ’ Canada ’) ;
Operador IS: Podemos usar este operador para comparar un campo con
NULL.
1 SELECT *
2 FROM invoice as factura
3 WHERE cliente . billingstate IS NULL ;
1 SELECT billingcountry
2 FROM invoice as factura
3 WHERE cliente . billingstate IS NOT NULL
4 GROUP BY billingcountry ;
Ejemplo de función agregada.
6
Tomando un criterio de selección sobre los grupos:
1 SELECT
2 customerid , COUNT ( total ) , SUM ( total ) , AVG ( total ) , STDDEV ( total )
3 FROM invoice as factura
4 WHERE factura . billingstate IS NOT NULL
5 GROUP BY customerid
6 HAVING SUM ( total ) > 40
7 ORDER BY customerid DESC
8 LIMIT 10;
7
3.5. Subconsultas
Una subconsulta es una instruccion SELECT escrita entre parentesis
y anidada dentro de una instruccion SELECT, SELECT ... INTO,
DELETE o UPDATE.
8
Seleccionar todos los clientes si existe por lo menos una facturación hecha
en la misma ciudad de donde se registro a algún cliente.
3.6. JOINS
3.7. Cross Join
Las reunión cruzada (cross join) muestran todas las combinaciones de
todos los registros de las tablas combinadas. Para este tipo de join no se
incluye una condición de enlace. Se genera el producto cartesiano en el
que el número de filas del resultado es igual al número de registros de la
primera tabla multiplicado por el número de registros de la segunda tabla.
Esta consulta selecciona todos los empleados y clientes que se registraron en la
misma ciudad.
1 SELECT DISTINCT
2 employee . firstname , employee . lastname , customer . firstname ,
3 customer . lastname
4 FROM customer CROSS JOIN employee
5 WHERE employee . city = customer . city ;
La siguiente consulta es equivalente a la anterior:
1 SELECT DISTINCT
2 employee . firstname , employee . lastname , customer . firstname ,
3 customer . lastname
4 FROM customer , employee
5 WHERE employee . city = customer . city ;
9
3.8. Inner join/ join
La reunión interna (Inner Join), determinara cuales filas de las tablas
participantes se retornaran mediante un criterio de selección. La clausula
ON o USING es usada para definir el criterio de selección.
10
3.9. Left outer join/ left join
En primer lugar, se realiza un inner join. Entonces, para cada fila en T1
que no satisface la condición de unión con cualquier fila en T2, se agrega
una fila unida con valores nulos en columnas de T2. Por lo tanto, la tabla
unida tiene incondicionalmente al menos una fila para cada fila en T1.
1 SELECT *
2 FROM artist
3 LEFT JOIN album USING ( artistid )
1 SELECT *
2 FROM artist
3 RIGHT JOIN album USING ( artistid )
1 SELECT *
2 FROM artist
3 FULL OUTER JOIN album USING ( artistid )
11
3.12. Natural join
La reunión Natural es una operación JOIN que crea una cláusula de
unión implícita basada en las columnas comunes de las dos tablas que se
unen. Las columnas comunes son columnas que tienen el mismo nombre
en ambas tablas.
Se debe tener cuidado con este tipo de reunión ya que puede obtenerse
un resultado no deseado si no conocen bien todas las columnas de tablas
participantes.
Si las tablas no tienen atributos(columnas comunes), este tipo de reunión
se comportara como una reunión cruzada.
Todos artistas que tiene un álbum
1 SELECT *
2 FROM artist
3 NATURAL INNER JOIN album ;
Una reunión mal definida.
1 /* WRONG */
2 SELECT *
3 FROM employee
4 NATURAL JOIN customer
Ejemplo de reunion cruzada con Natural Join
1 SELECT *
2 FROM album
3 NATURAL JOIN genre ;
12
3.13. Insert
INSERT inserta nuevas filas en una tabla.Se puede insertar una o más
filas especificadas por expresiones de valor, o cero o más filas resultantes
de una consulta.
Los nombres de las columnas de destino se pueden enumerar en cualquier
orden. Si no se da ninguna lista de nombres de columna, el valor prede-
terminado es todas las columnas de la tabla en su orden declarada; o los
primeros N nombres de columna, si sólo hay N columnas proporcionadas
por la cláusula VALUES o consulta. Los valores proporcionados por la
cláusula VALUES o la consulta están asociados con la lista de columnas
explícita o implícita de izquierda a derecha.
3.14. Update
UPDATE cambia los valores de las columnas especificadas en todas las
filas que satisfacen la condición. Solamente las columnas a modificar de-
ben ser mencionadas en la cláusula SET; las columnas no modificadas
explícitamente conservan sus valores anteriores.
Hay dos maneras de modificar una tabla utilizando información contenida
en otras tablas de la base de datos: utilizando una subconsulta o especifi-
cando tablas adicionales en la cláusula FROM. La técnica más apropiada
depende de las circunstancias específicas.
1 UPDATE table
2 SET columna1 = valor1 ,
3 columna2 = valor ,...
4 WHERE
5 condition ;
13
La siguiente consulta modifica el empleado cuyo id es igual a 2.
1 UPDATE employee
2 SET
3 firstname = ’ Jesus ’ ,
4 lastname = ’ Perez ’ ,
5 title = ’ Database Administrator ’
6 WHERE employee . employeeid = 2;
7
1 UPDATE customer
2 SET supportrepid = 2
3 FROM invoice , invoiceline , track , album , artist -- List tables
4 WHERE invoice . customerid = customer . customerid
5 and customer . customerid = invoice . customerid
6 and invoice . invoiceid = invoiceline . invoiceid
7 and invoiceline . trackid = track . trackid
8 and track . albumid = album . albumid
9 and album . artistid = artist . artistid
10 and artist . name = ’ AC / DC ’;
14
También podemos expresar la actualización utilizando una sub-consulta:
1 UPDATE customer
2 SET supportrepid = 2
3 WHERE customer . customerid IN (
4 select distinct customer . customerid
5 FROM employee
6 INNER JOIN customer
7 ON customer . supportrepid = employee . employeeid
8 INNER JOIN invoice USING ( customerid )
9 INNER JOIN invoiceline USING ( invoiceid )
10 INNER JOIN track USING ( trackid )
11 INNER JOIN album USING ( albumid )
12 INNER JOIN artist USING ( artistid )
13 WHERE artist . name = ’ AC / DC ’
14 );
3.15. Delete
La cláusula DELETE elimina las filas que satisfacen la cláusula WHERE
de la tabla especificada. Si la cláusula WHERE está ausente, el efecto es
eliminar todas las filas de la tabla. El resultado es una tabla válida, pero
vacía.
Existen dos maneras de eliminar filas de una tabla utilizando información
contenida en otras tablas de la base de datos: mediante sub-selecciones
o especificando tablas adicionales en la cláusula USING. La técnica más
apropiada depende de las circunstancias específicas.
15
1
Se necesita saber que tipos de genero musical son preferidos por los clien-
tes. Para determinar esto se necesita el nombre del genero y la cantidad
de compras hechas en cada uno de ellos. Ademas se necesita ordenar por
cantidad de compras de manera descendente.
Determine la cantidad de productos que se consumen según el país de los
clientes.
Buscar todos los clientes que han realizado mas de alguna compra, retornar
el nombre y apellido del cliente, el numero de compras y el monto total
consumido en sus compras. Ordenar por numero de compras y por monto
total consumido de manera descendente.
Mostrar la información del empleado que atiende al cliente que mas dinero
ha gastado en la empresa.
Mostrar información de todos los clientes que han comprado canciones
pertenecientes a la lista de reproducción ’Grunge’.
16
Cuales son los compositores con mayor numero de canciones?. Liste todos
los compositores junto al numero de canciones realizadas.
Liste los 10 clientes ue consumieron mas productos durante el año 2009
en orden.
Liste los compositores de las canciones que mayor venta han tenido. Mos-
trar el nombre del compositor junto a el numero de ventas de las canciones
que compuso.
17
18