You are on page 1of 20

Lenguaje SQL

1. Introduccin al lenguaje SQL y la herramienta SQL*PLUS


I. Qu es SQL? SQL (Structured Query Language, es decir, Lenguaje de consulta estructurado) es un lenguaje de comunicacin con una base de datos diseado para recuperar y gestionar los datos en sistemas de bases de datos relacionales (RDBMS), adems de permitir crear y modificar elementos y objetos de una base de datos, as como establecer un sistema de control de acceso. Es un lenguaje ANSI, es decir standard, pero la mayora de fabricantes incluyen extensiones y funciones para gestionar sus sistemas de bases de datos.

II. Elementos de SQL

SQL se compone de varios elementos: Sentencias - Seleccionan o modifican datos u objetos del esquema, controlan el flujo de los programas, etc. Consultas - Recuperan datos en funcin de unos criterios. Expresiones - Generan valores escalares. Predicados - Especifican las condiciones que sern evaluadas. Clusulas - Componen las sentencias. Opcionales en algunos casos. Punto y coma: No es requerido en todos los RDBMS pero es el estndar para indicar fin de la sentencia.

III.Sentencias SQL

SELECT - Recupera informacin de la base de datos. DML (Lenguaje de manipulacin de datos) INSERT - Inserta nuevos registros en la base de datos. UPDATE - Actualiza registros ya existentes. DELETE - Borra registros. MERGE - Realiza una combinacin de datos segn unas condiciones DDL (Lenguaje de definicin de datos) CREATE - Crea estructuras de datos (tablas, vistas, etc). ALTER - Modifica estructuras de datos DROP - Borra estructuras de datos. RENAME - Renombra estructuras de datos. TRUNCATE - Sirve para vaciar tablas.

Control de Transacciones COMMIT - Confirma las operaciones DML. ROLLBACK - Invalida las operaciones DML SAVEPOINT - Introduce un punto de guardado para realizar COMMIT y ROLLBACK localizados. DCL (Lenguaje de control de datos) GRANT - Otorga permisos a usuarios. REVOKE - Quita permisos de los usuarios. IV.SQL*PLUS SQL*Plus es el cliente bsico de acceso a una base de datos Oracle. Permite realizar consultas y sentencias SQL que sern ejecutadas por la base de datos en el servidor. Es posible ejecutar cualquier consulta o programa PL/SQL que el servidor de Oracle pueda entender.

V.iSQL*PLUS Es una versin que aparece a partir de la versin 9i de Oracle, es muy similar al SQL*Plus, pero no requiere instalacin en el cliente, sino que se ejecuta desde un navegador web. Es necesario que el servidor de la base de datos acepte peticiones para este programa, normalmente se accede a travs de la url http://ip-del-servidor:5560

2. Consultas SQL: Sentencia SELECT


La sentencia SELECT se utiliza para recuperar informacin de la base de datos, y puede proyectar las columnas seleccionadas, es decir, realizar un filtro sobre la tabla o tablas originales y recuperar solamente datos de las columnas filtradas. Tambin puede seleccionar, es decir, filtrar los registros segn varios criterios, o realizar uniones, que recopilan datos de diferentes tablas a travs de una relacin entre ellas.

Las clusulas SELECT, que especifica las columnas o expresiones que vamos a recuperar, y FROM , que indica la tabla de la que se recuperan, son obligatorias.

SELECT - Lista las columnas a recuperar. * - Selecciona todas las columnas DISTINCT - Elimina duplicados column | expression - selecciona la columna y/o expresin (pueden ser varias) que se van a recuperar alias - Indica la cabecera de cada una de las columnas o expresiones FROM - La tabla que contiene las columnas WHERE - Filtro de los registros a visualizar condition(s) - Lista de condiciones de filtro.

Las sentencias SQL no son sensibles a maysculas o minsculas pero se recomienda escribir las palabras clave en maysculas y el resto en minsculas.

I.Seleccionar las columnas de una tabla SELECT * FROM viajero;


ID_VIAJERO
1 2 3 4 5 6 7 8

