Buscar este blog

martes, 26 de noviembre de 2013

Ejercicios PL/SQL 2

Ejercicios PL/SQL 2

Ejercicio 1

Crea una tabla llamada SELLER que contenga los campos:
  1. ID INTEGER PRIMARY KEY
  2. NAME VARCHAR2(40)
  3. PERCENTAGE NUMBER(2) DEFAULT 7
Debes crear un trigger para que al modificar el campo percentage no permita introducir un valor mayor que 40.
-------------------------------------------------------------------------------------------------------
--Crea una tabla llamada SELLER que contenga los campos:
--Debes crear un trigger para que al modificar el campo percentage no permita introducir un valor mayor que 40.
create table seller (

ID_Seller INTEGER PRIMARY KEY,
nombre VARCHAR2(40),
PERCENTAGE NUMBER(2) DEFAULT 7
);

--drop trigger comision_maxima;
CREATE TRIGGER comision_maxima
    AFTER INSERT OR UPDATE ON seller
    REFERENCING NEW AS newRow
    FOR EACH ROW
    WHEN (newRow.percentage >= 40)
    BEGIN
        INSERT INTO seller VALUES(:newRow.ID_Seller, :newRow.nombre, :newrow.percentage);

END comision_maxima;
-------------------------------------------------------------------------------------------------------

Ejercicio 2

Crea una función PL/SQL que dados los números del DNI te devuelva un CHAR que contenga la letra correspondiente. El cálculo de la letra del DNI lo puedes sacar de internet, para cualquier lenguaje de programación.

-------------------------------------------------------------------------------------------------------
FALLA Y NO SE POR QUE EN EL ARRAY

create or replace 
function Letra_DNI (DNI integer)
RETURN varchar2
IS
 letra varchar2(1);
 Type Letra_ARRAY IS varray(40) OF VARCHAR2(2);
 LETRAS Letra_array:= Letra_ARRAY('T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E','T');

BEGIN
  letra:=LETRAS(round((DNI/23),2));
  return letra;
END Letra_DNI;
-------------------------------------------------------------------------------------------------------

Ejercicio 3

Sobre una tabla CUSTOMER que tengas, añade un campo DNI con un valor por defecto. Debes crear un TRIGGER que a la hora de insertar o modificar un cliente meta de forma automática la letra utilizando la función anterior. A la hora de dar la orden de INSERT o UPDATE el dni tendrá que ir sin letra, obviamente.

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

Ejercicio 4

Crea una tabla COMPANY que contenta los campos:
  1. ID INTEGER PRIMARY KEY
  2. NAME VARCHAR2(40)
  3. ADDRESS VARCHAR2(100)
  4. ZIPCODE  CHAR(5) DEFAULT '28001'
  5. PROVINCE VARCHAR2(20) DEFAULT 'Madrid'
Crea un trigger para que los códigos postales que se inserten o modifiquen solamente puedan estar entre 01000 y 52999. Si se inserta uno no válido debe quedarse el valor anterior.
Además el trigger debe ser capaz de establecer la provincia de forma automática. No hace falta cubrir los 52 casos, basta por ejemplo que lo hagas con las provincias vascas: Guipuzcoa, Vizcaia, Cantabria, La Rioja y Alava.
-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------

miércoles, 20 de noviembre de 2013

Ejercicios PL/SQL 1

Ejercicios PL/SQL 1

Ejercicios PL/SQL
Crea estos ejercicios sobre la bd de logística.
Ejercicio1
Desarrolla un prodecimiento almacenado que genere un número aleatorio entre 1 y 10 y a continuación en una estructura case/when saque lo siguiente: si el número es 4 muestra por pantall la palabra "Defensa", si el número es 7 muestra por pantalla la palabra "Raúl", si el número es el 9 muestra la palabra "Ariete", si es un 10 muestra la palabre "Puñal" y para cualquier otro caso muestra la palabra "Dorsal desconocido"
-------------------------------------------------------------------------------------------------------
create or replace PROCEDURE Numero_aleatrorio
IS
-- Creamos dos variables: Una para recoger el numero y otra para la respuesta.
aleatorio integer;
respuesta varchar2(100);
BEGIN
-- Le damos un valor aleatorio entre 1 y 10.
  aleatorio:=DBMS_RANDOM.VALUE(1,10);
  
