Sei sulla pagina 1di 48

SQL

SQL (Structured Query Language) es un lenguaje de programacin diseado para almacenar, manipular y recuperar datos almacenados en bases de datos relacionales. La primera encarnacin de SQL apareci en 1974, cuando un grupo de IBM desarroll el primer prototipo de una base de datos relacional. Relational Software (luego se convirti en Oracle) lanz la primera base de datos relacional comercial. Existen estndares para SQL. Sin embargo, el SQL que puede utilizarse en cada uno de las principales RDBMS actuales viene en distintas formas. Esto se debe a dos razones: 1) el estndar SQL es bastante complejo, y no es prctico implementar el estndar completo, y 2) cada proveedor de base de datos necesita una forma de diferenciar su producto de otros. En esta gua de referencia, dichas diferencias se sealarn cuando sea apropiado. Este sitio de la gua de referencia SQL enumera los comandos SQL normalmente utilizados, y se divide en las siguientes secciones :

Comandos SQL: Las instrucciones SQL bsicas para almacenamiento, recuperacin y manipulacin de datos en una base de datos relacional. Manipulacin de Tabla: Cmo se utilizan las instrucciones SQL para administrar las tablas dentro de una base de datos. SQL Avanzado: Comandos SQL avanzados. Sintaxis SQL: Una pgina nica que enumera la sintaxis para todos los comandos SQL en esta gua de referencia.

Para cada comando, primero se presentar y explicar la sintaxis SQL, seguida por un ejemplo. Al final de esta gua de referencia, deber tener una idea general de la sintaxis SQL. Adems, deber poder realizar consultas SQL utilizando la sintaxis apropiada. Segn mi experiencia creo que el comprender lo bsico de SQL es mucho ms fcil que dominar todas las dificultades de este lenguaje de base de datos, y espero que tambin llegue a la misma conclusin. Si est interesado en cmo recuperar datos utilizando SQL, le recomendamos que empiece con la seccin Comandos SQL. Si est interesado en comprender cmo puede utilizarse SQL para manipular una tabla de base de datos, le recomendamos que comience con la seccin Manipulacin de Tabla. Si est buscando ayuda sobre un comando SQL especfico, puede utilizar el Mapa del Sitio para encontrar el comando que est buscando. Bien, suficiente introduccin. Agregue este sitio a favoritos ahora y comience a aprender SQL! Nota: Si ensea SQL o da una clase relacionada con bases de dato, puede realizar un enlace a este sitio como material de referencia para sus alumnos.

COMANDOS SQL
SELECT
Para qu utilizamos los comandos SQL? El uso comn es la seleccin de datos desde tablas ubicadas en una base de datos. Inmediatamente, vemos dos palabras claves: necesitamos SELECT la informacin FROM una tabla. (Note que la tabla es un contenedor que reside en la base de datos donde se almacena la informacin. Para obtener ms informacin acerca de cmo manipular tablas, consulte la Seccin Manipulacin de Tabla). Por lo tanto tenemos la estructura SQL ms bsica: SELECT "nombre_columna" FROM "nombre_tabla" Para ilustrar el ejemplo anterior, suponga que tenemos la siguiente tabla: Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Podemos utilizar esta tabla como ejemplo a lo largo de la gua de referencia (esta tabla aparecer en todas las secciones). Para seleccionar todos los negocios en esta tabla, ingresamos, SELECT store_name FROM Store_Information Resultado: store_name Los Angeles San Diego Los Angeles Boston Pueden seleccionarse los nombres de columnas mltiples, as como tambin los nombres de tablas mltiples.

DISTINCT
La palabra clave SELECTnos permite tomar toda la informacin de una columna (o columnas) en una tabla. Esto, obviamente, significa necesariamente que habr redundancias. Qu sucedera si slo deseamos seleccionar cada elemento DISTINCT? Esto es fcil de realizar en SQL. Todo

lo que necesitamos hacer es agregar DISTINCT luego de SELECT. La sintaxis es la siguiente: SELECT DISTINCT "nombre_columna" FROM "nombre_tabla" Por ejemplo, para seleccionar todos los negocios distintos en la Tabla Store_Information, Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Ingresamos, SELECT DISTINCT store_name FROM Store_Information Resultado: store_name Los Angeles San Diego Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

WHERE
Luego, podramos desear seleccionar condicionalmente los datos de una tabla. Por ejemplo, podramos desear slo recuperar los negocios con ventas mayores a $1.000 dlares estadounidenses. Para ello, utilizamos la palabra clave WHERE. La sintaxis es la siguiente: SELECT "nombre_columna" FROM "nombre_tabla" WHERE "condicin" Por ejemplo, para seleccionar todos los negocios con ventas mayores a 1.000 dlares estadounidenses en la Tabla Store_Information,

Tabla Store_Information

store_name Los Angeles San Diego Los Angeles Boston Ingresamos,

Sales 1500 250 300 700

Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

SELECT store_name FROM Store_Information WHERE Sales > 1000 Resultado: store_name Los Angeles

AND OR
En la seccin anterior, hemos visto que la palabra clave WHERE tambin puede utilizarse para seleccionar datos condicionalmente desde una tabla. Esta condicin puede ser una condicin simple (como la que se presenta en la seccin anterior), o puede ser una condicin compuesta. Las condiciones compuestas estn formadas por mltiples condiciones simples conectadas por AND u OR. No hay lmites en el nmero de condiciones simples que pueden presentarse en una sola instruccin SQL. La sintaxis de una condicin compuesta es la siguiente: SELECT "nombre_columna" FROM "nombre_tabla" WHERE "condicin simple" {[AND|OR] "condicin simple"}+ {}+ significa que la expresin dentro de las llaves ocurrir una o ms veces. Note que AND u OR pueden utilizarse indistintamente. Adems, podemos utilizar el smbolo parntesis () para indicar el orden de la condicin. Por ejemplo, podemos desear seleccionar todos los negocios con ventas mayores a 1000 dlares estadounidenses o todos los negocios con ventas menores a 500 dlares estadounidenses pero mayores a 275 dlares estadounidenses en la Tabla Store_Information, Tabla Store_Information store_name Sales Date

Los Angeles San Diego San Francisco Boston Ingresamos,

1500 250 300 700

05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

SELECT store_name FROM Store_Information WHERE Sales > 1000 OR (Sales < 500 AND Sales > 275) Resultado: store_name Los Angeles San Francisco

SQL IN >>
En SQL, hay dos usos de la palabra clave IN, y esta seccin introduce aqul relacionado con la clusula WHERE. Cuando se lo utiliza en este contexto, sabemos exactamente el valor de los valores regresados que deseamos ver para al menos una de las columnas. La sintaxis para el uso de la palabra clave IN es la siguiente: SELECT "nombre_columna" FROM "nombre_tabla" WHERE "nombre_columna" IN (''valor1', ''valor2', ...) El nmero de valores en los parntesis pueden ser uno o ms, con cada valor separado por comas. Los valores pueden ser nmeros o caracteres. Si hay slo un valor dentro del parntesis, este comando es equivalente a WHERE "nombre_columna" = 'valor1' Por ejemplo, podramos desear seleccionar todos los registros para los negocios de Los ngeles y San Diego en la Tabla Store_Information, Tabla Store_Information store_name Los Angeles San Diego San Francisco Sales 1500 250 300 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999

Boston Ingresamos,

700 08-Jan-1999

SELECT * FROM Store_Information WHERE store_name IN ('Los Angeles', 'San Diego') Resultado: store_name Sales Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999

