SQL Comandos Basicos
SQL Comandos Basicos
SQL es un lenguaje de consulta para los sistemas de bases de datos relacinales, pero que no
posee la potencia de los lenguajes de programacin. No permite el uso de variables, estructuras de
control de flujo, bucles ... y dems elementos caracteristicos de la programacin. No es de
extraar, SQL es un lenguaje de consulta, no un lenguaje de programacin.
Sin embargo, SQL es la herramienta ideal para trabajar con bases de datos. Cuando se desea
realizar una aplicacin completa para el manejo de una base de datos relacional, resulta necesario
utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los
lenguajes de programacin tradicionales. PL/SQL es el lenguaje de programacin que proporciona
Oracle para extender el SQL estndar con otro tipo de instrucciones y elementos propios de los
lenguajes de programacin .
Con PL/SQL vamos a poder programar las unidades de programa de la base de datos ORACLE,
estn son:
Procedimientos almacenados
Funciones
Triggers
Scripts
Pero adems PL/SQL nos permite realizar programas sobre las siguientes herramientas de
ORACLE:
Oracle
Oracle
Oracle
Oracle
Forms
Reports
Graphics
Aplication Server
Operadores Logicos
Operadores Relacionales
IDENTIFICADOR: Son empleados para nombrar objetos de programas en PL/SQL asi como a
unidades dentro del mismo, estas unidades y objetos incluyen:
Constantes
Cursores
Variables
Subprogramas
Excepciones
Paquetes
LITERAL: Es un valor de tipo numrico, caracter, cadena o lgico no representado por un
identificador (es un valor explcito).
COMENTARIO: Es una aclaracin que el programador incluye en el cdigo. Son soportados 2
estilos de comentarios, el de lnea simple y de multilnea, para lo cual son empleados ciertos
caracters especiales como son:
-- Linea simple
/*
Conjunto de Lineas
*/
La sentencia SELECT
La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de
datos.
El formato de la sentencia select es:
FROM <nombre_tabla>|<nombre_vista>
[{,<nombre_tabla>|<nombre_vista>}]
[WHERE <condicion> [{ AND|OR <condicion>}]]
[GROUP BY <nombre_campo> [{,<nombre_campo >}]]
[HAVING <condicion>[{ AND|OR <condicion>}]]
[ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC]
[{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]
Veamos por partes que quiere decir cada una de las partes que conforman la sentecia.
Significado
SELECT
ALL
Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de
seleccin.
Indica que queremos seleccionar todos los valores.Es el valor por defecto y no suele
especificarse casi nunca.
FROM
Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que
exista ms de una tabla se denomina a la consulta "consulta combinada" o "join". En las
consultas combinadas es necesario aplicar una condicin de combinacin a travs de
una clusula WHERE.
WHERE
Especifica una condicin que debe cumplirse para que los datos sean devueltos por la
consulta. Admite los operadores lgicos AND y OR.
GROUP BY
HAVING
Especifica una condicin que debe cumplirse para los datosEspecifica una condicin que
debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es
similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta.
Debe aplicarse siempre junto a GROUP BY y la condicion debe estar referida a los
campos contenidos en ella.
Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse
ORDER BY conASC (orden ascendente) y DESC (orden descendente). El valor predeterminado
es ASC.
Para formular una consulta a la tabla tCoches (creada en el captulo de tablas) y recuperar los
campos matricula, marca, modelo, color, numero_kilometros, num_plazas debemos ejecutar la
siguiente consulta. Los datos seran devueltos ordenados por marca y por modelo en orden
ascendente, de menor a mayor.
SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
ORDER BY marca,modelo;
La palabra clave FROM indica que los datos sern recuperados de la tabla tCoches. Podriamos
haber especificado mas de una tabla, pero esto se ver en el apartado de consultas combinadas.
Tambien podramos haber simplicado la consulta a travs del uso del comodin de campos, el
asterisco "*".
SELECT *
FROM tCoches
ORDER BY marca,modelo;
El uso del asterisco indica que queremos que la consulta devuelva todos los campos que existen
en la tabla.
La clusula WHERE
La clusula WHERE es la instruccin que nos permite filtrar el resultado de una
sentencia SELECT. Habitualmente no deseamos obtener toda la informacin existente en la tabla,
sino que queremos obtener slo la informacin que nos resulte util es ese momento. La
clusula WHERE filtra los datos antes de ser devueltos por la consulta.
En nuestro ejemplo, si queremos consultar un coche en concreto debemos agregar una
clusula WHERE. Esta clusula especifica una o varias condiciones que deben cumplirse para que
la sentencia SELECT devuelva los datos. Por ejemplo, para que la consulta devuelva slo los datos
del coche con maricula M-1525-ZA debemos ejecutar la siguiente sentencia:
SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
WHERE matricula = 'M-1525-ZA';
Cuando en una clusula where queremos incluir un tipo texto, debemos incluir el
valor entre comillas simples.
Adems, podemos utilizar tantas condiciones como queramos, utilizando los operadores
lgicos AND y OR . El siguiente ejemplo muestra una consulta que devolver los coches cuyas
matriculas sean M-1525-ZA o bien M-2566-AA.
SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
WHERE matricula = 'M-1525-ZA'
OR matricula = 'M-2566-AA' ;
Adems una condicin WHERE puede ser negada a travs del operador lgico NOT. La siguiente
consulta devolver todos los datos de la tabla tCohes menos el que tenga matricula M-1525-ZA.
SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
WHERE NOT matricula = 'M-1525-ZA' ;
Podemos tambien obtener las diferentes marcas y modelos de coches ejecutando la consulta.
La clusula ORDER BY
Como ya hemos visto en los ejemplos anteriores podemos especificar el orden en el que sern
devueltos los datos a travs de la clusula ORDER BY.
SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
ORDER BY marca ASC,modelo DESC;
Como podemos ver en el ejemplo podemos especificar la ordenacin ascendente o descendente
a travs de las palabras clave ASCy DESC. La ordenacin depende del tipo de datos que este
definido en la columna, de forma que un campo nmerico ser ordenado como tal, y un
alfanmerico se ordenar de la A a la Z, aunque su contenido sea nmerico. De esta forma el valor
100 se devuelve antes que el 11.
Tambin podemos especificar el en la clusula ORDER BY el ndice nmerico del campo dentro
del la sentencia SELECT para la ordenacin, el siguiente ejemplo ordenara los datos por el campo
marca, ya que aparece en segundo lugar dentro de la lista de campos que componen la SELECT.
SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
ORDER BY 2;
Insertar datos.
Hasta ahora hemos visto como se almacenan los datos en una base de datos y como consultar
esos datos almacenados, pero no hemos visto como almacenar dichos datos.
Para almacenar datos en una base de datos debemos insertar filas en las tablas. Para ellos SQL
pone a nuestra disposicin la sentencia INSERT.
[arriba]
Insercin de filas
El proceso de insercin de filas consiste en aadir a una tabla una o ms filas y en cada fila
todos o parte de sus campos.
Podemos distinguir dos formas de insertar filas:
Como se puede observar la sentencia tiene dos partes claramente diferenciadas, por un lado la
propia INSERT INTO seguida de la lista de campos en los que queremos insertar los datos, y por
otro la lista de valores que queremos insertar en los campos. La mejor forma de ver esto es a
travs de un ejemplo.
('M1111CA',
'RENAULT',
'MEGANE TR100',
'NEGRO DIAMANTE');
[arriba]
Para poder utilizar la insercin multiple de filas se deben cumplir las siguientes normas:
La lista de campos de las sentencias insert y select deben coincidir en nmero y tipo de datos.
Ninguna de las filas devueltas por la consulta debe infringir las reglas de integridad de la tabla en la
que vayamos a realizar la insercin.
Pongamos un ejemplo, vamos a crear una tabla con las diferentes marcas que tenemos en la base
de datos. La sentencia SQL para crear la tabla es la siguiente:
Una vez que tenemos creada la tabla de marcas vamos a insetar otro par de registros en la tabla
de coches, para ello utilizamos una sentencia insert into para una nica fila.
Ahora tenemos tres marcas diferentes en la tabla tCoches, y queremos insertarlas en la tabla de
marcas, para ello podemos realizar tres inserciones individuales, pero que pasaria si no
supieramos de antemano el nmero de marcas?y si fueran unas cincuenta marcas?. Nos
podriamos pasar el da entero escribiendo sentencias insert into.
Afortunadamente podemos realizar una insercin multiple del siguiente modo:
Como resultado obtenemos un registro en la tabla tMarcas por cada marca de la tabla tCoches.
El campo codigo se ha generado automticamente ya que est definido como identidad.
CODIGO
MARCA
1 FORD
2 RENAULT
3
SEAT
Demonos cuenta de que el orden de generacin no ha sido el mismo que el de insercin, sino
que se ha aplicado el orden en el que han sido devueltos los datos por la sentencia SELECT.
Borrado de datos.
La sentencia DELETE.
Para borrar datos de una tabla, debemos utilizar la sentencia DELETE.
La sintaxis de la sentencia DELETE es la siguiente:
Cuando trabajemos con la sentencia DELETE debemos tener en cuenta las siguientes
consideraciones:
La sentencia TRUNCATE
Para realizar un borrado completo de tabla debemos considerar la posibilidad de utilizar la
sentencia TRUNCATE, mucho ms rpida que DELETE.
La sintaxis de la sentencia TRUNCATE es la siguiente:
Cuando trabajemos con la sentencia TRUNCATE debemos tener en cuenta las siguientes
consideraciones.
CHAR (Caracter): Almacena datos de tipo caracter con una longitud maxima de 32767 y cuyo valor
de longitud por default es 1
-- CHAR [(longitud_maxima)]
nombre CHAR(20);
VARCHAR2 (Caracter de longitud variable): Almacena datos de tipo caracter empleando slo la
cantidad necesaria an cuando la longitud mxima sea mayor.
-- VARCHAR2 (longitud_maxima)
nombre VARCHAR2(20);
/* Indica que puede almacenar valores alfanumricos de hasta
20
posicones */
/* Cuando la longitud de los datos sea menor de 20 no se
rellena con blancos */
hay_error BOOLEAN;
DATE (Fecha): Almacena datos de tipo fecha. Las fechas se almacenan internamente como datos
numricos, por lo que es posible realizar operaciones aritmeticas con ellas.
Atributos de tipo. Un atributo de tipo PL/SQL es un modificador que puede ser usado para obtener
informacin de un objeto de la base de datos. El atributo %TYPE permite conocer el tipo de una
variable, constante o campo de la base de datos. El atributo%ROWTYPE permite obtener los tipos
de todos los campos de una tabla de la base de datos, de una vista o de un cursor.
PL/SQL tambin permite la creacin de tipos personalizados (registros) y colecciones(tablas de
PL/SQL), que veremos en sus apartados correspondientes.
Existen por supuesto ms tipos de datos, la siguiente tabla los muestra:
Tipo de dato
/ Sintxis
Oracle 8i
Oracle 9i
Descripcin
Donde p es la precisin y e la escala.
dec(p, e)
La precisin mxima es
de 38 dgitos.
La precisin mxima es
de 38 dgitos.
decimal(p, e)
La precisin mxima es
de 38 dgitos.
La precisin mxima es
de 38 dgitos.
La precisin mxima es
de 38 dgitos.
La precisin mxima es
de 38 dgitos.
La precisin mxima es
de 38 dgitos.
La precisin mxima es
de 38 dgitos.
Hasta 2 gigabytes.
Hasta 2 gigabytes.
long raw
Hasta 2 gigabytes.
Hasta 2 gigabytes.
date
fractional seconds
precision debe ser un
nmero entre 0 y 9. (El
valor por defecto es 6)
fractional seconds
number(p, e)
real
smallint
char (tamao)
varchar2
(tamao)
long
raw
timestamp
(fractional
seconds
precision)
timestamp
(fractional
seconds
precision)
8i.
with time
zone
timestamp
(fractional
seconds
precision)
interval day
(day
precision) to
second
(fractional
with local
time zone
interval year
(year
precision) to
month
fractional seconds
precision debe ser un
nmero entre 0 y 9. (El
valor por defecto es 6)
month
seconds
precision)
fractional seconds
precision debe ser
un nmero entre 0 y
9. (El valor por
defecto es 6)
BBBBBBB.RRRR.FFFFF
donde BBBBBBB es el
bloque en el fichero
de la base de datos;
RRRR es la fila del
bloque; FFFFF es el
fichero de la base de
datos.
BBBBBBB.RRRR.FFFFF
donde BBBBBBB es el Datos binarios de ancho fijo. Cada
bloque en el fichero
registro de la base de datos tiene una
direccin fsica o rowid.
de la base de datos;
RRRR es la fila del
bloque; FFFFF es el
fichero de la base de
datos.
urowid
[tamao]
boolean
nchar
(tamao)
nvarchar2
(tamao)
bfile
Hasta 4 gigabytes.
Hasta 4 gigabytes.
rowid
blob
Hasta 4 gigabytes.
Hasta 4 gigabytes.
clob
Hasta 4 gigabytes.
Hasta 4 gigabytes.
nclob
Hasta 4 gigabytes.
Hasta 4 gigabytes.
http://www.devjoker.com/gru/tutorial-PL-SQL/PLSQ/Tutorial-PL-SQL.aspx
http://deletesql.com/viewforum.php?sid=de7e79ec1569f02b49720b6d9164cbbd
Or = o
a or b
Cierto si a o b son ciertas
Obtenemos los datos de los jugadores cuyos apellidos empiecen con una "S":
SELECT APELLIDO
FROM JUGADORES
WHERE APELLIDO LIKE 'S%';
SELECT APELLIDO
FROM JUGADORES
WHERE APELLIDO LIKE '_R*';
Obtenemos aquellos apellidos que empiezan por "A" y tiene una "o" en su interior:
SELECT APELLIDO
FROM JUGADORES
WHERE APELLDIOS LIKE 'A%O%';
SELECT APELLIDOS
FROM JUGADORES
WHERE JUGADOR_NUM IN (10, 20);
Selecciona los apellidos de los jugadores donde el nmero de jugador (Jugador_num) sea (In) o 10
o 20
SELECT APELLIDOS
FROM JUGADORES
WHERE SALARIO NOT BETWEEN 15000000 AND 20000000;
Selecciona los apellidos de los jugadores donde el salario de estos no este entre (Not Between)
15000000 y 20000000.