NOMBRE
Alberto Sofia Juan Marcos Marta Lorena Alba Jose Lus

APELLIDOS
Gmez Martnez Lpez Fernndez Prez Hernndez lvarez Surez

DIRECCION
Calle de la Amapola 1 Calle de la Violeta 32 Calle de la Margarita 21 Calle de la Rosa 10 Calle de la Amapola 12 Calle de los Girasoles 12 Calle de la Violeta 22 Calle de la Margarita 1

TELEFONO
93000001 93000071 93000039 93000068 93000003 93000088 93000079 93000033

FECHA_ NACIMIENTO
01/01/50 01/08/75 31/03/89 31/08/77 09/03/85 25/08/80 20/10/82 30/05/58

Para seleccionar todas las columnas de una tabla se utiliza el * tras el SELECT. Otra forma de hacerlo, sera ennumerar todas las columnas, separadas por comas, de la tabla. SELECT id_viajero, nombre, apellidos, direccion, telefono, fecha_nacimiento FROM viajero; Para filtrar por columnas, tan solo hay que especificarlas separadas por comas. SELECT nombre, apellidos FROM viajero;
NOMBRE
Alberto Sofia Juan Marcos Marta Lorena Alba Jose Lus Damin Julin

APELLIDOS
Gmez Martnez Lpez Fernndez Prez Hernndez lvarez Surez Rodrguez Rodrguez

II.Expresiones aritmticas Sirven para realizar clculos sobre la informacin recuperada y mostrar los resultados de los mismos, se pueden usar los operadores aritmticos en cualquier clusula de una sentencia SQL, excepto en la clusula FROM. Los operadores aritmticos (ordenados por prioridad) son

* / + SELECT nombre, continente, num_habitantes, num_habitantes + 10000 FROM pais;


NOMBRE
Espaa Portugal Italia Francia Reino Unido Alemania Estados Unidos Canad Mjico Brasil

CONTINENTE
Europa Europa Europa Europa Europa Europa Amrica del Norte Amrica del Norte Amrica del Norte Amrica del Sur

NUM_HABITANTES
46080737 10605870 59337888 60876136 60609153 82210000 302791280 33187800 107449525 188078227

NUM_HABITAN TES+10000
46090737 10615870 59347888 60886136 60619153 82220000 302801280 33197800 107459525 188088227

Los operadores tienen prioridad y se debe utilizar parntesis para forzar operaciones que se realizaran de forma diferente segn su prioridad.

SELECT nombre, num_habitantes, 2 *num_habitantes + 1000000, 2*(num_habitantes + 1000000) FROM pais;

NOMBRE
Espaa Portugal Italia Francia Reino Unido Alemania Estados Unidos Canad Mjico Brasil

NUM_HA BITANTE S
46080737 10605870 59337888 60876136 60609153 82210000 302791280 33187800 107449525 188078227

2*NUM _HABITA NTES +1000000


93161474 22211740 119675776 122752272 122218306 165420000 606582560 67375600 215899050 377156454

2*(NUM_HABITANTES +1000000)
94161474 23211740 120675776 123752272 123218306 166420000 607582560 68375600 216899050 378156454

III.Valores nulos El valor nulo se representa con null e implica la ausencia de valor para una columna de una fila determinada. Es diferente del nmero 0 y del caracter espacio. SELECT nombre, habitantes, clima FROM lugar;
NOMBRE
Budapest Osaka Kyoto Tibet Shangai Rajastn Himalaya Bombay Casablanca Rabat 13691836 2949805 Tropical

HABITANTES
1696128 2629252 1464900 2740000 18403769

CLIM A

Subtropical

Operar valores nulos con expresiones aritmticas devolver valores nulos: SELECT nombre, habitantes + 100000, clima FROM lugar;

NOMBRE
Budapest Osaka Kyoto Tibet Shangai Rajastn Himalaya Bombay Casablanca Rabat

HABITANTES+100000
1796128 2729252 1564900 2840000 18503769

CLIM A

Subtropical

13791836 3049805

Tropical

