martes, 1 de marzo de 2016

Como Configurar Linux Bridge

 
Introducción

En este artículo explico cómo crear un bridge (puente por software, con el objetivo principal de usarlo para una máquina virtual en vez del uso clásico de un bridge. En la práctica la idea es crear un interfaz de red virtual y/o poder conectar a nuestro ordenador con más de una dirección IP y una única tarjeta de red.

Uso tradicional de un bridge

La función tradicional de un bridge es unir dos redes (la diferencia con un router es que éste interconecta dos redes y regula el paso de información entre ellas, un bridge, por contra, simplemente une las dos redes como si fueran una sola).

Para conseguir esta función lo único que se necesita es copiar los datos que pasen por cada tarjeta de red que forme parte del bridge al resto de tarjetas.

Existen dispositivos de hardware para cumplir esa función pero también se puede hacer con un ordenador y el software adecuado. En Linux ese software son las bridge-utils.
Otros usos: dispositivos virtuales

Ya he dicho que en Linux podemos crear un bridge y por lo explicado hasta ahora necesitaremos al menos dos tarjetas de red conectadas a redes diferentes para que cumpla su función, pero también hay una opción alternativa que sólo requiere de una tarjeta de red: crear dispositivos de red virtuales y añadirlos al bridge.

Estos dispositivos en realidad se comunicarán con la red por la única tarjeta física existente pero permitirán, por un lado, acceder al ordenador mediante varias IPs, cada una correspondiendo a uno de los dispositivos virtuales, y por otro asignar tareas específicas a cada uno de esos dispositivos.

Por poner un ejemplo simple, podríamos correr un servidor de correo en una IP y un servidor web en otra, correspondiendo ambas en realidad al mismo equipo, y pudiendo correr dentro un emulador para estar totalmente aislados (o para usar un sistema operativo diferente para cada servidor).

Kernel

La mayoría de distribuciones actuales deberían estar preparadas a nivel de kernel para lo que necesitamos, pero para máxima seguidad mejor comprobarlo.

Necesitamos tener compilado el los módulo bridge. Busquémoslo en la configuración del kernel:

$ egrep '^CONFIG_BRIDGE=.$' /boot/config-`uname -r`
CONFIG_BRIDGE=m

Si la salida es CONFIG_BRIDGE=m o CONFIG_BRIDGE=y tenemos el módulo bridge disponible.

No está de mas comprobar que el módulo carga (si el resultado era =yno hace falta), se puede comprobar con:

# modprobe -vvv bridge
# modprobe -vvv tun

Paquetes necesarios

Necesitamos el paquete de utilidades del bridge, en debian bridge-utils.

Para otras distribuciones busca el paquete que provea el ejecutable brctl, normalmente en /usr/sbin.

Instalación en debian: # apt-get install bridge-utils.

Configuración del dispositvo de bridge

Nota: Ésta parte es bastante más específica de Debian y derivadas, las redes se configuran de manera diferente en algunas distribuciones.

En condiciones normales estarás usando un dispositivo de red llamado algo así como eth1, wlan0 o similar, lo que vamos a hacer es crear un nuevo dispositivo de bridge, br0 y hacer que el viejo dispositivo forme parte de éste.

Identificación del dispositivo actual

Echemos un vistazo al archivo /etc/network/interfaces, que describe las tarjetas de red del sistema, en mi caso:
$ cat /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

En este caso eth0 es el interfaz que corresponde a mi tarjeta de red. Da igual si está configurado por DHCP (iface eth0 inet dhcp) o si tiene una IP fija asignada (iface eth0 inet static).

Creación manual

Ahora crearemos un bridge temporal, que desaparecerá al reiniciar el sistema.

# brctl addbr br1
Esto crea el bridge br1, sin configurar, podemos comprobar sus detalles:
$ /sbin/ifconfig br1

br1       Link encap:Ethernet  HWaddr 00:00:00:00:00:00 
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

# ifconfig eth0 down
# brctl addif br1 eth0

Esto, primero desactiva eth0 y luego añade eth0 como un puerto de br1, ahora br1 ha adquirido características de eth0, en concreto su dirección MAC, es decir, el bridge aparenta ser el interfaz real:

$ /sbin/ifconfig br1

br1       Link encap:Ethernet  HWaddr 02:16:F7:7B:7F:C7
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

# ifconfig eth0 0.0.0.0 up
# ifconfig br1 192.168.1.12 up
# route add -net default gw 192.168.1.1 dev br1

Por último activamos eth0 sin IP, activamos el bridge dándole una IP (podríamos asignársela por DHCP pero ya que solo estamos de prubas no hace falta), y añadimos la puerta de enlace predeterminada, en este caso 192.168.1.1

Cabe decir que el bridge tarda un tiempo (unos 30 segundos por ahora) en empezar a funcionar, antes de ese tiempo parecerá que no podemos conectar. Pasada ese espacio de tiempo hacemos la prueba:

$ ping 64.233.167.99

ping 64.233.167.99
PING 64.233.167.99 (64.233.167.99) 56(84) bytes of data.
64 bytes from 64.233.167.99: icmp_seq=1 ttl=242 time=160 ms
64 bytes from 64.233.167.99: icmp_seq=2 ttl=242 time=157 ms
64 bytes from 64.233.167.99: icmp_seq=3 ttl=242 time=217 ms

--- 64.233.167.99 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 157.607/178.632/217.364/27.425 ms

Funciona :)