SQL BETWEEN >>

Mientras que la palabra clave IN ayuda a las personas a limitar el criterio de seleccin para uno o ms valores discretos, la palabra clave 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 Los Angeles San Diego San Francisco Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Ingresamos,

SELECT * FROM Store_Information WHERE Date BETWEEN '06-Jan-1999' AND '10-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 San Francisco Boston Sales 250 300 700 Date 07-Jan-1999 08-Jan-1999 08-Jan-1999

SQL LIKE >>

LIKE es otra palabra clave que se utiliza en la clusula WHERE. Bsicamente, LIKE le permite hacer una bsqueda basada en un patrn en vez de especificar exactamente lo que se desea (como en IN) o determinar un rango (como en BETWEEN). La sintaxis es la siguiente: SELECT "nombre_columna" FROM "nombre_tabla" WHERE "nombre_columna" LIKE {patrn} {patrn} generalmente consiste en comodines. Aqu hay algunos ejemplos:

'A_Z': Toda lnea que comience con 'A', otro carcter y termine con 'Z'. Por ejemplo, 'ABZ' y 'A2Z' deberan satisfacer la condicin, mientras 'AKKZ' no debera (debido a que hay dos caracteres entre A y Z en vez de uno). 'ABC%': Todas las lneas que comienzan con 'ABC'. Por ejemplo, 'ABCD' y 'ABCABC' ambas deberan satisfacer la condicin. '%XYZ': Todas las lneas que terminan con 'XYZ'. Por ejemplo, 'WXYZ' y 'ZZXYZ' ambas deberan satisfacer la condicin. '%AN%': : Todas las lneas que contienen el patrn 'AN' en cualquier lado. Por ejemplo, 'LOS ANGELES' y 'SAN FRANCISCO' ambos deberan satisfacer la condicin.

Digamos que tenemos la siguiente tabla:

Tabla Store_Information store_name LOS ANGELES SAN DIEGO SAN FRANCISCO BOSTON Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Deseamos encontrar todos los negocios cuyos nombres contengan AN. Para hacerlo, ingresamos, SELECT * FROM Store_Information WHERE store_name LIKE '%AN%' Resultado: store_name LOS ANGELES SAN DIEGO SAN FRANCISCO Sales 1500 250 300 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999

SQL ORDER BY >>

Hasta ahora, hemos visto cmo obtener datos de una tabla utilizando los comandos SELECT y WHERE. Con frecuencia, sin embargo, necesitamos enumerar el resultado en un orden particular. Esto podra ser en orden ascendente, en orden descendente, o podra basarse en valores numricos o de texto. En tales casos, podemos utilizar la palabra clave ORDER BY para alcanzar nuestra meta. La sintaxis para una instruccin ORDER BY es la siguiente: SELECT "nombre_columna" FROM "nombre_tabla" [WHERE "condicin"] ORDER BY "nombre_columna" [ASC, DESC] [] significa que la instruccin WHERE es opcional. Sin embargo, si existe una clusula WHERE, viene antes de la clusula ORDER BY ASC significa que los resultados se mostrarn en orden ascendente, y DESC significa que los resultados se mostrarn en orden descendente. Si no se especifica ninguno, la configuracin predeterminada es ASC.

Es posible ordenar por ms de una columna. En este caso, la clusula ORDER BYanterior se convierte en ORDER BY "nombre1_columna" [ASC, DESC], "nombre2_columna" [ASC, DESC] Suponiendo que elegimos un orden ascendente para ambas columnas, el resultado se clasificar en orden ascendente segn la columna 1. Si hay una relacin para el valor de la columna 1, se clasificar en orden ascendente segn la columna 2. Por ejemplo, podramos desear enumerar los contenidos de la Tabla Store_Information segn la suma en dlares, en orden descendente: Tabla Store_Information store_name Los Angeles San Diego San Francisco Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Ingresamos, SELECT store_name, Sales, Date FROM Store_Information ORDER BY Sales DESC Resultado: store_name Los Angeles Boston San Francisco San Diego Sales 1500 700 300 250 Date 05-Jan-1999 08-Jan-1999 08-Jan-1999 07-Jan-1999

Adems del nombre de la columna, podramos utilizar la posicin de la columna (segn la consulta SQL) para indicar en qu columna deseamos aplicar la clusula ORDER BY. La primera columna es 1, y la segunda columna es 2, y as sucesivamente. En el ejemplo anterior, alcanzaremos los mismos resultados con el siguiente comando: SELECT store_name, Sales, Date FROM Store_Information ORDER BY 2 DESC

SQL FUNCIONES >>


Ya que hemos comenzado trabajando con nmeros, la siguiente pregunta natural a realizarse es si es posible hacer clculos matemticos con aquellos nmeros, tales como sumas, o sacar un promedio. La respuesta es s! SQL tiene varias funciones aritmticas, y estas son: - AVG - COUNT - MAX - MIN - SUM La sintaxis para el uso de funciones es, SELECT "tipo de funcin"("nombre_columna") FROM "nombre_tabla" Por ejemplo, si deseamos obtener la sumatoria de todas las ventas de la siguiente tabla, Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

ingresaramos SELECT SUM(Sales) FROM Store_Information Resultado: SUM(Sales) 2750 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.

SQL COUNT >>

Otra funcin aritmtica es COUNT. Esto nos permite COUNT el nmero de filas en una tabla determinada. La sintaxis es, SELECT COUNT("nombre_columna") FROM "nombre_columna" Por ejemplo, si deseamos encontrar el nmero de entradas de negocios en nuestra tabla, Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston ingresamos, SELECT COUNT(store_name) FROM Store_Information 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 COUNT(DISTINCT store_name) FROM Store_Information Resultado: Count(DISTINCT store_name) 3 Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

SQL GROUP BY >>

Ahora regresamos a las funciones de agregados. Recuerda que utilizamos la palabra clave SUMpara calcular las ventas totales para todos los negocios? Y si quisiramos calcular el total de ventas para cada negocio? Entonces, necesitamos hacer dos cosas: Primero, necesitamos asegurarnos de que hayamos seleccionadoel nombre del negocio as como tambin las ventas totales. Segundo, debemos asegurarnos de que todas las sumas de las ventas estn GROUP BY negocios. La sintaxis SQL correspondiente es, SELECT "nombre1_columna", SUM("nombre2_columna") FROM "nombre_tabla" GROUP BY "nombre1-columna" Ilustremos utilizando la siguiente tabla, Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Deseamos saber las ventas totales para cada negocio. Para hacerlo, ingresaramos, SELECT store_name, SUM(Sales) FROM Store_Information GROUP BY store_name Resultado: store_name Los Angeles San Diego Boston> SUM(Sales) 1800 250 700

La palabra clave GROUP BYse utiliza cuando estamos seleccionado columnas mltiples desde una tabla (o tablas) y aparece al menos un operador aritmtico en la instruccin SELECT. Cuando esto sucede, necesitamos GROUP BY todas las otras columnas seleccionadas, es decir, todas las columnas excepto aquella(s) que se operan por un operador aritmtico.

SQL HAVING >>

Otra cosa que la gente puede querer hacer es limitar el resultado segn la suma correspondiente (o cualquier otra funcin de agregado). Por ejemplo,

