You are on page 1of 28

Transact-SQL

Transact-SQL es la implementación SQL Server del estándar ANSI SQL-92 ISO. El ANSI SQL-
92 define elementos del lenguaje SQL que pueden ejecutarse desde cualquier aplicación
frontal.

Transact-SQL también contiene elementos del lenguaje que son únicos en él (extensiones
Transact-SQL).

Es recomendable que al escribir aplicaciones para las bases de datos se utilicen sentencias
ANSI SQL-92 para aumentar la compatibilidad de las bases de datos y de las aplicaciones.

Elementos de Transact-SQL
Al escribir y ejecutar sentencias Transact-SQL usará:

 Declaraciones del Data Control Language (DCL) que se utilizan para


determinar quién ve o modifica los datos.

 Declaraciones del Data Definition Language (DDL) que se usan para


crear los objetos en la base de datos.

 Declaraciones del Data Manipulation 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.

Decla rac ione s del Da t a Contro l Lan gua ge (DCL)


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.

Sentencia Descripción

GRANT Crea una entrada en la seguridad del sistema que le permite a


un usuario trabajar con los datos o ejecutar ciertas
sentencias Transact-SQL.

DENY 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 través de su grupo y rol.

REVOKE Quita un permiso previamente concedido o negado.

Por defecto, sólo miembros con roles sysadmin, dbcreator, db_owner 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 Peláez


1
USE HospitalNet
GRANT SELECT ON Medicos TO public

Dec lara cion es del Dat a Defin itio n Lan gua ge (DDL )
Las declaraciones de DDL permiten crear bases de datos, tablas, y tipos de
datos definidos por usuarios. También se usan para manejar los objetos de la
base de datos. Algunas declaraciones de DDL son:

 CREATE nombre_objeto

 ALTER nombre_objeto

 DROP nombre_objeto

Por defecto, solo miembros de los roles sysadmin, dbcreator, db_owner, o


db_ddladmin pueden ejecutar las declaraciones 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 dueño de objeto debe conceder los permisos apropiados a cada
usuario de esos objetos. Esto causa una sobrecarga administrativa y debe
evitarse.

Ejemplo
USE HospitalNet

CREATE TABLE Paciente

