Vous êtes sur la page 1sur 27

Transact-SQL

Transact-SQL es la implementacin SQL Server del estndar ANSI SQL -92 ISO. El ANSI SQL92 define elementos del lenguaje SQL que pueden ejecutarse desde cualquier aplicacin frontal. Transact-SQL tambin contiene elementos del lenguaje que son nicos en l (extensiones Transact-SQL). Es recomendable que al escribir aplicaciones para las bases de datos se utilicensentencias ANSI SQL-92 para aumentar la compatibilidad de las ba ses de datos y de las aplicaciones.

Eleme ntos d e Transact-SQL


Al escribir y ejecutar sentencias Transact-SQL usar:

Declaraciones del Data Control Language (DCL) que se utilizan para determinar quin ve o modifica los datos. Declaraciones del Data Defin ition Language (DDL) que se usan para crear los objetos en la base de datos. Declaraciones del Data Man ipu lation Language (DML) que se usan para consultar y modificar los datos.

Elementos adicionales del lenguage como: variables, operadores, funciones, sentencias de control de flujo, y comentarios.

D e c l ar ac i o n e s d el D ata Co nt r o l Lan gu ag e ( D CL)


Las declaraciones del DCL se usan para cambiar los permisos o roles asociados con un usuario de la base de datos. La tabla siguiente describe las declaraciones de DCL.

S entencia GRANT

Descripcin Crea una entrada en la seguridad del sistema que le permite a un usuario trabajar con los datos o ejecutar ciertas sentencias Transact-SQL. Crea una entrada en la seguridad del sistema negando un permiso de una cuenta de seguridad y evita que el usuario, grupo, o rol herede el permiso a travs de su grupo y rol. Quita un permiso previamente concedido o negado.

DE NY

REVOKE

Por defecto, slo miembros con roles sysad min , dbcreator, db_own er o db_securityadmin pueden ejecutar las declaraciones DCL.

Ejemplo Este ejemplo concede permiso para leer la tabla medico al rol public.

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

USE HostalNet GRANT SELECT ON Medicos TO public

De cl araci o n es del Dat a De f i n i ti o n L a n u age ( DD L )


Las declaraciones de DDL permiten crear bases de datos tablas y tipos de datos definidos por usuarios. Tambin se usan para manejar lo s objetos de la base de datos. Algunas declaraciones de DDL son:    y y y

CREATE nombre_objeto ALTER nombre_objeto DROP nombre_objeto

Por defecto, solo miembros de los roles sysadmin, dbcreator, db_owner, o db_ddladmi n pueden eje cutar las de claraciones DDL. En general, se recomienda que ninguna otra cuenta se use para crear los objetos de la base de datos. Si diferentes usuarios crean sus propios objetos en una base de datos, cada dueo de objeto debe conceder los permisos apropiados a cada usuario de e sos objetos. Esto causa una sobrecarga ad ministrativa y debe evitarse. E e mp l o USE HospitalNet CREATE TABLE Paciente ( idpaciente int, nombre c ar (40), app c ar(30), dire ccin varc ar (50) )

De cl araci o n es del Dat a Ma n i p u l ati o n L a n g u age ( DM L)


La declaraciones DML trabajan con la data de la base de datos. Las declaraciones DML incluyen: y y y y SELECT INSERT UPDATE DELETE dbcreator,

Por defe cto solamente miembros de los roles sysadmin, db_owner o db_datawriter pueden ejecutar sentencias DML. E e mp l o sele ct idmedico,app,apm from hospitalnet..medicos

EC M ET - C

C Ing. M guel Arturo Valle Pelez

V ar i ab le s l oca le s y g l oba le s
Las variables son los elementos del lenguaje a los que se puede asignar valores. Pueden ser locales o globales.

Variable local (definida por el usuario)


Una variable local se define en una sentencia DECLARE, se le asigna un valor inicial en una declaracin SET, y se utiliza dentro de la declaracin, batch, o procedimiento en la que fue declarada. Una variable local se identifica con un smbolo @ que precede a su nombre. DECLARE @nombre_variable tipo_dato ,... SET @nombre_variable = expresin Ejemplo El ejemplo siguiente crea la variable local @appat, le asigna un valor, y consulta a la base de datos para recuperar las filas que contienen el valor de la variable. declare @appat char(30) set @appat='valle' select idmedico,nombre,app,apm from hospitalnet..medicos where app= @appat