CASE aleatorio
WHEN 0 THEN respuesta:='defensa';
WHEN 7 THEN respuesta:='Raul';
WHEN 9 THEN respuesta:='Ariete';
WHEN 10 THEN respuesta:='Puñal';
ELSE respuesta:='Cualquier otro dorsal';
END CASE;

-- Mostramos el resultado segun el numero aleatorio
DBMS_OUTPUT.PUT_LINE(aleatorio || respuesta);


END Numero_aleatrorio;
-------------------------------------------------------------------------------------------------------
Ejercicio2
Desarrolla un procedimiento almacenado que muestre por pantalla todos los caracteres ASCII del 1 al 128 utilizando para ello la función CHR.
-------------------------------------------------------------------------------------------------------
create procedure Lista_Ascii
is
-- Creamos el valor que recorrerá todos los valores ASCII.
  valor integer;
begin
-- Recorremos todos los valores ASCII con un for y los mostramos con la función CHR.
FOR valor IN 1..128 [REVERSE] LOOP
dbms_output.put_line('Numero: ' || valor || 'corresponde a ASCII: ' || chr(valor));
END LOOP;
-------------------------------------------------------------------------------------------------------
Ejercicio3
Desarrolla una función llamada nameString que dada una cadena varchar2(100) devuelva la misma cadena sin espacios en blanco por delante ni por detrás y devuelva la primera letra de cada palabra en mayúsculas.
-------------------------------------------------------------------------------------------------------
create or replace 
FUNCTION nameString  (cadena1 varchar2)
RETURN varchar2
IS
cadena2 varchar2(100);
BEGIN
  -- Eliminamos espacios a la izquierda
  cadena2:=LTRIM(cadena1,' '); 
  -- Eliminamos espacios a la derecha
  cadena2:=RTRIM(cadena2,' ');
  -- Cambiamos a mayusculas el primer caracter de cada palabra.
  cadena2:=initcap(cadena2);
  -- Mostramos por pantalla
  dbms_output.put_line( cadena2);  
  return cadena2;

END nameString ;

-------------------------------------------------------------------------------------------------------
Ejercicio4
Desarrolla una función llamada completeNameString que dadas tres cadenas varchar2(100) te hace lo mismo que la función anterior en cada una y además te concatena las tres cadenas separadas por un espacio en blanco.
-------------------------------------------------------------------------------------------------------

create or replace 
FUNCTION completeNameString (cadena1 varchar2,cadena2 varchar2,cadena3 varchar2)
RETURN varchar2
IS
resultado varchar2(400);
BEGIN
  resultado:=namestring(cadena1);
  resultado:=resultado || ' ' || namestring(cadena2);
  resultado:=resultado || ' ' || namestring(cadena3);
  dbms_output.put_line(resultado);
  return resultado;
END completeNameString  ;
-------------------------------------------------------------------------------------------------------
Ejercicio5
Desarrolla una función llamada generateName que dado un número de sílabas genere un varchar(30) que esté compuesto por cadenas formadas por Consonante-VocalConsonante-Vocal...
Mejora: añade un parámetro para que la palabra empiece por vocal en lugar de consonante.
Mejora2: haz la función sin parámetros de tal forma que devuelva nombres con una o más sílabas y comiencen por vocal o no.
-------------------------------------------------------------------------------------------------------
-- Mejora
create or replace 
FUNCTION generateName (numero integer, vocal integer default 0)
RETURN varchar2
IS
 nombre varchar2(30):='';
 num integer;
 Type VOCAL_ARRAY IS varray(5) OF VARCHAR2(20);
 Type CONSO_ARRAY IS varray(21) OF VARCHAR2(20);
 vocales vocal_array:= VOCAL_ARRAY('a','e','i','o','u');
 consonantes conso_array:=CONSO_ARRAY('b','c','d','f','g','h','j','k','l','m','ñ','p','q','r','s','t','w','v','x','y','z');
BEGIN
  if vocal=1 then
    for num in 1..numero loop
      nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
      nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
    end loop;
  else
    for num in 1..numero loop
      nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
      nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
    end loop;
  end if
  dbms_output.put_line(nombre);
  return nombre;
END generateName;

-- Mejora2

create or replace 
FUNCTION generateName2 
RETURN varchar2
IS
 nombre varchar2(30):='';
 num integer;
 numero integer:= round(dbms_random.value(1,15));
 vocal integer:=round(dbms_random.value(0,1)); 
 Type VOCAL_ARRAY IS varray(5) OF VARCHAR2(20);
 Type CONSO_ARRAY IS varray(21) OF VARCHAR2(20);
 vocales vocal_array:= VOCAL_ARRAY('a','e','i','o','u');
 consonantes conso_array:=CONSO_ARRAY('b','c','d','f','g','h','j','k','l','m','ñ','p','q','r','s','t','w','v','x','y','z');