Ahora podemos volver a la normalidad, primero desactivando el bridge:

# ifconfig eth0 down
# ifconfig br1 down
# brctl delif br1 eth0
# brctl delbr br1

Y luego reactivamos la red con la configuración anterior: # /etc/init.d/networking restart.

Si por casualidad no funcionase un reinicio debería ser suficiente :P

Configuración persistente

Ahora pasaremos a editar la configuración de red para crear el bridge en el arranque, gracias al archivo que hemos visto antes (/etc/network/interfaces) todo el proceso anterior será automático :)

Éste es mi /etc/network/interfaces después de hacer los cambios pertinentes:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# auto eth0
iface eth0 inet dhcp

# Bridge
auto br0
iface br0 inet dhcp
    bridge_ports    eth0
    bridge_fd    9
    bridge_hello    2
    bridge_maxage    12
    bridge_stp    off

He mantenido eth0 de manera que si br0 no funcionase bastaría con cambiar de interfaz activo (# ifdown br0 seguido de # ifup eth0).

Aquí estamos declarando a eth0 como el puerto físico (tarjeta de red) (bridge_ports eth0), el resto de opciones son las opciones recomendables en la mayoría de situaciones.
Leer más...

viernes, 19 de febrero de 2016

Desfragmentación, recuperación y chequeo de discos


ACTIVIDAD SOBRE FRAGMENTACIÓN DE DISCOS

1. Añade un disco a tu máquina Windows de virtualbox de 12MB y realiza las siguientes tareas:

a. Formatea el disco (con Diskpart) aplicándole como sistema de ficheros FAT32.

b. Copia varios archivos con tamaños comprendidos entre los 100KB y 500KB hasta que el disco esté lleno.

c. Comprueba la fragmentación del disco utilizando la herramienta defrag.exe que incorpora Windows. Verás que el disco no está fragmentado.

d. Haz las operaciones adecuadas para conseguir que el disco comience a fragmentarse. Explica el proceso seguido y utiliza de nuevo la herramienta defrag.exe para verificar el porcentaje de fragmentación del disco. Si se muestra un mensaje de que el disco no necesita ser desfragmentado, continúa realizando las operaciones adecuadas hasta conseguir que se indique lo contrario. Realiza una captura de pantalla una vez que hayas conseguido fragmentar el disco.

e. Una vez llevado a cabo dicho proceso, desfragméntalo con el parámetro adecuado y vuélvelo a comprobar. Realiza otra captura de pantalla con el resultado del proceso.

2. Formatea el disco virtual anterior aplicando ahora el sistema de ficheros NTFS y repite el proceso anterior. ¿Notas alguna diferencia?

3.- Lee el siguiente artículo: ¿Por qué no es necesario fragmentar en Linux?, y explica razonadamente por qué no es necesario el proceso de fragmentación en Linux.

ACTIVIDAD SOBRE RECUPERACIÓN DE ARCHIVOS BORRADOS

1. Utilizando el mismo disco virtual de Windows o Linux que creaste para la actividad anterior, recupera todos los archivos que puedas usando TestDisk (herramienta disponible para varios sistemas operativos) http://www.cgsecurity.org/wiki/TestDisk. Demuestra el proceso seguido realizando las capturas de pantalla que lo demuestren. ¿Por qué me permite este tipo de herramientas recuperar dichos archivos? Detalla la respuesta.

2. ¿Existe alguna manera de eliminar un archivo de manera real sin posibilidad de que éste sea recuperado por alguna herramienta como la indicada anteriormente? Investiga acerca de ello e indica si encuentras alguna/s opción/es para hacer esto.

ACTIVIDAD SOBRE CHEQUEO Y RECUPERACIÓN DE DISCOS

1. Cuando se os apaga el ordenador de manera repentina debido a un corte en el suministro eléctrico, ya sea en sistemas operativos que usan NTFS o EXT3, al arrancar suele suceder algo. ¿Qué sucede? ¿Qué herramientas incorporadas en cada sistema operativo intervienen en dicho proceso, tanto en Windows como en Linux?

2. Crea un disco virtual en Linux basado en MBR con un tamaño de 100MB y dos particiones primarias de 50MB cada una.

a. Formatea la primera partición con ext3 y la segunda con NTFS.
b. Desde Windows, ¿cómo puedes chequear las unidades? ¿Puedes 
chequear la partición ext3?
c. Escribe las instrucciones necesesarias para chequear las dos particiones desde Linux. 
d. Móntalas e introduce en cada una de ellas un archivo de texto. 
e. Copia el MBR, para luego drestruirlo utilizando la instrucción adecuada.
f.  ¿Puedes acceder ahora a tus particiones? ¿Por qué? Escribe un pequeño manual explicando como recuperar el MBR en Linux.

3. Siguiendo este manual sobre fstab, monta las dos unidades de forma automática cuando se inicie el sistema.

a. La partición ext3 tiene que estar montada en /mnt/datos. 
b. La partición ntfs tiene que estar montada en /mnt/documentos 
c. Utiliza las opciones necesarias para que un usuario del sistema (que no sea root) pueda escribir en las dos particiones. 

-----------------------------------------------------------------------------------------------------------------------------------

1) Tenemos que agregar un disco virtual a nuestro sistema desde Virtual Box.