V ar i ab le g l o ba l ( p r o p or c i o nada p or el s i st em a)
Las variables globales son predefinidas y mantenidas por SQL Server. El usuario no puede asignar o cambiar directamente los valores de las variables globales. Muchas de las variables globales reportan al sistema la actividad que ha tenido lugar desde la ltima vez que SQL Server fue iniciado, otras reportan informacin sobre una conexin. Una variable global es identificada con dos smbolos @ precediendo su nombre. Las variables globales son tiles para verificar la seguridad o condiciones del entorno actual de SQL Server. Por ejemplo, si quiere verificar el nmero de versin de SQL Server, puede realizar la consulta a la variable global @@versin. La consulta devuelve el nmero de la versin del SQL Server que est ejecutando. Ejemplo El ejemplo siguiente usa la variable global @@trancount para determinar si existe alguna transaccin abierta antes de ejecutar una consulta o procedimiento almacenado . La variable @@trancount retorna un numero que representa el nmero de transacciones que se tiene abiertas actualmente. declare @appat char(30)

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

set @appat='valle' select idmedico,nombre,app,apm from hospitalnet..medicos where app= @appat If ( @@trancount > 0 ) Begin Raiserror ( 'la tarea no puede ejecutarse dentro de una transaccin' ,10,1) Return End

Ope rador e s
Los operadores son smbolos que indican la ejecucin de operaciones matemticas, encadenamientos de cadenas, y comparaciones entre las columnas, constantes y variables. Los operadores pueden combinarse y utilizarse en las expresiones de bsqueda. Cuando los combina, el orden en que los operadores se procesan se basa en una jerarqua predefinida.

T i p os d e o pe rado r e s
SQL Server soporta cuatro tipos comparacin, de cadenas, y lgicos. O p e r a d o r e s a r i t m t i c os Los operadores aritmticos realizan clculos con las columnas numricas o las constantes.Transact-SQL soporta los operadores multiplicativos: producto (*), divisin (/), y mdulo (%) - el resto despus de la divisin entera - y los operadores aditivos: suma (+), y substraccin (-). de operadores: aritmticos, de

O p e r a d o r e s d e c o m p a r ac i n Estos operadores comparan dos expresiones. Las comparaciones pueden realizarse entre las variables, columnas, y expresiones de tipo similar. Los operadores de comparacin incluyen a: menor que (<), mayor que (>), igual a (=), y todas las combinaciones posibles. O p e r a d o r d e c o n c at e n a c i n d e c a d e n as El operador de concatenacin de cadenas (+) encadena los valores de tipo string. Por defecto, una cadena vaca (") se interpreta como un espacio en blanco. Por ejemplo, 'abc' + '' + 'def' es almacenada como 'abc def'. La cadena vaca nunca se evala como un valor nulo.

La s e nt e nc i a S E L E CT
Puede crear consultas para recuperar informacin de su base de datos utilizando el Analizador de Consu ltas (Qu ery Analyzer) de SQL Server desde o fuera del Ad min istrador Corporativo (E nterprise Manager) de SQL Server, as como utilitarios de lnea de comandos como osql. Hay otros utilitarios que tambin pueden hacerlo, entre los que se incluyen MSQu ery y E nglish Qu ery. Tambin dispone de herramientas y utilitarios de otros

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

fabricantes. Hay tres componentes bsicos en la instruccin SELECT: SELECT, FROM y WHERE. A continuacin la sintxis bsica. SELECT * | li s _clum s  FROM  la  [ WHERE c  icin_filas ]



lista_columnas es la lista de columnas a mostrar en el resultado de la consulta. Si se espe cifica * se mostrarn todas las columnas de la tabla. condicin_filas es una expresin lgica que indica que las fila s a mostrar son aquellas para las que el valor de la expresin es verdadero.

A continuacin se muestra la sintxis completa SELECT [ ALL | DISTINCT ] [ TOP n [ PERCENT ] [ WITH TIES ] ] lista_columnas [ INTO nueva_tabla ] FROM tabla_origen [ WHERE condicin_filas ] [ GROUP BY [ALL] expresin_agrupar_por , ... ] [ WITH CUBE | ROLLUP ] ] [ HAVING condicin_grupos ] [ ORDER BY nombre_columna [ASC | DESC ] , ] [ COMPUTE AVG | COUNT | MAX | MIN | SU M (expresin) ]

