Está en la página 1de 9

SELECT La recuperacin de los datos en el lenguaje SQL se realiza mediante la sentencia SELECT, seleccionar.

Esta sentencia permite indicar al SGBD la informacin que se quiere recuperar. Esta es la sentencia SQL, con diferencia, ms habitual. La sentencia SELECT consta de cuatro partes bsicas:

La clusula SELECT seguida de la descripcin de lo que se desea ver, los nombres de las columnas a seleccionar. Esta parte es obligatoria. La clusula FROM seguida de la especificacin de las tablas de las que se han de obtener los datos. Esta parte es obligatoria. La clusula WHERE seguida por un criterio de seleccin, una condicin. Esta parte es opcional. La clusula ORDER BY seguida por el criterio de ordenacin. Esta parte es opcional.

Una primera aproximacin a la sintaxis de la sentencia SELECT puede mostrarnos la siguiente expresin: SELECT {* | {columna,}+} FROM {tabla,}+ [WHERE condicin] [ORDER BY {expresinColumna [ASC | DESC],}+]; Como una primera utilizacin de la sentencia SELECT podemos utilizarla para ver todas las tablas que tenemos en la base de datos. SQL> select table_name from user_tables; TABLE_NAME -----------------------------DEP EMP Un breve anlisis de la sentencia anterior nos permite observar que hemos consultado sobre la columna llamada table_name almacenada en la tabla user_tables, que es la tabla que guarda la informacin sobre todas las tablas de cada usuario.

FROM La clusula FROM define las tablas de las que se van a seleccionar las columnas. Se puede aadir al nombre de las tablas el usuario propietario de las mismas de la forma usuario.tabla. De esta manera podemos distinguir entre las tablas de un usuario y otro. Oracle siempre considera como prefijo el nombre del propietario de las tablas, aunque no se

lo indiquemos. De esta forma dos o ms usuarios pueden tener tablas que se llamen igual sin que surjan conflictos. Si quisiramos acceder a las filas de la tabla dep del usuario jperez, (ademas de tener privilegios de lectura sobre esa tabla) deberamos escribir la siguiente sentencia SQL: SQL> select * from jperez.dep; Tambin se puede asociar un alias a las tablas para abreviar los nombres de las tablas. Un ejemplo se puede ver en la sentencia SQL siguiente: SQL> select d.nombre from dep d; INNER JOIN El INNER JOIN es otro tipo de composicin de tablas, permite emparejar filas de distintas tablas de forma ms eficiente que con el producto cartesiano cuando una de las columnas de emparejamiento est indexada. Ya que en vez de hacer el producto cartesiano completo y luego seleccionar la filas que cumplen la condicin de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condicin, con lo cual se emparejan slo las filas que luego aparecen en el resultado. La sintaxis es la siguiente: Ejemplo: SELECT FROM pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie *

tabla1 y tabla2 son especificaciones de tabla (nombre de tabla con alias o no, nombre de consulta guardada), de las tablas cuyos registros se van a combinar. Pueden ser las dos la misma tabla, en este caso es obligatorio definir al menos un alias de tabla. col1, col2 son las columnas de emparejamiento. Observar que dentro de la clusula ON los nombres de columna deben ser nombres cualificados (llevan delante el nombre de la tabla y un punto). Las columnas de emparejamiento deben contener la misma clase de datos, las dos de tipo texto, de tipo fecha etc... los campos numricos deben ser de tipos similares. Por ejemplo, se puede combinar campos AutoNumrico y Long puesto que son tipos similares, sin embargo, no se puede combinar campos de tipo Simple y Doble. Adems las columnas