a.- Una vez tengamos nuestro disco asignado, abrimos una consola y teclamos diskpart, luego creamos una partición principal de tamaño de todo el disco para ello hacemos un create partition primary, luego le damos el formato con el comando format fs=fat quick





A la partición le he asignado la letra H para poder montarlo y utilizarlo, para eso tecleamos el comando assign letter=H

b.- Copiamos ficheros entre 100KB y 500 KB. En mi caso estoy copiando y pegando un fichero llamado Prueba de 463KB de tamaño.


c.- Tecleamos el comando defrag H: /A para comprobar si el dispositivo con la letra H necesita ser fragmentado, en este caso todavía no hace falta.


d.-Para fragmentar el volumen mi proceso ha sido el siguiente:
  1. Copiar ficheros hasta llenar el disco
  2. Borrar los ficheros hasta vaciar el disco
  3. Volver a copiar ficheros
  4. Repiter estos procesos 5 veces
e.- Una vez fragmentado, lo desfragmentamos, tecleando el comando defrag H: /V /U (Estas opciones son para poder mostrar el progreso por pantalla y desfragmentar el disco) y hacemos luego un defrag H: /A (para analizar que definitivamente ha sido desfragmentado).




2. La diferencia es que el formato NTFS, tarda más en fragmentarse que el formato FAT, por eso en muchas ocaciones nos sale una advertencia cuando nuestro disco tiene el formato FAT de que formateemos nuestro disco a NTFS.