podramos desear ver slo los negocios con ventas mayores a 1 500 , dlares. En vez de utilizar la clusula WHERE en la instruccin SQL, a pesar de que necesitemos utilizar la clusula HAVING, que se reserva para funciones de agregados. La clusula HAVINGse coloca generalmente cerca del fin de la instruccin SQL, y la instruccin SQL con la clusula HAVING. puede o no incluir la clusula GROUP BY sintaxis para HAVING es, SELECT "nombre1_columna", SUM("nombre2_columna") FROM "nombre_tabla" GROUP BY "nombre1_columna" HAVING (condicin de funcin aritmtica) Nota: La clusula GROUP BY es opcional. En nuestro ejemplo, tabla Store_Information, Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

ingresaramos, SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_name HAVING SUM(sales) > 1500 Resultado: store_name Los Angeles SUM(Sales) 1800

SQL ALIAS >>

Nos concentraremos ahora en el uso de alias. Hay dos tipos de alias que se utilizan con mayor frecuencia. Alias de columna y alias de tabla. Resumiendo, los alias de columna existen para ayudar en la organizacin del resultado. En el ejemplo anterior, cualquiera sea el momento en que vemos las ventas totales, se enumeran como SUM(sales). Mientras esto es comprensible,

podemos ver casos donde el ttulo de la columna pueden complicarse (especialmente si incluye varias operaciones aritmticas). El uso de un alias de columna hara el resultado mucho ms legible. El segundo tipo de alias es el alias de tabla. Esto se alcanza al colocar un alias directamente luego del nombre de tabla en la clusula FROM. Esto es conveniente cuando desea obtener informacin de dos tablas separadas (el trmino tcnico es 'realizar uniones'). La ventaja de utiliza un alias de tablas cuando realizamos uniones es rpidamente aparente cuando hablamos de uniones. Antes de comenzar con las uniones, miremos la sintaxis tanto para el alias de columna como de tabla: SELECT "alias_tabla"."nombre1_columna" "alias_columna" FROM "nombre_tabla" "alias_tabla" Brevemente, ambos tipos de alias se colocan directamente despus del elemento por el cual generan el alias, separados por un espacio en blanco. Nuevamente utilizamos nuestra tabla, Store_Information, Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Utilizamos el mismo ejemplo que en la seccin SQL GROUP BY, salvo que hemos colocado tanto el alias de columna como el alias de tabla: SELECT A1.store_name Store, SUM(A1.Sales) "Total Sales" FROM Store_Information A1 GROUP BY A1.store_name Resultado: Store Los Angeles San Diego Boston Total Sales 1800 250 700

Note la diferencia en el resultado: los ttulos de las columnas ahora son diferentes. Ese es el resultado de utilizar el alias de columna. Note que en vez de Sum(sales) de algn modo enigmtico, ahora tenemos Total Sales, que es ms comprensible, como ttulo de columna. La ventaja de utilizar un alias de

tablas no es fcil de ver en este ejemplo. Sin embargo, se tornar evidente en la siguiente seccin.

SQL JOIN >>

Ahora miremos las uniones. Para realizar uniones en SQL se requieren mucho de los elementos que ya hemos presentado. Digamos que tenemos las siguientes dos tablas: Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Tabla Geography region_name East East West West store_name Boston New York Los Angeles San Diego

y queremos saber las ventas por regin. Vemos que la tabla Geographyincluye informacin sobre regiones y negocios, y la tabla Store_Information contiene informacin de ventas para cada negocio. Para obtener la informacin de ventas por regin, debemos combinar la informacin de las dos tablas. Al examinar las dos tablas, encontramos que estn enlazadas a travs del campo comn nombre_negocio Primero presentaremos la instruccin SQL y explicaremos el uso de cada segmento despus: SELECT A1.region_name REGION, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1.store_name = A2.store_name GROUP BY A1.region_name Resultado: REGIN East West SALES 700 2050

Las primeras dos lneas le indican a SQL que seleccione dos campos, el primero es el campo "nombre_regin" de la tabla Geography (denominado REGIN), y el segundo es la suma del campo "Sales" de la tabla Store_Information(denominado SALES). Note como se utilizan los alias de tabla aqu: Geografa se denomina A1, e Informacin_Negocio se denomina A2. Sin los alias, la primera lnea sera SELECT Geography.region_name REGION, SUM(Store_Information.Sales) SALES que es mucho ms problemtica. En esencia, los alias de tabla facilitan el entendimiento de la totalidad de la instruccin SQL, especialmente cuando se incluyen tablas mltiples. Luego, pongamos nuestra atencin en la lnea 2, la instruccin WHERE. Aqu es donde se especifica la condicin de la unin. En este caso, queremos asegurarnos que el contenido en nombre_negocio en la tabla Geografa concuerde con la tabla Store_Information, y la forma de hacerlo es igualarlos. Esta instruccin WHEREes esencial para asegurarse de que obtenga el resultado correcto. Sin la correcta instruccin WHERE se producir una Unin Cartesiana. Las uniones cartesianas darn por resultado que de la consulta se arroje toda combinacin posible de las dos tablas (o cualquiera que sea el nmero de tablas en la instruccin FROM). En este caso, una unin cartesiana resultara en un total de 4x4 = Se presenta un resultado de16 filas.

SQL Outer Join >>

Anteriormente, hemos visto una unin izquierda, o interna, donde seleccionamos filas comunes a las tablas que participan en la unin. Qu sucede en los casos donde estamos interesados en la seleccin de elementos en una tabla sin importar si se encuentran presentes en la segunda tabla? Ahora necesitaremos utilizar el comando SQL OUTER JOIN. La sintaxis para realizar una unin externa en SQL depende de la base de datos. Por ejemplo, en Oracle, colocaremos un "(+)" en la clusula WHERE del otro lado de la tabla para la que queremos incluir todas las filas. Digamos que tenemos las siguientes dos tablas: Tabla Store_Information store_name Los Angeles San Diego Los Angeles Sales 1500 250 300 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999

Boston

700 08-Jan-1999

Tabla Geography region_name East East West West store_name Boston New York Los Angeles San Diego

y queremos saber la suma de las ventas de todos los negocios. Si realizamos una unin regular, no podramos obtener lo que deseamos debido a que habramos omitido Nueva York" ya que no aparece en la tabla Store_Information. Por lo tanto, necesitamos realizar una unin externa respecto de las dos tablas anteriores: SELECT A1.store_name, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1.store_name = A2.store_name (+) GROUP BY A1.store_name Note que en este caso, estamos utilizando la sintaxis Oracle para unin externa. Resultado: store_name Boston New York Los Angeles San Diego SALES 700 1800 250

Nota: Se devuelve NULL cuando no hay coincidencia en la segunda tabla. En este caso, Nueva York" no aparece en la tabla Store_Information, por lo tanto su columna "SALES" correspondiente es NULL.

SQL CONCATENAR >>

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 East East West West Ejemplo 1: MySQL/Oracle: SELECT CONCAT(region_name,store_name) FROM Geography WHERE store_name = 'Boston'; Resultado : 'EastBoston' Ejemplo 2: Oracle: SELECT region_name || ' ' || store_name FROM Geography WHERE store_name = 'Boston'; Resultado : 'East Boston' Ejemplo 3: SQL Server: SELECT region_name + ' ' + store_name FROM Geography WHERE store_name = 'Boston'; Resultado : 'East Boston' store_name Boston New York Los Angeles San Diego

SQL SUBSTRING >>


La funcin de subcadena en SQL se utiliza para tomar una parte de los datos almacenados. Esta funcin tiene diferentes nombres segn las diferentes bases de datos:

MySQL: SUBSTR(), SUBSTRING() Oracle: SUBSTR() SQL Server: SUBSTRING()