( idpaciente int,

nombre char (40),

app char(30),

dirección varchar (50)

Dec lara cion es del Dat a Manipu latio n Lan gua ge (DML)
La declaraciones DML trabajan con la data de la base de datos. Las
declaraciones
DML incluyen:

 SELECT

 INSERT

 UPDATE

 DELETE

Por defecto solamente miembros de los roles sysadmin, dbcreator,


db_owner o db_datawriter pueden ejecutar sentencias DML.

Ejemplo

select idmedico,app,apm from hospitalnet..medicos


ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez
2
Variables locales y globales
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 declaración SET, y se utiliza dentro de la declaración, batch, o
procedimiento
en la que fue declarada. Una variable local se identifica con un símbolo @ que
precede
a su nombre.

DECLARE @nombre_variable
tipo_dato ,... SET
@nombre_variable = expresión

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

Var ia ble g loba l (p ropor cionad a po r el sist ema )


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
información sobre una conexión. Una variable global es identificada con dos
símbolos @ 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 número de
versión de SQL Server, puede realizar la consulta a la variable global
@@versión. La consulta devuelve el número de la versión del SQL Server que
está ejecutando.

Ejemplo
El ejemplo siguiente usa la variable global @@trancount para determinar
si existe alguna transacción abierta antes de ejecutar una consulta o
procedimiento almacenado. La variable @@trancount retorna un numero
que representa el número de transacciones que se tiene abiertas
actualmente.

declare @appat char(30)


ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez
3
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 transacción',10,1)
Return
End

Operadores
Los operadores son símbolos que indican la ejecución de operaciones
matemáticas, encadenamientos de cadenas, y comparaciones entre las
columnas, constantes y variables.

Los operadores pueden combinarse y utilizarse en las expresiones de


búsqueda. Cuando los combina, el orden en que los operadores se
procesan se basa en una jerarquía predefinida.

Tipos de operado re s
SQL Server soporta cuatro tipos de operadores: aritméticos, de
comparación, de cadenas, y lógicos.

Operadores aritméticos
Los operadores aritméticos realizan cálculos con las columnas numéricas o las
constantes.Transact-SQL soporta los operadores multiplicativos: producto (*),
división (/), y módulo (%) - el resto después de la división entera - y los
operadores aditivos:
suma (+), y substracción (-).

Operadores de comparación
Estos operadores comparan dos expresiones. Las comparaciones pueden
realizarse entre las variables, columnas, y expresiones de tipo similar. Los
operadores de comparación 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 a t e n a c i ó n d e c a de n a s
El operador de concatenación de cadenas (+) encadena los valores de tipo
string.

Por defecto, una cadena vacía (") se interpreta como un espacio en blanco.
Por ejemplo, 'abc' + '' + 'def' es almacenada como 'abc def'. La cadena
vacía nunca se evalúa como un valor nulo.

La sentencia SELECT
Puede crear consultas para recuperar información de su base de datos
utilizando el Analizador de Consultas (Query Analyzer) de SQL Server
desde o fuera del Administrador Corporativo (Enterprise Manager) de
SQL Server, así como utilitarios de línea de comandos como osql. Hay otros
utilitarios que también pueden hacerlo, entre los que se incluyen MSQuery y
English Query. También dispone de herramientas y utilitarios de otros

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


4
fabricantes.

Hay tres componentes básicos en la instrucción SELECT: SELECT, FROM y


WHERE.
A continuación la sintáxis básica.

SELECT * | lista_columnas
FROM tabla
[ WHERE condición_filas ]

 lista_columnas es la lista de columnas a mostrar en el resultado de la


consulta. Si se especifica * se mostrarán todas las columnas de la tabla.

 condición_filas es una expresión lógica que indica que las filas a


mostrar son aquellas para las que el valor de la expresión es
verdadero.

A continuación se muestra la sintáxis completa

SELECT [ ALL | DISTINCT ] [ TOP n [ PERCENT ] [ WITH TIES ] ]


lista_columnas
[ INTO nueva_tabla ] FROM tabla_origen
[ WHERE condición_filas ]
[ GROUP BY [ALL] expresión_agrupar_por , ... ] [ WITH CUBE | ROLLUP
]]
[ HAVING condición_grupos ]
[ ORDER BY nombre_columna [ASC | DESC ] ,… ]
[ COMPUTE AVG | COUNT | MAX | MIN | SUM (expresión) ]

Operadores de condición_fila s
En la expresión lógica que especifica la condición_filas se pueden utilizar,
además de los operadores relacionales o de comparación, los siguientes
operadores SQL:

LIKE Para comparación de cadenas de caracteres. Admite los


comodines % y _.
BETWEEN Para selección en base a un rango de valores. Los valores
pueden ser numéricos, de cadena, fechas y horas.
IN Para selección en base a un conjunto de valores. Los valores
pueden ser numéricos, de cadena, fechas 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


select * from empleados

--2. Mostrar el apellido parterno "app", salario anual de los empleados


select app, salario *14 as "SALARIOANUAL" from empleados

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


5
--3 Mostrar los mismo pero aquellos cuyo salario anual sobre pasa los 20000 de los
empleados
select app, salario *14 as "SALARIOANUAL" from empleados
where salario*14 > 20000

--4. Mostrar los mismo pero aquellos cuyo salario anual sobre pasa los 20000 mas
comisiones
select app, salario *14 as "SALARIOANUAL" from empleados
where salario*14 + comision*14 > 20000

--5. Mostrar todos los datos de empleados ordenados por apellidos paternos
select * from empleados order by app

--6. Mostrar todas las salas para el hospital 2


select * from sala
where idhospital=2

--7. Mostrar todos los pacientes nacidos antes de 1987


select * from pacientes
where fechan<'01-01-1987'

--8. Mostar los empleados cuyo sueldo estee entre 1200 - 1800 de los empleados
select * from empleados
where salario between 1200 and 1800

--
select * from empleados
where direccion in('Chimbote')
--
select * from empleados
where direccion not in('Chimbote')
--
select * from empleados
where direccion='Chimbote'

--
select * from empleados
where direccion <>'Chimbote'

--
select * from empleados
where app like '%a'
--
select * from empleados
where app like 'a%'

OPERADOR LIKE

% Cualquier número de caracteres

_ Para un carácter individual

[ ] Para un conjunto de caracteres que esté dentro del corchete

[ ^ ] Que el carácter individual que no esté dentro del corchete

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


6
EJEMPLO: LIKE ‘%een’ Muestra todos los caracteres que acaben con een

EJEMPLO: LIKE ‘%een%’ Muestra todos los caracteres que contengan een en ese orden

EJEMPLO: LIKE ‘_en’ Muestra todos los caracteres que contenga tres letras y acaben en en

EJEMPLO: LIKE ‘[CK% ]’ Muestra todos los caracteres que empiecen por C o K

EJEMPLO: LIKE ‘[S-V]ing’ Nombre de 4 letras cuya primera letra estuviera entre S o V y
acabe en ing

EJEMPLO: LIKE ‘M[^c]%’ Todos los que empiecen por M y segunda letra no sea una c. No
hay límite 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.

Funciones
Transact-SQL proporciona muchas funciones que devuelven información de las
bases de datos o del sistema. Una función recibe parámetros como valores de
entrada y retorna un valor que puede utilizarse en las expresiones.

La siguiente es la sintáxis para obtener el resultado de una función con la


sentencia
SELECT:

Funciones Tipo Fecha

select * from getdate()

Format # Query (current date: 12/30/2006) Sample


/*1*/ select convert(varchar, getdate(), 1) --09/13/08
/*2*/ select convert(varchar, getdate(), 2) --8.09.13
/*3*/ select convert(varchar, getdate(), 3) --13/09/08
/*4*/ select convert(varchar, getdate(), 4) --13.09.08
/*5*/ select convert(varchar, getdate(), 5) --13-09-08
/*6*/ select convert(varchar, getdate(), 6) --13 Sep 08
/*7*/ select convert(varchar, getdate(), 7) --Sep 13, 08
/*8*/ select convert(varchar, getdate(), 10) --09-13-08
/*9*/ select convert(varchar, getdate(), 11) --08/09/13
/*10*/ select convert(varchar, getdate(), 101) --09/13/2008
/*11*/ select convert(varchar, getdate(), 102) --2008.09.13 FORAMTO 'ANSI
'

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


7
/*12*/ select convert(varchar, getdate(), 103) --13/09/2008 FORMATO 'PERU'
/*13*/ select convert(varchar, getdate(), 104) --13.09.2008
/*14*/ select convert(varchar, getdate(), 105) --13-09-2008
/*15*/ select convert(varchar, getdate(), 106) -- 13 Sep 2008

/*16*/ select convert(varchar, getdate(), 107) --Sep 13, 2008


/*17*/ select convert(varchar, getdate(), 110) --09-13-2008
/*18*/ select convert(varchar, getdate(), 111) -- 2008/09/13 FORMATO
'JAPONES'

FORMATO TIEMPO

/*19*/ 8 or 108 select convert(varchar, getdate(), 8) --22:55:05


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

FORMATO FECHA Y TIEMPO


/*23*/ select convert(varchar, getdate(), 120) --2008-09-13 22:56:54
/*24*/ select convert(varchar, getdate(), 121) --2008-09-13 22:57:27.590
/*25*/ select convert(varchar, getdate(), 126) --2008-09-13T22:59:27.937
/*26*/ select convert(varchar, getdate(), 127) --2008-09-13T23:00:23.780

OPERACIONES CON FECHA

select convert(varchar, getdate(), 103) + ' - ' + convert(varchar, getdate(), 8)


--13/09/2008 - 23:08:08

select 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 Management Studio - Query MODULOR 2008-


09-13 23:12:33.467

SELECT user_name(), app_name(),host_name(), convert(varchar, getdate(), 103)


+'- '+ convert(varchar, getdate(), 8)

dbo Microsoft SQL Server Management Studio - Query MODULOR


13/09/2008- 23:14:04

FUNCIONES AGREGADAS

select * from pacientes

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


8
-- valores con nulos
select count(*) from pacientes

--esta lleno el casillero nombre por lo tanto mostara todos los registros
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

Funciones de resumen (aggregate)


Son funciones que permiten efectuar una operación aritmética que resume los
valores de una columna de toda la tabla, o que resume los valores de la
columna agrupados según determinado criterio. La función produce un solo
valor que es el resumen de la tabla, o de cada uno de los grupos.

Función de resumen Descripción

AVG Promedio de un valor en una expresión


numérica.

COUNT(*) Número de filas seleccionadas.

MAX El valor máximo de una expresión.

MIN El valor mínimo de una expresión.

SUM Valores totales de una expresion numérica.

Función de resumen Descripción

STDEV Desviación estadística de todos los valores.

STDEVP Desviación estadística para toda la población.

VAR Variación estadística de todos los valores.

VARP Variación estadística de todos los valores para la


población.

Puede usar las funciones de resumen con la declaración SELECT o en


combinación con la cláusula GROUP BY.

Con excepción de la función COUNT(*), todas las funciones de resumen


retornan NULL si ninguna fila satisface la cláusula WHERE. La función COUNT
(*) retorna un valor de cero si ninguna fila satisface la cláusula WHERE.

Operadores de SQL:

 Lógicos:

AND, OR , NOT

 De Comparación:

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


9
=  Igual

<  Menor

>  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 año supuniendo que ganan 14 sueldos al año
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 cláusula GROUP BY
La cláusula GROUP BY se utiliza para agrupar las filas en base a determinado
criterio, y luego ejecutar una operación que resume un atributo para cada uno
de los grupos asi formados. Por ejemplo, puede utilizar GROUP BY para
agrupar todas las facturas por cliente, y luego calcular el monto total facturado
de cada cliente.

SELECT lista_columnas , FUNCION_RESUMEN (


columna ) FROM tabla
GROUP BY lista_columnas
[ HAVING condición_grupos ]

 lista_columnas en GROUP BY debe ser la misma que en SELECT.

 La cláusula GROUP BY permite agrupar las filas en base a los


valores de una o mas columnas, y luego efectuar alguna
operación de resumen sobre cada grupo asi generado.

 HAVING permite especificar cuáles de los grupos generados se deben mostrar en


 el resultado de la consulta.

 Cuando use la cláusula GROUP BY, considere lo siguiente:

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


10
 SQL Server produce una columna de valores para cada criterio de
agrupación definido en GROUP BY.

 SQL Server retorna solo una fila para cada grupo que especifica; no devuelve
la información de detalle.

 Todas las columnas que se especifican en la cláusula GROUP BY deben ser


incluidas en la lista SELECT.

 Si incluye una cláusula WHERE, SQL Server agrupa solo las filas que satisfacen la
condición de la cláusula WHERE.

 Al usar la cláusula GROUP BY en columnas que contienen valores NULL, éstos se


procesan como un grupo.

 Use la palabra clave ALL con la cláusula GROUP BY para desplegar todas las filas
con valores nulos en las columnas, sin tener en cuenta si las filas satisfacen la
cláusula WHERE.

select * from empleados


select * from areadept

select count(*) as [Numero de Empleados],


sum(salario) as [Salario Medio] from empleados
where iddep=40
group by iddep

Uso de la cláusula GROUP BY con la cláusula


HAVING
Así como la cláusula WHERE se utiliza como un filtro de filas, la cláusula
HAVING se utiliza como un filtro de grupos.

Cuando use la cláusula HAVING, considere lo siguiente:

 Use la cláusula HAVING solo con la cláusula GROUP BY para restringir la


agrupación.

 Puede tener hasta 128 condiciones en una cláusula HAVING. Cuando define
condiciones múltiples, debe combinarlas con los operadores lógicos (AND, OR, o
NOT).

 La cláusula HAVING debe hacer referencia a cualquiera de las columnas que


aparecen en la lista SELECT.

 No utilice la palabra clave ALL con la cláusula HAVING.

--- de cada departamento ver el sueldo mas alto

select iddep,max(salario) as [Salario Máximo] from empleados group by iddep

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


11
--de cada departamente ver el sueldo mas alto cuyo codigodedepartamente sea
menor a 30

select iddep,max(salario) as [Salario Máximo] from empleados group by iddep


having iddep< 30

Consultas complejas

Las consultas correlacionadas


 Un join o consulta correlacionada es la consulta que selecciona
columnas de mas de una tabla, y las muestra en un único conjunto de
resultados.

 SELECT lista_columnas
 FROM tabla1
 tipo_join JOIN tabla2 ON condición_del_join

 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).

 condición_del_join es una expresión que indica en base a qué columnas de cada una