3.- Contestando a la pregunta de si hace falta hacer desfragmentar en Linux, puedo dar dos respuestas, una corta y otra larga. 

La corta es que no hace falta desfragmentar en Sistemas Linux. La larga tiene dos razones, la primera razón es que para que no sea necesaria la desfragmentación es el hecho de que la mayoría de los ficheros del sistema necesitan permisos de superusuario para moverse de un lado a otro, así que normalmente los ficheros “importantes” no se mueven, y solo son nuestros directorios raíz (en /home) los que puede que tengan más actividad. Y la segunda razón es que mientras que en otros sistemas operativos los sistemas de ficheros utilizados tienen como problema esa fragmentación -muy famosa en los FAT y FAT32, y también en NTFS- en los sistemas de ficheros de Linux la búsqueda de huecos para almacenar los ficheros es distinta, y es probable que la única situación en la que una fragmentación sea recomendable es cuando la unidad está llena a más del 95% de su capacidad.

 ----------------------------------------------------------------------------------------------------------------------------------

1) Para poder recuperar archivos de nuestra partición, tenemos que instalarnos el binario Testdisk. Una vez tengamos el binario, abriremos una consola (en mi caso desde windows) y nos dirigimos al directorio donde este el binario. Luego tecleamos testdisk_win.exe para poder a entrar en el menú del programa. Luego introduciremos la orden de create a new log file y luego señalamos nuestro disposisitvo en mi caso /dev/sdc y luego tecleamos enter para optar por la tabla de particiones por defecto. Luego introducimos advanced señalamos nuestra partición en mi caso la partición con formato NTFS y hacemos click en undeleted y enter. Luego nos saldrá una lista de archivos y señalamos nuestro archivo y damos introducimos la orden c para recuperarlo.







2) Efectivamente existe unos programas que nos permite limpiar y no borrar, definitivamente nuestros ficheros de un disco o incluso el disco duro entero 100%.

Uno de esos programas es DBAN, que nos permite limpiar el nuestro contenido y dejar nuestro ordenador sin sistema operativo. Otro programa es Ccleaner que es un programa para Windows que nos permite sobre todo borrar el espacio libre. Y para sistemas Linux, existe un programa muy parecido a Ccleaner que se llama BleachBit que hace exactamente lo mismo, borrar el espacio libre.

Con estos programas, no estaremos borrando como normalmente se hace al clickear en el archivo y eliminarlo, sino que estos programas limpia estos ficheros del espacio del disco, es decir desaparece del disco. Por lo tanto programas como TestDisk o Recuva no podrán recupar esta información borrada.

-----------------------------------------------------------------------------------------------------------------------------------

1) Lo que ocurre es que cuando se nos apaga el ordenador ya sea por un botonazo o por un corte de electricidad, algunos archivos del sistema o el mismo Fyle System se puede corromper, entonces los distintos sistemas hacen un chequeo del sistema e intentar recuperar la información de los discos dañados.

Para ello, en linux se utiliza las herramientas e2fsck para formatos ext2, ext3 y ext4 que lo que hace es hacer un chequeo de los discos con estos formatos y si estamos hablando de sectores se utiliza el comando badblocks que lo que hace es chequear y reparar los sectores del disco dañado.

Algunos ejemplos de estos comandos son: 
  • badblock -s (para mostrar el progreso en %) -v (modo verbose) -n (modo destructivo) -f (fuerza) [nombredispositivo]
  • e2fsck -p (para reparar) -v (verbose) -y (respoden si a todo) [nombredeldispositivo]
