martes 17 de febrero de 2009

Índices

Indices

Como se crean los índices?

Automáticamente: un índice único es creado automáticamente cuando se define una restricción primary key o unique en la definición de una tabla.

Manualmente: los usuarios pueden crear índices no únicos sobre columnas para acelerar el tiempo de acceso a las filas.

Crear indices sobre una o más columnas

CREATE INDEX emp_ename_idx
ON emp(ename);

Guía para la creación de un índice:
La columna es usada frecuentemente en una cláusula WHERE o en una condición JOIN.
La columna tiene un rango muy amplio de valores.
La columna contiene un gran número de valores nulos.
Dos o más columnas son usadas juntas con frecuencia en una cláusula WHERE o en una condición join.
La tabla es grande y se espera que la mayoría de las consultas recuperen menos del 2 al 4 % de las filas.

Verificación de índices:

SELECT ic.index_name, ic.column_name, ic.column_position col_pos, ix.uniqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = “EMP”;

Eliminación de un índice;

DROP INDEX emp_ename_idx;

Sequence

Create sequence

Defina una secuencia para generar números secuenciales automáticamente

CREATE SEQUENCE dept_deptno
Increment by 1
Start with 91
Maxvalue 100
Nocache
Nocycle;

Sequence es el nombre del generador de secuencia

Increment by n especifica el intervalo entre los números de la secuencia donde n es un entero. Si la cláusula es omitida, la secuencia se incrementará en 1.

Start with n especifica el valor máximo que la secuencia puede generar.

Maxvalue n especifica el valor máximo que la secuencia puede generar

Nomaxvalue especifica un valor máximo de 10^27 para una secuencia ascendente y -1 para una secuencia descendente .esta es la opción por defecto

Minvalue n especifica el valor mínimo de la secuencia.

Nominvalue especifica un valor mínimo de 1 para una secuencia ascendente y para una secuencia descendente. Esta es la opción por defecto

Cycle | nocycle especifica que la secuencia continua generando valores después de haber alcanzado su valor máximo o su valor mínimo, o bien no genera valore adicionales. La opción por defecto es NOCYCLE

Cache n | nocache especifica cuantos valores serán preasignados y mantenidos en la memoria del servidor oracle. Poro defecto, esta cantidad será igual a 20 valores.


Verificación de secuencias

SELECT sequence_name, min_value, max_value, increment_by, last_number
From user_sequences;

Modificación de una secuencia

Alter sequence dept_deptno
Increment by 1
Maxvalue 90
Nocache
Nocycle;

Eliminación de una secuencia:

Drop sequence dept_depto;

Nextval retorna el próximo valor disponible de la secuencia. Devuelve un valor único cada vez que es referenciada, aún por diferentes usuarios.

Ejemplo:

Insertar un nuevo departamento llamado “MARKETING” en san diego.

INSERT INTO dept(deptno, dname, loc)
VALUES (dept_deptno.NEXTVAL, ‘MARKETING’, ‘SAN DIEGO’);

check y constraints

CHECK

Comprueba que se cumpla una condición determinada al rellenar esa columna. Esta condición sólo debe estar construida con columnas de esta misma tabla.

CONSTRAINT emp_deptno_ck
CHECK (DEPTNO BETWEEN 10 AND 99), ….

Eliminación de una constraint:

Alter table emp
Drop constraint nombre de la constriaint;

Otro ejemplo:

ALTER TABLE Dept
DROP PRIMARY KEY CASCADE;

Desactivar constraints:

Utilice la opción CASCADE para desactivar constraints dependientes.

Alter table emp
Disable constraint emp_empno_pk CASCADE;

Activar constraints:

Alter table emp
Enable constraint emp_empno_pk;

jueves 22 de mayo de 2008

Comandos INSTR, UPPER, ROUND, etc...

Todas las palabras en minuscula.


LOWER (columna/expre)


SELECT LOWER (apellido)

From actores;



Todas las palabras en mayuscula


UPPER (columna/expre)


SELECT nombre, apellido

From actors

Where nombre=upper (‘brando’);



Primera letra de cada palabra en mayuscula


Initcap (columna/expre)


Select initcap (nombre)

From actores;



Junta dos cadenas de caracteres


CONCAT


Select concat (ename,job)

From emp;



Substrate unos caracteres de la cadena de caracteres.


SUBSTR:


SELECT SUBSTR (ename,2,3)

From emp:



Cuenta los caracteres


LENGTH


Select length (ename)

From emp;



Devuelve la posicion de la letra en numeros


INSTR


SELECT job,instr (job,’E’)

From emp;



Da el resto de la division


MOD


SELECT ename, job, mod (sal, 2)

FROM emp;



Devuelve la diferencia de meses


SELECT empno, hiredate, sysdate, months_between (sysdate, hiredate) resultado

FROM emp;



Añade meses


SELECT empno, hiredate, ADD_MONTHS (hiredate, 8) FECHA_NUEVA