de las tablas se establece la relación entre ellas.

Inner join
Un inner join es la consulta correlacionada que combina todas las filas que están
relacionadas en ambas tablas.

DEPARTAMENTO ( 5 filas ) EMPLEADO ( 8 filas )


id_dep nombre jefe id_emp paterno id_dep
1 Ventas López 101 Quispe 2
2 Finanzas Mora 102 Soria 1
3 Personal Castro 103 Osorio 2
4 Logística Alva 104 Aliaga 3
5 Marketing Ludeña 105 Vera 2
106 Barrios 6
107 Márquez 1
108 Cáceres 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 jefe
101 Quispe Mora

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


12
102 Soria López
103 Osorio Mora
104 Aliaga Castro
105 Vera Mora
107 Márquez López
108 Cáceres Mora

Outer join
Un outer join es la consulta correlacionada que entrega todas las filas que están
relacionadas, y además:

 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 cláusula


FROM.

Ejemplo LEFT OUTER JOIN

DEPARTAMENTO ( 5 filas ) EMPLEADO ( 8 filas )


id_dep nombre jefe id_emp paterno id_dep
1 Ventas López 101 Quispe 2
2 Finanzas Mora 102 Soria 1
3 Personal Castro 103 Osorio 2
4 Logística Alva 104 Aliaga 3
5 Marketing Ludeña 105 Vera 2
106 Barrios 6
107 Márquez 1
108 Cáceres 2

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 jefe
101 Quispe Mora
102 Soria López
103 Osorio Mora
104 Aliaga Castro
105 Vera Mora
107 Márquez López
108 Cáceres Mora
106 Barrios NULL

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