Para Windows, la herramienta que ya nos viene con el sistema es chkdsk que nos sirve para chequear el disco duro y repararlo. Lo bueno de esta herramienta es que se puede abrir desde una consola como de manera gráfica. El comando más utilzado es chkdsk [nombredeldispositivo]  /F (Para revisar el disco y reparar directamente).

2) Creamos nuestro disco Virtual de 100MB y Hacemos dos particiones de 50M.





a) Para formatear nuestras particiones hacemos un mkfs -t ext3 /dev/sdb1 para darle formato ext3 a la primera partición y mkfs -t ntfs /dev/sdb2 para darle formato ntfs a la segunda partición.


b) Desde Windows las unidades se pueden chequear con el comando CHKDSK C: /A (Hacemos un chequeo y los errores lo arreglamos). Pero en Windows no se puede chequear sistemas de archivos EXT. En linux se puede hacer el chequeo con el comando fsck nombre del dispositivo (permite formato ext) o ntfsfix nombre del dispositivo (para formato ntfs):

c) Para montarlas y meterle archivos hacemos lo siguiente:


e) Para destruir el mbr hacemos lo siguiente:


Eso es para hacer como una copia. Luego para eliminarlo hacemos lo siguiente:



f) Para recuperar el mbr hacemos lo siguiente:


De esa manera la copia mbr1 y mbr2 que creamos antes la recuperamos de nuevo y la insertamos en los diferentes dispositivos.

3) Para montar las particiones, lo que haremos previamente es un lsblk -f para ver todas nuestras particiones y confirmaremos que tienes el formato.


Luego tendremos que hacer un cd /mnt y como superusuario hacer un mkdir datos y mkdir documentos. Luego introducimos el comando nano /etc/fstab para configurar nuestros fyle systems e introducimos la información de la imagen:



Luego lo que tenemos que hacer es un mount -a (Lee el fichero fstab) para montar automáticamente estos dispositivos al arranque del sistema.
Por último le daremos los permisos al grupo de ususarios necesarios para que puedan acceder al dispositivo y crear, borrar y modificar ficheros. Lo haremos con el siguiente comando que veremos en la imagen:




Leer más...

domingo, 7 de febrero de 2016

Script en Python para sacar la temperaturas de las localidades de Sevilla


Esta semana he estado jugando un poco con los ficheros xml en las clases de Lenguaje de Marcas y una de las practicas era hacer un programa que te pidiera un nombre de una localidad de Sevilla por teclado y luego te informará de cuales eran sus temperaturas actuales.

Así pues comparto con vosotros mi Script en Python, utilizando los ficheros xml de la página de aemet.es y explicando paso a paso lo que hace el programa.

El programa lo podéis descargar clickeando aquí y podéis estar jugando con el y haciendo las modificaciones que veáis, eso sí una cosa que molaría es que luego las pudieseis compartir con todos.


Bueno eso es todo, si tienes alguna pregunta o haz echo una modificación del programa lo puedes dejar por los comentarios. Chau;D
Leer más...

Practicando Consultas de Base de Datos - Boletín 6 Mysql -


Hoy quiero postear la última práctica en la que estamos trabajando los alumnos de 1ºASIR del IES Gonzalo Nazareno para el módulo de Base de Datos.

En esta pratica estamos jugando con el lenguaje SQL para realizar consultar a la base de datos que está siendo soportada por MySQL. El boletín que estamos trabajando es el número 6. Este es el enlace para descargar el boletín.

Aquí os dejó el Script de creación de tablas:
 
-- SCRIPT --

#CREAMOS TABLA DEPARTAMENTO
create table depart(
dept_no integer,
dnombre varchar(20),
loc varchar(20),
primary key (dept_no)
);

#INSERTAMOS DATOS A LA TABLA DEPARTAMENTO
insert into depart
values ('10','CONTABILIDAD','SEVILLA');
insert into depart
values ('20','INVESTIGACION','MADRID');
insert into depart
values ('30','VENTAS','BARCELONA');
insert into depart
values ('40','PRODUCCION','BILBAO');

