CONSULTAS SIMPLES
SELECT idfab,idproducto,descripcion,precio, (precio * 1.16) AS iva_incluido
FROM productos
SELECT numpedido, fab, producto, cant, importe / cant AS precio_unitario, importe
FROM pedidos
SELECT nombre, date() - contrato AS dias_trabajados, year(date()) - edad AS
ao_nacimiento
FROM empleados
SELECT *
FROM clientes
ORDER BY repclie
SELECT *
FROM oficinas
ORDER BY region, ciudad, oficina DESC
SELECT *
FROM pedidos
ORDER BY fechapedido
SELECT TOP 4 *
FROM pedidos
ORDER importe DESC
SELECT TOP 5 numpedido, fab, producto, cant, importe / cant AS precio_unitario,
importe
FROM pedidos
ORDER BY 5
SELECT *
FROM pedidos
WHERE MONTH(fechapedido) = 3
10
SELECT numemp
FROM empleados
WHERE oficina IS NOT NULL
11
SELECT oficina
FROM oficinas
WHERE dir IS NULL
12
SELECT *
FROM oficinas
WHERE region IN ('norte','este')
ORDER BY region DESC
13
SELECT *
FROM empleados
WHERE nombre LIKE 'Julia *'
14
SELECT *
FROM productos
WHERE idproducto LIKE '*x'
1.
SELECT oficinas.oficina, ciudad, numemp, nombre
FROM oficinas INNER JOIN empleados ON oficinas.oficina = empleados.oficina
WHERE region = 'este'
SELECT numpedido, importe,
clientes.nombre AS cliente, limitecredito
FROM pedidos INNER JOIN clientes ON
pedidos.clie = clientes.numclie
SELECT empleados.*, ciudad, region
FROM empleados LEFT JOIN oficinas ON empleados.oficina = oficinas.oficina
SELECT oficinas.*, nombre AS director
FROM empleados RIGHT JOIN oficinas ON empleados.numemp = oficinas.dir
WHERE objetivo > 600000
SELECT numpedido, importe, empleados.nombre AS representante, clientes.nombre
AS cliente
FROM (pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie) INNER JOIN
empleados ON pedidos.rep = empleados.numemp
WHERE importe > 25000
SELECT numpedido, importe, empleados.nombre AS representante, clientes.nombre
AS cliente
FROM (pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie) INNER JOIN
empleados ON pedidos.rep = empleados.numemp
WHERE importe > 25000
7
SELECT empleados.*, jefes.numemp AS num_jefe, jefes.nombre AS nombre_jefe,
jefes.cuota AS cuota_jefe
FROM empleados INNER JOIN empleados jefes ON empleados.jefe = jefes.numemp
WHERE empleados.cuota > jefes.cuota
SELECT numemp
FROM empleados LEFT JOIN pedidos ON pedidos.rep = empleados.numemp
WHERE importe > 10000 OR cuota < 10000
SELECT AVG(cuota) AS cuota_media, AVG(ventas) AS ventas_media
FROM empleados
SELECT AVG(importe) AS importe_medio, SUM(importe) AS importe_total,
AVG(importe/cant) AS precio_venta_medio
FROM pedidos
SELECT AVG(precio) AS p_medio_ACI
FROM productos
WHERE idfab = 'ACI'
SELECT SUM(importe) AS total_pedidos_V_Pantalla
FROM empleados INNER JOIN pedidos ON empleados.numemp = pedidos.rep
WHERE nombre = 'Vicente Pantalla'
SELECT MIN(fechapedido) AS primer_pedido
FROM pedidos
SELECT COUNT(*) AS cuantos_pedidos_mayores
FROM pedidos
WHERE importe > 25000
7
SELECT oficina, COUNT(*) AS cuantos_empleados
FROM empleados
GROUP BY oficina
SELECT numemp, nombre, clie AS cliente, SUM(importe) AS total_vendido
FROM empleados INNER JOIN pedidos ON pedidos.rep = empleados.numemp
GROUP BY numemp, nombre, clie
SELECT rep, AVG(importe) AS importe_medio
FROM pedidos
GROUP BY rep
HAVING SUM(importe) > 30000
10
SELECT descripcion, precio, SUM(importe) AS total_pedido
FROM productos INNER JOIN pedidos ON pedidos.fab = productos.idfab AND
pedidos.producto = productos.idproducto
GROUP BY idfab, idproducto, descripcion, precio, existencias
HAVING SUM(importe) > existencias * 0.75
ORDER BY 3
11
Consulta: distintas_oficinas
SELECT DISTINCT oficina
FROM empleados
WHERE ventas > cuota
Consulta: sumaria11
SELECT COUNT(*) AS cuantas_oficinas
FROM distintas_oficinas
SELECT nombre
FROM clientes
WHERE repclie = (SELECT numemp FROM empleados WHERE nombre = 'Alvaro Jaumes' );
2
SELECT numemp, nombre, oficina
FROM empleados
WHERE oficina IN ( SELECT oficina FROM oficinas WHERE ventas > objetivo );
SELECT numemp, nombre, oficina
FROM empleados
WHERE NOT EXISTS ( SELECT * FROM
oficinas WHERE empleados.oficina =
oficinas.oficina AND dir = 108);
SELECT numemp, nombre, oficina
FROM empleados
WHERE oficina NOT IN ( SELECT oficina FROM oficinas WHERE dir = 108);
4.
SELECT idfab, idproducto, descripcion
FROM productos
WHERE NOT EXISTS (SELECT * FROM pedidos WHERE fab = idfab AND producto =
idproducto AND importe >= 25000);
SELECT numclie, nombre
FROM clientes
WHERE repclie IN ( SELECT numemp FROM empleados WHERE nombre = 'Ana Bustamante'
)
AND numclie NOT IN ( SELECT clie FROM pedidos WHERE importe > 3000 AND clie IS NOT
NULL);
SELECT *
FROM oficinas
WHERE EXISTS ( SELECT * FROM empleados WHERE empleados.oficina=oficinas.oficina
AND ventas > objetivo * 0.55);
7
SELECT *
FROM oficinas
WHERE (objetivo * 0.5) <= ALL ( SELECT ventas FROM empleados WHERE
empleados.oficina = oficinas.oficina AND ventas IS NOT NULL);
SELECT *
FROM oficinas
WHERE objetivo > ( SELECT SUM(cuota) FROM empleados WHERE empleados.oficina =
oficinas.oficina);
1.
SELECT * INTO nuevaempleados
FROM empleados;
SELECT * INTO nuevaoficinas
FROM oficinas;
SELECT * INTO nuevaproductos
FROM productos;
SELECT * INTO nuevapedidos
FROM pedidos;
UPDATE productos
SET precio = precio * 1.05 WHERE idfab = 'ACI';
6
INSERT INTO oficinas ( oficina, region, ciudad, objetivo )
VALUES ( 30, 'centro','Madrid', 100000 );
UPDATE empleados SET oficina = 30 WHERE oficina = 21;
8.
DELETE FROM pedidos WHERE rep = 105;
DELETE FROM oficinas WHERE NOT EXISTS (SELECT *
FROM empleados WHERE empleados.oficina = oficinas.oficina);
10
UPDATE productos INNER JOIN nuevaproductos
ON ( productos.idfab = nuevaproductos.idfab) AND (productos.idproducto =
nuevaproductos.idproducto)
SET productos.precio = nuevaproductos.precio;
11
INSERT INTO oficinas
SELECT * FROM nuevaoficinas
WHERE oficina NOT IN (SELECT oficina FROM oficinas);
12
INSERT INTO pedidos
SELECT * from nuevapedidos WHERE rep = 105;
13
UPDATE empleados
SET oficina = 21 WHERE oficina = 30;
TRANSFORM SUM(importe)
SELECT rep AS empleado
FROM pedidos
WHERE year(fechapedido)=1990
GROUP BY rep
PIVOT MONTH(fechapedido);
TRANSFORM SUM(importe)
SELECT numemp AS empleado, nombre
FROM pedidos INNER JOIN empleados ON pedidos.rep=empleados.numemp
WHERE year(fechapedido)=1990
GROUP BY numemp, nombre
PIVOT MONTH(fechapedido);
TRANSFORM SUM(importe)
SELECT oficina
FROM pedidos RIGHT JOIN empleados ON pedidos.rep=empleados.numemp
GROUP BY oficina
PIVOT year(fechapedido)&"/"&MONTH(fechapedido);
TRANSFORM COUNT(numemp)
SELECT oficina
FROM empleados
GROUP BY oficina
PIVOT year(contrato);
5
TRANSFORM SUM(importe)
SELECT YEAR(fechapedido) AS anyo
FROM (pedidos INNER JOIN empleados ON pedidos.rep=empleados.numemp) INNER JOIN
oficinas ON empleados.oficina=oficinas.oficina
GROUP BY YEAR(fechapedido)
PIVOT region;
CREATE TABLE empleados (
numemp INTEGER PRIMARY KEY,
nombre TEXT(30) NOT NULL,
edad INTEGER,
oficina INTEGER,
titulo CHAR(20),
contrato DATETIME NOT NULL,
director INTEGER,
cuota CURRENCY,
ventas MONEY);
CREATE TABLE oficinas (
oficina INT PRIMARY KEY,
ciudad TEXT(30),
region TEXT(20),
dir INT CONSTRAINT cf_dir REFERENCES empleados,
objetivo CURRENCY,
ventas CURRENCY );
CREATE TABLE productos (
idfab TEXT(10),
idproducto TEXT(20),
descripcion TEXT(30) NOT NULL,
precio CURRENCY NOT NULL,
existencias INT ,
CONSTRAINT cp PRIMARY KEY (idfab,idproducto) );
4.
CREATE TABLE clientes (
numclie INT ,
nombre TEXT(30) NOT NULL,
repclie INT CONSTRAINT cf_repclie REFERENCES empleados,
CONSTRAINT cp PRIMARY KEY (numclie) ) ;
CREATE TABLE pedidos (
codigo COUNTER,
numpedido INT PRIMARY KEY,
fechapedido DATETIME NOT NULL,
clie INT NOT NULL,
rep INT NOT NULL,
fab TEXT(10) NOT NULL,
producto TEXT(20) NOT NULL,
cant INT NOT NULL,
importe CURRENCY NOT NULL,
CONSTRAINT cf_clie FOREIGN KEY (clie) REFERENCES clientes,
CONSTRAINT cf_rep FOREIGN KEY (rep) REFERENCES empleados,
CONSTRAINT cf_prod FOREIGN KEY (fab,producto) REFERENCES productos );
ALTER TABLE clientes
ADD COLUMN limitecredito MONEY;
ALTER TABLE empleados
ADD CONSTRAINT cf_oficina FOREIGN KEY (oficina) REFERENCES oficinas,
CONSTRAINT cf_director FOREIGN KEY (director) REFERENCES empleados;
ALTER TABLE empleados
ADD CONSTRAINT u_nombre UNIQUE (nombre);
ALTER TABLE pedidos
ADD CONSTRAINT cp PRIMARY KEY (numpedido);
10 CREATE INDEX i_region ON oficinas (region) ;
10 DROP INDEX i_region ON oficinas ;