Está en la página 1de 28

Manual de SQL

Por: Ing. Rocio M. Rangel Garca El SQL (Structure Query Language), es un lenguaje de consulta estructurado establecido claramente como el lenguaje de alto nivel estndar para sistemas de base de datos relacionales. Los responsables de publicar este lenguaje como estndar, fueron precisamente los encargados de publicar estndar, la ANSI (Instituto Americano de Normalizacin) y la ISO (organismo Internacional de Normalizacin). Es por lo anterior que este lenguaje lo vas a encontrar en cualquiera de los DBMS relacionales que existen en la actualidad, por ejemplo, ORACLE, SYBASES, SQL SERVER por mencionar algunos. El SQL agrupa tres tipos de sentencias con objetivos particulares, en los siguientes lenguajes: y y y Lenguaje de Definicin de Datos (DDL, Data Definiton Language) Lenguaje de Manipulacin de Datos (DML, Data Management Language) Lenguaje de Control de Datos (DCL, Data Control Language)

Lenguaje de Definicin de Datos (DDL, Data Definiton Language)


Grupo de sentencias del SQL que soportan la definicin y declaracin de los objetos de la base de datos. Objetos tales como: la base de datos misma(DATABASE), las tablas(TABLE), las Vistas (VIEW), los ndices (INDEX), los procedimientos almacenados (PROCEDURE), los disparadores (TRIGGER), Reglas (RULE), Dominios (Domain) y Valores por defecto (DEFAULT). CREATE, ALTER y DROP

Lenguaje de Manipulacin de Datos (DML, Data Management Language)


Grupo de sentencias del SQL para manipular los datos que estn almacenados en las bases de datos, a nivel de filas (tuplas) y/o columnas (atributos). Ya sea que se requiera que los datos sean modificados, eliminados, consultados o que se agregaren nuevas filas a las tablas de las base de datos.

INSERT, UPDATE, DELETE y SELECT

Lenguaje de Control de Datos (DCL, Data Control Language)


Grupo de sentencias del SQL para controlar las funciones de administracin que realiza el DBMS, tales como la atomicidad y seguridad. COMMIT TRANSACTION, ROLLBACK TRANSACTION, GRANT REVOKE

Pasos para implementar una la base de datos:


1. Definir en el disco duro, el rea fsica que contendr las tablas de la base de datos. Sentencia SQL --> CREATE DATABASE. 2. Crear las diferentes tablas de la base de dato. Sentencia SQL --> CREATE TABLE. 3. Insertar las filas de las diferentes tablas, sin violar la integridad de datos. Sentencia SQL --> INSERT INTO. 4. Actualizar los datos que cambien con el tiempo en las diferentes tablas. Sentencia SQL --> UPDATE. 5. Eliminar las filas que ya no se requieran en las diferentes tablas. Sentencia SQL --> DELETE. 6. Realizar las consultas deseadas a las tablas de la base de datos a travs de la poderosa sentencia de consultas del SQL, llamada SELECT. 7. Dar nombre a las consultas (elaboradas en el paso No.6) cuando se requiera ocultar el diseo y columnas de las tablas a travs de la creacin de vistas lgicas. Sentencia SQL ----> CREATE VIEW.

Crear una base de datos (Sentencia CREATE DATABASE):


SINTAXIS: create database nombre_basededatos ON PRIMARY ( name = nombre_basededatos _data, filename = 'c:\BDTRANSITO.mdf', /*Direccin donde se crea*/ size = 3mb, /*Tamao de la base de datos*/ maxsize = 7mb, /*Tamao de maximo de la base de datos*/ filegrowth = 2 mb /*crecimiento de la base de datos*/ ) log on ( name = BDTRANSITO_log, filename = 'c:\BDTRANSITO.ldf', size = 3mb, maxsize = 7mb, filegrowth = 2 mb ) Nota: Para crear la base de datos puede simplemente poner la instruccin CREATE DATABASE Nombre_Basededatos, y las especificaciones del tamao de la base de datos sern las estndares. Una vez creada la base de datos, se generan tres archivos:
Tipo de archivo Archivo de datos principal Archivo de datos secundario Archivo de registro de transacciones Extensin de nombre de archivo recomendada .mdf .ndf .ldf

Nota: Antes de proceder a crear una base de datos debemos averiguar si existe otra base de datos con el mismo nombre para borrarla y crear la nuestra. Para ello se utiliza el siguiente cdigo en el Query Analyser de SQLSERVER :