#CREAMOS TABLA EMPLEADOS
create table emple(
emp_no integer,
apellidos varchar(20),
oficio varchar(20),
dir integer,
fecha_alt date,
salario integer,
comision integer,
dept_no integer,
primary key (emp_no),
foreign key (dept_no) references depart (dept_no)
);

#INSERTAMOS DATOS A TABLA EMPLEADOS
insert into emple (emp_no, apellidos, oficio, dir, fecha_alt, salario, dept_no)
values ('7369','SANCHEZ','EMPLEADO','7902','17/12/1980','104000','20');
insert into emple
values ('7499','ARROYO','VENDEDOR','7698','20/02/1980','208000','39000','30');
insert into emple
values ('7521','SALA','VENDEDOR','7698','22/02/1981','162500','162500','30');
insert into emple (emp_no, apellidos, oficio, dir, fecha_alt, salario, dept_no)
values ('7566','JIMENEZ','DIRECTOR','7839','02/04/1981','386750','20');
insert into emple
values ('7654','MARTIN','VENDEDOR','7698','29/09/1981','162500','182000','30');
insert into emple(emp_no, apellidos, oficio, dir, fecha_alt, salario, dept_no)
values ('7698','NEGRO','DIRECTOR','7839','01/05/1981','370500','30');
insert into emple(emp_no, apellidos, oficio, dir, fecha_alt, salario, dept_no)
values ('7788','GIL','ANALISTA','7566','09/11/1981','390000','20');
insert into emple(emp_no, apellidos, oficio, fecha_alt, salario, dept_no)
values ('7839','REY','PRESIDENTE','17/11/1981','650000','10');
insert into emple
values ('7844','TOVAR','VENDEDOR','7698','08/09/1981','195000','0','30');
insert into emple(emp_no, apellidos, oficio, dir, fecha_alt, salario, dept_no)
values ('7876','ALONSO','EMPLEADO','7788','23/09/1981','143000','20');
insert into emple(emp_no, apellidos, oficio, dir, fecha_alt, salario, dept_no)
values ('7900','JIMENO','EMPLEADO','7698','03/12/1981','1235000','30');
insert into emple(emp_no, apellidos, oficio, dir, fecha_alt, salario, dept_no)
values ('7902','FERNANDEZ','ANALISTA','7566','03/12/1981','390000','20');
insert into emple(emp_no, apellidos, oficio, dir, fecha_alt, salario, dept_no)
values ('7934','MUÑOZ','EMPLEADO','7782','23/01/1982','169000','10');
Ahora os dejó con las consultas que nos pide el Boletín 6:
 
-- CONSULTAS --

1. Mostrar los datos de los empleados que pertenezcan al mismo departamento
que ʻGILʼ.

select * from emple where dept_no = (select dept_no from depart where apellidos="GIL");

2. Mostrar los datos de los empleados que tengan el mismo oficio que
ʻCEREZOʼ. El resultado debe ir ordenado por apellido.

select * from emple where oficio in (select oficio from emple where apellidos="CEREZO") order by apellidos;

3. Mostrar los empleados (nombre, oficio, salario y fecha de alta) que
desempeñen el mismo oficio que ʻJIMÉNEZʼ o que tengan un salario mayor o
igual que ʻFERNÁNDEZʼ.

select apellidos, oficio, salario, fecha_alt from emple where oficio in (select oficio from emple where apellidos="JIMÉNEZ") or salario >= (select salario from emple where apellidos="FERNÁNDEZ");

4. Mostrar en pantalla el apellido, oficio y salario de los empleados del
departamento de ʻFERNÁNDEZʼ que tengan su mismo salario.

select apellido, oficio, salario
from emple
where salario = (select salario
    from emple
    where dept_no = (select dept_no
        from emple
        where apellido="FERNÁNDEZ"));

5. Mostrar los datos de los empleados que tengan un salario mayor que ʻGILʼ y
que pertenezcan al departamento número 10.

select *
from emple
where salario > (select salario
     from emple
     where apellido="GIL")