BEGIN
  dbms_output.put_line(vocal || 'hola');
  if vocal=1 then
    for num in 1..numero loop
      nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
      nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
    end loop;
  else
    for num in 1..numero loop
      nombre:= nombre || vocales(round(DBMS_RANDOM.VALUE(1,5)));
      nombre:= nombre || consonantes(round(DBMS_RANDOM.VALUE(1,21)));
    end loop;
  end if;

  dbms_output.put_line(nombre);
  return nombre;
END generateName2;

-------------------------------------------------------------------------------------------------------
Ejercicio6
Desarrolla una función que genere fechas aleatorias, anteriores o posteriores a la fecha actual.
-------------------------------------------------------------------------------------------------------
 -- Fechas aleatorias..... hasta que año.....
create or replace 
FUNCTION fechas_aleatorias (dato integer)
RETURN varchar2
IS
 fecha date;
 dias integer;
BEGIN
  dias:=DBMS_RANDOM.VALUE(-1000,1000);
  fecha:=add_months(current_date,dias);
  dbms_output.put_line(fecha);
  return fecha;
END fechas_aleatorias;
-------------------------------------------------------------------------------------------------------
Ejercicio7
Desarrolla un procedimiento almacenado para rellenar las tablas de la BD de logística. Debes utilizar las funciones creadas en los pasos anteriores.
-------------------------------------------------------------------------------------------------------
Procedimiento que genera 10 registros en la tabla clientes

create or replace 
procedure agregar_usuarios
is
  codigo integer:= 16;
  nombre varchar2(30);
  direccion varchar2(100);
  telefono integer;
  fecha date;
  n integer;
  d integer;
  N_clientes integer;
begin
for n_clientes in 1..10 loop
  d:=1;
  telefono:=1;
  codigo:= codigo+1;
  nombre:=generatename(5);
  direccion:=generatename(13);
  for n in 1..8 loop
    d:=d*10;
    telefono:=telefono + d*(round(DBMS_RANDOM.VALUE(1,9)));
  end loop;
  fecha:=fechas_aleatorias;
  
  INSERT INTO clientes VALUES (codigo,nombre,direccion,telefono,fecha);
  --select * cliente where códigocliente=codigo;
end loop;
end agregar_usuarios;
-------------------------------------------------------------------------------------------------------

lunes, 18 de noviembre de 2013

Importar BMP de un ERP a SQL ORACLE DEVELOPER

Importar BMP de un ERP a SQL ORACLE DEVELOPER



Creamos un tablespace desde SQL PLUS:

CREATE TABLESPACE ERP DATAFILE 'C:\ORACLE\ERP.DBF'
SIZE 100M AUTOEXTEND ON NEXT 200K MAXSIZE 400M;

Creamos un usuario para esta tablespace y le damos los permisos necesarios para administrar la base de datos.

CREATE USER erp IDENTIFIED BY Password12 DEFAULT TABLESPACE ERP TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT ACCOUNT UNLOCK;
GRANT CONNECT, DBA, RESOURCE TO erp ;
GRANT UNLIMITED TABLESPACE TO erp ;
ALTER USER erp DEFAULT ROLE CONNECT, RESOURCE, DBA;


Una vez creado la tablespace y el usuario importamos la base de datos desde la consola de comandos:


imp USERID=erp/12345678 TABLESPACES=ERP FILE="Ruta del BMP" full=y






viernes, 15 de noviembre de 2013

Trabajar con SQL Oracle

SQL ORACLE


  • Crear una Tabla
  • Introducir datos
  • Consultar datos
  • Modificar datos
  • Eliminar



Crear una Tabla

CREATE TABLE cliente(
DNI varchar(9) primary key,
nombre varchar2(20),
apellidos varchar2(30),
telefono varchar2(12),
email varchar2(100),
direccion varchar2(100));