IF DB_ID('nombre_basededatos) IS NOT NULL BEGIN DROP DATABASE nombre_basededatos END

Sentencia CREATE
Dentro del Lenguaje de Definicin (DDL) del SQL, la sentencia CREATE permiten la definicin o creacin de muchos objetos de la base de datos tales como: tablas (esquemas), ndices, vistas, dominios, ligaduras de integridad y procedimientos. En esta oportunidad veremos las sentencias correspondientes a la creacin de los esquemas o lo que es lo mismo las tablas que contendrn los datos de la base de datos, La sentencia CREATE TABLE. La sentencia CREATE TABLE, define el nombre de la tabla, las columnas con su tipo de datos, las ligaduras de integridad que vigilan el valor que se guarde como dato en las columnas o atributos sean llaves o no. Sintaxis: CREATE TABLE nombre_tabla ( campo1 tipo dato [NULL/NOT NULL] | CHECK (expresinLgica) | [DEFAULT expresinConstante],campo2 tipo dato [NULL/NOT NULL] | CHECK expresinLgica) | [DEFAULT expresinConstante ],campo-N,PRIMARY KEY(campo_llave),FOREIGN KEY (campo_llave) REFERENCES tabla2 campo_llave-tabla2) ) Nota: Antes de crear las tablas en la base de datos, debemos asegurarnos de que estamos en la Base de datos a la que pertenecern las tablas; debemos ponerla en uso, para ello utilizamos la sentencia USE nombre_basededatos Ligaduras Esto de las ligaduras es muy importante que le presenten atencin. Ayuda a que dejes la vigilancia de la entrada de datos al DBMS y no al que programa la aplicacin que a veces puede darse que no haga tal validacin en la entrada de los datos. Esto tiene la ventaja de ahorrar

lneas de cdigos en los programas y no te que se implementan en la sentencia SQL CREATE TABLE.

Eliminacin de Tablas (Sentencia DROP TABLE):


La sentencia para eliminar una tabla y por ende todos los objetos asociados con esa tabla como: las vistas, disparadores, etc., es DROP TABLE. Sintaxis: DROP TABLE nombre_tabla

Sentencia ALTER
Despus que una tabla ha sido utilizada durante algn tiempo, los usuarios suelen descubrir que desean almacenar informacin adicional con respecto a las tablas. Supongamos una tabla T1, cuyos campos son a1, a2, a3, a4 y a5; como se muestra a continuacin:

T1
a1 a2 a3 a4 a5

Los cambios que se pueden realizar con la sentencia SQL ALTER TABLE son: 1. Aadir una definicin de la columna de una tabla. Puede crearse con valores nulos o valores ALTER TABLE nombre_de_la_tabla ADD nombre_de_columna_nueva TIPO_DE_DATO NULL [ CONSTRAINT nombre_de_nueva_restriccion CHECK / DEFAULT] Ejemplo: ALTER TABLE T1 ADD a6 VARCHAR(30) NULL 2. Eliminar una columna de la tabla. Pero antes de su eliminacin deben ser eliminados por ALTER TABLE todas las restricciones que estn definidas sobre esta columna. Ejemplo: ALTER TABLE T1 DROP COLUMN a4 3. Eliminar la definicin de: llave primaria, fornea o restricciones de ligaduras de integridad (check), existentes para una tabla. Esta accin no elimina a la columna con sus valores, ella permanece tal cual como esta, slo se elimina su definicin. Este procedimiento varia de DBMS, con SQL SEVER, primero se debe averiguar el nombre de la restriccin o ligadura de integridad (CONSTRAINT), se ejecuta el procedimiento almacenado SP_HELP nombre_de_Tabla y en el resultado se busca en la columna constraint_name a la derecha de constraint_type para saber el nombre que el DBMS le puso a la restriccin de llave primaria y luego se ejecuta la sentencia ALTER TABLE con el nombre de la definicin de llave primaria a eliminar. Ejemplo: ALTER TABLE T1 DROP CONSTRAINT PK__T1__numeroqueasignaelDBMS Esto elimina cualquiera ligadura de integridad. Para verificar al ejecutar nuevamente SP_HELP nombre_de_Tabla, en el resultado ya no sale en constraint_type el nombre de la llave primaria.

4. Definir una llave primaria para una tabla. La columna(s) a la cual se le dar esta responsabilidad debe contener previamente valores nicos por fila. Ejemplo: ALTER TABLE T1 ADD PRIMARY KEY (a1,a2) 5. Definir una nueva llave fornea para una tabla. La columna a definir como llave fornea debe contener previamente valores que corresponden a la llave primaria de otra tabla. Es similar al descrito en llave primaria, slo que la palabra clave reservada es ADD FOREIGN KEY. 6. Se puede habilitar o inhabilitar los disparadores (trigger) en una tabla. ALTER TABLE nombre_de_la_tabla ENABLE TRIGGER nombre_de_trigger ALTER TABLE nombre_de_la_tabla DISABLE TRIGGER nombre_de_trigger La persona que puede realizar esta operacin de alterar la tabla puede ser: el DBA o el creador de la tabla, u otra persona que el creador o DBA haya autorizado. Para la ltima situacin en que a una persona se le otorga el permiso en la operacin, el usuario, debe calificar el nombre de la tabla con el nombre de su creador por delante y alterar la definicin de la tabla de otro usuario, por ejemplo: ALTER TABLE nombredueo.nombretabla

Insertar registros en una tabla (Sentencia INSERT INTO):