and dept_no="10";

6. Mostrar los apellidos, oficios y localizaciones de los departamentos de cada
uno de los empleados.

select apellido, oficio, depart.loc
from emple, depart
where emple.dept_no=depart.dept_no;

7. Seleccionar el apellido, el oficio y la localidad de los departamentos donde
trabajan los ANALISTAS.

select apellido, oficio, depart.loc
from emple, depart
where emple.dept_no=depart.dept_no
and oficio="ANALISTAS";

8. Seleccionar el apellido, el oficio y salario de los empleados que trabajan en
Madrid.

select apellido, oficio, salario
from emple
where dept_no in (select dept_no
     from depart
     where loc="MADRID");

9. Seleccionar el apellido, salario y localidad donde trabajan de los empleados
que tengan un salario entre 200000 y 300000.

select apellido, salario, depart.loc 
from emple, depart
where emple.dept_no=depart.dept_no
and salario > "200000" and salario < "300000";

10. Mostrar el apellido, salario y nombre del departamento de los empleados
que tengan el mismo oficio que ʻGILʼ.

select apellido, salario, depart.dnombre
from emple,depart
where emple.dept_no=depart.dept_no
and oficio = in (select oficio
    from emple
    where apellido="GIL");

11. Mostrar el apellido, salario y nombre del departamento de los empleados
que tengan el mismo oficio que ʻGILʼ y que no tengan comisión.

select apellido, salario, depart.dname
from emple, depart
where emple.dept_no=depart.dept_no
and oficio = in (select oficio
    from emple
    where apellido="GIL")
and nvl(0,comision) = 0;

12. Mostrar los datos de los empleados que trabajan en el departamento de
contabilidad, ordenados por apellidos.

select *
from emple
where dept_no in (select dept_no
     from depart
     where dnombre="CONTABLIIDAD")
order by apellidos;

13. Apellido de los empleados que trabajan en Sevilla y cuyo oficio sea analista
o empleado.

select apellido
from emple
where dept_no in (select dept_no
     from depart
     where loca="SEVILLA")
and oficio in ("ANALISTA","EMPLEADO");

14. Calcula el salario medio de todos los empleados.

select avg(salario)
from emple;

16. Calcula el salario mínimo de los empleados del departamento 'VENTAS'.

select min(salario)
from emple
where dept_no in (select dept_no
     from depart
     where dnombre="VENTAS");

17. Calcula el promedio del salario de los empleados del departamento de
'CONTABILIDAD'.

select avg(salario)
from emple
where dept_no in (select dept_no
     from depart
     where dnombre="CONTABILIDAD");

18. Mostrar los datos de los empleados cuyo salario sea mayor que la media de
todos los salarios.

select *
from emple
where salario > (select avg(salario)
    from emple);

19. ¿Cuántos empleados hay en el departamento número 10?

select count(*)
from emple
where dept_no=10;

20. ¿Cuántos empleados hay en el departamento de 'VENTAS'?

select count(*)
from emple
where dept_no in (select dept_no
     from depart
     whre dnombre="VENTAS");

21. Calcula el número de empleados que hay que no tienen comisión.

select count(*)
from emple
where nvl(0,comision)=0;

22. Seleccionar el apellido del empleado que tiene máximo salario.

select apellido
from emple
where salario = (select max(salario)
    from emple);

23. Mostrar los apellidos del empleado que tiene el salario más bajo.

select apellido
from emple
where salario = (select min(salario)
    from emple);

24. Mostrar los datos del empleado que tiene el salario más alto en el
departamento de 'VENTAS'.

select apellido
from emple
where salario = (select max(salario)
    from emple)
and dept_no in (select dept_no
    from depart
    where dnombre="VENTAS");

25. A partir de la tabla EMPLE visualizar cuántos apellidos de los empleados
empiezan por la letra ʻA.

select count(*)
from emple
where apellido like "A%";

 
Bueno eso ha sido todo, nos vemos el próximo post, chau ;D
 
Leer más...