no pueden ser de tipo Memo ni OLE. comp representa cualquier operador de comparacin ( =, <, >, <=, >=, o <> ) y se utiliza para establecer la condicin de emparejamiento. Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y OR poniendo cada condicin entre parntesis. Ejemplo: SELECT * FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab) AND (pedidos.producto = productos.idproducto) Se pueden combinar ms de dos tablas. En este caso hay que sustituir en la sintaxis una tabla por un INNER JOIN completo. Por ejemplo: SELECT * FROM (pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie) INNER JOIN empleados ON pedidos.rep = empleados.numemp En vez de tabla1 hemos escrito un INNER JOIN completo, tambin podemos escribir: SELECT * FROM clientes INNER JOIN (pedidos INNER JOIN empleados ON pedidos.rep = empleados.numemp) ON pedidos.clie = clientes.numclie En este caso hemos sustituido tabla2 por un INNER JOIN completo.

BETWEEN Permite la seleccin de un rango. La sintaxis para la clusula BETWEEN es la siguiente: SELECT "nombre_columna" FROM "nombre_tabla" WHERE "nombre_columna" BETWEEN 'valor1' AND 'valor2' Esto seleccionar todas las filas cuya columna tenga un valor entre 'valor1' y 'valor2'. Por ejemplo, podramos desear seleccionar la visualizacin de toda la informacin de ventas entre el 06 de enero de 1999, y el 10 de enero de 1999, en la Tabla Store_Information,

Tabla Store_Information store_name San Diego Boston Ingresamos, SELECT FROM WHERE Date BETWEEN '06-Jan-1999' AND '10-Jan-1999' * Store_Information Sales Date

Los Angeles 1500 05-Jan-1999 250 07-Jan-1999 700 08-Jan-1999 San Francisco 300 08-Jan-1999

Tenga en cuenta que la fecha puede almacenarse en diferentes formatos segn las diferentes bases de datos. Esta gua de referencia simplemente elige uno de los formatos. Resultado: store_name San Diego Boston Sales Date 250 07-Jan-1999 700 08-Jan-1999

San Francisco 300 08-Jan-1999

CONCAT Algunas veces es necesario combinar en forma conjunta (concatenar) los resultados de varios campos diferentes. Cada base de datos brinda una forma para realizar esto:

MySQL: CONCAT() Oracle: CONCAT(), || SQL Server: +

La sintaxis para CONCAT() es la siguiente: CONCAT(cad1, cad2, cad3, ...): Concatenar cad1, cad2, cad3, y cualquier otra cadena juntas. Por favor note que la funcin CONCAT() de Oracle slo permite dos argumentos slo dos cadenas pueden colocarse juntas al mismo tiempo utilizando esta funcin. Sin embargo, es posible concatenar ms de dos cadenas al mismo tiempo en Oracle utilizando. Observemos algunos ejemplos. Supongamos que tenemos la siguiente tabla:

Tabla Geography region_name store_name East East West West Ejemplo 1: MySQL/Oracle: SELECT CONCAT(region_name,store_name) WHERE store_name = 'Boston'; Resultado : 'EastBoston' Ejemplo 2: Oracle: SELECT region_name || ' WHERE store_name = 'Boston'; Resultado : 'East Boston' Ejemplo 3: SQL SELECT region_name + ' WHERE store_name = 'Boston'; Resultado : 'East Boston' ORDER BY Se utiliza para especificar el criterio de ordenacin de la respuesta a la consulta. Por defecto la ordenacin es ascendente, aunque se puede especificar un orden descendente. La ordenacin se puede establecer sobre el contenido de columnas o sobre expresiones con columnas. A continuacin se puede ver un ejemplo de uso de la clusula ORDER BY en la Server ' + store_name : Geography Boston New York Los Angeles San Diego

FROM

Geography

'

||

store_name

FROM

Geography

FROM

que quiere obtener un listado de los empleados ordenado de manera descendente por su salario y en caso de igualdad de salario, ordenado ascendentemente por su nombre. SQL> select nombre, salario from emp order by salario desc, nombre; NOMBRE SALARIO ---------- ---------Cano 450000 Perez 350000 Roncal 350000 Yuste 350000 Recio 300000 Sastre 300000 Martin 235000 Garcia 225000 Garcia 210000 Mateo 200000 Santana 200000 Rueda 175000 Lopez 150000 Sanz 150000