O pe rado re s de co n di ci n _ f i l as
En la expre sin lgica que e specifica la c ndicin_filas se pueden utilizar, adems de los operadores relacionales o de comparacin, los siguientes operadores SQL: LIKE BETWEEN IN Para comparacin de cadenas de caracteres. Admite los comodines % y _. Para seleccin en base a un rango de valores. Los valores pueden ser numricos, de cadena, fe chas y horas. Para seleccin en base a un conjunto de valore s. Los valores pueden ser numricos, de cadena, fe chas y horas.

--consulta para ver el diagarama de la BD alter authorization on database:: HOSPITALNET to sa -- 1. Mostrar todos los datos de los empleados sele ct * from empleados Mostrar el apellido parterno "app", salario anual de los e mpleados sele ct app, salario *14 as "SALARIOANUAL" from e mpleados

--2.

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

--3

M ostrar los mismo pero aquellos cuyo salario anual sobre pasa los 20000 de los empleados sele ct app, salario *14 as "SALARIOANUAL" from e mpleados where salario*14 > 20000

--4.

M ostrar los mismo pero aquellos cuyo salario anual sobre pasa los 20000 mas comisiones sele ct app, salario *14 as "SALARIOANUAL" from e mpleados where salario*14 + comision*14 > 20000 Mostrar todos los datos de empleados ordenados por apellidos paternos sele ct * from empleados order by app Mostrar todas las salas para el hospital 2 sele ct * from sala where idhospital= 2 Mostrar todos los paciente s nacidos ante s de 1987 sele ct * from paciente s where fechan<'01-01-1987' Mostar los e mpleados cuyo sueldo e stee entre 1200 - 1800 de los empleados sele ct * from empleados where salario between 1200 and 1800 -sele ct * from empleados where dire ccion in('Chimbote') -sele ct * from empleados where dire ccion not in('Chimbote') -sele ct * from empleados where dire ccion='Chimbote' -sele ct * from empleados where dire ccion <>'Chimbote' -sele ct * from empleados where app like ' !a' -sele ct * from empleados where app like 'a%'

--5.

--6.

--7.

--8.

OPER"DOR LIKE

% Cualquier nmero de caracteres _ Para un carcter individual [ ] Para un conjunto de caractere s que e st dentro del corchete [ ^ ] Que el carcter individual que no e st dentro del corchete

EJEM PLO: LIKE %een Muestra todos los caracteres que acaben con een

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

EJEMPLO: L#KE %een%$ Muestra todos los caracteres que contengan een en ese orden EJEMPLO: L#KE _ en $ Muestra todos los caracteres que contenga tres letras y acaben en en EJEMPLO: L#KE [CK% ]$ Muestra todos los caracteres que empiecen por C o K EJEMPLO: L#KE [S-V]ing$ Nombre de 4 letras cuya primera letra estuviera entre S o V y acabe en ing EJEMPLO: L#KE M[^c]%$ Todos los que empiecen por M y segunda letra no sea una c. No hay lmite de caracteres.

Agrupar y Resumir Datos select * from empleados select top 3 nombres,app,apm,direccion from empleados -- Devuelve los 3 primeros empleados select top 50 percent nombres,app,apm,direccion from empleados --Devuelve el 50% de los empleados select top 2 with ties nombres,app,apm,direccion from empleados where direccion= 'chimbote' order by app --Devuelve los 2 primeros registros con direcion chimbote.

F unc i on e s
Transact-SQL proporciona muchas funciones que devuelven informacin de las bases de datos o del sistema. Una funcin recibe parmetros como valores de entrada y retorna un valor que puede utilizarse en las expresiones. La siguiente es la sintxis para obtener el resultado de una funcin con la sentencia SELECT:

Funciones Tipo Fecha select * from getdate() Sample Format # Query (current date: 12/30/2006) /*1*/ select convert(varchar, getdate(), 1) /*2*/ select convert(varchar, getdate(), 2) select convert(varchar, getdate(), 3) /*3*/ /*4*/ select convert(varchar, getdate(), 4) select convert(varchar, getdate(), 5) /*5*/ /*6*/ select convert(varchar, getdate(), 6) select convert(varchar, getdate(), 7) /*7*/ /*8*/ select convert(varchar, getdate(), 10) /*9*/ select convert(varchar, getdate(), 11) /*10*/ select convert(varchar, getdate(), 101) /*11*/ select convert(varchar, getdate(), 102) /*12*/ /*13*/ select convert(varchar, getdate(), 103) select convert(varchar, getdate(), 104)

--09/13/08 --8.09.13 --13/09/08 --13.09.08 --13-09-08 --13 Sep 08 --Sep 13, 08 --09-13-08 --08/09/13 --09/13/2008 --2008.09.13 --13/09/2008 --13.09.2008

FORAMTO 'ANSI ' FORMATO 'PERU'

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

/*14*/ /*15*/

select convert(varchar, getdate(), 105) select convert(varchar, getdate(), 106)

--13-09-2008 -- 13 Sep 2008 -- Sep 13, 2008 --09-13-2008 -- 2008/09/13 FORMATO

/*16*/ select convert(varchar, getdate(), 107) /*17*/ select convert(varchar, getdate(), 110) /*18*/ select convert(varchar, getdate(), 111) 'JAPONES'

FORMATO TIEMPO /*19*/ 8 or 108 sele ct convert(varchar, getdate(), 8) /*20*/ 9 or 109 sele ct convert(varchar, getdate(), 9) /*21*/ sele ct convert(varchar, getdate(), 113) FORMATO 'EUROPA' /*22*/ 14 or 114 sele ct convert(varchar, getdate() , 14) --22:55:05 --Sep 13 2008 10:55:24:577PM --13 Sep 2008 23:05:10:403 --00:38:54:840

FORMATO FECHA Y TIEM PO /*23*/ sele ct convert(varchar, /*24*/ sele ct convert(varchar, /*25*/ sele ct convert(varchar, /*26*/ sele ct convert(varchar,

getdate(), getdate(), getdate(), getdate(),

120) 121) 126) 127)

--2008-09-13 22:56:54 --2008-09-13 22:57:27.590 --2008-09-13T 22:59:27.937 --2008-09-13T 23:00:23. 780

OPERACIONES CON FECHA sele ct convert(varchar, getdate(), 103) + ' - ' + convert(varchar, getdate(), 8) --13/09/2008 - 23:08:08 sele ct convert(varchar, getdate(), 103) + convert(varchar, getdate(), 8) --13/09/200823:08:40

Otros Ejemplos

SELECT user_name(), app_name(),host_name(),getdate() dbo Microsoft SQL Server M anagement Studio - Query 09-13 23:12:33.467 MODULOR 2008-

SELECT user_name(), app_name(),host_name(), convert(varchar, getdate(), 103) + '- '+ convert(varchar, getdate(), 8) dbo Microsoft SQL Server M anagement Studio - Query 13/09/2008- 23:14:04 MODULOR

FUNCIONES AGREGADAS sele ct * from paciente s -- valore s con nulos sele ct count(*) from paciente s --esta lleno el casillero nombre por lo tanto mostara todos los registros

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

select count(nombres) from pacientes --vemos que hay un paciente cuyo apm no esta lleno por lo tanto mostrara 3 registros select count(apm) from pacientes

F unc i on e s d e r e su me n (aggr e gat e )


Son funciones que permiten efectuar una operacin aritmtica que resume los valores de una columna de toda la tabla, o que resume los valores de la columna agrupados segn determinado criterio. La funcin produce un solo valor que es el resumen de la tabla, o de cada uno de los grupos.

Funcin de resu men AVG COUNT(*) MAX MIN S UM Funcin de resu men STDEV STDEVP VAR VARP

Descripcin Promedio de un valor en una expresin numrica. Nmero de filas seleccionadas. El valor mximo de una expresin. El valor mnimo de una expresin. Valores totales de una expresion numrica. Descripcin Desviacin estadstica de todos los valores. Desviacin estadstica para toda la poblacin. Variacin estadstica de todos los valores. Variacin estadstica de todos los valores para la poblacin.