13
La consulta muestra a los 7 empleados que están registrados en departamentos
existentes, y además 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.

Ejemplo RIGHT OUTER JOIN

DEPARTAMENTO ( 5 filas ) EMPLEADO ( 8 filas )


id_dep nombre jefe id_emp paterno id_dep
1 Ventas López 101 Quispe 2
2 Finanzas Mora 102 Soria 1
3 Personal Castro 103 Osorio 2
4 Logística Alva 104 Aliaga 3
5 Marketing Ludeña 105 Vera 2
106 Barrios 6
107 Márquez 1
108 Cáceres 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 jefe
101 Quispe Mora
102 Soria López
103 Osorio Mora
104 Aliaga Castro
105 Vera Mora
107 Márquez López
108 Cáceres Mora
NULL NULL Alva
NULL NULL Ludeña

La consulta muestra a los 7 empleados que están registrados en


departamentos existentes, y además 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 relación con la tabla departamento, y
además las filas de la tabla departamento que no tienen relación con la tabla
empleado.

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


14
Ejemplo FULL OUTER JOIN

DEPARTAMENTO ( 5 filas ) EMPLEADO ( 8 filas )


id_dep nombre jefe id_emp paterno id_dep
1 Ventas López 101 Quispe 2
2 Finanzas Mora 102 Soria 1
3 Personal Castro 103 Osorio 2
4 Logística Alva 104 Aliaga 3
5 Marketing Ludeña 105 Vera 2
106 Barrios 6
107 Márquez 1
108 Cáceres 2

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 jefe
101 Quispe Mora
102 Soria López
103 Osorio Mora
104 Aliaga Castro
105 Vera Mora
107 Márquez López
108 Cáceres Mora
106 Barrios NULL
NULL NULL Alva
NULL NULL Ludeña