Los usos ms frecuentes son los siguientes (utilizaremos SUBSTR() aqu): SUBSTR(str,pos): Selecciona todos los caracteres de <str> comenzando con posicin <pos>. Note que esta sintaxis no es compatible en SQL Server. SUBSTR(str,pos,len): Comienza con el carcter <pos> en la cadena <str> y selecciona los siguientes caracteres <len>. Supongamos que tenemos la siguiente tabla: Tabla Geography region_name East East West West Ejemplo 1 : SELECT SUBSTR(store_name, 3) FROM Geography WHERE store_name = 'Los Angeles'; Resultado : 's Angeles' Ejemplo 2 : SELECT SUBSTR(store_name,2,4) FROM Geography WHERE store_name = 'San Diego'; Resultado : 'an D' store_name Boston New York Los Angeles San Diego

SQL TRIM >>

La funcin TRIM en SQL se utiliza para eliminar un prefijo o sufijo determinado de una cadena. El patrn ms comn a eliminarse son los espacios en blanco. Esta funcin tiene diferentes nombres segn las diferentes bases de datos:

MySQL: TRIM(), RTRIM(), LTRIM() Oracle: RTRIM(), LTRIM() SQL Server: RTRIM(), LTRIM()

La sintaxis para estas funciones de reduccin es: TRIM([[LOCATION] [remstr] FROM ] str): [LOCATION] puede ser LDER, REMANENTE, o AMBAS. Esta funcin se deshace del patrn [remstr] tanto para el comienzo de la cadena como para el final, o para ambos. Si no se especifica ningn [remstr], los espacios en blanco se eliminarn. LTRIM(str): Elimina todos los espacios en blanco del comienzo de la cadena. RTRIM(str): Elimina todos los espacios en blanco del final de la cadena. Ejemplo 1 : SELECT TRIM(' Sample '); Resultado : 'Sample' Ejemplo 2 : SELECT LTRIM(' Sample '); Resultado : 'Sample ' Ejemplo 3 : SELECT RTRIM(' Sample '); Resultado : ' Sample'

MANIPULACION DE TABLAS
Las tablas son la estructura bsica donde se almacena la informacin en la base de datos. Dado que en la mayora de los casos, no hay forma de que el proveedor de base de datos sepa con antelacin cuales son sus necesidades de almacenamiento de datos, es probable que necesite crear tablas en la base de datos usted mismo. Muchas herramientas de base de datos le permiten crear tablas sin ingresar SQL, pero debido a que las tablas son los contenedores de toda la informacin, es importante incluir la sintaxis CREATE TABLEen esta gua de referencia. Antes de sumergirnos en la sintaxis SQL para CREATE TABLE, es una buena idea comprender lo que se incluye en una tabla. Las tablas se dividen en filas y columnas. Cada fila representa una parte de los datos, y cada columna puede pensarse como la representacin de un componente de aquella parte de los datos. Entonces, por ejemplo, si tenemos una tabla para registrar la informacin del cliente, las columnas pueden incluir informacin tal como Primer Nombre, Apellido, Direccin, Ciudad, Pas, Fecha de Nacimiento y dems. Como resultado, cuando especificamos una tabla, incluimos los ttulos de columna y los tipos de datos para esta columna en particular. Entonces Qu son los tipos de datos? Generalmente, los datos se generan en formas variadas. Podra ser un entero (tal como 1), un nmero real (tal como 0,55), una lnea (tal como 'sql'), una fecha/expresin de tiempo (tal como '25ene-2000 03:22:22'), o incluso en formato binario. Cuando especificamos una tabla, necesitamos especificar el tipo de dato asociado con cada columna (es decir, especificaremos que First_Name es de char(50) tipo lo que significa que es una lnea con 50 caracteres). Una cosa a tener en cuenta es que las diferentes bases de datos relacionales permiten diferentes tipos de datos, entonces es prudente consultar primero una referencia especfica de base de datos.

CREATE TABLE
La sintaxis SQL para CREATE TABLEes CREATE TABLE "nombre_tabla" ("columna 1" "tipo_de_datos_para_columna_1", "columna 2" "tipo_de_datos_para_columna_2", ... ) Entonces, si debemos crear una tabla para el cliente tal como se especifica anteriormente, ingresaramos CREATE TABLE customer (First_Name char(50), Last_Name char(50), Address char(50), City char(50),

Country char(25), Birth_Date date) A veces, deseamos brindar un valor predeterminado a cada columna. Se utiliza un valor predeterminado cuando no especifica un valor de columna cuando ingresa datos a la tabla. Para establecer un valor predeterminado, agregue [valor] Predeterminado luego de la instruccin de tipo de datos. En el ejemplo anterior, si deseamos predeterminar una columna Address como Desconocida y Ciudad como Mumbai, ingresaramos CREATE TABLE customer (First_Name char(50), Last_Name char(50), Address char(50) default 'Unknown', City char(50) default 'Mumbai', Country char(25), Birth_Date date) Tambin puede limitar el tipo de informacin que una tabla /columna puede mantener. Esto se realiza a travs de la palabra clave CONSTRAINT, que se describe a CONTUNUACION.

SQL CONSTRAINT
Puede colocar restricciones para limitar el tipo de dato que puede ingresarse en una tabla. Dichas restricciones pueden especificarse cuando la tabla se crea por primera vez a travs de la instruccin CREATE TABLE, o luego de crear la tabla a travs de la instruccin ALTER TABLE. Los tipos comunes de restricciones incluyen las siguientes: - NOT NULL - UNIQUE - CHECK - Clave primaria - Clave externa Cada uno se describe en detalle a continuacin. NOT NULL En forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor NULL en una columna, querr colocar una restriccin en esta columna especificando que NULL no es ahora un valor permitido. Por ejemplo, en la siguiente instruccin, CREATE TABLE Customer (SID integer NOT NULL,

Last_Name varchar (30) NOT NULL, First_Name varchar(30)); Las columnas SID y Last_Name no incluyen NULL, mientras que First_Name puede incluir NULL. UNIQUE La restriccin UNIQUE asegura que todos los valores en una columna sean distintos. Por ejemplo, en la siguiente instruccin, CREATE TABLE Customer (SID integer Unique, Last_Name varchar (30), First_Name varchar(30)); La columna SID no puede incluir valores duplicados, mientras dicha restriccin no se aplica para columnas Last_Name y First_Name. Por favor note que una columna que se especifica como clave primaria tambin puede ser nica. Al mismo tiempo, una columna que es nica puede o no ser clave primaria. CHECK La restriccin CHECK asegura que todos los valores en una columna cumplan ciertas condiciones. Por ejemplo, en la siguiente instruccin, CREATE TABLE Customer (SID integer CHECK (SID > 0), Last_Name varchar (30), First_Name varchar(30)); La columna SID slo debe incluir enteros mayores a 0. Por favor note que la restriccin CHECKno sea ejecutada por MySQL en este momento. Clave primaria y Clave externa se comentan en las siguientes dos secciones.

CLAVE PRIMARIA
La clave primaria se utiliza para identificar en forma nica cada lnea en la tabla. Puede ser parte de un registro real, o puede ser un campo artificial (uno que no tiene nada que ver con el registro real). Una clave primaria puede