IV.Alias de columna Los alias para las columnas sirven para renombrar la cabecera de una columna devuelta por una consulta SQL. Para utilizarlos, se sita el alias despus de la columna o expresin separado por un espacio, o se puede utilizar la palabra AS entre la columna y el alias. Si el nombre del alias contiene espacios, tiene caracteres especiales (#, $, ...), o es sensible a maysculas/minusculas se debe entrecomillar con comillas dobles (")

SELECT nombre AS "Nombre del Lugar", 2*(habitantes + 5000) "Nueva Poblacin" FROM lugar;
No mbr e Del Lugar
Budapest Osaka Kyoto Tibet Shangai Rajastn Himalaya Bombay Casablanca Rabat 27393672 5909610

N ueva Pobla cin


3402256 5268504 2939800 5490000 36817538

V.Operador de concatenacin El operador de concatenacin || sirve para unir columnas o expresiones entre s y mostrarlas como una sola. Es posible unir las columnas con cadenas de literales (entre comillas simples) para formar frases o literales. SELECT apellidos || ', ' || nombre AS "Nombre Completo", nombre || ' vive en ' || direccion || ' y naci el ' || fecha_nacimiento AS "Informacin" FROM viajero;

No mbr e Co mpleto
Gmez,Alberto Martnez,Sofia Lpez,Juan Fernndez,Marcos Prez,Marta Hernndez,Lorena lvarez,Alba Surez,Jose Lus Rodrguez,Damin Rodrguez,Julin

Informac in
Alberto vive en Calle de la Amapola 1 y naci el 01/01/50 Sofia vive en Calle de la Violeta 32 y naci el 01/08/75 Juan vive en Calle de la Margarita 21 y naci el 31/03/89 Marcos vive en Calle de la Rosa 10 y naci el 31/08/77 Marta vive en Calle de la Amapola 12 y naci el 09/03/85 Lorena vive en Calle de los Girasoles 12 y naci el 25/08/80 Alba vive en Calle de la Violeta 22 y naci el 20/10/82 Jose Lus vive en Calle de la Margarita 1 y naci el 30/05/58 Damin vive en Calle de los Tulipanes 10 y naci el 10/11/60 Julin vive en Calle de los Claveles 3 y naci el 01/12/58

VI. Uso de DISTINCT para eliminar duplicados En ocasiones, habr consultas que devuelvan filas duplicadas, utilizando la palabra clave DISTINCT, podemos eliminar estos duplicados del resultado de una sentencia SELECT. SELECT continente FROM pais;
CONTINENTE
Europa Europa Europa Europa Europa Europa Amrica del Norte Amrica del Norte Amrica del Norte Amrica del Sur

SELECT DISTINCT continente FROM pais;


CONTINENTE
Oceana frica Amrica del Norte Europa Amrica del Sur Asia

3. Restriccin de datos: Clusula WHERE


Para limitar los registros recuperados por una consulta SQL, se usa la clusula WHERE, justo despus de la clusula FROM, seguida de las condiciones de la comparacin. La clusula WHERE puede comparar valores de columnas, expresiones, funciones, listas de valores, constantes...

SELECT nombre, continente FROM pais WHERE continente = 'Europa';


NOMBRE
Espaa Portugal Italia Francia Reino Unido Alemania Rusia Repblica Checa Hungra

CONTINENTE
Europa Europa Europa Europa Europa Europa Europa Europa Europa

Las columnas que intervienen en la comparacin no tienen porque estar presentes en la clusula SELECT para poder ser filtradas por el WHERE. Las cadenas de texto deben estar entrecomilladas con comillas simples y son sensibles a maysculas / minsculas, sin embargo los nmeros se expresan sin comillas. Para las fechas, se debe tener en cuenta el formato por defecto, que suele depender del idioma de instalacin, puede ser DD/MM/YY y se deben expresar entre comillas simples.

Condiciones de Comparacin Las condiciones de comparacin se usan para comparar una columna o expresin con otra expresin o valor. WHERE expresin operador valor

Las condiciones de comparacin son las siguientes: Operador = > >= < <= <> BETWEEN ... AND ... IN (lista) Significado Igualdad Mayor que Mayor / Igual que Menor que Menor / Igual que Distinto Entre dos valores (ambos incluidos) La expresin est incluida en la lista de valores Igualdad usando comodines Valor nulo

LIKE IS NULL

SELECT nombre, habitantes FROM lugar WHERE habitantes <= 1000000;


NOMBRE
Vladivostok Szeged Jersey Manchester Cumbria San Francisco Nueva Orleans Boston Washington Oviedo

HABITANTES
586829 163173 87186 441200 496200 739426 454863 596638 582049 223617

Condicin BETWEEN Se utiliza para filtrar filas incluidas en un rango de valores definido por un lmite inferior y un lmite superior. SELECT nombre, habitantes FROM lugar WHERE habitantes BETWEEN 1000000 AND 2000000;
NOMBRE
Budapest Kyoto Volgograd Barcelona San Diego Valencia Miln Patagonia Crdoba Praga

HABITANTES
1696128 1464900 1012800 1595110 1255240 1738690 1308735 1738251 1315540 1188126

Condicin IN Se utiliza para comprobar si una columna o expresin est contenida en una lista determinada de valores. Esta condicin tambin se llama condicin de pertenencia. SELECT nombre, apellidos, fecha_nacimiento FROM viajero WHERE fecha_nacimiento IN ('01/01/50','25/08/80','31/03/89');
NOMBRE
Alberto Juan Lorena Carlos

APELLIDOS
Gmez Lpez Hernndez Vzquez

FECHA_NACIM IENTO
01/01/50 31/03/89 25/08/80 01/01/50

Se puede utilizar NOT IN para especificar que una columna o expresin no est en una lista determinada de valores.

Condicin LIKE Se utiliza para filtrar utilizando comodines de bsqueda en la cadena de comparacin. Se pueden utilizar estos comodines: % - Secuencia de 0 o ms caracteres. _ - Secuencia de un nico carcter. SELECT nombre, apellidos, fecha_nacimiento FROM viajero WHERE apellidos LIKE 'M%';
NOMBRE
Sofia Diana Isabel Mara Alejandra Mercedes

APELLIDOS
Martnez Menndez Mndez Muoz Martnez Martnez

FECHA_NACIM IENTO
01/08/75 10/11/79 25/08/85 22/10/80 30/06/64 05/06/77

Los smbolos % y _ se pueden combinar entre ellos y con cualquier otro carcter o cadena de caracteres. Si se necesita buscar exactamente los caracteres % y _, podemos utilizar la opcin ESCAPE, que define un carcter de escape SELECT nombre, apellidos, perfil_viajero FROM viajero WHERE perfil_viajero LIKE 'CLASE\_%' ESCAPE '\';
NOMBRE
Alberto Marcos Lorena Beatriz Margarita Carmen Susana Esteban Natalia Oriol

APELLIDOS
Gmez Fernndez Hernndez Gonzlez Snchez Ruiz Daz Jimnez Fernndez Prez

P ERF IL_V IAJERO


CLASE_TURISTA CLASE_TURISTA CLASE_TURISTA CLASE_TURISTA CLASE_TURISTA CLASE_TURISTA CLASE_PREMIER CLASE_BUSSINESS CLASE_TURISTA CLASE_TURISTA

Se puede usar NOT LIKE para especificar que una columna o expresin no coinciden con la cadena especificada. Condiciones NULL Para comprobar si un valor es NULL se utiliza la condicin IS NULL. Un valor nulo significa la ausencia del mismo, un valor indeterminado, no disponible o no asignado. Si se comparara con =, el resultado sera siempre NULL, ya que un valor nulo no es comparable con ningn otro, ni siquiera con otro nulo. SELECT nombre, clima FROM lugar WHERE clima IS NULL;
NOMBRE
Jersey Manchester Exeter Cumbria San Francisco Gran Can Maui Nueva Orleans Montaas Rocosas Boston

CLIM A

Para comprobar los valores no nulos, se utiliza IS NOT NULL.

Condiciones Lgicas Operador AND OR NOT Significado Devuelve TRUE si las dos condiciones son TRUE Devuelve TRUE si al menos una de las condiciones es TRUE Devuelve TRUE si la condicion es FALSE

SELECT nombre, clima, habitantes FROM lugar WHERE clima = 'Continental' AND habitantes IS NOT NULL;
NOMBRE
Nueva York Mosc Praga Vladivostok Chicago

CLIM A
Continental Continental Continental Continental Continental

HABITANTES
8214426 12622000 1188126 586829 2842518

SELECT nombre, clima, habitantes FROM lugar WHERE clima = 'Continental' OR habitantes > 10000000;
NOMBRE
Nueva York Tokio Pekin Mosc Praga Shangai Bombay Vladivostok Chicago Sao Paulo

CLIM A
Continental Templado Continental Continental Continental Subtropical Tropical Continental Continental Tropical

HABITANTES
8214426 12527115 12622000 1188126 18403769 13691836 586829 2842518 10927985

SELECT nombre, continente FROM pais WHERE continente NOT IN ('Europa', 'Asia', 'frica');
NOMBRE
Estados Unidos Canad Mjico Brasil Argentina Uruguay Australia Nueva Zelanda Ecuador

CONTINENTE
Amrica del Norte Amrica del Norte Amrica del Norte Amrica del Sur Amrica del Sur Amrica del Sur Oceana Oceana Amrica del Sur

Prioridad de Ejecucin Las condiciones lgicas junto con las aritmticas, tienen una prioridad de ejecucin.

Operador Operadores aritmticos Operadores de concatenacin Operadores de comparacin IS NULL, LIKE, IN (y sus variantes con NOT) BETWEEN y NOT BETWEEN NOT AND OR Para modificar esta prioridad de evaluacin, se utilizan los parntesis.

4. Ordenacin de datos: Clusula ORDER BY


El orden en el que una sentencia SELECT devuelve las filas no est predefinido, sino que depende del orden interno de la tabla, as que, podra pasar que ejecutemos la misma consulta sin ORDER BY y nos devuelva registros con diferente rden. Se puede especificar la clusula ORDER BY para modificar el orden inicial. La clusula ORDER BY aparece en el ltimo lugar de la sentencia SELECT y se le puede especificar el tipo de rden para cada columna, los tipos de orden son ASC (ascendente, por defecto) y DESC (descendente)

SELECT nombre, apellidos FROM viajero ORDER BY apellidos DESC;


NOMBRE
Carlos Jose Lus Margarita Carmen Damin Manuel Julin Francisco Oriol Marta

APELLIDO S
Vzquez Surez Snchez Ruiz Rodrguez Rodrguez Rodrguez Ramrez Prez Prez

Si no se especifica ASC o DESC, el rden por defecto es ascendente, que implica: Para valores numricos se muestran los valores ms bajos primero. Para valores de fecha, se muestran los valores con fecha anterior. Para valores de caracteres, se usa el rden alfabtico. Los valores nulos se muestran los ltimos para orden ascendente, y los primeros para orden descendente

Es posible ordenar por mltiples columnas y tambin utilizar el alias de la columna para realizar ordenaciones. En el caso de ordenar por mltiples columnas, se debe especificar ASC o DESC en cada una, de lo contrario se ordenarn ascendentemente. Se puede utilizar una columna o expresin que no est presente en la SELECT para realizar el orden. SELECT apellidos || ', ' || nombre as nombre_completo, fecha_nacimiento FROM viajero ORDER BY fecha_nacimiento ASC, nombre_completo DESC, id_viajero;
NOMBRE_COMPLETO
Vzquez, Carlos Gmez, Alberto Fernndez, Roberto Surez, Jose Lus Rodrguez, Julin Gonzlez, Israel Rodrguez, Damin Gonzlez, Beatriz Rodrguez, Manuel Martnez, Alejandra

FECHA_NACIMIENTO
01/01/50 01/01/50 15/02/55 30/05/58 01/12/58 31/03/59 10/11/60 22/04/62 05/06/63 30/06/64

You might also like