Una tabla esta dividida en diferentes campos o datos que pueden ser de varios tipos, eso quiere decir que un campo de una tabla puede tener un valor: numerico, cadena, fecha, etc...
Para diferenciar este tipo de valor SQL Oracle tiene definidos una serie de tipos para los datos de una tablas

  • CHAR: Cadena de un valor fijo. Si le indicamos que la cadena es de 20 caracteres, aunque el valor del campo tenga un solo caracter el valor del campo sera de 20.
  • VARCHAR2: Cadena de un valor dinamico hasta un maximo indicado. Esto nos quiere decir que si se define el campo de 20 caracteres y se introduce un valor de 2 caracteres el tamaño del campo será de 2 caracteres en vez de 20.
  • NCHAR y NCHAR2: Este tipo de valor es parecido al varchar. La diferencia entre el varchar y nchar es que estos últimos soportan mas tipos de caracteres.
  • CLOB y NCLOB: Permiten introducir caracteres, de 4Gb hasta un maximo de 128GB .
  • LONG: Parecido a los dos anteriores. Con una capacidad maxima de 2GB.
  • NUMER(precisión, escala): Este tipo recoge números, se le puede indicar:
      • PRECISION: Numero de dígitos
      • Escala: Numero de decimales
      • ejemplo: precio numer(4,2) --> Valores de 4 digitos y 2 decimales
  • INTEGER: Números enteros
  • DECIMAL: Números con decimales
  • FLOAT: Números con decimales
  • REAL: Números con decimales
  • DATE: fecha
  • TIMESTAMP: fecha y hora
  • RAW y LONG RAW: Guarda valores cuyo tipo de datos son propios de lo que se guarda (no es de tipo numerico o de caracter), estos datos pueden ser videos, fotos, etc.Permite un tamaño de 2Kb en RAW y 2GB en LONG RAW.
  • LOB: objetos más grandes aún de tamaño hasta 4GB, y tiene tres variantes, los CLOB y NCLOB y el clásico BLOB para almacenar objetos binarios.
  • XMLType: desde Oracle9i se introdujo este tipo que lo que hace realemten es almacenar contenido XML en formato LOB.



Introducir datos

Existen varias formas de meter datos en una tabla:
  • Podemos meter datos uno a uno introduciendo todos los campos de la tabla EN ORDEN.