COUNT Esto nos permite COUNT el nmero de filas en una tabla determinada. La sintaxis es, SELECT FROM "nombre_columna" COUNT("nombre_columna")

Por ejemplo, si deseamos encontrar el nmero de entradas de negocios en nuestra tabla, Tabla Store_Information store_name Sales San Diego Boston ingresamos, SELECT FROM Store_Information COUNT(store_name) Date

Los Angeles 1500 05-Jan-1999 250 07-Jan-1999 700 08-Jan-1999 Los Angeles 300 08-Jan-1999

Resultado: Count(store_name) 4 COUNT y DISTINCT pueden utilizarse juntos en una instruccin para determinar el nmero de las distintas entradas en una tabla. Por ejemplo, si deseamos saber el nmero de los distintos negocios, ingresaramos, SELECT FROM Store_Information Resultado: Count(DISTINCT store_name) 3 SUM La sintaxis para el uso de funciones es, SELECT "tipo FROM "nombre_tabla" de funcin"("nombre_columna") COUNT(DISTINCT store_name)

Por ejemplo, si deseamos obtener la sumatoria de todas las ventas de la siguiente tabla, Tabla Store_Information store_name Sales San Diego Boston Date

Los Angeles 1500 05-Jan-1999 250 07-Jan-1999 700 08-Jan-1999 Los Angeles 300 08-Jan-1999

ingresaramos SELECT Resultado: SUM(Sales) 2750 SUM(Sales) FROM Store_Information

2 750 dlares estadounidenses representa la suma de todas las entradas de Ventas: 1500 + 250 + 300 + 700 . Adems de utilizar dichas funciones, tambin es posible utilizar SQL para realizar tareas simples como suma (+) y resta (-). Para ingresar datos del tipo caracter, hay tambin varias funciones de cadenas disponibles, tales como funciones de concatenacin, reduccin y subcadena. Los diferentes proveedores RDBMS tienen diferentes implementaciones de funciones de cadenas, y es mejor consultar las referencias para sus RDBMS a fin de ver cmo se utilizan estas funciones.

DISTINCT Cuando se realiza una consulta sobre una tabla en la que se extrae informacin de varias columnas, puede ocurrir que, si no incluimos la/s columna/s que forman la clave principal, obtengamos filas repetidas en la respuesta. Si este comportamiento no nos resulta satisfactorio podemos utilizar la clusula DISTINCT para eliminar las filas duplicadas obtenidas como respuesta a una consulta. Podemos ver como funciona en el siguiente ejemplo, en el que preguntamos por los distintos oficios de nuestros empleados. SQL> select oficio from emp;

Sin utilizar la clusula DISTINCT obtendremos la siguiente respuesta OFICIO ----------Presidente Director Secretario Contable Comercial Comercial Director Analista Programador Programador Director Analista Programador Programador 14 rows selected.

Pero si incluimos la clusula DISTINCT la respuesta vara para adecuarse ms a nuestras espectativas. SQL> select distinct oficio from emp; OFICIO ----------Analista Comercial Contable Director Presidente Programador Secretario IN Verifica si el valor especificado est contenido dentro de una lista de ellos. La sintaxis es: expresion IN lista Por ejemplo, si queremos obtener el nombre de todos los autores que vivan en San Francisco o en Salt Lake City, escribimos: SELECT au_lname FROM authors where city in ('San Francisco','Salt Lake City') Tambin se puede especificar como lista, el resultado de otra consulta. Por ejemplo, si queremos obtener el nombre de los autores, que viven en ciudades pertenecientes al estado de California (CA), escribimos: SELECT au_lname FROM authors where city IN (SELECT city FROM authors WHERE state = 'CA') En la anterior consulta, la forma de evaluacin es desde dentro hacia fuera, es decir, primero se evala la sentencia que est entre parntesis, y luego se aplica el valor obtenido para la evaluacin del operador IN.

También podría gustarte