consistir en uno o ms campos en una tabla. Cuando se utilizan mltiples campos como clave primaria, se los denomina claves compuestas. Las claves primarias pueden especificarse cuando se crea la tabla (utilizando CREATE TABLE) o cambiando la estructura existente de la tabla (utilizando ALTER TABLE). A continuacin se presentan ejemplos para la especificacin de una clave primaria cuando se crea una tabla: MySQL: CREATE TABLE Customer (SID integer, Last_Name varchar(30), First_Name varchar(30), PRIMARY KEY (SID)); Oracle : CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); SQL Server: CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); A continuacin se presentan ejemplos para la especificacin de una clave primaria al modificar una tabla: MySQL: ALTER TABLE Customer ADD PRIMARY KEY (SID); Oracle: ALTER TABLE Customer ADD PRIMARY KEY (SID); SQL Server: ALTER TABLE Customer ADD PRIMARY KEY (SID); Nota: Antes de utilizar el comando ALTER TABLE para agregar una clave primaria, necesitar asegurarse de que el campo est definido como 'NOT NULL' -- en otras palabras, NULL no puede aceptarse como valor para ese campo.

CLAVE EXTERNA
Una clave externa es un campo (o campos) que seala la clave primaria de otra tabla. El propsito de la clave externa es asegurar la integridad referencial

de los datos. En otras palabras, slo se permiten los valores que se esperan que aparezcan en la base de datos. Por ejemplo, digamos que tenemos dos tablas, una tabla CUSTOMER que incluye todos los datos del CUSTOMER, y la tabla RDENES que incluye los pedidos del CUSTOMER. La restriccin aqu es que todos los pedidos deben asociarse con un CUSTOMER que ya se encuentra en la tabla CUSTOMER. En este caso, colocaremos una clave externa en la tabla ORDERS y la relacionaremos con la clave primaria de la tabla CUSTOMER. De esta forma, nos aseguramos que todos los pedidos en la tabla ORDERS estn relacionadas con un CUSTOMER en la tabla CUSTOMER. En otras palabras, la tabla ORDERS no puede contener informacin de un CUSTOMER que no se encuentre en la tabla CUSTOMER. La estructura de estas dos tablas ser la siguiente: Tabla CUSTOMER nombre de columna caracterstica SID Clave Primaria Last_Name First_Name Tabla ORDERS nombre de columna caracterstica Order_ID Clave Primaria Order_Date Customer_SID Clave Externa Amount En el ejemplo anterior, la columna Customer_SID en la tabla ORDERS es una clave externa sealando la columna SID en la tabla CUSTOMER. A continuacin se muestran ejemplos de cmo especificar la clave externa a la hora de crear la tabla ORDERS: MySQL: CREATE TABLE ORDERS (Order_ID integer, Order_Date date, Customer_SID integer, Amount double, Primary Key (Order_ID), Foreign Key (Customer_SID) references CUSTOMER(SID));

Oracle : CREATE TABLE ORDERS (Order_ID integer primary key, Order_Date date, Customer_SID integer references CUSTOMER(SID), Amount double); SQL Server: CREATE TABLE ORDERS (Order_ID integer primary key, Order_Date datetime, Customer_SID integer references CUSTOMER(SID), Amount double); A continuacin se presentan ejemplos para la especificacin de una clave externa al modificar una tabla: Esto asume que se ha creado la tabla ORDERS, y que la clave externa todava no se ha ingresado: MySQL: ALTER TABLE ORDERS ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID); Oracle: ALTER TABLE ORDERS ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID); SQL Server: ALTER TABLE ORDERS ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID);

CREATE VIEW VISTAS


Las vistas pueden considerarse como tablas virtuales. Generalmente hablando, una tabla tiene un conjunto de definiciones, y almacena datos fsicamente. Una vista tambin tiene un conjunto de definiciones, que se construye en la parte superior de la(s) tabla(s) u otra(s) vista(s), y no almacena datos fsicamente. La sintaxis para la creacin de una vista es la siguiente: CREATE VIEW "NOMBRE_VISTA" AS "Instruccin SQL" La Instruccin SQL puede ser cualquiera de las instrucciones SQL que hemos descripto en esta gua de referencia. Utilicemos un ejemplo simple para ilustrar. Supongamos que tenemos la siguiente tabla: Tabla Customer (First_Name char(50),

Last_Name char(50), Address char(50), City char(50), Country char(25), Birth_Date date) y deseamos crear una vista denominada V_Customer que contiene slo las columnas First_Name, Last_Name y Pas de esta tabla, ingresaramos CREATE VIEW V_Customer AS SELECT First_Name, Last_Name, Country FROM Customer Ahora tenemos una vista llamada V_Customercon la siguiente estructura: View V_Customer (First_Name char(50), Last_Name char(50), Country char(25)) Podemos utilizar tambin una vista para aplicar uniones a dos tablas. En este caso, los usuarios slo ven una vista en vez de dos tablas, y la instruccin SQL que los usuarios necesitan emitir se vuelve mucho ms simple. Digamos que tenemos las siguientes dos tablas: Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Tabla Geography region_name East East West West store_name Boston New York Los Angeles San Diego

y deseamos construir una vista que tenga ventas organizadas segn la regin. Colocaramos la siguiente instruccin SQL: CREATE VIEW V_REGION_SALES AS SELECT A1.region_name REGION, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2

WHERE A1.store_name = A2.store_name GROUP BY A1.region_name Esto nos brinda una vista, V_REGION_SALES, que se ha definido para las ventas de los negocios segn los registros de la regin. Si deseamos saber el contenido de esta vista, ingresamos, SELECT * FROM V_REGION_SALES Resultado: REGION SALES East 700 West 2050

CREATE INDEX
Los ndices nos ayudan a obtener datos de las tablas en forma ms rpida. Utilicemos un ejemplo para ilustrar este punto: Digamos que estamos interesados en leer en un libro de jardinera acerca de cmo cultivar pimientos. En vez de leer el libro desde el comienzo hasta que encontremos una seccin sobre pimientos, es mucho ms rpido para nosotros ir a la seccin ndice al final del libro, ubicar qu pginas contienen la informacin sobre pimientos, y luego dirigirnos a esas pginas directamente. Al dirigirnos al ndice primero ahorramos tiempo y seguramente es el mtodo ms eficiente para ubicar la informacin que necesitamos. El mismo principio se aplica para la obtencin de datos desde una tabla de base de datos. Sin un ndice, el sistema de base de datos lee a travs de toda la tabla (este proceso se denomina escaneo de tabla) para localizar la informacin deseada. Con el ndice correcto en su lugar, el sistema de base de datos puede entonces primero dirigirse al ndice para encontrar de dnde obtener los datos, y luego dirigirse a dichas ubicaciones para obtener los datos necesarios. Esto es mucho ms rpido. Por lo tanto, generalmente se recomienda crear ndices en tablas. Un ndice puede cubrir una o ms columnas. La sintaxis general para la creacin de un ndice es: CREATE INDEX "NOMBRE_NDICE" ON "NOMBRE_TABLA" (NOMBRE_COLUMNA) Digamos que tenemos la siguiente tabla: Tabla Customer (First_Name char(50), Last_Name char(50), Address char(50), City char(50),

Country char(25), Birth_Date date) Si deseamos crear un ndice tanto en Ciudad como en Pas, ingresaramos, CREATE INDEX IDX_CUSTOMER_LAST_NAME on CUSTOMER (Last_Name) Pour crer un index dans City et Country, il faut saisir CREATE INDEX IDX_CUSTOMER_LOCATION on CUSTOMER (City, Country) No hay una regla estricta respecto de cmo nombrar un ndice. El mtodo generalmente aceptado es colocar un prefijo, tal como IDX_, antes del nombre de un ndice para evitar la confusin con otros objetos de la base de datos. Tambin es una buena idea brindar informacin sobre qu tabla y columna(s) se utilizar el ndice. Por favor note que la sintaxis exacta para CREATE INDEX puede ser distinta segn las diferentes bases de datos. Debera consultar con su manual de referencia de base de datos para obtener la sintaxis precisa.