From emp;



Ultimo dia del mes


SELECT ename, hiredate, last_day (hiredate)

FROM emp;


Muestra el siguiente dia


SELECT ename, hiredate,

next_day (hiredate, 'MARTES')

FROM emp;



Redondea al año.


SELECT hiredate,

ROUND (hiredate, 'year')

from emp;



select empno, to_char (hiredate, 'MON')

FROM emp;


SELECT ename, hiredate

FROM emp

WHERE hiredate=to_date ('Febrero 22, 1981','Month dd, YYYY');


Convierte valores de fecha a numeros y numeros a fechas.

SELECT empno FROM emp

WHERE empno=TO_NUMBER(7839);


TO_NUMBER

TO_DATE



Es como un if, una condición, el else sería la o.

DECODE


SELECT job, sal, DECODE (job, ‘ANALYST’, ‘sal*1.1, ‘CLERK’ , SAL*1.16)

FROM emp;



ANIDAMIENTO DE FUNCIONES

SELECT ename, NVL (TO_CHAR (mgr), ‘No Manager’)

FROM emp

WHERE mgr IS NULL;


LPAD: Rellena La cadena por la derecha con el carácter ‘string’ hasta un total de n posiciones.


Justifica a la derecha el valor del carácter


LPAD(sal,10,*)


******5000


ROUND: Redondea la columna, expresión o valor a n posiciones decimales, si se omite n, no se redondea con lugares decimales, si n es negativo, los números a la izquierda del punto decimal se redondean.


La función ROUND redondea la columna, expresión o valor a n lugares decimales, si el segundo argumento es 0 o falta, el valor se redondea a cero lugares decimales. Si el segundo argumento es 2, el valor se redondea a dos lugares decimales. Si el segundo argumento es 2, el valor se redondea a dos lugares decimales a la izquierda.


La función ROUND también puede utilizarse con funciones de fecha.


Select ROUND (45.923,2

), ROUND (45.923,0), ROUND (45.923,-1)

FROM SYS.DUAL;


Redondea el valor que hay antes de la coma, y lo de después de la coma, es el numero de posiciones que movemos la coma, redondea para arriba o para abajo, según el valor.

lunes 12 de mayo de 2008

Operadores aritmeticos, valor null, alias, concateniacion y desc.

Uso de operadores aritméticos

En una columna podemos usar una operación y que en la columna salga el resultado, con un ejemplo se ve muy claro.

SELECT sal, sal + 300
FROM emp;

el resultado que nos dará sera en resumen lo siguiente:

SAL .........SAL + 300
-----------------------
5000 ........5300
2850 .........3150
...

Lo mismo con el resto de operadores aritméticos, solo tenemos que tener en cuenta que la multiplicación y la división tienen prioridad sobre la suma y la resta, los operadores de la misma prioridad se evalúan de izquierda a derecha, y los paréntesis pueden ser usados para cambiar la prioridad de evaluación y para clarificar las sentencias.


El valor NULL

Este es un valor inaccesible, sin valor, desconocido.
NULL no es lo mismo que cero o espacio en blanco, es un valor vacío.

Lo que quiere decir que cualquier operación que se haga con un valor NULL devolverá NULL.


El uso de Alias.

Podemos renombrar el nombre de alguna columna asignándoles un alias.

Se utiliza con el comando AS después del nombre de la columna y a continuación el alias, si hacemos pruebas podemos ver que si a continuación no usamos el AS también surge efecto.

SELECT ename AS name, sal salary
FROM emp;

quedaría así:

name salary
-------------------------------
...
...


La concatenación

Esta representada por dos barras verticales ||
Concatena columnas o cadenas de caracteres con otras columnas.
Crea una columna resultado que es una expresión de tipo carácter.

Por ejemplo:

SELECT ename || job AS "Employee"
FROM emp;

Employee
-------------------------
KINGPRESIDENT
BLAKEMANAGER
CLARKMANAGER

teniendo en cuenta que ename es KING y su job es PRESIDENT podemos ver como se juntan, como se concatenan.

También podemos usarlo de otra forma, insertando texto entre ellos, por ejemplo

SELECT ename || ' trabaja de ' || job
FROM emp;

ENAME JOB
-------------------------
KING trabaja de PRESIDENT
BLAKE trabaja de MANAGER
CLARK trabaja de MANAGER


Para acabar con este apartado, veremos como visualizar una especie de descripción de cualquier tabla que tengamos en nuestro SQL, se utiliza el comando DESC nombredelatabla pongamos un ejemplo:

DESC dept

y saldrá la descripción de la tabla desc, no hace falta cerrarlo con punto y coma.

domingo 11 de mayo de 2008

Primeros pasos, select, distinct, from

Empezaremos con lo más basico en SQL y poco a poco iremos avanzando a niveles superiores, recuerdo que es para empezar de cero, no hace falta tener ningun tipo de conocimiento en SQL.