La consulta muestra a los 7 empleados que están registrados en departamentos


existentes, y además a los empleados registrados en departamentos
inexistentes, y a los jefes de departamento que no tienen empleados a su
cargo.

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


15
Cross 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 común para ejecutar cross join.

DEPARTAMENTO ( 5 filas ) EMPLEADO ( 8 filas )


id_dep nombre jefe id_emp paterno id_dep
1 Ventas López 101 Quispe 2
2 Finanzas Mora 102 Soria 1
3 Personal Castro 103 Osorio 2
4 Logística Alva 104 Aliaga 3
5 Marketing Ludeña 105 Vera 2
106 Barrios 6
107 Márquez 1
108 Cáceres 2

SELECT emp.id_emp , emp.paterno , dep.jefe


FROM empleado emp
CROSS JOIN departamento dep

RESULTADO (
40 filas )
id_emp paterno jefe
101 Quispe López
101 Quispe Mora
101 Quispe Castro
101 Quispe Alva
101 Quispe Ludeña
102 Soria López
102 Soria Mora
102 Soria Castro
102 Soria Alva
102 Soria Ludeña
103 Osorio López
... ... ...
... ... ...
... ... ...
107 Márquez Ludeña
108 Cáceres López
108 Cáceres Mora
108 Cáceres Castro
108 Cáceres Alva
108 Cáceres Ludeña

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


16
Join con mas de dos tablas

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

V
E
N
T
A
S
id_cliente id_producto cantidad
2 1002 36
2 1004 250
4 1001 100
1 1001 200
1 1003 100
1 1005 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 descripcion cantidad