ALTER TABLE
Una vez que se crea la tabla en la base de datos, hay muchas ocasiones donde uno puede desear cambiar la estructura de la tabla. Los casos tpicos incluyen los siguientes: Agregar una Eliminar una Cambiar el nombre de - Cambiar el tipo de datos para una columna columna columna una columna

Por favor note que lo anterior no es una lista exhaustiva. Hay otras instancias donde ALTER TABLE se utiliza para cambiar la estructura de la tabla, tales como cambiar la especificacin de la clave primaria o agregar una restriccin nica para una columna. La sintaxis SQL para ALTER TABLE es ALTER TABLE "nombre_tabla" [modificar especificacin] [modificar especificacin] depende del tipo de modificacin que deseamos realizar. Para los usos mencionados anteriormente, las instrucciones [modificar especificacin] son:

Agregar una columna: ADD columna 1 tipos de datos para columna 1 Eliminar una columna: DROP columna 1

Cambiar el nombre de una columna: CHANGE nombre antiguo de la columna nuevo nombre de la columna tipos de datos para la nueva columna". Cambiar el tipo de datos para una columna: MODIFY columna 1 nuevo tipo de datos

Recorramos ejemplos para cada uno de lo anteriormente mencionado, utilizando la tabla cliente creada en la seccin CREATE TABLE, il convient de se reporter aux exemples mentionns ci-dessus. Tabla customer Column Name First_Name Last_Name Address City Country Birth_Date Data Type char(50) char(50) char(50) char(50) char(25) date

Primero, deseamos agregar una columna denominada Gender a esta tabla. Para hacerlo, ingresamos, ALTER table customer add Gender char(1) Estructura de la tabla resultante: Table customer Column Name First_Name Last_Name Address City Country Birth_Date Gender Data Type char(50) char(50) char(50) char(50) char(25) date char(1)

Luego, deseamos renombrar Address" a Addr. Para hacerlo, ingresamos, ALTER table customer change Address Addr char(50) Estructura de la tabla resultante: Table customer

Column Name First_Name Last_Name Addr City Country Birth_Date Gender

Data Type char(50) char(50) char(50) char(50) char(25) date char(1)

Luego, lo que queremos es cambiar el tipo de datos para Addr a 30 caracteres. Para hacerlo, ingresamos, ALTER table customer modify Addr char(30) Estructura de la tabla resultante: Table customer Column Name First_Name Last_Name Addr City Country Birth_Date Gender Data Type char(50) char(50) char(30) char(50) char(25) date char(1)

Finalmente, deseamos eliminar la columna Gender. Para hacerlo, ingresamos, ALTER table customer drop Gender Estructura de la tabla resultante: Table customer Column Name First_Name Last_Name Addr City Country Birth_Date Data Type char(50) char(50) char(30) char(50) char(25) date

DROP TABLE
A veces podemos decidir que necesitamos eliminar una tabla en la base de datos por alguna razn. De hecho, sera problemtico si no podemos hacerlo ya que esto creara una pesadilla de mantenimiento para DBA. Afortunadamente, SQL nos permite hacerlo, ya que podemos utilizar el comando DROP TABLE . La sintaxis para DROP TABLE es DROP TABLE "nombre_tabla" Entonces, si deseamos eliminar una tabla denominada cliente que creamos en la seccin CREATE TABLE, simplemente ingresamos DROP TABLE customer. TRUNCATE TABLE A veces deseamos eliminar los datos en una tabla. Una forma de hacer esto es con DROP TABLE , que vimos en la ltima seccinPero Si deseamos simplemente deshacernos de los datos pero no de la tabla en s? Para esto, podemos utilizar el comando TRUNCATE TABLE. La sintaxis para TRUNCATE TABLE es TRUNCATE TABLE "nombre_tabla" Entonces, si deseamos truncar una tabla denominada cliente que creamos en SQL CREATE TABLE, simplemente ingresamos TRUNCATE TABLE customer

INSERT INTO
En las secciones anteriores, hemos visto cmo obtener informacin de tablas. Pero Cmo se ingresan estas filas de datos en estas tablas en primer lugar? Esto es lo que se trata en esta seccin, que explica la instruccin INSERT, y en la siguiente seccin, que explica la instruccin UPDATE. En SQL, hay fundamental y bsicamente dos formas para INSRERdatos en una tabla: Una es insertar una fila por vez, y la otra es insertar filas mltiples por vez. Primero observemos como podemos INSRER datos a travs de una fila por vez: La sintaxis para insertar datos en una tabla mediante una fila por vez es la siguiente: INSERT INTO "nombre_tabla" ("columna1", "columna2", ...) VALUES ("valor1", "valor2", ...) Suponiendo que tenemos una taba con la siguiente estructura,

Tabla Store_Information Column Name store_name Sales Date Data Type char(50) float datetime

y ahora deseamos insertar una fila adicional en la tabla que represente los datos de ventas para Los ngeles el 10 de enero de 1999. En ese da, este negocio tena $900 dlares estadounidenses en ventas. Por lo tanto, utilizaremos la siguiente escritura SQL: INSERT INTO Store_Information (store_name, Sales, Date) VALUES ('Los Angeles', 900, '10-Jan-1999') El segundo tipo de INSERT INTO nos permite insertar filas mltiples en una tabla. A diferencia del ejemplo anterior, donde insertamos una nica fila al especificar sus valores para todas las columnas, ahora utilizamos la instruccin SELECT para especificar los datos que deseamos insertar en la tabla. Si est pensando si esto significa que est utilizando informacin de otra tabla, est en lo correcto. La sintaxis es la siguiente: INSERT INTO "tabla1" ("columna1", "columna2", ...) SELECT "columna3", "columna4", ... FROM "tabla2" Note que esta es la forma ms simple. La instruccin entera puede contener fcilmente clusulas WHERE, GROUP BY, y HAVING, as como tambin uniones y alias. Entonces por ejemplo, si deseamos tener una tabla Store_Information, que recolecte la informacin de ventas para el ao 1998, y ya conoce en donde reside la fuente de datos en tabala Sales_Information table, ingresaremos: INSERT INTO Store_Information (store_name, Sales, Date) SELECT store_name, Sales, Date FROM Sales_Information WHERE Year(Date) = 1998 Aqu hemos utilizado la sintaxis de Servidor SQL para extraer la informacin anual por medio de una fecha. Otras bases de datos relacionales pueden tener sintaxis diferentes. Por ejemplo, en Oracle, utilizar to_char (date,'yyyy')=1998.

UPDATE
Una vez que hay datos en la tabla, podramos tener la necesidad de modificar los mismos. Para hacerlo, utilizamos el comando UPDATE. La sintaxis para esto es,

UPDATE "nombre_tabla" SET "columna_1" = [nuevo valor] WHERE {condicin} Por ejemplo, digamos que actualmente tenemos la tabla a continuacin: Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

y notamos que las ventas para Los Angeles el 08/01/1999 es realmente de 500 en vez de 300 dlares estadounidenses, y que esa entrada en particular necesita actualizarse. Para hacerlo, utilizamos el siguiente SQL: UPDATE Store_Information SET Sales = 500 WHERE store_name = "Los Angeles" AND Date = "08-Jan-1999" La tabla resultante ser vera Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 500 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