Para insertar un nico Registro: Sintaxis: INSERT INTO Tabla [(campo1, campo2, .., campoN)] VALUES (valor1, valor2, ..., valorN) Esta sentencia guarda en el campo1 el valor1, en el campo2 y valor2 y as sucesivamente. Hay que prestar especial atencin a acotar entre comillas simples (') los valores literales (cadenas de caracteres) y las fechas indicarlas en formato mm-dd-aa y entre caracteres de almohadillas (#), para los nmeros no hay acotacin. Si se omite la lista de campos, la clusula VALUES debe incluir un valor para cada campo de la tabla, de otra forma fallar INSERT.

Para insertar Registros de otra Tabla: Sintaxis: INSERT INTO nombre_tabla [IN base_externa] (campo1, campo2, ..., campoN) SELECT TablaOrigen.campo1, TablaOrigen.campo2, ..., TablaOrigen.campoN FROM TablaOrigen En este caso se seleccionarn los campos 1,2, ..., n de la tabla origen y se grabarn en los campos 1,2,.., n de la Tabla. La condicin SELECT puede incluir la clusula WHERE para filtrar los registros a copiar. Si Tabla y TablaOrigen poseen la misma estructura podemos simplificar la sintaxis a: INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen De esta forma los campos de TablaOrigen se grabarn en Tabla, para realizar esta operacin es necesario que todos los campos de TablaOrigen estn contenidos con igual nombre en Tabla. Con otras palabras que Tabla posea todos los campos de TablaOrigen (igual nombre e igual tipo). Se puede utilizar la instruccin INSERT INTO para agregar un registro nico a una tabla, utilizando la sintaxis de la consulta de adicin de registro nico tal y como se mostr anteriormente. En este caso, su cdigo especifica el nombre y el valor de cada campo del registro. Debe especificar cada uno de los campos del registro al que se le va a asignar un valor as como el valor para dicho campo. Cuando no se especifica dicho campo, se inserta el valor predeterminado o Null. Los registros se agregan al final de la tabla. Tambin se puede utilizar INSERT INTO para agregar un conjunto de registros pertenecientes a otra tabla o consulta utilizando la clusula SELECT ... FROM como se mostr anteriormente en la sintaxis de la consulta de adicin de mltiples registros. En este caso la clusula SELECT especifica los campos que se van a agregar en la tabla destino especificada. La tabla destino u origen puede especificar una tabla o una consulta. Si la tabla destino contiene una clave principal, hay que asegurarse que es nica, y con valores no-Null ; si no es as, no se agregarn los registros. Si se agregan registros a una tabla con un campo Contador , no se debe incluir

el campo Contador en la consulta. Se puede emplear la clusula IN para agregar registros a una tabla en otra base de datos. Se pueden averiguar los registros que se agregarn en la consulta ejecutando primero una consulta de seleccin que utilice el mismo criterio de seleccin y ver el resultado. Una consulta de adicin copia los registros de una o ms tablas en otra. Las tablas que contienen los registros que se van a agregar no se vern afectadas por la consulta de adicin. En lugar de agregar registros existentes en otra tabla, se puede especificar los valores de cada campo en un nuevo registro utilizando la clusula VALUES.

Eliminar registros (Sentencia DELETE):


Crea una consulta de eliminacin que elimina los registros de una o ms de las tablas listadas en la clusula FROM que satisfagan la clusula WHERE. Esta consulta elimina los registros completos, no es posible eliminar el contenido de algn campo en concreto. Sintaxis: DELETE FROM nombre_tabla WHERE criterio DELETE es especialmente til cuando se desea eliminar varios registros. Si desea eliminar todos los registros de una tabla, eliminar la propia tabla es ms eficiente que ejecutar una consulta de borrado; embargo podramos utilizar todava la estructura de la tabla, en cuyo caso la sintaxis es: DELETE FROM nombre_tabla Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede deshacer la operacin. Si desea saber qu registros se eliminarn, primero examine los resultados de una consulta de seleccin que utilice el mismo criterio y despus ejecute la consulta de borrado. Mantenga copias de seguridad de sus datos en todo momento. Si elimina los registros equivocados podr recuperarlos desde las copias de seguridad.

Sentencia UPDATE:
Crea una consulta de actualizacin que cambia los valores de los campos de una tabla especificada basndose en un criterio especfico.

Sintaxis: UPDATE nombre_tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorN WHERE Criterio UPDATE es especialmente til cuando se desea cambiar un gran nmero de registros o cuando stos se encuentran en mltiples tablas. Puede cambiar varios campos a la vez. UPDATE no genera ningn resultado. Para saber qu registros se van a cambiar, hay que examinar primero el resultado de una consulta de seleccin que utilice el mismo criterio y despus ejecutar la consulta de actualizacin. Si en una consulta de actualizacin suprimimos la clusula WHERE todos los registros de la tabla sealada sern actualizados.

EJEMPLO:
Antes de proceder a crear la base de datos debemos averiguar si existe otra base de datos llamada VENTAS para borrarla y crear la nuestra. Recuerde no utilizar estas sentencias en un servidor de produccin de SQL SERVER. Corra el siguiente cdigo en el Query Analyser de SQLSERVER: IF DB_ID('VENTAS') IS NOT NULL BEGIN DROP DATABASE VENTAS END A continuacin la sentencia CREATE DATABASE, que usaremos para la creacin del espacio que contendr la base de datos VENTAS es el siguiente: CREATE DATABASE VENTAS ON PRIMARY ( NAME=VENTAS_data, FILENAME='c:\VENTAS.mdf', SIZE=5MB, MAXSIZE=10MB, FILEGROWTH=1MB )

LOG ON ( NAME=VENTAS_log, FILENAME='c:\VENTAS.ldf', SIZE=5MB, MAXSIZE=10MB, FILEGROWTH=1MB ) En el ejemplo que se acaba de presentar se crea un archivo principal de extensin mdf de tamao inicial de 5 MB, cuando este espacio se agote, este se expandir en 1 MB ms para tener espacio libre y meter ms registros o tablas y cuando se agote nuevamente el archivo fsico de 1MB, ste se expandir en 1 MB nuevamente y as en lo sucesivo hasta alcanzar el mximo 10 MB ya de ah no crecer ms. A continuacin se muestran las sentencias CREATE TABLE que crean las tablas de la Base de Datos VENTAS. Es muy importante el orden en que se crean las tablas. Se debe a que no debe violarse la referencia cruzada entre las ligaduras de integridad del tipo referencial (es decir llave primaria con forneas). Por ejemplo no puede crear la tabla de PEDIDO primero que la tabla de CLIENTE, pues la tabla de PEDIDO hace referencia a CLIENTE. Primero crear las tablas que slo tienen llave primaria y luego las tablas que incluyen llaves forneas. En nuestro caso, primero creamos a las tablas: CLIENTE, ARTICULO y VENDEDOR y despus a PEDIDO y a DETALLE_PED. Antes de crear las tablas de la base de datos, debemos poner en uso la base de datos que acabamos de crear, para ello escribimos la siguiente sentencia: USE VENTAS Creacin de Tabla Cliente CREATE TABLE CLIENTE (NUMCLI INT not null, NOMCLI NVARCHAR(30) not null, DIRCLI NVARCHAR(30), FAX INT, E_MAIL NVARCHAR(30) DEFAULT ('Desconocido'), SALD_0_30 DECIMAL (10,2), SALD_31_60 DECIMAL (10,2), SALD_61_90 DECIMAL (10,2), primary key (NUMCLI) )

Creacin de Tabla Vendedor CREATE TABLE VENDEDOR (CODVEND INT not null, NOMVEND NVARCHAR(20) not null,APELLVEND NVARCHAR(20) not null, DIRVEND NVARCHAR(30), TELVEND INT, E_MAIL NVARCHAR(30) DEFAULT('Desconocido'), CUOTA DECIMAL (10,2), VENTAS DECIMAL (10,2), primary key (CODVEND) ) Creacin de Tabla Artculo CREATE TABLE ARTICULO (NUMART NVARCHAR(4) not null PRIMARY KEY, DESCRIPCION NVARCHAR(30), PRECIO DECIMAL (10,2) NOT NULL CHECK (PRECIO >= 0.00), EXISTENCIA INT, CATEGORIA_ART NVARCHAR (15)) Creacin de Tabla Pedido CREATE TABLE PEDIDO (NUMPED INT not null PRIMARY KEY, NUMCLI INT not null, FECHA_PED DATETIME, TOT_DESC DECIMAL (10,2), FOREIGN KEY (NUMCLI) REFERENCES CLIENTE(NUMCLI) , CODVEND INT FOREIGN KEY REFERENCES VENDEDOR(CODVEND)) Creacin de Tabla Detalle_Ped CREATE TABLE DETALLE_PED (NUMPED INT not null, NUMART NVARCHAR (4) not null, CANTIDAD INT CHECK (CANTIDAD >= 0), PRIMARY KEY (NUMPED,NUMART), FOREIGN KEY (NUMPED) REFERENCES PEDIDO(NUMPED), FOREIGN KEY (NUMART) REFERENCES ARTICULO (NUMART) ) En la base de datos VENTAS, se podra desear: y y Aadir el nombre y nmero de de una persona de contacto a cada fila de la tabla CLIENTE para contactar a los clientes. Aadir una columna de punto de reorden mnimo en la tabla ARTICULO, para que la base de datos pueda alertar automticamente cuando la cantidad o stock de un producto en particular est por debajo de lo ptimo para la venta.

Modificar la tabla CLIENTE ALTER TABLE CLIENTE ADD NOMCONT NVARCHAR(30), NUMCONT DECIMAL (10,2) Modificar la tabla ARTICULO ALTER TABLE ARTICULO ADD PTOMIN INT

Consultas Simples
El corazn o poder del Lenguaje SQL es el poder hacer consultas de cualquier tipo a la base de datos en forma no procedimental. La sentencia SELECT es muy poderosa y ampliamente rica en sus clusulas y variantes permitiendo la capacidad de atender en poco tiempo a consultas complejas sobre la base de datos. Est en el especialista desarrollador de aplicaciones conocerlo a profundidad para explotar las bondades y virtudes. Gracias a esta sentencia es que se pueden realizar todas las operaciones del Algebra Relacional. En esta seccin veremos la sintaxis de como se utiliza. La sentencia SELECT, obtiene filas de la base de datos y permite realizar la seleccin de una o varias filas o columnas de una o varias tablas. La sintaxis completa de la instruccin SELECT es compleja, pero la vamos a resumir como sigue (los corchetes cuadrados indican que la clusula no es obligatoria): SELECT nombres de las columnas [INTO nueva Tabla destino para resultados del select_] FROM origenTabla [WHERE condicin de Bsqueda] [GROUP BY nombres de columnas por la cual Agrupar] [HAVING condicinBsqueda para Group By ] [ORDER BY nombre de columnas [ASC | DESC] ] Tambin se puede unir estas sentencias con otras por el operador UNION entre consultas para combinar sus resultados en una sola tabla de resultados sin nombre. Veamos cules son las funciones de cada una de las clusulas de la sentencia SELECT. La clusula SELECT: Se usa para listar las columnas de las tablas que se desean ver en el resultado de una consulta. Adems de las columnas se pueden listas columnas a calcular por el SQL cuando actu la sentencia. Esta clusula no puede omitirse.

La clusula FROM: Lista las tablas que deben ser analizadas en la evaluacin de la expresin de la clusula WHERE y de donde se listarn las columnas enunciadas en el SELECT. Esta clusula no puede omitirse. La clusula WHERE: Establece criterios de seleccin de ciertas filas en el resultado de la consulta gracias a las condiciones de bsqueda. Si no se requiere condiciones de bsqueda puede omitirse y el resultado de la consulta sern todas las filas de las tablas enunciadas en el FROM. La clusula GROUP BY: Especifica una consulta sumaria. En vez de producir una fila de resultados por cada fila de datos de la base de datos, una consulta sumaria agrupa todas las filas similares y luego produce una fila sumaria de resultados para cada grupo de los nombres de columnas enunciado en esta clusula. En otras palabras, esta clusula permitir agrupar un conjunto de columnas con valores repetidos y utilizar las funciones de agregacin sobre las columnas con valores no repetidas. Esta clusula puede omitirse. La clusula HAVING: Le dice al SQL que incluya slo ciertos grupos producidos por la clusula GROUP BY en los resultados de la consulta. Al igual que la clusula WHERE, utiliza una condicin de bsqueda para especificar los grupos deseados. La clusula HAVING es la encargada de condicionar la seleccin de los grupos en base a los valores resultantes en las funciones agregadas utilizadas debidas que la clusula WHERE condiciona solo para la seleccin de filas individuales. Esta clusula puede omitirse. La clusula ORDER BY: Permitir establecer la columna o columnas sobre las cuales las filas resultantes de la consulta debern ser ordenadas. Esta clusula puede omitirse; cuando se utiliza y no se especifica el orden, por default lo har en forma ascendente; si se requiere otro orden habr que especificarlo con DESC.

Sentencia SELECT-FROM
El utilizar la sentencia SELECT, con estas dos clusulas SELECT - FROM, muestra como resultado a todas las filas existentes en las tablas especificadas en el FROM. Ejemplo # 1: Seleccionar todas las columnas y filas de la tabla CLIENTE SELECT * FROM CLIENTE

Ejemplo # 2: Seleccionar columnas: nomcli y e_mail de la tabla CLIENTE SELECT NUMCLI, NOMCLI, E_MAIL FROM CLIENTE Ejemplo # 3: Este ejemplo selecciona las columnas y las muestra con el ttulo especificado en AS, es decir con un alias. A NUMCLI lo muestra como NUMERO DE CLIENTE y NOMCLI lo muestra con el nombre especificado en el AS como NOMBRE DEL CLIENTE. Esto permite mostrar una columna con encabezados ms familiares a los usuarios finales. SELECT NUMCLI AS 'NUMERO DE CLIENTE', NOMCLI AS 'NOMBRE DE CLIENTE' FROM CLIENTE La clusula AS puede omitirse y el resultado es el mismo. SELECT NUMCLI 'NUMERO DE CLIENTE', NOMCLI 'NOMBRE DE CLIENTE' FROM CLIENTE

Sentencia de filas duplicadas (DISTINCT)


Si una consulta incluye la llave primaria (PK) de una tabla en su lista de seleccin, entonces cada fila de resultados ser nica (ya que la llave primaria (PK) tiene un valor diferente en cada fila). Si no se incluye la llave primaria en los resultados, pueden producirse filas duplicadas. Veamos el siguiente ejemplo, Ejemplo # 4: Seleccionar el cdigo de artculos que han sido pedidos. Sin usar la palabra reservada DISTINCT. SELECT NUMART FROM DETALLE_PED ORDER BY NUMART Ejemplo # 5: Seleccionar el cdigo de artculos que han sido pedidos, utilizando la palabra reservada DISTINCT. SELECT DISTINCT NUMART FROM DETALLE_PED ORDER BY NUMART

Columnas Calculadas
Adems de las columnas cuyos valores sern introducidos a la base de datos a travs de la sentencia INSERT, una consulta SQL puede incluir en su

clusula SELECT columnas calculadas cuyo valor se calculan a partir de los valores de las otras columnas almacenadas en las tablas. Estas columnas, son especie de una columna virtual pues no existen fsicamente en la tabla y sus valores calculados corresponden a los valores por fila. Esta es una ventaja del SQL que evita que se tengan que disear columnas calculadas fsicas en la base de datos trayendo prdida en almacenamiento fsico e inconsistencia por falta de mantenimiento de la misma. Ejemplo # 6: Determinar a los clientes con saldo. Recuerde que el saldo se encuentra almacenado en tres columnas diferentes: SALD_0_30 + SALD_31_60 + SALD_61_90. SELECT NUMCLI, NOMCLI, (SALD_0_30 +SALD_31_60 + SALD_61_90) as "Saldo del Cliente" FROM CLIENTE WHERE (SALD_0_30 +SALD_31_60 + SALD_61_90) <> 0 Ejemplo # 7: Para determinar el monto de dinero que llevan acumulados en ventas por arriba de sus cuotas los vendedores, la consulta SELECT con columnas calculadas por vendedor es, SELECT CODVEND, NOMVEND, APELLVEND, (VENTAS - CUOTA) AS 'Monto por Arriba de Cuotas' FROM VENDEDOR WHERE (VENTAS - CUOTA) > 0

Condiciones de Bsqueda
SQL usa las conectivas lgicas AND, OR y NOT en la clusula WHERE. Los operandos de las conectivas lgicas pueden ser expresiones que contengan los operadores de comparacin <,<=,>, > =, = y <>. SQL permite usar los operadores de comparacin para comparar cadenas y expresiones aritmticas, as como tipos especiales, tales como el tipo fecha. Condiciones de Bsqueda (=, <>, >, <, >=, <=): Ejemplo # 8: Seleccionar a los clientes cuyo nmero de cliente est contenido entre el rango 1309 y 1950.

SELECT NUMCLI AS 'NUMERO DE CLIENTE', NOMCLI AS 'NOMBRE DE CLIENTE' FROM CLIENTE WHERE NUMCLI >= 1309 AND NUMCLI <= 1950 Se obtiene el mismo resultado utilizando la palabra reservada BETWEEN. Este especifica que un valor sea menor o igual que un valor y mayor o igual que otro valor. Condiciones de Bsqueda con BETWEEN: Ejemplo # 9: Para seleccionar a los clientes cuyo nmero de cliente est contenido entre el rango 1309 y 1950, es: SELECT NUMCLI, NOMCLI FROM CLIENTE WHERE NUMCLI BETWEEN 1309 AND 1950 Ejemplo # 10: Para seleccionar los clientes con nombre entre H Y P, la sentencia SELECT es: SELECT NUMCLI AS 'NUMERO DE CLIENTE', NOMCLI AS 'NOMBRE DE CLIENTE' FROM CLIENTE WHERE (NOMCLI BETWEEN 'H' AND 'P') Condiciones de Bsqueda Compuestas con AND, OR y NOT: Ejemplo # 11: Se puede combinar las conectivas lgicas AND, OR y NOT; y filtrar mayor la seleccin en la consulta. Por ejemplo al seleccionar a los clientes cuyo nmero de cliente est contenido entre el rango 1309 y 1950 y que han comprado o incrementado su saldo dentro del mes en curso, es decir su saldo en mes corriente no es cero. SELECT NUMCLI AS 'NUMERO DE CLIENTE', NOMCLI AS 'NOMBRE DE CLIENTE', SALD_0_30 FROM CLIENTE WHERE NUMCLI BETWEEN 1309 AND 1950 AND NOT SALD_0_30 = 0 Ejemplo # 12: Utilizando el operador OR podemos buscar un cliente cuyo cdigo dudamos si es 824 o 842. SELECT NOMCLI, NUMCLI FROM CLIENTE WHERE NUMCLI = 842 OR NUMCLI = 824

Ejemplo # 13: Para seleccionar los vendedores cuyas ventas es mayor que la cuota que se espera deben vender y que sus ventas son superiores a 8000.00. SELECT CODVEND, NOMVEND, APELLVEND, VENTAS, CUOTA FROM VENDEDOR WHERE VENTAS > CUOTA AND VENTAS > 8000 Condiciones de Bsqueda con LIKE: Ejemplo # 14: Seleccionar a todos los clientes que contengan la letra "H" dentro de su nombre. SELECT NUMCLI AS 'NUMERO DE CLIENTE', NOMCLI AS 'NOMBRE DE CLIENTE' FROM CLIENTE WHERE NOMCLI LIKE '%H%' Los comodines ms usados son los siguientes: ? representa un carcter cualquiera % representa cero o ms caracteres # representa un dgito cualquiera (0-9) Condiciones de Bsqueda con la funcin SOUNDEX: Se emplea en situaciones donde se tiene idea del sonido de un valor de columna pero que no se conoce su correcta escritura (es una funcin nueva incorporada en el SELECT). Ejemplo # 15: Seleccionar a todos los clientes cuyo nombre suene parecido al especificado en la funcin SOUNDEX ( ). SELECT NUMCLI, NOMCLI FROM CLIENTE WHERE SOUNDEX (NOMCLI) = SOUNDEX ( 'DUIT' ) Condiciones de Bsqueda con IS NULL: Los valores de NULL crean una lgica trivaluada para las condiciones de bsqueda en SQL. Para una fila determinada, el resultado de una condicin de bsqueda puede ser TRUE o FALSE, o puede ser NULL debido a que una de las columnas utilizadas en la evaluacin de la condicin de bsqueda contenga un valor NULL.

A veces es til comprobar explcitamente los valores NULL en una condicin de bsqueda y manejarlas directamente. Ejemplo # 16: Consultar qu filas de la tabla ARTICULO tienen valor NULL en algunas de sus columnas: DESCRIPCION, EXISTENCIA Y CATEGORIA_ART. SELECT * FROM ARTICULO WHERE DESCRIPCION IS NULL OR EXISTENCIA IS NULL OR CATEGORIA_ART IS NULL Ordenacin de resultados de Consulta (clusula ORDER BY) Al igual que las filas de una tabla en la base de datos las filas de los resultados de una consulta no estn dispuestas en ningn orden particular. Existen situaciones en la que es necesaria ver la informacin en un orden en especial, como en orden alfabtico (ASC, ascendente) u ver a las cifras de dinero listadas de mayor monto a menor (DESC, descendente). Se puede pedir a SQL que ordene los resultados de una consulta incluyendo la clusula ORDER BY en la sentencia SELECT. Ejemplo # 17: Para buscar la informacin de los vendedores por orden de su apellido o nombre, la sentencia SELECT con la clusula ORDER BY sera la siguiente: SELECT * FROM VENDEDOR ORDER BY APELLVEND Ejemplo # 18: Para determinar en una lista resultante del ejemplo #13, quin es el vendedor con mayor monto de dinero es conveniente ordenar por esta que llevan acumulados en ventas por arriba de sus cuotas los vendedores, la consulta SELECT con columnas calculadas por vendedor es, SELECT CODVEND, NOMVEND, APELLVEND, (VENTAS- CUOTA) MONTO FROM VENDEDOR WHERE VENTAS > CUOTA AND VENTAS > 8000 ORDER BY (VENTAS - CUOTA) DESC Consultas a Mltiples Tablas Generalmente el poder de la sentencia SELECT se basa en su capacidad de poder en una sola sentencia consultar mltiples tablas simultneamente. Esta operacin tambin se le llama JOIN y es lo que en

particular llamo un "pegue de tablas en forma horizontal" y ocurre gracias a que existen columnas de conexin sea atributos de asociacin comunes en las tablas que se unen en esta forma, vea la siguiente figura:

Para que se puedan realizar consultas a mltiples tablas el requisito principal es que las tablas a reunirse en una consulta tengan columnas con valores o dominios comunes, es decir columna de conexin. Si reunimos a las tablas de la figura anterior, de tal forma que la Tabla1 se rena con la Tabla2 y la Tabla2 se reuniera con la Tabla3, el requisito indispensable sera: la Tabla1 debe tener una columna comn en la Tabla2 y Tabla2 debe tener una columna de conexin en la Tabla3. Por lo general estas columnas comunes son: en una tabla la columna es la llave primaria y en la otra tabla la columna asociada es la llave fornea que referencia a la primaria. Para este tipo de consultas a mltiples tablas la clusula FROM es la responsable de indicar cul(es) ser(n) la(s) tabla(s) fuentes. Existen dos formas de sintaxis permitidas para la escritura de la sentencia SELECT para la reunin de tablas, basada en la figura anterior, estas formas son las siguientes: FORMA 1: SELECT a1, a2, a3, b1, b2, b3, c1, c2, c3 FROM Tabla1, Tabla2, Tabla3 WHERE Tabla1.a1 = Tabla2.b2 AND Tabla2. b1 = Tabla3.c1 FORMA 2: SELECT a1, a2, a3, b1, b2, b3, c1, c2, c3 FROM Tabla1

INNER JOIN Tabla2 ON Tabla1.a1 = Tabla2.b2 INNER JOIN Tabla3 Tabla2. b1 = Tabla3.c1 Note que las columnas comunes en ambas tablas han de referenciarse con el nombre de la tabla que pertenecen para evitar errores de ambigedad. La Forma 2, tiene la ventaja de liberar a la clusula WHERE y dejar esta para filtros especficos sobre las filas resultantes de la reunin de tablas. Ejemplo #19: Si se desea unir la tabla de CLIENTES con PEDIDO, para ambas tablas, la columna de conexin es NUMCLI, la consulta SELECT que realiza esta reunin es la siguiente: FORMA 1: SELECT CLIENTE.NUMCLI, NOMCLI, NUMPED, FECHA_PED, TOT_DESC FROM CLIENTE, PEDIDO WHERE CLIENTE.NUMCLI = PEDIDO.NUMCLI FORMA 2: SELECT CLIENTE.NUMCLI, NOMCLI, NUMPED, FECHA_PED, TOT_DESC FROM CLIENTE INNER JOIN PEDIDO ON CLIENTE.NUMCLI = PEDIDO.NUMCLI Ejemplo # 20: Seleccionar todos los pedidos con su informacin completa, esto incluye: datos del cliente, datos del pedido, datos del detalle de la compra, datos del artculo de la compra y datos den vendedor que atendi el pedido. Esta consulta requiere que se realice la unin (JOIN) de las cinco tablas: Cliente, Pedido, Detalle_Ped , Artculo y Vendedor, que son todas las tablas de la base de datos de VENTAS. SELECT PEDIDO.NUMPED, CLIENTE.NUMCLI,NOMCLI,DIRCLI, APELLVEND AS VENDEDOR, FECHA_PED,ARTICULO.NUMART, DESCRIPCION, PRECIO, CANTIDAD,(PRECIO*CANTIDAD) AS TOTAL FROM CLIENTE INNER JOIN PEDIDO ON CLIENTE.NUMCLI=PEDIDO.NUMCLI INNER JOIN DETALLE_PED ON PEDIDO.NUMPED = DETALLE_PED.NUMPED INNER JOIN ARTICULO ON DETALLE_PED.NUMART=ARTICULO.NUMART INNER JOIN VENDEDOR ON PEDIDO.CODVEND =

VENDEDOR.CODVEND ORDER BY PEDIDO.NUMPED

Consultas Resumen
Estas consultas resultan ventajosas para hacer bsquedas a nivel de los valores de las columnas a nivel de todas las filas. Por ejemplo si se desea saber en una tabla de 10,000 filas: el mayor saldo adeudado, la cuota mnima o mxima asignada a los vendedores, el tamao promedio de pedidos, el total de clientes o vendedores (es decir total de filas). Ejemplo # 21: Determinar en una misma consulta lo siguiente: y y y y y Total de Vendedores. COUNT (NOMVEND) Monto Total de CUOTAS que deben alcanzarse entre todos los vendedores. SUM(CUOTA). El monto promedio de cuotas asignado a un vendedor. AVG(CUOTA) El valor de la cuota mxima asignado al un vendedor. MAX(CUOTA) El valor de la cuota mnima asignado a un vendedor. MIN (CUOTA)

SENTENCIA SQL: SELECT COUNT (NOMVEND)AS "TOTAL VENDEDORES", SUM(CUOTA) AS "MONTO DE CUOTAS",AVG(CUOTA) AS "CUOTA PROMEDIO", MAX(CUOTA) "CUOTA MAX.", MIN(CUOTA)"CUOTA MIN." FROM VENDEDOR Sentencia DISTINCT En esta ltima consulta hace que los nmeros de pedidos en DETALLE_PED , que son repetidos, la clusula DISTINCT cuente solo nmeros de uno de los que se repiten. SELECT COUNT(DISTINCT numped) as 'Total de Pedidos Solicitados' FROM detalle_ped Sentencia TOP Devuelve un cierto nmero de registros que entran entre al principio o al final de un rango especificado por una clusula ORDER BY. Supongamos que queremos recuperar los 25 primeros clientes que tuvimos:

SELECT TOP 25 * FROM CLIENTE ORDER BY NUMCLI Se puede utilizar la palabra reservada PERCENT para devolver un cierto porcentaje de registros que caen al principio o al final de un rango especificado por la clusula ORDER BY. Supongamos que en lugar de los 25 primeros clientes deseamos el 10 por ciento de todos los clientes: SELECT TOP 10 PERCENT * FROM CLIENTE ORDER BY NUMCLI DESC; El valor que va a continuacin de TOP debe ser un entero sin signo.TOP no afecta a la posible actualizacin de la consulta.

SubConsultas
Una subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT, SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta. Puede utilizar tres formas de sintaxis para crear una subconsulta: Comparacin [ANY | ALL | SOME] (instruccin sql) Expresin [NOT] IN (instruccin sql) [NOT] EXISTS (instruccin sql) En donde: Comparacin Es una expresin y un operador de comparacin que compara la expresin con el resultado de la subconsulta. Expresin Es una expresin por la que se busca el conjunto resultante de la subconsulta. Instruccin sql Es una instruccin SELECT, que sigue el mismo formato y reglas que cualquiera otra instruccin SELECT. Debe ir entre parntesis.

Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una instruccin SELECT o en una clusula WHERE o HAVING. En una subconsulta, se utiliza una instruccin SELECT para proporcionar un conjunto de uno o ms valores especificados para evaluar en la expresin de la clusula WHERE o HAVING. Se puede utilizar el predicado ANY o SOME, los cuales son sinnimos, para recuperar registros de la consulta principal, que satisfagan la comparacin con cualquier otro registro recuperado en la subconsulta. El ejemplo siguiente devuelve todos los productos cuyo precio unitario es mayor que el de cualquier producto vendido con un descuento igual o mayor al 25 por ciento: SELECT * FROM Productos WHERE PrecioUnidad > ANY (SELECT PrecioUnidad FROM DetallePedido WHERE Descuento >= 0 .25) El predicado ALL se utiliza para recuperar nicamente aquellos registros de la consulta principal que satisfacen la comparacin con todos los registros recuperados en la subconsulta. Si se cambia ANY por ALL en el ejemplo anterior, la consulta devolver nicamente aquellos productos cuyo precio unitario sea mayor que el de todos los productos vendidos con un descuento igual o mayor al 25 por ciento. Esto es mucho ms restrictivo. El predicado IN se emplea para recuperar nicamente aquellos registros de la consulta principal para los que algunos registros de la subconsulta contienen un valor igual. El ejemplo siguiente devuelve todos los productos vendidos con un descuento igual o mayor al 25 por ciento: SELECT * FROM Productos WHERE IDProducto IN (SELECT IDProducto FROM DetallePedido WHERE Descuento >= 0.25) Inversamente se puede utilizar NOT IN para recuperar nicamente aquellos registros de la consulta principal para los que no hay ningn registro de la subconsulta que contenga un valor igual. El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones de verdad/falso para determinar si la subconsulta devuelve algn registro.

Se puede utilizar tambin alias del nombre de la tabla en una subconsulta para referirse a tablas listadas en la clusula FROM fuera de la subconsulta. El ejemplo siguiente devuelve los nombres de los empleados cuyo salario es igual o mayor que el salario medio de todos los empleados con el mismo ttulo. A la tabla Empleados se le ha dado el alias T1: SELECT Apellido, Nombre, Titulo, Salario FROM Empleados AS T1 WHERE Salario >= (SELECT Avg(Salario) FROM Empleados WHERE T1.Titulo = Empleados.Titulo) ORDER BY Titulo; En el ejemplo anterior, la palabra reservada AS es opcional.

También podría gustarte