Puede usar las funciones de resumen con la declaracin SELECT o en combinacin con la clusula GROUP BY. Con excepcin de la funcin COUNT(*), todas las funciones de resumen retornan NULL si ninguna fila satisface la clusula WHERE. La funcin COUNT (*) retorna un valor de cero si ninguna fila satisface la clusula WHERE.

Operadores d e SQL: y Lgicos:

AND, OR , NOT y De Comparacin:

= <

Igual Menor

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

> <> >= <=

Mayor Diferente Mayor o igual Menor o igual

-- promedio mensual cuanto gasta en planilla select avg(salario) as GASTOMENSUAL from empleados --mayor sueldo de un empleado select max(salario) as GASTOMENSUAL from empleados --menos sueldo de un empleado select min(salario) as GASTOMENSUAL from empleados

--La suma total de gasto en planilla mensual select sum(salario) as GASTOMENSUAL from empleados

--La suma total de gasto en planilla al ao supuniendo que ganan 14 sueldos al ao select sum(salario) * 14 as GASTOMENSUAL from empleados -- cuantos empleados en total se pagan y cuanto es la planilla total select count(*) as [Numero de Empleados], sum(salario) as [Salario Medio] from empleados

La c l usu l a GR OU

BY

La clusula GROUP BY se utiliza para agrupar las filas en base a determinado criterio, y luego ejecutar una operacin que resume un atributo para cada uno de los grupos asi formados. Por ejemplo, puede utilizar GROU P BY para agrupar todas las facturas por cliente, y luego calcular el monto total facturado de cada cliente. S E LE CT lista_columnas , FUNCION_RESUMEN ( columna ) FROM tabla GROUP BY lista_columnas [ HAVING condicin_grupos ]

 

lista_columnas en GROUP BY debe ser la misma que en SELECT. La clusula GROUP BY permite agrupar las filas en base a los valores de una o mas columnas, y luego efectuar alguna operacin de resumen sobre cada grupo asi generado.

HAVING permite especificar cules de los grupos generados se deben mostrar en  el resultado de la consulta.


y

Cuando use la clusula GROUP BY, considere lo siguiente:

SQL Server produce una columna de valores para cada criterio de agrupacin definido en GROUP BY. ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

10

SQL Server retorna solo una fila para cada grupo que especifica; no devuelve la informacin de detalle. Todas las columnas que se especifican en la clusula GROUP BY deben ser incluidas en la lista SELECT. Si incluye una clusula WHERE, SQL Server agrupa solo las filas que satisfacen la condicin de la clusula WHERE. Al usar la clusula GROUP BY en columnas que contienen valores NULL, stos se procesan como un grupo. Use la palabra clave ALL con la clusula GROUP BY para desplegar todas las filas con valores nulos en las columnas, sin tener en cuenta si las fila s satisfacen la clusula WHERE.

sele ct * from empleados sele ct * from areadept

sele ct count(*) as [Numero de Empleados], sum(salario) as [Salario Medio] from empleados where iddep=40 group by iddep

U so de la cl u s u la G R OUP BY co n l a cl u s u la HAV I N G
As% como la clusula WHERE se utiliza como un filtro de filas, la clusula HAVING se utiliza como un filtro de grupos. Cuando use la clusula HAVING, considere lo siguiente: y Use la clusula HAVING solo con la clusula GROUP BY para restringir la agrupacin. Puede tener hasta 128 condiciones en una clusula HAVING. Cuando define condiciones mltiples, debe combinarlas con los operadores lgicos (AND, OR, o NOT). La clusula HAVING debe hacer referencia a cualquiera de las columnas que aparecen en la lista SELECT. No utilic e la palabra clave ALL con la clusula HAVING.

--- de cada departamento ver el sueldo mas alto sele ct iddep,max(salario) as [Salario Mximo] from e mpleados group by iddep

--de cada departamente ver el sueldo mas alto cuyo codigodedepartamente sea menor a 30 sele ct iddep,max(salario) as [Salario Mximo] from e mpleados group by iddep having iddep< 30

11

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

Consultas complejas
Las consu l tas corr el ac i onadas

U n join o consulta correlacionada es la consulta que selecciona columnas de mas de una tabla, y las muestra en un nico conjunto de resultados. S E LE CT lista_columnas FROM tabla1 tipo_join JOIN tabla2 ON condicin_del_join

