1.2. Comandos
Existen tres tipos de comandos SQL:
DDL (Lenguaje de Definicin de Datos). Permiten crear y definir nuevas bases de datos,
campos e ndices.
DML (Lenguaje de Manipulacin de Datos). Permiten generar consultas para ordenar, filtrar y
extraer datos de la base de datos, permite hacer
o Mostrar los datos de una o mas tablas, o de una o mas vistas.
o Modificar los valores de atributos en filas existentes.
o Eliminar filas de tablas o vistas.
o Agregar nuevas filas a una tabla o vista.
o Bloquear una tabla o vista, limitando temporalmente el acceso de otros usuarios.
o Ver el plan de ejecucin de una sentencia SQL.
DCL (Lenguaje de Control de Datos). Permiten variar los permisos otorgados a los usuarios con
referencia a los datos.
Comandos DDL
Comando Descripcin
CREATE Utilizado para crear nuevas tablas, campos e ndices
DROP Empleado para eliminar tablas e ndices
Utilizado para modificar las tablas agregando campos o cambiando la definicin de los
ALTER
campos.
Comandos DML
Comando Descripcin
Utilizado para consultar registros de la base de datos que satisfagan un criterio
SELECT
determinado
INSERT Utilizado para cargar lotes de datos en la base de datos en una nica operacin.
UPDATE Utilizado para modificar los valores de los campos y registros especificados
DELETE Utilizado para eliminar registros de una tabla de una base de datos
Comandos DCL
Comando Descripcin
GRANT Permite que otros usuarios manipulen la data, con el permiso respectivo otorgado
REVOKE Permite retirar todos o parte de os privilegios que se han concedido a los usuarios.
1.3. Clusulas
Las clusulas son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o
manipular.
Clusula Descripcin
FROM Utilizada para especificar la tabla de la cual se van a seleccionar los registros
Utilizada para especificar las condiciones que deben reunir los registros que se van a
WHERE
seleccionar
GROUP BY Utilizada para separar los registros seleccionados en grupos especficos
HAVING Utilizada para expresar la condicin que debe satisfacer cada grupo
ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo con un orden especfico
Operador Uso
Es el "y" lgico. Evala dos condiciones y devuelve un valor de verdad slo si ambas
AND
son ciertas.
Es el "o" lgico. Evala dos condiciones y devuelve un valor de verdar si alguna de las
OR
dos es cierta.
NOT Negacin lgica. Devuelve el valor contrario de la expresin.
Operador Uso
< Menor que
> Mayor que
<> Distinto de
<= Menor Igual que
>= Mayor Igual que
= Igual que
BETWEEN Utilizado para especificar un intervalo de valores.
LIKE Utilizado en la comparacin de un modelo
IS NULL Devuelve el registro que no tiene datos
IN Utilizado para especificar registros de una base de datos
Funcin Descripcin
AVG Utilizada para calcular el promedio de los valores de un campo determinado
COUNT Utilizada para devolver el nmero de registros de la seleccin
SUM Utilizada para devolver la suma de todos los valores de un campo determinado
MAX Utilizada para devolver el valor ms alto de un campo especificado
MIN Utilizada para devolver el valor ms bajo de un campo especificado
Es decir:
2. Crea la tabla cliente, sus atributos tipo de datos y la clave primaria id_cliente.
CREATE TABLE [Cliente]
(
[Id_cliente] [char](6) NOT NULL,
[Cli_Nombre] [nvarchar](30) NOT NULL,
[Cli_Apellido] [nvarchar](30) NOT NULL,
[Cli_Direccion] [nvarchar](30) NULL,
[Cli_Telefono] [char](9) NULL,
[Cli_Ruc] [char](10) NULL,
[Id_distrito] [char](3) NULL,
CONSTRAINT [PK_Cliente] PRIMARY KEY ([Id_cliente] ASC)
)
9. Mostrar todos los datos del Cliente de hayan realizado una compra al menos una vez.
SELECT DISTINCT C.*
FROM Cliente C , dbo.Factura F
WHERE C.id_cliente=F.id_Client
11. Muestra las facturas con totales desde 1000 hasta 5000
SELECT id_factura, fecha, total
FROM factura
WHERE total BETWEEN 1000 and 5000
13. Muestra las facturas emitidas el mes de diciembre, ao 1999, y el dia 8. (ver consulta 25).
SELECT id_factura, fecha
FROM factura
WHERE MONTH(fecha)=12 and YEAR (fecha) =1999 and DAY(fecha)=08
14. Muestra clientes cuyo nombre empiece con la letra M y el tercer carcter sea una r.
SELECT cli_nombre, cli_apellido
FROM cliente
WHERE cli_nombre LIKE ('m_r%')
ANIDAR SUBCONSULTAS
Las subconsultas pueden anidarse de forma que una subconsulta aparezca en la clusula
WHERE (por ejemplo) de otra subconsulta que a su vez forma parte de otra consulta principal. En
la prctica, una consulta consume mucho ms tiempo y memoria cuando se incrementa el nmero de
niveles de anidamiento. La consulta resulta tambin ms difcil de leer, comprender y mantener
cuando contiene ms de uno o dos niveles de subconsultas.
19. Muestra las facturas, clientes, totales calculados, y cuantos tipos de artculos hay en esa factura, ordenados
por cuantos tipos de artculos hay en la factura en forma descendente.
SELECT factura.id_factura, cli_nombre, cli_apellido,
SUM(cantidad*pcosto) AS Total, COUNT(articulo.id_articulo) AS 'Cuantos
tipos de Articulo'
FROM factura, articulo, detalle, cliente
WHERE detalle.id_articulo=articulo.id_articulo and
factura.id_factura=detalle.id_factura and
cliente.id_cliente=factura.id_cliente
GROUP BY factura.id_factura, cli_nombre, cli_apellido
ORDER BY COUNT(articulo.id_articulo) DESC
20. Muestra los mejores clientes cuya suma de totales de sus compras sea mayores a 10000, en el ao 1999.
SELECT cliente.id_cliente, cli_nombre, cli_apellido, SUM(total) AS
'Acumulado Soles'
FROM factura, cliente
WHERE factura.id_cliente=cliente.id_cliente AND YEAR(factura.fecha)=1999
GROUP BY cliente.id_cliente, cli_nombre, cli_apellido
HAVING SUM(total)>10000
ORDER BY cliente.id_cliente
24. Clientes que hayan comprado por lo menos una vez (ver consulta 26).
SELECT id_cliente, cli_nombre, cli_apellido
FROM cliente
WHERE EXISTS (SELECT * FROM factura WHERE cliente.id_cliente =
factura.id_cliente)
26. Clientes que hayan comprado por lo menos una vez (ver consulta 27)
SELECT DISTINCT (cliente.id_cliente), cli_nombre
FROM cliente,factura
WHERE cliente.id_cliente=factura.id_cliente
Las vinculaciones entre tablas se realiza mediante la clusula INNER que combina registros de
dos tablas siempre que haya concordancia de valores en un campo comn. Su sintaxis es:
SELECT campos FROM tb1 INNER JOIN tb2 ON tb1.campo1 comp tb2.campo2
En donde:
tb1, tb2
Son los nombres de las tablas desde las que se combinan los registros.
campo1, campo2
Son los nombres de los campos que se combinan. Si no son numricos, los campos deben ser del
mismo tipo de datos y contener el mismo tipo de datos, pero no tienen que tener el mismo nombre.
comp
Es cualquier operador de comparacin relacional: =, <, >, <=, >=, o <>.
Se puede utilizar una operacin INNER JOIN en cualquier clusula FROM. Esto crea una
combinacin por equivalencia, conocida tambin como unin interna. Las combinaciones Aqu son las
ms comunes; stas combinan los registros de dos tablas siempre que haya concordancia de valores
en un campo comn a ambas tablas. Se puede utilizar INNER JOIN con las tablas Departamentos y
Empleados para seleccionar todos los empleados de cada departamento. Por el contrario, para
seleccionar todos los departamentos (incluso si alguno de ellos no tiene ningn empleado asignado)
se emplea LEFT JOIN o todos los empleados (incluso si alguno no est asignado a ningn
departamento), en este caso RIGHT JOIN.
Si se intenta combinar campos que contengan datos Memo u Objeto OLE, se produce un
error. Se pueden combinar dos campos numricos cualesquiera, incluso si son de diferente tipo de
datos. Por ejemplo, puede combinar un campo Numrico para el que la propiedad Size de su objeto
Field est establecida como Entero, y un campo Contador.
El ejemplo siguiente muestra cmo podra combinar las tablas Categoras y Productos basndose en el
campo IDCategoria:
SELECT campos FROM tabla1 INNER JOIN tabla2 ON tb1.campo1 comp tb2.campo1 AND ON
tb1.campo2 comp tb2.campo2) OR ON tb1.campo3 comp tb2.campo3)];
SELECT campos FROM tb1 INNER JOIN (tb2 INNER JOIN [( ]tb3 [INNER JOIN [( ]tablax [INNER
JOIN ...)] ON tb3.campo3 comp tbx.campox)] ON tb2.campo2 comp tb3.campo3) ON tb1.campo1
comp tb2.campo2;
Un LEFT JOIN o un RIGHT JOIN puede anidarse dentro de un INNER JOIN, pero un INNER
JOIN no puede anidarse dentro de un LEFT JOIN o un RIGHT JOIN.
EN RESUMEN
EJEMPLOS DE APLICACIN.
40. Empleados que hayan facturado y solo aquellos que se les asigno un distrito
select empleado.id_empleado,Apaterno, id_factura, distrito.nombre
from empleado left join factura on
empleado.id_empleado = factura.id_empleado
left join distrito on empleado.id_distrito = distrito.id_distrito
where factura.id_empleado is not NULL
and empleado.id_distrito is not NULL