Para trabajar con los mismos ejemplos tenemos que insertar en nuestro SQL las siguientes tablas, muy sencillo... copiamos y pegamos las siguientes tablas:


create table emp
(EMPNO NUMBER(4) not null,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) not null);

create table dept
(DEPTNO NUMBER(2) not null,
DNAME VARCHAR2(14),
LOC VARCHAR2(13));

create table salgrade
(GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER);

INSERT INTO emp
VALUES (7839, 'KING', 'PRESIDENT', NULL, '17-NOV-1981', 5000, NULL, 10);
INSERT INTO emp
VALUES (7698, 'BLAKE', 'MANAGER', 7839, '01-MAY-1981', 2850, NULL, 30);
INSERT INTO emp
VALUES (7782, 'CLARK', 'MANAGER', 7839, '09-JUN-1981', 1500, NULL, 10);
INSERT INTO emp
VALUES (7566, 'JONES', 'MANAGER', 7839, '02-ABR-1981', 2975, NULL, 20);
INSERT INTO emp
VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '28-SEP-1981', 1250, 1400, 30);
INSERT INTO emp
VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '20-FEB-1981', 1600, 300, 30);
INSERT INTO emp
VALUES (7844, 'TURNER', 'SALESMAN', 7698, '08-SEP-1981', 1500, 0, 30);
INSERT INTO emp
VALUES (7900, 'JAMES', 'CLERK', 7698, '03-DIC-1981', 950, NULL, 30);
INSERT INTO emp
VALUES (7521, 'WARD', 'SALESMAN', 7698, '22-FEB-1981', 1250, 500, 30);
INSERT INTO emp
VALUES (7902, 'FORD', 'ANALYST', 7566, '03-DIC-1981', 3000, NULL, 20);
INSERT INTO emp
VALUES (7369, 'SMITH', 'CLERK', 7902, '17-DIC-1980', 800, NULL, 20);
INSERT INTO emp
VALUES (7788, 'SCOTT', 'ANALYST', 7566, '09-DIC-1982', 3000, NULL, 20);
INSERT INTO emp
VALUES (7876, 'ADAMS', 'CLERK', 7788, '12-ENE-1983', 1100, NULL, 20);
INSERT INTO emp
VALUES (7934, 'MILLER', 'CLERK', 7782, '23-ENE-1982', 1300, NULL, 10);

INSERT INTO dept
VALUES (10, 'ACCOUNTING','NEW YORK');
INSERT INTO dept
VALUES (20, 'RESEARCH','DALLAS');
INSERT INTO dept
VALUES (30, 'SALES','CHICAGO');
INSERT INTO dept
VALUES (40, 'OPERATIONS','BOSTON');

INSERT INTO salgrade
VALUES (1, 700, 1200);
INSERT INTO salgrade
VALUES (2, 1201, 1400);
INSERT INTO salgrade
VALUES (3, 1401, 2000);
INSERT INTO salgrade
VALUES (4, 2001, 3000);
INSERT INTO salgrade

VALUES (5, 3001, 9999);



Empezaremos con lo más basico en SQL y poco a poco iremos avanzando a niveles superiores, recuerdo que es para empezar de cero, no hace falta tener ningun tipo de conocimiento en SQL.

La sentencia SELECT

Una sentencia SELECT recupera información de la base de datos.

Ejemplo, cojemos los salarios (sal) de la tabla emp:

SELECT sal
FROM emp;


SELECT identifica qué columnas
FROM identifica qué tablas.

En resumen, seleccionamos la columna con el SELECT, y con el FROM indicamos donde esta esa columna, en este caso, el nombre de la tabla es emp.

Para finalizar y que se ejecute tenemos que insertar al final punto y coma, para indicar a SQL que hemos acabado.

Con un DISTINCT haremos que omita los resultados repetidos

Ejemplo:

SELECT DISTINCT sal
FROM emp;

Seleccionara los salarios sin repetir ninguno, de la tabla emp, y finalizamos con un punto y coma.


REGLAS DE LAS SENTECIAS SQL:

  • Los comandos no son case sensitive, es decir, da igual si escribimos minusculas o manyusculas, pero escribiré los comandos en mayusculas para que se vea más claro.
  • Los comandos pueden estar en una o varias lineas.
  • Las palabras clave no se pueden abreviar o dividir.
  • Las clausulas normalmente se escriben en distintas lineas.

Para practicar se pueden hacer los siguientes ejemplos con nuestras tablas escritas arriba:

SELECT *
FROM dept;

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

SELECT deptno, loc
FROM dept;

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

SELECT DISTINCT deptno, loc
FROM dept;

Instalar SQL

Para descargarnos oracle data base entramos en:

http://www.oracle.com/technology/software/products/database/index.html

Aceptamos la licencia y descargamos.

Una vez instalado entramos en:

Ejecutar Linea de Comandos SQL, y introducimos el comando " conn system " para entrar en modo SQL, introducimos la contraseña que nos ha pedido en la instalación y acabamos.