Comercial Arce cuadernos 36
Comercial Arce papel bond 250
Las Alondras S.A. lápices color 100
Juan Mora lápices color 200
Juan Mora lapiceros 100
Juan Mora borradores 50

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


17
Creación de Proyectos con Visual Net 2005

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


18
Arrastro Tres controles

 Dos botones
 ListView

Configuramos las propiedades de los listview: En la propiedad Columns le damos clic donde
aparecen los tres puntos y aparece la siguiente imagen

Y donde dice Add le damos clic tres veces “agregando tres títulos” y modificamos sus
propiedades Text “para asignar títulos” como se representa en la imagen

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


19
Luego de Agregar tres veces los títulos del control listview modificamos su propiedad text;
los titulos son: codigo, nombre, descripcion luego damos clic en OK. Como muestra la
siguiente figura.

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


20
Como se habrán dado cuenta no muestra nada aun, tenemos que seguir configurando el
control en sus propiedades

Ahora modificamos la propiedad del control listview donde dice view y modificamos y le
ponemos en details. Como muestra la figura.

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


21
Ahora nos toca modificar la propiedad Gridlines y le damos en true.

Luego Modificar la propiedad FullRowSellect 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 controles

Imports System.Data.SqlClient

Public Class Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles Button1.Click

Try

Dim cnn As New SqlConnection

Dim comando As New SqlCommand

Dim lector As SqlDataReader

Dim fila As ListViewItem


ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez
22
cnn.ConnectionString = cadenaconexion 'Llamo a la clase conexion

cnn.Open()

comando.CommandText = "select * from categorías"

comando.CommandType = CommandType.Text

comando.Connection = cnn

Me.ListView1.Items.Clear()

lector = comando.ExecuteReader()

If lector.HasRows = True Then

While lector.Read

fila = New ListViewItem

fila.Text = CStr(lector.Item(0))

fila.SubItems.Add(CStr(lector.Item("nombrecategoria")))

fila.SubItems.Add(CStr(lector.Item(2)))

Me.ListView1.Items.Add(fila)

End While

End If

lector.Close()

cnn.Close()

cnn.Dispose()

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles Button2.Click

Me.Close()

End Sub

End Class

Luego compilamos con F5 y muestra los resultados

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


23
ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez
24
FORMULARIO CON DATA GRID

Imports System.Data.SqlClient

Public Class Form1

Private adaptador As SqlDataAdapter

Private ds As DataSet

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles MyBase.Load

Try

Dim conexion As New SqlConnection

conexion.ConnectionString = "Server=(local); trusted_connection=yes; initial


catalog=neptuno"

'crear adaptador

adaptador = New SqlDataAdapter("select * from clientes", conexion)

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


25
Dim comandobuilder As New SqlCommandBuilder(adaptador)

ds = New DataSet()

adaptador.Fill(ds, "clientes")

'asignar ds al datagrid

Me.dgrddatos.DataSource = ds

Me.dgrddatos.DataMember = "clientes"

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

End Sub

Private Sub btnclose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles btnclose.Click

Me.Close()

End Sub

End Class

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


26
FORMULARIO MAESTRO DETALLE

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


27
Imports System.Data.SqlClient

Public Class MaestroDetalle

Dim ds As New DataSet

Private Sub MaestroDetalle_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load

Dim conexion As New SqlConnection

conexion.ConnectionString = "Server=(local); trusted_connection=yes; initial


catalog=neptuno"

Me.grddatos.CaptionText = "Maestro Detalle"

Me.grddatos.CaptionBackColor = Color.Red

Me.grddatos.CaptionForeColor = Color.White

Dim adaptadorclientes As New SqlDataAdapter("select * from clientes", conexion)

Dim adaptadorpedidos As New SqlDataAdapter("select * from pedidos", conexion)

adaptadorclientes.Fill(ds, "clientes")

adaptadorpedidos.Fill(ds, "pedidos")

ds.Relations.Add("clientes_pedidos", ds.Tables("clientes").Columns("idcliente"),
ds.Tables("pedidos").Columns("idcliente"))

Me.grddatos.DataSource = ds

Me.grddatos.DataMember = "clientes"

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles Button1.Click

Me.Close()

End Sub

End Class

ECPMSD.NET - CPDBA – CPNA Ing. Miguel Arturo Valle Peláez


28

You might also like