y y y y

lista_columnas es la lista de columnas a mostrar en el resultado de la consulta. Se recomienda que cada columna sea calificada con el alias de la tabla a la cual pertenece. tipo_join indica si el join es interior (INNER), exterior (OUTER) o irrestricto  (CROSS). condicin_del_join es una expresin que indica en base a qu columnas de cada una de las tablas se establece la relacin entre ellas.

I nner join
Un inner j in es la consulta correlacionada que combina todas las filas que estn relacionadas en ambas tablas.
DEPARTAMENTO ( id_dep nombre 1 Ventas 2 Finanzas 3 Personal 4 Logstica 5 Marketing 5 filas ) jefe Lpez Mora Castro Alva Ludea EMPLEADO ( 8 filas ) id_emp paterno id_dep 101 Quispe 2 102 Soria 1 103 Osorio 2 104 Aliaga 3 105 Vera 2 106 Barrios 6 107 Mrquez 1 108 Cceres 2

&

SELECT emp.id _emp , emp.paterno , dep.jefe FROM empleado emp INNER JOIN departamento dep ON emp.id _dep = dep.id _dep RESULTADO ( 7 filas ) id_emp paterno 101 Quispe 102 Soria 103 Osorio 104 Aliaga 105 Vera 107 Mrquez 108 Cceres

jefe Mora Lpez Mora Castro Mora Lpez Mora

12

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

O uter join
Un outer join es la consulta correlacionada que entrega todas las filas que estn relacionadas, y adems: y y y las filas no relacionadas de la tabla izquierda (LEFT OUTER JOIN), o las filas no relacionadas de la tabla derecha (RIGHT OUTER JOIN), o las filas no relacionadas de ambas tablas (FULL OUTER JOIN) Se considera como la tabla izquierda, a aquella que se menciona en la clusula FROM.

E je mplo LEFT OUT ER J OIN


DEPARTAMENTO ( id_dep nombre 1 Ventas 2 Finanzas 3 Personal 4 Logstica 5 Marketing 5 filas ) jefe Lpez Mora Castro Alva Ludea EMPLEADO ( 8 filas ) paterno id_dep Quispe 2 Soria 1 Osorio 2 Aliaga 3 Vera 2 Barrios 6 Mrquez 1 Cceres 2

id_emp 101 102 103 104 105 106 107 108

SELECT emp.id _emp , emp.paterno , dep.jefe FROM empleado emp LEFT OUTER JOIN departamento dep ON emp.id _dep = dep.id _dep

RESULTADO ( 8 filas ) id_emp paterno 101 Quispe 102 Soria 103 Osorio 104 Aliaga 105 Vera 107 Mrquez 108 Cceres 106 Barrios

jefe Mora Lpez Mora Castro Mora Lpez Mora NULL

La consulta muestra a los 7 empleados que estn registrados en departamentos existentes, y adems al empleado 106 Barrios que figura registrado en un departamento inexistente. Como empleado es la tabla izquierda, la consulta debe mostrar todas las filas de la tabla empleado; es decir, las filas relacionadas y las filas no relacionadas.

13

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

E je mplo RIGHT OUTER J OIN


DEPARTAMENTO ( id_dep nombre 1 Ventas 2 Finanzas 3 Personal 4 Logstica 5 Marketing 5 filas ) jefe Lpez Mora Castro Alva Ludea EMPLEADO ( 8 filas ) id_emp paterno id_dep 101 Quispe 2 102 Soria 1 103 Osorio 2 104 Aliaga 3 105 Vera 2 106 Barrios 6 107 Mrquez 1 108 Cceres 2

SELECT emp.id _emp , emp.paterno , dep.jefe FROM empleado emp RIGHT OUTER JOIN departamento dep ON emp.id _dep = dep.id _dep

RESULTADO ( 9 filas ) id_emp paterno 101 Quispe 102 Soria 103 Osorio 104 Aliaga 105 Vera 107 Mrquez 108 Cceres NULL NULL NULL NULL

jefe Mora Lpez Mora Castro Mora Lpez Mora Alva Ludea