En este caso, hay slo una fila que satisface la condicin en la clusula WHERE. Si hay mltiples filas que satisfacen la condicin, todas ellas se modificarn. Tambin es posible UPDATEmltiples columnas al mismo tiempo. La sintaxis en este caso se vera como la siguiente: UPDATE "nombre_tabla" SET colonne 1 = [[valor1], colonne 2 = [valor2] WHERE {condicin}

DELETE FROM
A veces podemos desear deshacernos de los registros de una tabla. Para ello, utilizamos el comando DELETE FROM. La sintaxis para esto es, DELETE FROM "nombre_tabla" WHERE {condicin} Es ms fcil utilizar un ejemplo. Por ejemplo, digamos que actualmente tenemos la siguiente tabla: Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

y decidimos no mantener ninguna informacin sobre Los ngeles en esta tabla. Para lograrlo, ingresamos el siguiente SQL: DELETE FROM Store_Information WHERE store_name = "Los Angeles" Ahora el contenido de la tabla se vera, Tabla Store_Information store_name Sales Date San Diego 250 07-Jan-1999 Boston 700 08-Jan-1999

SQL AVANZADO
UNION
El propsito del comando SQL UNION es combinar los resultados de dos consultas juntas. En este sentido, UNION es parecido a Join, ya que los dos se utilizan para informacin relacionada en mltiples tablas. Una restriccin de UNION es que todas las columnas correspondientes necesitan ser del mismo tipo de datos. Tambin, cuando utilizamos UNION, slo se seleccionan valores distintos (similar a SELECT DISTINCT). La sintaxis es la siguiente: [Instruccin SQL 1] UNION [Instruccin SQL 2] Supongamos que tenemos las siguientes dos tablas, Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Tabla Internet_Sales Date 07-Jan-1999 10-Jan-1999 11-Jan-1999 12-Jan-1999 Sales 250 535 320 750

y deseamos saber de todas las fechas donde hay una operacin de venta. Para hacerlo, utilizamos la siguiente instruccin SQL: SELECT Date FROM Store_Information UNION SELECT Date FROM Internet_Sales Resultado:

Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 10-Jan-1999 11-Jan-1999 12-Jan-1999 Por favor note que si ingresamos "SELECT DISTINCT Date" para cada o ambas instrucciones SQL, obtendremos el mismo conjunto de resultados.

UNION ALL
El propsito del Comando SQL UNION ALL es tambin combinar los resultados de dos consultas juntas. La diferencia entre UNION ALL y UNION es que, mientras UNION slo selecciona valores distintos, UNION ALL selecciona todos los valores. La sintaxis para UNION ALL es la siguiente: [Instruccin SQL 1] UNION ALL [Instruccin SQL 2] Utilicemos el mismo ejemplo de la seccin anterior para ilustrar la diferencia. Supongamos que tenemos las siguientes dos tablas, Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Tabla Internet_Sales Date 07-Jan-1999 10-Jan-1999 11-Jan-1999 12-Jan-1999 Sales 250 535 320 750

y deseamos encontrar las fechas en donde se realiz una operacin de venta en un negocio como as tambin las fechas donde hay una venta a travs de Internet. Para hacerlo, utilizamos la siguiente instruccin SQL:

SELECT Date FROM Store_Information UNION ALL SELECT Date FROM Internet_Sales Resultado: Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999 07-Jan-1999 10-Jan-1999 11-Jan-1999 12-Jan-1999

INTERSECT
Parecido al comando UNION, INTERSECT tambin opera en dos instrucciones SQL. La diferencia es que, mientras UNIONacta fundamentalmente como un operador OR (O) (el valor se selecciona si aparece en la primera o la segunda instruccin), el comando INTERSECT acta como un operador AND (Y) (el valor se selecciona si aparece en ambas instrucciones). La sintaxis es la siguiente: [Instruccin SQL 1] INTERSECT [Instruccin SQL 2] Digamos que tenemos las siguientes dos tablas: Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Tabla Internet_Sales Date Sales 07-Jan-1999 250 10-Jan-1999 535

11-Jan-1999 320 12-Jan-1999 750 y deseamos encontrar todas las fechas donde hay ventas tanto en el negocio como en Internet. Para hacerlo, utilizamos la siguiente instruccin SQL: SELECT Date FROM Store_Information INTERSECT SELECT Date FROM Internet_Sales Resultado: Date 07-Jan-1999 Por favor note que el comando INTERSECT slo arrojar valores distintivos.

MINUS
MINUSopera en dos instrucciones SQL. Toma todos los resultados de la primera instruccin SQL, y luego sustrae aquellos que se encuentran presentes en la segunda instruccin SQL para obtener una respuesta final. Si la segunda instruccin SQL incluye resultados que no estn presentes en la primera instruccin SQL, dichos resultados se ignoran. La sintaxis es la siguiente: [Instruccin SQL 1] MINUS [Instruccin SQL 2] Continuemos con el mismo ejemplo: Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Tabla Internet_Sales Date Sales 07-Jan-1999 250 10-Jan-1999 535

11-Jan-1999 320 12-Jan-1999 750 y deseamos encontrar todas las fechas donde hay ventas en el negocio, pero no aquellas realizadas por Internet. Para hacerlo, utilizamos la siguiente instruccin SQL: SELECT Date FROM Store_Information MINUS SELECT Date FROM Internet_Sales Resultado: Date 05-Jan-1999 08-Jan-1999 "05-Jan-1999", "07-Jan-1999",et "08-Jan-1999" son los valores distintivos arrojados desde "SELECT Date FROM Store_Information." Tambin se arroja "07-Jan-1999" de la segunda instruccin SQL, "SELECT Date FROM Internet_Sales," de este modo se lo excluye del conjunto final de resultados. Por favor note que el comando MINUSslo arrojar valores distintos. Algunas bases de datos pueden utilizar EXCEPT en vez de MINUS. Por favor verifique la documentacin para su base de datos especfica para el uso apropiado.

SUBCONSULTA
Es posible incorporar una instruccin SQL dentro de otra. Cuando esto se hace en las instrucciones WHERE o HAVING, tenemos una construccin de subconsulta. La sintaxis es la siguiente: SELECT "nombre1_columna" FROM "nombre1_tabla" WHERE "nombre2_columna" [Operador de Comparacin] (SELECT "nombre3_columna" FROM "nombre2_tabla" WHERE [Condicin]) [Operador de Comparacin] podran ser operadores de igualdad tales como =, >, <, >=, <=. Tambin puede ser un operador textual como "LIKE". La parte en rojo se considera como la "consulta interna", mientras que la parte en verde se considera como la "consulta externa".

Utilisons le mme exemple que celui que nous avons utilis pour illustrer les jointures SQL : Table Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Table Geography region_name East East West West store_name Boston New York Los Angeles San Diego

et en utilisant une sous-requte pour trouver les ventes de tous les magasins dans la rgion West (Ouest), il faudra utiliser linstruction SQL suivante : SELECT SUM(Sales) FROM Store_Information WHERE Store_name IN (SELECT store_name FROM Geography WHERE region_name = 'West') Rsultat : SUM(Sales) 2050 Dans cet exemple, au lieu de joindre directement les deux tables et dajouter seulement le montant des ventes des magasins de la rgion West (Ouest), nous allons dabord utiliser la sous-requte pour trouver les magasins situs dans la rgion West (Ouest), puis additionner le montant des ventes de ces magasins. Dans lexemple ci-dessus, la requte interne est dabord excute, puis le rsultat est envoy la requte externe. Ce type de sous-requte est appel sous-requte simple. Si la requte interne dpend de la requte externe, nous aurons une sous-requte corrle. Vous trouverez ci-dessous un exemple de de sous-requte corrle : SELECT SUM(a1.Sales) FROM Store_Information a1 WHERE a1.Store_name IN

(SELECT store_name FROM Geography a2 WHERE a2.store_name = a1.store_name) Notez la clause WHERE dans la requte interne, o la condition ncessite une table de la requte externe.

EXISTS
En la seccin anterior, utilizamos INpara enlazar la consulta interna y la consulta externa en una instruccin de subconsulta. INno es la nica forma de hacerlo uno puede utilizar muchos operadores tales como >, <, o =. EXISTSes un operador especial que describiremos en esta seccin. EXISTSsimplemente verifica si la consulta interna arroja alguna fila. Si lo hace, entonces la consulta externa procede. De no hacerlo, la consulta externa no se ejecuta, y la totalidad de la instruccin SQL no arroja nada. La sintaxis para EXISTS es SELECT "nombre1_columna" FROM "nombre1_tabla" WHERE EXISTS (SELECT * FROM "nombre2_tabla" WHERE [Condicin]) Por favor note que en vez de *, puede seleccionar una o ms columnas en la consulta interna. El efecto ser idntico. Utilizamos las mismas tablas de ejemplos: Tabla Store_Information store_name Los Angeles San Diego Los Angeles Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

Tabla Geography region_name East East West West store_name Boston New York Los Angeles San Diego

colocaramos la siguiente consulta SQL: SELECT SUM(Sales) FROM Store_Information WHERE EXISTS (SELECT * FROM Geography WHERE region_name = 'West') Obtendremos el siguiente resultado: SUM(Sales) 2750 Al principio, esto puede parecer confuso, debido a que la subsequencia incluye la condicin [region_name = 'West'], an as la consulta sum los negocios para todas las regiones. Si observamos de cerca, encontramos que debido a que la subconsulta arroja ms de 0 filas, la condicin EXISTS es verdadera, y la condicin colocada dentro de la consulta interna no influencia la forma en que se ejecuta la consulta externa.

SQL CASE >>

CASE se utiliza para brindar un tipo de lgica "si-entonces-otro" para SQL. Su sintaxis es: SELECT CASE ("nombre_columna") WHEN "condicin1" THEN "resultado1" WHEN "condicin2" THEN "resultado2" ... [ELSE "resultadoN"] END FROM "nombre_tabla" "condicin" puede ser un valor esttico o una expresin. La clusula ELSE es opcional. En nuestra Tabla Store_Information de ejemplo, Tabla Store_Information store_name Los Angeles San Diego San Francisco Boston Sales 1500 250 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

si deseamos multiplicar las sumas de ventas de 'Los Angeles' por 2 y las sumas de ventas de 'San Diego' por 1,5, ingresamos, SELECT store_name, CASE store_name WHEN 'Los Angeles' THEN Sales * 2 WHEN 'San Diego' THEN Sales * 1.5 ELSE Sales END "Nuevas Ventas", Date FROM Store_Information "Nuevas Ventas" es el nombre que se le otorga a la columna con la instruccin CASE. Resultado: store_name Los Angeles San Diego San Francisco Boston Nuevas Ventas 3000 375 300 700 Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999

SQL Sintaxis >>


En esta pgina, enumeramos la sintaxis SQL para cada uno de los comandos SQL en esta gua de referencia. Para obtener explicaciones detalladas para cada sintaxis SQL, por favor dirjase a la seccin individual haciendo clic en la palabra clave. El propsito de esta pgina es brindar una pgina de referencia rpida para la sintaxis SQL. Le sugerimos que agregue esta pgina a favoritos ahora presionando Control-D para que pueda tener esta pgina de sintaxis a mano. Select SELECT "nom de colonne" FROM "nombre_tabla" Distinct SELECT DISTINCT "nombre_columna" FROM "nombre_tabla" Where SELECT "nombre_columna" FROM "nombre_tabla" WHERE "condition" And/Or SELECT "nombre_columna" FROM "nombre_tabla" WHERE "condicin simple" {[AND|OR] "condicin simple"}+ In SELECT "nombre_columna" FROM "nombre_tabla" WHERE "nombre_columna" IN ('valor1', 'valor2', ...) Between SELECT "nombre_columna" FROM "nombre_tabla" WHERE "nombre_columna" BETWEEN 'valor1' AND 'valor2' Like SELECT "nombre_columna" FROM "nombre_tabla" WHERE "nombre_columna" LIKE {patrn} Order By SELECT "nombre_columna" FROM "nombre_tabla"

[WHERE "condicin"] ORDER BY "nombre_columna" [ASC, DESC] Count SELECT COUNT("nombre_columna") FROM "nombre_tabla" Group By SELECT "nombre_columna 1", SUM("nombre_columna 2") FROM "nombre_tabla" GROUP BY "nombre_columna 1" Having SELECT "nombre_columna 1", SUM("nombre_columna 2") FROM "nombre_tabla" GROUP BY "nombre_columna 1" HAVING (condicin de funcin aritmtica) Create Table CREATE TABLE "nombre_tabla" ("columna 1" "tipo_de_datos_para_columna_1", "columna 2" "tipo_de_datos_para_columna_2", ... ) Drop Table DROP TABLE "nombre_tabla" Truncate Table TRUNCATE TABLE "nombre_tabla" Insert Into INSERT INTO "nombre_tabla" ("colonne 1", "colonne 2", ...) valorS ("valor 1", "valor 2", ...) Update UPDATE "nombre_tabla" SET "colonne 1" = [nuevo valor] WHERE {condition} Delete From DELETE FROM "nombre_tabla" WHERE {condicin}

Contenido
SQL................................................................................................................. 1

COMANDOS SQL................................................................2
SELECT.....................................................................................................2 DISTINCT..................................................................................................2 WHERE.....................................................................................................3 AND OR....................................................................................................4 SQL IN >>................................................................................................5 SQL BETWEEN >>....................................................................................6 SQL LIKE >>............................................................................................7 SQL ORDER BY >>...................................................................................8 SQL FUNCIONES >>...............................................................................10 SQL COUNT >>......................................................................................11 SQL GROUP BY >>.................................................................................11 SQL HAVING >>.....................................................................................12 SQL ALIAS >>........................................................................................13 SQL JOIN >>..........................................................................................15 SQL Outer Join >>.................................................................................16 SQL CONCATENAR >>...........................................................................17 SQL SUBSTRING >>...............................................................................19 SQL TRIM >>.........................................................................................20

MANIPULACION DE TABLAS..............................................21
CREATE TABLE.......................................................................................21 SQL CONSTRAINT...................................................................................22 CLAVE PRIMARIA....................................................................................23 CLAVE EXTERNA.....................................................................................24 CREATE VIEW VISTAS..........................................................................26

CREATE INDEX.......................................................................................28 ALTER TABLE..........................................................................................29 DROP TABLE...........................................................................................32 INSERT INTO...........................................................................................32 UPDATE .................................................................................................33 DELETE FROM........................................................................................35

SQL AVANZADO...............................................................36
UNION.................................................................................................... 36 UNION ALL..............................................................................................37 INTERSECT.............................................................................................38 MINUS.................................................................................................... 39 SUBCONSULTA.......................................................................................40 EXISTS....................................................................................................42 SQL CASE >>.........................................................................................43

SQL Sintaxis >>..............................................................45


Contenido.....................................................................................................47

Potrebbero piacerti anche