INSERT INTO cliente VALUES (12345678B,’Mikel’,’Astrain Lopez’,123456789,’m.astrain.lopez@ejemplo.com’,'calle A Nº1 3º Izq)
INSERT INTO cliente VALUES (87654321A,’Juan’,’Colgate Lopez’,123456789,’j.colgate.lopez@ejemplo.com’,'calle B Nº3 1º Izq);

  • Podemos meter varios registros en bloque, con esta :

INSERT ALL

INSERT INTO cliente VALUES (12345678B,’Mikel’,’Astrain Lopez’,123456789,’m.astrain.lopez@ejemplo.com’,'calle A Nº1 3º Izq)

INSERT INTO cliente VALUES (87654321A,’Juan’,’Colgate Lopez’,123456789,’j.colgate.lopez@ejemplo.com’,'calle B Nº3 1º Izq)

SELECT 1 FROM DUAL;
COMMIT;

  • Podemos meter registros en diferentes tablas:
INSERT ALL
INSERT INTO cliente VALUES (12345678B,’Mikel’,’Astrain Lopez’,123456789,’m.astrain.lopez@ejemplo.com’,'calle A Nº1 3º Izq)
INSERT INTO proveedor VALUES (87654321A,’Juan’,’Colgate Lopez’,123456789,’j.colgate.lopez@ejemplo.com’,'calle B Nº3 1º Izq)
SELECT 1 FROM DUAL;
COMMIT;

  • También se puede introducir datos en campos concretos. Hay que tener cuidado con algunas tablas ya que puede que tengan campos donde se tiene que meter datos de manera obligatoria:
INSERT INTO cliente (DNI, nombre) VALUES (12345678B,’Mikel’);

  • Podemos copiar directamente una tabla a otra, siempre que las dos tengan los mismos campos y cada campo este configurado igual (esto quiere deci, el mismo tipo de dato, mismo nombre, etc...) Se suele utilizar si queremos recuperar los registros de una antigua tabla.
INSERT INTO clientes SELECT * FROM clientes_old

  • Si queremos insertar registros de una tabla a otra, lo podemos realizar por medio de una consulta (SELECT).

INSERT INTO productos (ID_Producto, Nombre_Producto, Precio_Producto)
SELECT ID_Producto, Nombre_Producto, Precio_Producto FROM Productos_Clientes_OLD


Modificar datos

Las bases de datos se suelen modificar: Tablas, campos, registros, etc... Siempre estan en crecimineto ( o deverian).
Para modificar un registro o valore de una tabla existen varias maneras:

  • Si queremos modificar todos los registros de una tabla:
UPDATE cliente SET dirección=’Ninguna’
  • Si queremos modificar un registro o unos registros especificos utilizaremos una consulta SELECT
UPDATE CUSTOMER SET direccion=’Ninguna’ select nombre='mikel'

  • Las consultas se pueden retorcer todo lo que nosotros queramos, para modificar un registro de una tabla:

UPDATE cliente

 SET nombre=(SELECT tipo_cliente_id FROM tipo_cliente WHERE NAME='Vip')
  WHERE DNI IN (SELECT cliente FROM pedidos WHERE pedidos_total > 50)
(Aqui se modifica la trabla cliente. Dentro de esta tabla se modificara el valor del campo nombre a VIP en cuanto este cliente tenga unos pedidos superiores a 50)

Consultar datos

Las consultas muestran información de una base de datos. Se pueden combinar diferentes consultas y utilizar todo tipo de restricciones, ordenes, agrupamientos, relacionando tablas, etc..

  • La estructura de una consulta:
SELECT [campos] from [tabla]

Esta es la estructura de una consulta a una tabla. Dentro de una consulta a una tabla se pueden realizar diferentes acciones:
    • Si queremos mostrar todos los campos de la tabla, utilizaremos el *:
      • SELECT * FROM TABLA
    • Si queremos mostrar una o barias columnas de una tabla, separaremos las columnas por comas:
      • SELECT Columna1, Columna2 FROM TABLA
    • Podemos hacer que nos muestre otro nombre en vez del nombre de la columna
      • SELECT Columna1 as 'otro nombre' FROM TABLA
    • Podemos indicar a que tabla pertenece cada columna que queremos mostrar:
      • SELECT TABLA.Columna1, TABLA.Columna2 FROM TABLA
    • Podemos utilizar alias para referirnos a una tabla (esto se suele hacer cuando hacemos una consulta utilizando varias tablas y con nombres largos)
      • SELECT T.Columna1, T.Columna2 FROM TABLA T

Dentro de las consultas podemos utilizar restricciones:

  • DISTINTC o UNIQUE: Esta restricción muestra registros sin duplicados.
      • SELECT DISTINTC NOMBRE FROM CLIENTES
  • ORDER BY: Ordena el resultado de la consulta por las columnas que le indiquemos. Los ordenara según los indiquemos, primero ordenara la primera columna, luego la segunda...
      • SELECT * FROM CLIENTES ORDER BY nombre apellidos
  • DESC: Si al ORDER BY le añadimos un DESC, nos ordenara de manera descendente o de mayor a menor
      • SELECT * FROM CLIENTES ORDER by edad DESC
También podemos realizar operaciones dentro de una consulta para calcular en numero de registros que se repiten, máximos, mínimos, medias, etc...


  • COUNT que nos devuelve el número de registros.

      • SELECT COUNT(*) as 'Total Clientes' FROM clientes
  • SUM hace una suma de los valores de la columna que le pasemos. Podemos combinar la consulta con un Where.
      • SELECT SUM(pedidos) AS 'Total Pedidos' FROM PEDIDOS WHERE cliente_DNI='12345678B'
  • AVG nos da una valor medio de la columna indicada.
      • SELECT AVG(SUBTOTAL) AS `Total Pedidos Mes' FROM PEDIDOS WHERE fecha_pedido BETWEEN '01/11/13' AND '30/11/13';
  • MAX: nos devuelve el valor máximo
      • SELECT MAX(precio) FROM PRODUCTOS
  • MIN: nos devuelve el valor mínimo.
      • SELECT MIN(precio) FROM PRODUCTOS

Otra opción que podemos utilizar es agrupar los registros según el valor de una columna.
  • GROUP by: Agrupa los registros según la columna repetida.
      • SELECT SUM(Coste_pedido), pedido_ID FROM Pedidos GROUP BY pedido_ID
  • HAVING: Utilizando este condicional con el GROUP BY podemos agrupar los registros y condicionar la agrupación.
      • SELECT SUM(Coste_pedido) , pedido_ID FROM Pedidos GROUP BY pedido_ID HAVING SUM(Coste_pedido) > 50


También están los criterios de selección:



Los criterios de selección nos permiten filtrar los registros de la consulta realizada. Para realizar este tipo de filtrados se usa la clausula WHERE.


      • Select * from clientes WHERE clientes.nombre="Mikel";


Tipos de criterios


  • Comparativas: Los criterios de comparación nos permiten comparar o filtrar un conjunto de registros con un valor que nosotros le indiquemos a la consulta. Existen varios operadores de comparación:


Operador
Significado
Ejemplo
=
Igual a
WHERE nombre= ‘Abilio’
<> , !=
Distinto de
WHERE ID <> 5
>
Mayor que
WHERE total_compra> 500
<
Menor que
WHERE precio< 100
>=
Mayor o igual que
WHERE precio>= 42
<=
Menor o igual que
WHERE precio<= 0







  • Logicos: Si queremos realizar dos operaciones comparativas tendremos que utilizar estos operadores:


Operador
Significado
Ejemplo
AND
Y, todo verdadero
WHERE nombre = ‘Abilio’ AND ID=2
OR
O, alguno verdadero
WHERE nombre =’Abilio’ OR NAME=’Pablo’
NOT
No es verdadero
WHERE NOT (NAME = ‘Abilio’ AND ID=2)


  • IN: Este operador nos permite concatenar el operador OR. Esto quiere decir que si tenemos que utilizar varias veces el operador OR lo podemos agrupar con el operador IN
      • Select * from pedidos where precios IN (40,35,30)
También puede unir varios filtrados dentro de una consulta.
      • Select * from pedidos where precios in (select precios from compras where pedio_compra = 400)
Este operador se puede combinar con el operador NOT para filtrar los que no correspondan.
  • Cadenas: Si queremos realizar operaciones comparativas entre cadenas podemos utilizar el operador LIKE. La diferencia de este operador es poder utilizar dentro de la operación caracteres comodín.
    • %: Este comodín indica una cadena de uno o mas caracteres.
    • _: Este comodín corresponde a un carácter (puede ser cualquiera)
    • Ejemplos:
      • '%M__': Nos indica que: Existe una cadena, se guido de una 'M' y termina con dos caracteres.
      • '%M%': En medio de la cadena existe una 'M'
      • 'M%': La cadena empieza por una 'M'
  • NULL: Puede que existan columnas que no sea necesario introducir un valor y que la celda tenga valor nulo. Para encontrar estos valores podemos utilizar el operador NULL. Este operador podra encontrar valores nulos dentro de un registro.
      • Select * from pedido whre descripcion is null
      • Select * from pedido whre descripcion is not null
      • El primero filtra los registros cuya descripción sea nula y el segundo cuya descripción tenga algún valor.
  • BEETWEN: Este operador nos permite comparar valores entre dos valores.
      • select * from pedido where precio BEETWEN 40 and 200
  • EXIST:
  • ROWNUM: Este condicional nos permite filtrar sólo los primeros X registros (donde X es el numero de registros que nosotros le indiquemos a ROWNUM)
      • select * from pedido where rownum = 4

  • INNER JOIN: Nos permite unir tablas por columnas que tienen los mismos valores. Esto nos permite hacer filtrados entre diferentes tablas.
      • select * from pedido
      • inner join producto
      • on pedido.producto_ID=producto.producto_ID
      • where producto.origen='UK'
      • Esta consulta muestra los pedidos cuyos productos tengan su origen en UK


  • LEFT OTHER JOIN: Es igual que el INNER JOIN pero filtrando los que no se encuentran en la tabla relacionada. Realiza la operacion inversa al INNER JOIN


      • select * from pedido
      • left other join producto
      • on pedido.producto_ID=producto.producto_ID
      • where producto.origen='UK'
      • Esta consulta muestra los pedidos cuyos productos no tengan su origen en UK


Eliminar registros o tablas

Para poder eliminar registros o tablas utilizaremos DROP o DELETE

Si queremos eliminiar una tabla entra (Datos, camposy tabla TODO)

      • DROP TABLE CLIENTES

Si queremos eliminiar todos los datos de una tabla

      • DELETE FROM CLINETES -- Eliminamos los datos de la tabla clientes

Si queremos eliminar un registro concreto de una tabla

      • DELETE FROM CLIENTES WHERE DNI="12345678A"; -- Elimina el registro con DNI=

Si queremos eliminar una columna o campo de una tabla

      • ALTER TABLE CLIENTE --Alteramos la tabla cliente para
      • DROP COLUMN NOMBRE -- Eliminar la columna NOMBRE