La consulta muestra a los 7 empleados que estn registrados en departamentos existentes, y adems a los jefes de departamento que no tienen empleados a su cargo. Como departamento es la tabla izquierda, la consulta debe mostrar todas las filas de la tabla empleado que tienen relacin con la tabla departamento, y adems las filas de la tabla departamento que no tienen relacin con la tabla empleado.

14

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

E je mplo F ULL OUT ER J OIN


DEPARTAMENTO ( id_dep nombre 1 Ventas 2 Finanzas 3 Personal 4 Logstica 5 Marketing 5 filas ) jefe Lpez Mora Castro Alva Ludea EMPLEADO ( 8 filas ) paterno id_dep Quispe 2 Soria 1 Osorio 2 Aliaga 3 Vera 2 Barrios 6 Mrquez 1 Cceres 2

id_emp 101 102 103 104 105 106 107 108

SELECT emp.id _emp , emp.paterno , dep.jefe FROM empleado emp FULL OUTER JOIN departamento dep ON emp.id _dep = dep.id _dep RESULTADO ( 10 filas ) id_emp paterno 101 Quispe 102 Soria 103 Osorio 104 Aliaga 105 Vera 107 Mrquez 108 Cceres 106 Barrios NULL NULL NULL NULL

jefe Mora Lpez Mora Castro Mora Lpez Mora NULL Alva Ludea

La consulta muestra a los 7 empleados que estn registrados en departamentos existentes, y adems a los empleados registrados en departamentos inexistentes, y a los jefes de departamento que no tienen empleados a su cargo.

15

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

C ross join
Un cross join es la consulta correlacionada que combina cada una de las filas de una de las tablas con todas las filas de la otra tabla. No es necesario que exista una columna comn para ejecutar cross join.

DEPARTAMENTO ( id_dep nombre 1 Ventas 2 Finanzas 3 Personal 4 Logstica 5 Marketing

5 filas ) jefe Lpez Mora Castro Alva Ludea

EMPLEADO ( 8 filas ) id_emp paterno id_dep 101 Quispe 2 102 Soria 1 103 Osorio 2 104 Aliaga 3 105 Vera 2 106 Barrios 6 107 Mrquez 1 108 Cceres 2

SELECT emp.id _emp , emp.paterno , dep.jefe FROM empleado emp CROSS JOIN departamento dep

RESULTADO ( 40 filas ) id_emp paterno 101 Quispe 101 Quispe 101 Quispe 101 Quispe 101 Quispe 102 Soria 102 Soria 102 Soria 102 Soria 102 Soria 103 Osorio ... ... ... ... ... ... 107 Mrquez 108 Cceres 108 Cceres 108 Cceres 108 Cceres 108 Cceres

jefe Lpez Mora Castro Alva Ludea Lpez Mora Castro Alva Ludea Lpez ... ... ... Ludea Lpez Mora Castro Alva Ludea

16

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

Join con mas de dos tablas


id_cliente 1 2 3 4 CLIENTES nombre Juan Mora Comercial Arce Rosa Ch Las Alondras S.A. id_producto 1001 1002 1003 1004 1005 PRODUCTOS descripcion lpices color cuadernos lapiceros papel bond borradores

id_cliente 2 2 4 1 1 1

V E N T A S id_producto 1002 1004 1001 1001 1003 1005

cantidad 36 250 100 200 100 50

SELECT cli.nombre , pro.descripcion , ven.cantidad FROM clientes cli INNER JOIN ventas ven ON cli.id _cliente = ven.id _cliente INNER JOIN productos pro ON ven.id _producto = pro.id _producto

RESULTADO
nombre Comercial Arce Comercial Arce Las Alondras S.A. Juan Mora Juan Mora Juan Mora descripcion cuadernos papel bond lpices color lpices color lapiceros borradores cantidad 36 250 100 200 100 50

17

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

Creacin de Proyectos con Visual Net 2005

Arrastro Tres controles


 

Dos botone s ListView

18

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

Configuramos las propiedades de los listview: En la propiedad Columns le damos clic donde aparecen los tre s puntos y apare ce la siguiente imagen

Y donde dice Add le damos clic tre s ve ce s agregando tres ttulos y modificamos sus propiedades Text para asignar ttulos como se repre senta en la imagen

Luego de Agregar tres ve ce s los ttulos del control listview modificamos su propiedad text; los titulos son: codigo, nombre, de scripcion luego damos clic en OK. Como mue stra la siguiente figura.

19

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

Como se habrn dado cuenta no muestra nada aun, tenemos que seguir configu rando el control en sus propiedades

Ahora modificamos la propiedad del control listview donde dice view y modificamos y le pone mos en details. Como mue stra la figura.

20

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

Ahora nos toca modificar la propiedad Gridlines y le damos en true. Luego M odificar la propiedad FullRowS ellect y le damos tb en true

Nota este control listview no puede cargar una imagen ya que es codigo binario

Ahora pasamos a programar los controle s

Import s Syste m.Data.SqlClient Public Class Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As Sy stem.EventArgs) Handle s Button1.Click Try Dim cnn As New SqlConnection Dim comando As New SqlCommand Dim lector As SqlDataReader Dim fila A s ListViewItem

21

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

cnn.ConnectionString = cadenaconexion 'Llamo a la clase conexion cnn.Open() comando.CommandText = "select * from categoras" comando.CommandType = CommandType.Text comando.Connection = cnn Me.ListView 1.Items.Clear() lector = comando.ExecuteReader() If lector.HasRows = True Then While le ctor.Read fila = New ListViewItem fila.Text = CStr(le ctor.Item(0)) fila.SubItems.Add(CStr(le ctor.Item("nombre categoria"))) fila.SubItems.Add(CStr(le ctor.Item(2))) Me.ListView1.Items.Add(fila) End While End If lector.Close() cnn.Close() cnn.Dispose() Catch ex As Ex ception Me ssageBox.Show(ex.Message) End Try End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As Sy stem.EventArgs) Handle s Button2.Click Me.Close() End Sub End Class

Luego compilamos con F5 y mue stra los re sultados

22

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

23

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

FORMULARIO CON DATA GRID

Import s Syste m.Data.SqlClient Public Class Form1 Private adaptador As SqlDataAdapter Private d s As DataSet

Private Sub Form1_Load (ByVal sender A s Syste m.Object, ByVal e As Syste m.EventArgs) Handle s MyBase.Load Try Dim conexion As New SqlConne ction conexion.ConnectionString = "Server=(local) ; trusted_connection=yes; initial catalog=neptuno"

'crear adaptador adaptador = New SqlDataAdapter("sele ct * from clientes", conexion)

24

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

Dim comandobuilder As New SqlCommandBuilder( adaptador)

ds = New DataSet() adaptador.Fill( ds, "clientes")

'asignar ds al datagrid Me.dgrddatos.DataSource = ds Me.dgrddatos.DataMe mber = "clientes" Catch ex As Ex ception Me ssageBox.Show(ex.Message) End Try End Sub

Private Sub btnclose_Click(ByVal sender As Syste m.Object, ByVal e A s Syste m.EventArg s) Handle s btnclose.Click Me.Close() End Sub End Class

25

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

FORMULARIO MAESTRO DETALLE

Import s Syste m.Data.SqlClient

26

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez

Public Class MaestroDetalle Dim ds As New DataSet Private Sub Mae stroDetalle_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handle s MyBase.Load Dim conexion As New SqlConne ction conexion.Conne ctionString = "Server=(local); trusted_connection=yes; initial catalog=neptuno" Me.grddatos.CaptionText = "Mae stro Detalle" Me.grddatos.CaptionBackColor = Color.Red Me.grddatos.CaptionForeColor = Color.White Dim adaptadorclientes A s New SqlDataAdapter("select * from cliente s", conexion) Dim adaptadorpedidos As New SqlDataAdapter("select * from pedidos", conexion)

adaptadorclientes.Fill(ds, "clientes") adaptadorpedidos.Fill(d s, "pedidos")

ds.Relations.Add("clientes_pedidos", ds.Table s("cliente s").Columns( "id cliente"), ds.Table s("pedidos").Columns("id cliente"))

Me.grddatos.DataSource = d s

Me.grddatos.DataMember = "clientes"

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As Sy stem.EventArgs) Handle s Button1.Click Me.Close() End Sub End Class

27

ECPMSD.NET - CPDBA CPNA Ing. Miguel Arturo Valle Pelez