TBD2015B-3 SQL

77
GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 137 - 5 SENTENCIAS SQL El lenguaje de consulta estructurado o SQL (por sus siglas en inglés Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas. Una de sus características es el manejo del álgebra y el cálculo relacional que permiten efectuar consultas con el fin de recuperar de forma sencilla información de interés de bases de datos, así como hacer cambios en ellas. 5.1 LAS CONSULTAS Tipos de consultas. Las consultas son los objetos de una base de datos que permiten recuperar datos de una tabla, modificarlos e incluso almacenar el resultado en otra tabla. Existen varios tipos de consultas: Consultas de selección. Una consulta de selección genera una tabla lógica (se llama lógica porque no está físicamente en el disco duro sino en la memoria del ordenador y cada vez que se abre se vuelve a calcular). Consultas de acción. Son consultas que realizan cambios a los registros. Existen varios tipos de consultas de acción, de eliminación, de actualización, de datos anexados y de creación de tablas. Consultas específicas de SQL. Son consultas que no se pueden definir desde la cuadrícula QBE de Access sino que se tienen que definir directamente en SQL. Para practicar las consultas SQL se usara la base de datos alumnos 5.2 PASOS PARA EJECUTAR SENTENCIA SQL EN VISUAL BASIC 1. TABLA ALUMNOS CodAlumno NombreAlumno FechaNac A1 JUAN 01/01/197 0 A2 PEDRO 01/01/197 7

description

sql

Transcript of TBD2015B-3 SQL

Page 1: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 137 -

5 SENTENCIAS SQL

El lenguaje de consulta estructurado o SQL (por sus siglas en inglés Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en ellas. Una de sus características es el manejo del álgebra y el cálculo relacional que permiten efectuar consultas con el fin de recuperar de forma sencilla información de interés de bases de datos, así como hacer cambios en ellas.

5.1 LAS CONSULTAS

Tipos de consultas.Las consultas son los objetos de una base de datos que permiten recuperar datos de una tabla, modificarlos e incluso almacenar el resultado en otra tabla.Existen varios tipos de consultas:Consultas de selección. Una consulta de selección genera una tabla lógica (se llama lógica porque no está físicamente en el disco duro sino en la memoria del ordenador y cada vez que se abre se vuelve a calcular).

Consultas de acción. Son consultas que realizan cambios a los registros. Existen varios tipos de consultas de acción, de eliminación, de actualización, de datos anexados y de creación de tablas.

Consultas específicas de SQL.Son consultas que no se pueden definir desde la cuadrícula QBE de Access sino que se tienen que definir directamente en SQL. Para practicar las consultas SQL se usara la base de datos alumnos

5.2 PASOS PARA EJECUTAR SENTENCIA SQL EN VISUAL BASIC

1. TABLA ALUMNOS

CodAlumno NombreAlumno FechaNacA1 JUAN 01/01/1970A2 PEDRO 01/01/1977A3 LUIS 01/01/1980A4 JORGE 01/01/1990A5 MARIO 01/01/1993

2. TABLA CURSOSCodCurso NombreCurso ProfesorAD AdmisionM1 Matrícula 1C1 Ergonomía  LOPEZC2 Gestión de Recursos Humanos  RIOSC3 Condiciones de Seguridad FLORESC4 Salud Ocupacional  PEREZ

3. TABLA PAGOS

Page 2: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 138 -

Nro CodAlumnoFechaPago Monto CodCurso

1 A1 01/04/2007 100 AD2 A2 01/12/2007 100 AD3 A1 01/02/2008 200 C14 A3 01/03/2008 100 AD5 A2 01/02/2009 200 C26 A1 02/04/2009 200 C27 A4 03/05/2009 200 AD8 A4 04/08/2009 200 C1

Para realizar consultas en Visual Basic 2012Agregue su base de datos del servidor con y Utilice la siguiente origen de datos

Utilice la siguiente conexión

Page 3: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 139 -

Debe aparecer la siguiente conexión

Elija

Agrega las tablas que desea

Page 4: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 140 -

Para ejecutar ponga

En base de datos atachada o adjuntada

Para usar las sentencias SQL use la opción Nueva consulta( New Query ) de la base de datos

Data Source=(LocalDB)\v11.0;AttachDbFilename=E:\SI2014B\DATOS\ALUMNOS.mdf;Integrated Security=True;Connect Timeout=30

CONSULTAS SQL

Page 5: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 141 -

5.3 SELECT | SELECCIONAR[editar]

La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos.Forma básica[editar]SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}]FROM <nombre_tabla>|<nombre_vista> [{,<nombre_tabla>|<nombre_vista>}][WHERE <condicion> [{ AND|OR <condicion>}]][GROUP BY <nombre_campo> [{,<nombre_campo >}]][HAVING <condicion>[{ AND|OR <condicion>}]][ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC] [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]

SELECT Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de selección.

ALL Indica que queremos seleccionar todos los valores.Es el valor por defecto y no suele especificarse casi nunca.

DISTINCT Indica que queremos seleccionar sólo los valores distintos.

FROMIndica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que exista más de una tabla se denomina a la consulta "consulta combinada" o "join". En las consultas combinadas es necesario aplicar una condición de combinación a través de una cláusula WHERE.

WHERE Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Admite los operadores lógicos AND y OR.

GROUP BY

Especifica la agrupación que se da a los datos. Se usa siempre en combinación con funciones agregadas.

HAVING

Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los campos contenidos en ella.

ORDER BY

Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC.

5.4 SELECCIONAR CAMPOS

EJERCICIOS: Usando la aplicación pruebe las siguientes sentencias SQL

Page 6: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 142 -

1) Listar los nombre de los alumnos con todos los campos

2) Listar todos los registros de la tabla CURSOSSELECT Cursos.* FROM Cursos;

3) Generar la lista de pagos SELECT * FROM Pagos

5.5 Definir campos calculados: Los campos calculados son campos obtenidos del resultado de una expresión o de una función.

Page 7: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 143 -

Ejemplo Supongamos que se debe separar el 15% de los pagos para la Universidad entonces creamos un campo calculado que se llamará Descuento que seriaselect * from pagosSELECT Nro,CodAlumno, monto ,monto*0.10 as descuento,monto-monto*0.10 as neto,codcurso FROM PAGOSPara copiar con cabecera

5.6 En SQL también se puede trabajar sin tablas

SELECT (2+4)/3 muestra 2select 23 as pago (muestra el valor 23)

(Sin nombre de columna)

23

select 2+3 as resultado (muestra una operación)

select len('gato') as resultado ( muestra el resultado de una fórmula)Resultado

4

SELECT sin(3.1416/4) as senoAngulo

SELECT SQRT(2) AS raízRaíz

1,4142135623731

SELECT Power(2,5) AS potenciapotencia

32

Resultado5

SenoAngulo

0.70710808

Page 8: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 144 -

NUMERO ALEATORIOS SELECT rand () AS aleatorioaleatorio0.360058

41

5.7 Encabezados de columna

Ejemplo cambiar el nombre de CAMPO CodAlumno con CODIGOALUMNO

SELECT CodALumno AS CODIGOALUMNO FROM ALUMNOS

5.8 Ordenar las filas

Ejemplo listar todos La tabla alumnos ordenados de acuerdo al nombre del alumno/* seleccionar registros de la tabla alumnos ordenados por nombre*/SELECT ALUMNOS.* FROM ALUMNOSORDER BY ALUMNOS.NombreAlumno ASC

El orden puede ser ascendente o descedente ASC o DESC)

1. Generar El código y el nombre del alumno de la tabla ALUMNOS ordenado por nombre del alumno en forma ascendente

SELECT ALUMNOS.* FROM ALUMNOS ORDER BY ALUMNOS.NombreAlumno ASC

2. Mostrar la tabla PAGOS ordenado de acuerdo al monto en forma Descendente ( que figuren todos los campos)

SELECT Pagos.* FROM Pagos ORDER BY Monto DESC;

3. Obtener un listado de código del alumno y monto pagado ordenado en forma descendente de acuerdo al pago ( que se muestre solo código del alumno y monto)

SELECT Pagos.codAlumno,Pagos.Monto FROM Pagos ORDER BY Monto DESC;

5.9 Incluir criterios de búsqueda (Seleccionar filas)

La opción Dónde permite poner un criterio de búsqueda que se aplicará a las filas del origen de la consulta antes de realizar los cálculos. Por ejemplo queremos saber cuántos alumnos son nacidos antes de año 1980, para ello tenemos que contar los registros de la tabla alumnos pero seleccionando previamente los nacidos antes del año 1980

SELECT Alumnos.* FROM Alumnos Where Year(FechaNac) <1980;

codalumno NombreAlumno FechaNAcA1 JUAN 01/01/1970

Para indicar varias condiciones se emplean los operadores Y y O.Las condiciones: Los operadores de comparación: > < = ..

2 Mostrar todos los pagos mayores a 100 y menores a 300

Page 9: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 145 -

SELECT * FROM Pagos ;SELECT * FROM Pagos WHERE Monto>=100 AND MONTO <=300;

5.10 Búsqueda de valores conocidos(TEXTO)

Listar pagos del alumno que tiene código A1

SELECT PAGOS.* FROM PAGOS WHERE CodAlumno ='A1';

NroFechaPago

CodAlumno Monto

CodCurso

101/04/200

7 A1 100 AD

301/02/200

8 A1 200 C1

601/04/200

9 A1 300 C2

701/05/201

0 A1 200 AD

801/08/201

1 A1 120 C1O puede ser SELECT PAGOS.* FROM PAGOS WHERE CodAlumno LIKE 'A1';

Se puede hacer varias consultas

Page 10: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 146 -

5.11 CONCIDENCIA DE PATRONES Caracteres Comodin

Coincidencia de patrones es una técnica que determina si una cadena de caracteres coincide con un patrón especificado. Puede crear un patrón mediante una combinación de caracteres regulares y caracteres comodín. Durante la coincidencia de patrones, deben coincidir exactamente con patrones regulares como especificado en la cadena de caracteres. LIKE y NOT LIKE (negación) son los operadores utilizados para la coincidencia de patrones. Recuerde que la coincidencia de patrones distingue mayúsculas de minúsculas. SQL Server admite los siguientes caracteres comodín para la coincidencia de patrón:

% (porcentaje marca): este comodín representa cero para muchos caracteres. Por ejemplo, título donde como '%VB 2008 %' encuentra todos los títulos de libros que contiene el texto "vb 2008", independientemente de dónde en el título que el texto se produce, en principio, medio o al final. • _ (subrayado): un único carácter de subrayado representa cualquier carácter individual. Por ejemplo, '_ean' encuentra todos los primeros nombres que constan de cuatro letras y que terminan con "ean" (Dean, Sean, etcétera). DONDE au_fname como 'a___n' encuentra todos los nombres que comienzan con "a" y terminar con la "n" y cualquier otros tres caracteres, tales como allan, Ammán, ario, y así sucesivamente.

[] (corchetes): estos especifican cualquier carácter individual dentro del intervalo especificado, como [a-f], o conjunto, como [abcdef] o incluso [adf]. Por ejemplo, WHERE au_lname LIKE '[C-K] arsen' considera autor apellidos terminando con "arsen" y comenzando con cualquier carácter individual entre "C" y "K", como por ejemplo Carsen, Darsen, Larsen, Karsen, y así sucesivamente.

• [^] (corchetes y símbolo de intercalación): estos especifican cualquier carácter individual dentro del rango especificado, como [^ a-f], o conjunto, como [^ abcdef]. Por ejemplo, dónde au_lname como ' de [^ l] %' recupera todo autor apellidos con "de", pero la siguiente letra no puede ser "l."

EJERCICIOS CON CARACTERES COMODIN DE LA BASE DE DATOS ALUMNOS

Ejemplo. Listar todos aquellos alumnos que contiene la letra RSELECT * FROM ALUMNOS;SELECT * FROM Alumnos WHERE NombreAlumno Like '%R%';

Page 11: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 147 -

En Algunos sistemas seriaSELECT Alumnos.* FROM Alumnos WHERE Alumnos.NombreAlumno Like '*R*';

Usando el caracter % Listar los alumnos que contienen la letra Aselect * FROM Alumnos where NombreAlumno like '%A%';

codalumno NombreAlumno FechaNAcA1 JUAN 01/01/1970A5 MARIO 01/08/1993

Listar los alumnos que comienzan con la letra Jselect * FROM Alumnos where NombreAlumno like 'J%';

Listar los alumnos que terminan con la letra Oselect * FROM Alumnos where NombreAlumno like '%O';

Utilizando el carácter _ (subrayado): en la base de datos Alumnos

Listar los alumnos cuya primera letra sea J y la tercera sea R Use Alumnos select * FROM Alumnos where NombreAlumno like 'J_R%';

Usando los caracteres [^] (corchete y símbolo de intercalación).

Listar los alumnos cuyo nombre empieza de A-K select * FROM Alumnos where NombreAlumno like '[A-K]%';

Listar los alumnos que no comienzan con Jselect * FROM Alumnos where NombreAlumno like '[^J]%';

listar los alumonos cuya primera no esten en el intervalo A-Kselect * FROM Alumnos where NombreAlumno like '[^A-K]%';

listar los nombres de los alumnos cuya primera letra sea 'J' pero la segunda no puede ser 'O'select * FROM Alumnos where NombreAlumno like 'J[^O]%';

Page 12: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 148 -

5.12 El operador Entre (Between)Tiene la siguiente sintaxis: Expresión Entre valor1 Y valor2

Ejemplo: listar todos los alumnos nacidos entre entre #01/01/60# y #04/06/70#,

SELECT ALUMNOS.*, ALUMNOS.FechaNac FROM ALUMNOSWHERE FechaNac Between '1/1/1960' And '6/4/1980'

codalumno

NombreAlumno

FechaNAc

FechaNac

A1 JUAN01/01/19

7001/01/19

70

A3 LUIS02/02/19

8002/02/19

80

Esta sentencia es lo mismoSELECT ALUMNOS.*, ALUMNOS.FechaNac FROM ALUMNOSWHERE FechaNac >= '1/1/1960' And FechaNac <= '6/4/1980'5.13 El operador In : (Inclusión) Tiene la siguiente sintaxis: Expresión In (valor1, valor2, ...)

Examina si el valor de la expresión es uno de los valores incluidos en la lista de valoresescritos entre paréntesis.

Por ejemplo, para seleccionar los alumnos que pagaron en Admisión y matricula seriaSELECT PAGOS.* FROM PAGOS WHERE CodCurso IN ('AD', 'M1');

NroFechaPago

CodAlumno Monto

CodCurso

101/04/200

7 A109/04/19

00 AD

201/12/200

7 A209/04/19

00 M1

401/03/200

8 A3 100 AD

701/05/201

0 A1 200 AD

No inclusión Listar aquellos registros que no contienen ni admisión ni matricula SELECT PAGOS.* FROM PAGOS WHERE CodCurso NOT IN ('AD', 'M1');

NroFechaPago

CodAlumno Monto

CodCurso

301/02/200

8 A118/07/19

00 C1

501/02/200

9 A218/07/19

00 C1

601/04/200

9 A1 300 C2

801/08/201

1 A1 120 C1

Page 13: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 149 -

5.14 LAS CONSULTAS DE RESUMEN

Introducción

En SQL de Microsoft Jet 4.x y de la mayoría de los motores de bases de datos relacionales, podemos definir un tipo de consultas cuyas filas resultantes son un resumen de las filas de la tabla origen, por eso las denominamos consultas de resumen, también se conocen como consultas sumarias.

En el ejemplo que viene a continuación tienes un ejemplo de consulta normal en la que se visualizan las filas de la tabla oficinas ordenadas por region, en este caso cada fila del resultado se corresponde con una sola fila de la tabla oficinas, mientras que la segunda consulta es una consulta resumen, cada fila del resultado se corresponde con una o varias filas de la tabla oficinas.

Las consultas de resumen introducen dos nuevas cláusulas a la sentencia SELECT, la cláusula GROUP BY y la cláusula HAVING, son cláusulas que sólo se pueden utilizar en una consulta de resumen, se tienen que escribir entre la cláusula WHERE y la cláusula ORDER BY y tienen la siguiente sintaxis:

Funciones de columna

Page 14: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 150 -

En la lista de selección de una consulta de resumen aparecen funciones de columna también denominadas funciones de dominio agregadas. Una función de columna se aplica a una columna y obtiene un valor que resume el contenido de la columna.Tenemos las siguientes funciones de columna:

La función SUM() calcula la suma de los valores indicados en el argumento. Los datos que se suman deben ser de tipo numérico (entero, decimal, coma flotante o monetario...).

La función AVG() calcula el promedio (la media arimética) de los valores indicados en el argumento, también se aplica a datos numéricos, StDev() y StDevP() calculan la desviación estándar de una población o de una muestra de la población representada por los valores contenidos en la columna indicada en el argumento. Si la consulta base (el origen) tiene menos de dos registros, el resultado es nulo.

Las funciones MIN() y MAX() determinan los valores menores y mayores respectivamente. Los valores de la columna pueden ser de tipo numérico, texto o fecha. La función COUNT(nb columna) cuenta el número de valores que hay en la columna, los datos de la columna pueden ser de cualquier tipo, y la función siempre devuelve un número entero. COUNT(*) permite contar filas en vez de valores. Si la columna no contiene ningún valor nulo,

SELECT Count(NombreALumno) AS Cantidad FROM Alumnos ;Cantidad

5

SELECT Count(*) AS Cantidad FROM Alumnos

Ejercicio . Elaborar una consulta donde nos muestre la suma, el promedio , el mayor y el menor y la desviación típica de los totales de la tabla PAGOS

Avg(Monto) As Promedio , Max(Monto) As Maximo, Min(Monto) as Minimo , STDEV (MONTO) AS desviacion, STDEVp (MONTO) AS desviacion FROM PAGOS;

Page 15: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 151 -

Cuenta SumaPromedio Maximo Minimo

desviacion desviacion

8 1600 200 300 100 92.5820186.602540

4

5.15 Agrupar registros

La opción GROUP BY permite definir columnas de agrupación. Una consulta de resumen sin columnas de agrupación obtiene una única fila resultado y los cálculos se realizan sobre todos los registros del origen.

Por ejemplo queremos saber cuántos alumnos tenemos en cada Curso. Tenemos que indicar que queremos contar los registros de la tabla Pagos pero antes agrupándolos por el campo CodCurso. De esta manera la función cuenta() la calculará sobre cada grupo de registros (los Códigos de curso similares). La consulta quedaría así:

SELECT Pagos.CodCurso, Count(Pagos.CodCurso) AS CuentaDeCodCursoFROM Pagos GROUP BY Pagos.CodCurso;

CodCurso

CuentaDeCodCurso

AD 3C1 3C2 1M1 1

Ejercicio . Elaborar una consulta donde nos muestre la suma, el promedio , el mayor y el menor y la desviación típica de los totales de la tabla PAGOS agrupado por codigo( se puede agrupar por fechas, años, meses)

Page 16: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 152 -

HAVING se comporta como WHERE, pero se aplica a grupos (las filas o tuplas en el conjunto de resultados representan grupos). La cláusula WHERE se aplica a filas o tuplas individuales, NO a grupos.

HAVING .- tiene un efecto similar similar a WHERE , pero solo trabaja de acuerdo a los resultados obtenidos por GROUP BY . Con la siguiente Instrucción

SELECT Codalumno, SUM (monto) As Totales FROM pagos GROUP BY codalumno

SELECT Codalumno, SUM (monto) As Totales FROM pagos GROUP BY codalumno HAVING SUM(monto)<=400

Con la clausula having solo se muestra los subtotales menores a 400

LAS CONSULTAS MULTITABLA

Una consulta multitabla es una consulta que obtiene datos de varias tablas por lo que deberá contener en la zona de tablas de la ventana Diseño las distintas tablas de donde obtiene esos datos.Para relacionar tablas use dataset para ello

Paso 1. Genere su conjunto de datos( antes debe agregar orígenes de datos)

Paso 2. Elija Dataset y arrastre al formulario

Page 17: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 153 -

Page 18: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 154 -

Combinar tablas

Cuando dos tablas están combinadas en una consulta, para cada fila de una de las tablas Access busca directamente en la otra tabla las filas que tienen el mismo valor en el campo de unión, con lo cual se emparejan sólo las filas que luego aparecen en el resultado y la consulta es más eficiente.

Ejemplo de composición interna

INNER JOIN CON LA BASE DE DATOS ALUMNOS

Obtener un listado completo de a tabla PAGOS incluyendo el código del alumno el nombre y el monto

SQL SIN INNER JOIN

SELECT A.Nro,A.CodAlumno,b.nombrealumno,a.monto FROM Pagos A, Alumnos B WHERE A.codAlumno = B.codAlumno ORDER BY A.Nro;

Page 19: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 155 -

Combinar tres tablasSELECT A.Nro,A.CodAlumno,b.nombrealumno,a.monto ,a.CodCurso ,c.NombreCurso FROM Pagos A, Alumnos B ,Cursos C WHERE A.codAlumno = B.codAlumno And A.CodCurso =c.CodCurso ORDER BY A.Nro;

SQL CON INNER JOIN

Page 20: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 156 -

SELECT A.NRO,A.CodAlumno,B.NombreAlumno, A.Monto from Pagos A INNER JOIN ALumnos B ON A.codAlumno = B.codAlumno ORDER BY A.Nro

Combinar 3 tablas con INNER JOINselect C.*,D.NombreCurso FROM (SELECT A.NRO,A.CodAlumno,B.NombreAlumno, A.Monto ,a.CodCurso from Pagos A INNER JOIN ALumnos B ON A.codAlumno = B.codAlumno ) C INNER JOIN CURSOS D on c.codcurso =D.CodCurso

Combinaciones internas.

Una combinación interna es la combinación más utilizada. Devuelve sólo las filas que cumplen la especificación de combinación. Aunque en teoría cualquier operador relacional (como > o <) puede utilizarse en la especificación de combinación, casi siempre se utiliza el operador de igualdad (=). Usando el operador de igualdad se denomina combinaciones naturales.

Combinaciones externas.

Combinaciones externas devolución todas las filas de una de las tablas combinadas (mínimo) aunque filas en una tabla no coinciden con las filas de la otra. Existen tres tipos de combinaciones externas: combinación externa, combinación externa derecha y combinación externa completa.

5.16.2LA COMPOSICION EXTERNA

La composición externa se utiliza cuando queremos que también aparezcan las filas que no tienen una fila coincidente en la otra tabla.

Ejemplo de combinación externa Encontrar los pagos Totales por alumno incluyendo los alumnos que no pagaron

Page 21: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 157 -

SELECT A.CodAlumno, A.nombrealumno, B.total FROM Alumnos A LEFT JOIN (SELECT codalumno , sum(monto) as Total from Pagos group by codalumno ) B ON A.codAlumno = B.codAlumno

5.17 UNION.

La mayoría de las consultas requieren información de más de una tabla. Una Unión es una operación relacional que produce una tabla por recuperar los datos de dos tablas (no necesariamente distintas) y que coinciden con sus filas según una especificación de combinación(UNION).

Existen diferentes tipos de combinaciones, que miran individualmente, pero tenga en cuenta que cada combinación es una operación binaria, es decir, una tabla se une a otro, que puede ser la misma tabla, ya que las tablas se pueden unir a sí mismos. La operación de combinación es un tema algo complejo y Rico. Las secciones siguientes tratan la.

EL OPERADOR UNION

Unir dos tablas sin repeticiones ( mostrar tablas pagos y nombres sin repeticiones)SELECT CodAlumno from Alumnos UNIONSELECT CodAlumno from Pagos

Unir dos tablas con repeticiones ( tabla nombres y pagos)SELECT CodAlumno from Alumnos UNION ALLSELECT CodAlumno from Pagos;

Page 22: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 158 -

5.18 LAS CONSULTAS DE REFERENCIAS CRUZADAS

Se define una consulta de referencias cruzadas cuando queremos representar una consulta resumen con dos columnas de agrupación como una tabla de doble entrada en la que cada una de las columnas de agrupación es una entrada de la tabla.

Por ejemplo queremos obtener las pagos realizados por alumno en cada cursoCon la consulta se obtieneSELECT CodAlumno,Monto,CodCurso From Pagos

CodAlumno Monto

CodCurso

A1 100 C1A2 200 C2A1 100 C2A2 200 C3A3 100 C4A1 300 C2A2 400 C3A4 100 C4

La consulta quedaría mucho más elegante y clara presentando los datos en un formato más compacto como el siguiente:

CODALUMNO AD M1 C1 C2 C3 C4 totalA1 0 0 100 400 0 0 500A2 0 0 0 200 600 0 800A3 0 0 0 0 0 100 100A4 0 0 0 0 0 100 100

SELECT CODALUMNO ,sum (case when codcurso='AD' then monto else 0 end ) as AD,sum (case when codcurso='M1' then monto else 0 end ) as M1,sum (case when codcurso='C1' then monto else 0 end ) as C1,sum (case when codcurso='C2' then monto else 0 end ) as C2,sum (case when codcurso='C3' then monto else 0 end ) as C3,sum (case when codcurso='C4' then monto else 0 end ) as C4,sum(monto) as totalfrom pagos group by CODALUMNO

SELECT CODcurso ,COUNT (case when codalumno='A1' then monto else 0 end ) as A1,COUNT (case when codalumno='A2' then monto else 0 end ) as A2,COUNT (case when codalumno='A3' then monto else 0 end ) as A3,COUNT (case when codalumno='A4' then monto else 0 end ) as A4,COUNT (case when codalumno='A5' then monto else 0 end ) as A5,COUNT(*) as totalfrom pagos group by CODCURSO

5.18.2Operador de pivote:

Page 23: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 159 -

Un escenario común donde dinámica puede ser útil es cuando desea generar informes de tablas cruzadas para resumir datos. El operador PIVOT puede rotar filas a columnas.

EJERCICIO DE OPERADOR PIVOT CON LA TABLA ALUMNOS

Calcular la cantidad de alumnos matriculados en cada curso: La sentencia SQL es

select codAlumno, AD,M1,C1,C2,C3,C4from ( select Codalumno , CodCurso From Pagos)piv Pivot(count(CodCurso) for CodCurso in (AD,M1,C1,C2,C3,C4)) as CantCurso

Al revezselect codcurso, A1,A2,A3,A4from ( select Codcurso , Codalumno From Pagos) A Pivot ( count(Codalumno) for Codalumno in (A1,A2,A3,A4,A5)) as Cantaumno

codcurso A1 A2 A3 A4

AD 2 0 0 0C1 1 0 1 0C2 0 0 1 0C3 0 1 0 0M1 0 1 1 0

Para sumarselect codAlumno, AD,M1,C1,C2,C3,C4from ( select Codalumno , MONTO,CodCurso From Pagos)piv Pivot( SUM(MONTO) for CodCurso in (AD,M1,C1,C2,C3,C4)) as TOTAL

Elaborar una cuadricula de pagos por años y meses

Page 24: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 160 -

Aunque el estándar SQL define un tipo SELECT YEAR(FechaPago) AS AÑO ,sum (case when month(FechaPago)=1 then monto else 0 end ) as ene,sum (case when month(FechaPago)=2 then monto else 0 end ) as feb,sum (case when month(FechaPago)=3 then monto else 0 end )as mar,sum (case when month(FechaPago)=4 then monto else 0 end )as abr,sum (case when month(FechaPago)=5 then monto else 0 end )as may,sum (case when month(FechaPago)=6 then monto else 0 end )as jun,sum (case when month(FechaPago)=7 then monto else 0 end )as jul,sum (case when month(FechaPago)=8 then monto else 0 end )as ago,sum (case when month(FechaPago)=9 then monto else 0 end )as seti,sum (case when month(FechaPago)=10 then monto else 0 end ) as oct,sum (case when month(FechaPago)=11 then monto else 0 end )as nov,sum (case when month(FechaPago)=12 then monto else 0 end )as dic,sum(monto) as totalfrom pagos group by year(fechapago)

5.19 FUNCIONES DE FECHA Y HORA

de datos DATETIME y sus componentes, año, mes, día, hora, minuto y segundo,

Select current_timestamp 'standard datetime',getdate()'Transact-SQL datetime',year(getdate())'year function',datepart(year, getdate())'datepart Año',datepart(month, getdate())'datepart Mesr',datepart(day, getdate())'datepart Dia',datepart(DAYOFYEAR , getdate())'datepart Dia del año',datepart(hour, getdate()) 'hora',datepart(minute, getdate()) 'Minuto',datepart(second, getdate()) 'Segundo',datepart(WEEKDAY , getdate()) 'datepart dia semana',datepart(MILLISECOND , getdate()) 'datepart milisegundos',datepart(MICROSECOND , getdate()) 'datepart microsegundo'

standard datetime

Transact-SQL datetime

year function

datepart Año

datepart Mesr

datepart Dia

datepart Dia del año

hora

Minuto

Segundo

datepart dia semana

datepart milisegundos

datepart microsegundo

Page 25: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 161 -

35:27.7 35:27.7

2015

2015 6 28 179

10

35 27 1 667 667000

EJERCICIOS DE FECHAS Y HORAS

1. Obtener la fecha actual select getdate() 2015-06-28 10:39:05.557

2. Obtener año, mes y dia de la Select getdate() as fecha fecha actual

select 'año=',year(getdate());select 'mes=',month(getdate());select 'dia=',day(getdate());

3. Obtener hora, minuto y segundo de la fecha actual

select datepart(hour, getdate()) as horaselect datepart(minute, getdate()) as minutoselect datepart(second, getdate()) as segundo

4. Obtener el año, mes y dia de una fecha

select getdate() as fechahora,year(getdate()) as año,month(getdate()) as mes,day(getdate()) as dia

5. Dia de semana en SQLserver 2008SELECT DATENAME(dw, getdate()) Viernes

6. Obtener el año , mes y dia de una fecha de pago del alumno ‘A1’SELECT codalumno, fechapago, year(getdate()) as año ,month(getdate()) as mes ,day(getdate()) as dia from pagos where codalumno= 'A1'

7. encontrar el año de una fechaSELECT DATENAME(dw, '8/15/2015') AS FECHA

8. encontar dia de la semana de una fecha

Page 26: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 162 -

SELECT DATENAME(dw, '08/15/2015')

FECHASaturday

5.20 El predicado TOP y la clave PERCENTSELECT DATENAME (dw,'02/02/2015') as dia

TOP Devuelve cierto número de registros que se encuentran entre la parte superior e inferior de un intervalo especificado por una cláusula ORDER BY.(los primeros n registros), si hubiera dos registros con el mismo nombre , devolverá ambos ,al utilizar el predicado TOP si la cláusula ORDER BY es omitido muestra un conjunto arbitrario de registros.

SELECT ALL TOP 4 * From pagos ORDER BY fechapago ASC

Selecciona los primeros 4 registros

SELECT TOP 50 PERCENT * From PAGOS WHERE MONTO > 0Muestra el 50 % de los registros que cumplen la condición especificado en WHERE ( si hay 5 registros listara 3)

5.21. CONSULTAS SELECT ANIDADAS

 SubConsultas

Una subconsulta es una instrucción SELECT anidada dentro de una instrucción

SELECT, SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta.

Las consultas anidadas SELECT se conoce como subconsultas son consultas contenidas en otra

Encontrar el nombre del alumno que hizo mayor pago

Forma A

SELECT D.CODALUMNO,E.NOMBREALUMNO,D.TOTAL FROM (SELECT C.* FROM (select codalumno, SUM(MONTO) as tOTAL FROM PAGOS GROUP BY CODALUMNO)cWHERE C.TOTAL= (SELECT MAX(B.T1) FROM(select codalumno, SUM(MONTO) as t1 FROM PAGOS GROUP BY CODALUMNO) B))D ,ALUMNOS E WHERE D.CODALUMNO=E.CODALUMNO

Forma B

Page 27: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 163 -

SELECT * FROM ALUMNOS WHERE CODALUMNO LIKE (SELECT CODALUMNO FROM PAGOS WHERE MONTO= (Select MAX(MONTO) FROM PAGOS ) )

codalumno

NombreAlumno

FechaNAc

A1 JUAN 01/01/1970

Pruebe la siguiente consultaSELECT X.NRO, X.CODALUMNO, X.NOMBREALUMNO, X.MONTO, X.CODCURSO,Y.PROFESORFROM (SELECT NRO , A.CODALUMNO, B.NOMBREALUMNO,MONTO ,CODCURSO FROM PAGOS A ,ALUMNOS B WHERE A.CODALUMNO =B.CODALUMNO) X, CURSOS YWHERE X.CODCURSO= Y.CODCURSO

Ejercicio resuelto en clase1. cual es el mayor pago de la tabla pagos

SELECT * FROM PAGOS;SELECT MAX(MONTO) AS MAYOR FROM PAGOS;

NroFechaPago

Codalumno Monto

CodCurso

101/02/200

1 A1 100 C1

201/02/200

1 A2 200 C2

301/02/200

1 A1 100 C2

401/02/201

0 A2 200 C35 01/02/200 A3 100 C4

Page 28: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 164 -

1

601/02/201

5 A1 300 C2

720/02/201

5 A2 400 C3

801/02/201

5 A4 100 C4

MAYOR400

b) a que codigo del alumno le corresponde ese mayor pago

SELECT CODALUMNO FROM PAGOS WHERE MONTO= (SELECT MAX(MONTO) AS MAYOR FROM PAGOS)

CODALUMNOA2

C) EL NOMBRE DEL alumno que hizo el mayor pago

SELECT * FROM ALUMNOS Select nombrealumno from alumnos where codalumno =(SELECT CODALUMNO FROM PAGOS WHERE MONTO= (SELECT MAX(MONTO) AS MAYOR FROM PAGOS))

nombrealumnoPEDRO

5.22 Función ROW_NUMBER()

SQL Server 2005 ha introducido la función ROW_NUMBER() para clasificación: devuelve un número secuencial, único para cada fila del conjunto de resultado devuelto.

Ejemplo con la base de datos alumnos

SELECT ROW_NUMBER() OVER(ORDER BY NOMBREALUMNO Asc) AS FilaNro, CODALUMNO, NOMBREALUMNO FROM ALUMNOS

FilaNro CODALUMNO

NOMBREALUMNO

1 A4 JORGE2 A6 JOSE3 A1 JUAN4 A3 LUIS5 A5 MARIO6 A2 PEDRO

Page 29: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 165 -

Poner numero de orden a la tabla PAGOS ordenado de acuerdo a la fecha de pago

select ROW_NUMBER() over (order by fechapago) as NroFecha,* from pagos

NroFecha Nro FechaPago CodAlumn

o MontoCodCurso

1 1 01/04/2007 A1 100 AD2 2 01/12/2007 A2 100 M13 3 01/02/2008 A1 200 C14 4 01/03/2008 A3 100 AD5 5 01/02/2009 A2 200 C16 6 01/04/2009 A1 300 C27 7 01/05/2010 A1 200 AD8 8 01/08/2011 A1 120 C1

5.23 LAS CONSULTAS DE ACCIÓN

Las consultas de acción son consultas que permiten realizar cambios en los datos almacenados en una tabla. Con estas consultas podemos crear una nueva tabla a partir de los registros de otra, modificar los datos almacenados, insertar nuevos registros o eliminar registros.

5.24 Consultas de creación de tabla.( consultas que se almacenan en una tabla)

Las consultas de creación de tabla son consultas que almacenan en una nueva tabla el resultado de una consulta de selección.

Sentencia SQL : SELECT ALUMNOS.* INTO ALUMNOS1 FROM ALUMNOS;Crea la tabla Alumnos a partir de la tabla Alumnos

Ejemplo 2. SELECT codalumno, sum(monto) as total into resumen FROM pagos group by codalumno;

Crear tablas con SQLCREATE TABLE ALUMNOS2(CodAlumno char(10),NombreAlumno char(50),FechaNac date, primary key (CodAlumno))

Page 30: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 166 -

CREATE TABLE PAGOS2(Nro int,CodAlumno char(10),FechaPago date,Monto Money,CodCurso char(10), primary key (Nro))

5.25 Consulta de datos anexados.

Datos anexados en base a una consulta

Las consultas de datos anexados son consultas que añaden filas enteras a una tabla.Los nuevos registros se agregan siempre al final de la tabla.

Formar una nueva tabla llamada ALUMNOS1 con los nombres de los alumnos de la tabla ALUMNOS ( ADICIONAR DATOS)

INSERT INTO Alumnos1 ( CodAlumno, NombreAlumno )SELECT CodALumno, NOMBREALUMNO FROM ALUMNOS;

Nota: debe existir la tabla Alumnos1

Page 31: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 167 -

Datos anexados con valores

Si puede anexar datos que no se obtiene de ninguna tabla

INSERT INTO ALumnos ( codAlumno, NombreAlumno, FechaNac ) values ('A6','JOSE','01/01/2009');

5.26 Consultas de actualización.

Las consultas de actualización son consultas que permiten modificar los datos almacenados en una tabla, modifican el contenido de los registros de una tabla. Se pueden modificar de golpe todos los registros de la tabla o sólo los que cumplan una determinado condición.

EjerciciosCrea la tabla pagos1 incluyendo su campo clave a partir de la tabla pagos

SELECT * INTO PAGOS1 FROM PAGOS

ALTER TABLE PAGOS1 ADD CONSTRAINT [PK_PAGOS]PRIMARY KEY CLUSTERED ([Nro]);

1. incrementar el campo monto de la tabla pagos1 en un 10%

UPDATE Pagos1 SET Monto = Monto*1.1 WHERE codalumno='A1';

Ejemplo Actualizar el campo pagos1 de la nueva tabla al 300 a todos los registrosUPDATE Pagos1 SET Monto =300

5.27 Consulta de eliminación

Las consultas de eliminación son consultas que eliminan de una tabla los registros que cumplen el criterio de búsqueda especificado.

1. Eliminar todos los registros de aquellos alumnos que tienen código A1DELETE FROM Alumnos WHERE CodAlumno='A1'

2. Eliminara todas los registros de la tabla Alumnos1

DELETE FROM Alumnos1;

5.28 OPERACIONES DE MODIFICACIONES DE TABLAS

ELIMINAR TODA LA TABLA

Elimina la tabla ALUMNOS2 DROP TABLE ALUMNOS2

Agregar un nuevo campo a la tabla ALUMNOS1

ALTER TABLE ALUMNOS1 ADD Procedencia char(20)

Page 32: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 168 -

Eliminar el campo Procedencia en la tabla ALUMNOS2;ALTER TABLE ALUMNOS2 Drop Procedencia;

EJERCICIOS DE MODIFICACION DE TABLAS (CAMPOS)

Al crear La tabla Alumnos se ingreso de la siguiente manera

En SQL seria :

CREATE TABLE TABLE1(Id int,Nombre char(10),FechaNac nchar(10), primary key (Id))

Y se ingreso los siguientes datos

Que en sentencia SQL seriaDELETE FROM TABLE1INSERT INTO TABLE1 (Id,Nombre,FechaNac) values (1,'JOSE','1/2/2001');INSERT INTO TABLE1 (Id,Nombre,FechaNac) values (2,'PEDRO','fecha2');INSERT INTO TABLE1(Id,Nombre,FechaNac) values (3,'LUCAS','fecha3');

Que se obtiene

La tabla debería llamarse alumnos entonces se cambia el nombre de la tabla

EXEC sp_rename TABLE1, ALUMNOS;

Primero se debe quitar la clave principal

ALTER TABLE ALUMNOS drop CONSTRAINT [PK_Alumnos]

Nota ver con que nombre le puso la clave

ALTER TABLE ALUMNOS drop CONSTRAINT [PK__TABLE1__3214EC07C968DB7D]

Page 33: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 169 -

luego se modifica al nuevo tipo de campo Id

ALTER TABLE alumnos ALTER COLUMN Id varchar (5) ;

Cambiamos el nombre de la columna Id a codalumnoEXEC sp_rename 'Alumnos.Codigo', 'CodAlumno'

Cambiamos el campo nombre con nombre alumnoEXEC sp_rename 'Alumnos.Nombre', 'NombreAlumno'

Cambiar el tipo de datos de NombreAlumno que es char(10) a VarChar(50)

ALTER TABLE alumnos ALTER COLUMN NombreALumno varchar (50) ;Cambiar el tipo de datos dell campo FechaNac a Date

ALTER TABLE alumnos ALTER COLUMN FechaNac Date ;

Previamente de debe borrar los datos de la columna FechaNac A NULLO primero borrar el campo fecha y agregarlo con los datos correctos

ALTER TABLE Alumnos DROP COLUMN FechaNacALTER TABLE Alumnos ADD FechaNac Date;

ALTER TABLE ALUMNOS ALTER COLUMN CodAlumno varchar (5) not NULL ;

Volver a colocar la clave principalALTER TABLE Alumnos ADD CONSTRAINT [PK_alumnos] PRIMARY KEY CLUSTERED ([Codalumno]);

Previamente la creacion de la table deberia haber sidoCREATE TABLE [dbo].[ALUMNOS] ( [CodAlumno] VARCHAR (5) NOT NULL, [NombreAlumno] VARCHAR (50) NULL, [FechaNac] DATE NULL);

ALTER TABLE Alumnos ADD CONSTRAINT [PK_alumnos] PRIMARY KEY CLUSTERED ([Codalumno]);

Vea http://www.1keydata.com/es/sql/sql-create-table.php

Page 34: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 170 -

Crear la clave principalALTER TABLE ALUMNOS ADD CONSTRAINT [PK_Alumnos]PRIMARY KEY CLUSTERED ([Id]);

Remover el campo claveALTER TABLE ALUMNOS drop CONSTRAINT [PK_Alumnos]

Se puede copiar los datos a Excel recuperarloCuando la base de daos es creados en SQL Server se puede los nombres d elos campos como en Visual Basic 2010

5.29 EJERCICIOS Usando la tabla PAGOS

1 listar la tabla pagos SELECT Pagos.* FROM Pagos;

NroFechaPag

oCodAlumn

o MontoCodCurs

o

101/04/200

7 A1 100 AD

201/12/200

7 A2 100 M1

301/02/200

8 A1 200 C1

401/03/200

8 A3 100 AD

501/02/200

9 A2 200 C1

601/04/200

9 A1 300 C2

701/05/201

0 A1 200 AD

801/08/201

1 A1 120 C1

2) Mostrar los pagos totales por alumno

SELECT codalumno,SUM(monto) As total FROM Pagos GROUP BY codalumno;

codalumno Total

A1 920A2 300A3 100

3) Listar los alumnos que pagaron mayores o iguales 400

SELECT codalumno ,sum(monto) AS suma from Pagos GROUP BY codalumno HAVING SUM(monto)>=400

codalumn suma

Page 35: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 171 -

oA1 920

4 Obtener el numero de pagos que sean menores y iguales a 100

SELECT COUNT(monto) AS NroPagos from Pagos WHERE monto<=100NroPago

s3

5) Obtener los códigos de los alumnos de la tabla pagos sin repeticiones

SELECT DISTINCT codalumno FROM Pagos;

6) Obtener el código del alumno que hizo mayor pago y en que curso

SELECT CodAlumno,Monto,CodCurso FROM Pagos WHERE Monto =(SELECT MAX(Monto) from Pagos);

CodAlumno Monto

CodCurso

A1 300 C2

Si hay varios mayores lista todos los registros

7) Elaborar un listado de aquellos alumnos que no pagaronSELECT codalumno ,nombrealumno FROM Alumnos WHERE codalumno NOT IN (SELECT CodAlumno FROM Pagos)

codalumno

nombrealumno

A4 JORGEA5 MARIO

8) Elaborar los pagos totales agrupado por año

SELECT YEAR (fechapago) AS APago , SUM(monto) as pagototal from Pagos GROUP BY YEAR (fechapago)Nota . en algunos sistemas no reconoce caracteres especiales como AÑO

APagopagotota

l2007 2002008 3002009 5002010 2002011 120

9) Calcular la cantidad de pagos totales por mes

Page 36: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 172 -

SELECT MONTH (fechapago) as mes,count(monto) as cantidad from Pagos GROUP BY MONTH(fechapago)

mes cantidad2 23 14 25 18 112 1

10) Encontrar los subtotales por cursoSELECT CodCurso as Curso , SUM(Monto) as TOTAL FROM Pagos GROUP BY CodCurso

Curso TOTALAD 400C1 520C2 300M1 100

11) Listar los alumnos que pagaron entre 100 y 200

SELECT codalumno ,monto from pagos WHERE MONTO BETWEEN 100 and 200

12) La tabla pagos tiene la siguiente estructura mostrar todos los campos y la diferencia de esos campos

nombre P1 P2A 200 100B 300 100C 100 20

SELECT nombre, p1,p2,p1-p2 as dif from Pagos

nombre p1 p2 Dif

A200

100

100

B300

100

200

C100 20 80

Caso 2 .Se tiene la siguientes tablas (ingresos y egresos) de una base de datos se desea obtener los saldos

INGRESOSNOMBRE INGRESOSA 200B 300

Page 37: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 173 -

C 50

EGRESOSNOMBRE EgresosA 100B 200

SELECT B.NOMBRE , B.EGRESOS FROM Egresos BSELECT A.NOMBRE , A.INGRESOS FROM Ingresos ASELECT a.NOMBRE ,A.INGRESOS ,B.EGRESOS,A.INGRESOS-B.EGRESOS AS SALDO FROM Ingresos ALEFT JOIN Egresos BON A.NOMBRE = B.NOMBRE

NOMBRE

INGRESOS

EGRESOS

SALDO

A 200 100 100B 300 200 100C 50

EJERCICIOS DE CONSULTAS DE REFERENCIAS CRUZADAS(Acces)

1 Elaborar la cuadricula de pagos por alumno y curso (no incluye totales)

TRANSFORM SUM(Pagos.Monto) SELECT Pagos.CodAlumno FROM Pagos GROUP BY Pagos.CodAlumno PIVOT Pagos.CodCurso

PAGOS_Tabla ALUMNOS Y CURSOSCodAlumno AD C1 C2A1 100,00 € 200,00 € 200,00 €A2 100,00 € 200,00 €A3 100,00 €A4 200,00 € 200,00 €

2 elaborar cuadricula de pagos por alumnos y años

TRANSFORM SUM(Monto) SELECT CodAlumno FROM Pagos GROUP BY CodAlumno PIVOT Year(FechaPago)

PAGOS ConsultaCodAlumno 2007 2008 2009A1 500,00 €A2 100,00 € 200,00 €A3 100,00 €A4 400,00 €A5 200,00 €

1. Elaborar cuadricula de pagos por alumnos y meses

Page 38: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 174 -

TRANSFORM SUM(Monto) SELECT CodAlumno FROM Pagos GROUP BY CodAlumno PIVOT MONTH(FechaPago)

PAGOS ConsultaCodAlumno 1 2 4 5 8 12A1 500,00 €A2 200,00 € 100,00 €A3 100,00 €A4 200,00 € 200,00 €A5 200,00 €

3 Elaborar cuadriculas años y meses

TRANSFORM SUM(Monto) SELECT year(FechaPago) as AÑO FROM Pagos GROUP BY Year(Fechapago) PIVOT MONTH(FechaPago)

PAGOS ConsultaAÑO 1 2 4 5 8 122007 500,00 € 100,00 €2008 100,00 € 200,00 €2009 200,00 € 200,00 € 200,00 €

ELIMINAR LA BASE DE DATO

DROP DATABASE SalesSnapshot0600 ;

ESCRIBIR LAS SENTENCIAS SQL PARA:

PRACTICAS CON los ejercicios de SQL enviado se revisara y se calificara como evaluación . mostrar las pruebas

Ejemplo

Probar los Ejercicios de SQL de Borja Sotomayor se le envía un modelo ( realizar los ejercicios de 2 al 9 como el caso de la tienda de Informatica que se deja como Modelo

1. La Tienda de Informatica2. Empleados3. Los Almacenes4. Peliculas y Salas5. Los Directores6. Piezas y Proveedores7. Los Cientificos

Page 39: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 175 -

8. Los Grandes Almacenes 9. Los Investigadores

BASE DE DATOS TIENDA DE INFORMATICA

Creando las tablas

CREATE TABLE ARTICULOS (Codigo int,Nombre nvarchar(100),Precio int,Fabricante int,primary key (Codigo))CREATE TABLE FABRICANTES (Codigo int,Nombre nvarchar(100),primary key (Codigo))

Page 40: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 176 -

Agregar los siguientes valores

FABRICANTESCodigo Nombre

1 Intel2 Quantum3 Fabricante 1

ARTICULOSCodigo Nombre Precio Fabricante

1Microprocesador 200 1

2 Disco Duro 100 23 Laptop Core I5 600 14 Mouse 1 3

Con la sentencia

INSERT INTO FABRICANTES(Codigo, Nombre) values(1,'Intel');INSERT INTO FABRICANTES(Codigo, Nombre) values(2,'Quantum');INSERT INTO FABRICANTES(Codigo, Nombre) values(3,'Fabricante 1');

Se obtiene

Con la sentencia

Page 41: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 177 -

INSERT INTO ARTICULOS(Codigo, Nombre,Precio, Fabricante) values(1,'Microprocesador', 200,1);INSERT INTO ARTICULOS(Codigo, Nombre,Precio, Fabricante) values(2,'Disco Duro', 100,2);INSERT INTO ARTICULOS(Codigo, Nombre,Precio, Fabricante) values(3,'Laptop Core I5 ', 600,1);INSERT INTO ARTICULOS(Codigo, Nombre,Precio, Fabricante) values(4,'Mouse', 1,3);

Se obtiene

1.1 Obtener los nombres de los productos de la tienda

SELECT nombre FROM ARTICULOS

1.2 Obtener los productos y los precios de los productos de la tienda

SELECT Nombre, Precio FROM ARTICULOS

1.3 Obtener el nombre de los productos cuyo precio sea menor igual a 200

Page 42: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 178 -

SELECT nombre FROM ARTICULOS WHERE Precio <=200

1.4 Obtener todos los datos de los artículos cuyo precio este entre los 60 € y los 120 € (ambas cantidades incluidas)

/* Con AND */SELECT * FROM ARTICULOS WHERE Precio >=80 AND Precio <=120

/* Con BETWEEN */SELECT Codigo, Nombre, Precio, FabricanteFROM ArticulosWHERE (Precio BETWEEN 60 AND 120)

1.4 Obtener el nombre y el precio en pesetas (es decir, el precio en euros multiplicado por 166’386)

/*Sin As */SELECT Nombre, Precio * 166.386 FROM ARTICULOS

Page 43: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 179 -

/*Con As */SELECT Nombre, Precio * 166.386 As PrecioPtas FROM ARTICULOS

1.6 Seleccionar el precio medio de todos los productos.

SELECT AVG (Precio) AS PROMEDIO FROM ARTICULOS

1.7 Obtener el precio medio de los articulos cuyo codigo de fabricante sea 2.

SELECT AVG (Precio) as Precio_medio FROM ARTICULOS WHERE Fabricante = 2

Page 44: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 180 -

1.8 Obtener el número de artículos cuyo precio sea mayor o igual a 180 €.

SELECT COUNT (*) as num_articulos FROM ARTICULOS WHERE Precio >= 180

1.9 Obtener el nombre y precio de los artículos cuyo precio sea mayor o igual a 180 Euros y ordenarlos desdendentemente por precio y luego ascendentemente por nombre

SELECT Nombre, PrecioFROM ArticulosWHERE (Precio >= 180)ORDER BY Precio DESC, Nombre

1.10 Obtener un listado completo de artículos, incluyendo por cada artículo los datos del artículo y de su fabricante.

/* SIN INNER JOIN */SELECT * FROM ARTICULOS, FABRICANTES

Page 45: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 181 -

WHERE ARTICULOS. Fabricante = FABRICANTES. Codigo

/* Con INNER JOIN */SELECT * FROM ARTICULOS INNER JOIN FABRICANTES ONARTICULOS.FABRICANTE= FABRICANTES.CODIGO

1.11 Obtener un listado de artículos, incluyendo el nombre del artículo, su precio y el nombre de su fabricante.

/* SIN INNER JOIN */SELECT ARTICULOS.Nombre, Precio, FABRICANTES. NombreFROM ARTICULOS, FABRICANTESWHERE ARTICULOS. Fabricante = FABRICANTES. Codigo

Page 46: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 182 -

/*con INNER JOIN */SELECT ARTICULOS.Nombre , Precio, FABRICANTES.NombreFROM ARTICULOS INNER JOIN FABRICANTESON ARTICULOS.Fabricante = FABRICANTES.Codigo

1.12 Obtener el precio medio de los productos de cada fabricante, mostrando solo los códigos de fabricante.

SELECT AVG(Precio) AS Expr1, FabricanteFROM ArticulosGROUP BY Fabricante

1.13 Obtener el precio medio de los productos de cada fabricante, mostrando el nombre del fabricante./* Sin INNER JOIN*/SELECT AVG(Precio), FABRICANTES.NombreFROM ARTICULOS, FABRICANTESWHERE ARTICULOS.Fabricante=FABRICANTES.CodigoGROUP BY FABRICANTES.Nombre

Page 47: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 183 -

/* CON INNER JOIN*/

SELECT AVG(Articulos.Precio) AS Expr1, Fabricantes.NombreFROM Articulos INNER JOIN Fabricantes ON Articulos.Fabricante = Fabricantes.CodigoGROUP BY Fabricantes.Nombre

1.14 Obtener los nombres de los fabricantes que ofrezcan productos cuyo precio medio sea mayor o igual a 150 €.

/* SIN inner JOIN*/SELECT AVG(Precio) AS Precio_medio, Fabricantes.NombreFROM Articulos,FABRICANTESWHERE ARTICULOS.Fabricante = Fabricantes.CodigoGROUP BY Fabricantes.NombreHAVING (AVG(Articulos.Precio) >= 150)

Page 48: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 184 -

/* CON INNER JOIN*/SELECT AVG(Articulos.Precio) AS Precio_medio, Fabricantes.NombreFROM Articulos INNER JOIN Fabricantes ON Articulos.Fabricante = Fabricantes.CodigoGROUP BY Fabricantes.NombreHAVING (AVG(Articulos.Precio) >= 150)

1.15 Obtener el nombre y precio del articulo más barato

SELECT Nombre, Precio FROM ARTICULOSWHERE Precio = (SELECT MIN (Precio) FROM ARTICULOS)

Page 49: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 185 -

1.16 Obtener una lista con el nombre y precio de los artículos más caros de cada proveedor (incluyendo el nombre del proveedor)

/* SIN INNER JOIN */SELECT A.Nombre, A.Precio, F.Nombre FROM Articulos A ,FABRICANTES F WHERE A.Fabricante=F.CodigoAND A.Precio = (SELECT MAX(A.Precio) FROM Articulos A WHERE A.Fabricante = F.Codigo)

/* CON INNER JOIN */SELECT A.Nombre, A.Precio, A.Nombre AS Expr1FROM Articulos AS A INNER JOIN Fabricantes AS F ON A.Fabricante = F.CodigoWHERE (A.Precio = (SELECT MAX(Precio) AS Expr1 FROM Articulos AS A WHERE (Fabricante = F.Codigo)))

17 Añadir un Nuevo producto: Altavoces de 70€ ( del fabricante 2)

INSERT INTO Articulos (Codigo, Nombre, Precio, Fabricante)

Page 50: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 186 -

VALUES (6, 'Altavoces', 70, 2)

1.18 Cambiar el nombre del producto 8 a impresora laser

UPDATE ARTICULOSSET Nombre = ' Impresora Laser 'WHERE Codigo =8

1.19Aplicar un descuento del 10% (multiplicar el precio por 0’9) a todos los productosUpdate ARTICULOSSet precio= Precio *0.9

1.20Aplicar un descuento de 10 € a todos los productos cuyo precio sea mayor o igual a 120€Update ARTICULOS SET precio = Precio -10 WHERE Precio >=120

PRACTICAR Los Ejercicios de SQL del documento adjunto(Ejercicios SQL) 381En este caso practicamos el ejercicio 9

Page 51: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 187 -

CREAMOS LAS SIGUIENTES TABLAS

1 TABLA INVESTIGADORES

DNI NomApelsFacultad

1111JUAN PEREZ 1

2222JOSE PEREZ 2

3333JAVIER RIOS 3

4444LUIS MONTES 1

5555CARLOS RIOS 2

2 TABLA FACULTAD

CODIGO NOMBRE1 PRODUCCION Y SERVICIOS2 MEDICINA3 EDUCACION4 CIENCIAS FORMALES

3 TABLA RESERVA

DNINumSerie

Comienzo Fin

1111 101/06/2009

12/06/2010

2222 201/06/2009

12/06/2010

3333 301/06/2009

12/06/2010

4444 401/06/2009

12/06/2010

Page 52: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 188 -

5555 501/06/2009

12/06/2010

1111 601/06/2009

12/06/2010

1. TABLA EQUIPOSNumSerie Nombre Facultad1 UNIDAD PLC 12 MICROSCOPIO 23 PROYECTOR MULTIMEDIA 34 EQUIPO LABORATORIO 45 GPS 16 LAPTOP TOSHIBA 28 SENSORES DE LUZ 1

5.1Obtener el DNI y Nombre de aquellos Investigadores que han realizado más de una reserva

/* juntando tablas */SELECT I.DNI, NomApels FROM [INVESTIGADORES$] I LEFT JOIN [RESERVA$] RON R.DNI = I.DNI GROUP BY I.DNI, NomApels HAVING COUNT (R.DNI) >1DNI NomApels1111 JUAN PEREZ2222 JOSE PEREZ

/* con subconsulta */SELECT DNI, NomApels FROM [INVESTIGADORES$] WHERE DNI IN( SELECT DNI FROM [RESERVA$] GROUP BY DNI HAVING COUNT (*) >1)

9.2 Obtener un listado completo de reservas , incluyendo los siguientes datos DNI y nombre del investigador, junto con el nombre de su facultad

DNI NomApels F_INV.NombreNumSerie E.Nombre F_EQUIP.Nombre Comienzo Fin

2222JOSE PEREZ MEDICINA 5 GPS

PRODUCCION Y SERVICIOS 01/06/2009 12/06/2010

1111JUAN PEREZ

PRODUCCION Y SERVICIOS 1 UNIDAD PLC

PRODUCCION Y SERVICIOS 01/06/2009 12/06/2010

2222JOSE PEREZ MEDICINA 2 MICROSCOPIO MEDICINA 01/06/2009 12/06/2010

1111JUAN PEREZ

PRODUCCION Y SERVICIOS 6

LAPTOP TOSHIBA MEDICINA 01/06/2009 12/06/2010

3333JAVIER RIOS EDUCACION 3

PROYECTOR MULTIMEDIA EDUCACION 01/06/2009 12/06/2010

4444LUIS MONTES

PRODUCCION Y SERVICIOS 4

EQUIPO LABORATORIO

CIENCIAS FORMALES 01/06/2009 12/06/2010

Numero de serie y nombre de equipo reservado , junto con el nombre de la facultad a la que pertenece

Page 53: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 189 -

Fecha de comienzo y fin de la reserva

SELECT I.DNI , NomApels , F_INV.Nombre, E.NumSerie, E.Nombre, F_EQUIP.Nombre, Comienzo, FinFROM [RESERVA$] R, [INVESTIGADORES$] I, [EQUIPOS$] E, [FACULTAD$] F_INV , [FACULTAD$] F_EQUIP WHERE R.DNI=I.DNIAND R.NumSerie = E.NumSerieAND I.Facultad=F_INV.CodigoAND E.Facultad = F_EQUIP.Codigo

9.3 Obtener el DNI y el nombre de los investigadores que han reservado equipos que no son de su Facultad

DNI NomApels1111 JUAN PEREZ2222 JOSE PEREZ4444 LUIS MONTES

/* juntando tablas +/SELECT DISTINCT I.DNI, NomApelsFROM [RESERVA$] R , [INVESTIGADORES$] I, [EQUIPOS$] EWHERE R.DNI=I.DNIAND R.NumSerie= E.NumSerieAND I.Facultad <> E.Facultad

/*con EXISTS */SELECT DNI, NomApels FROM [INVESTIGADORES$] IWHERE EXISTS( SELECT *FROM [RESERVA$] R INNER JOIN [EQUIPOS$] EON R.NumSerie = E.NumserieWHERE R.DNI=I.DNIAND I.Facultad <> E.Facultad)

9.4 Obtener los nombres de las facultades en las que ningun investigador ha realizado una reserva

NombreEn este caso todos ha realizado alguna reserva

SELECT Nombre FROM [FACULTAD$]WHERE Codigo IN( SELECT Facultad FROM [INVESTIGADORES$] I LEFT JOIN [RESERVA$] RON I.DNI =R.DNIGROUP BY FacultadHAVING COUNT (R.DNI)=0)

9.5 Obtener los nombres de las facultades con investigadores “ociosos” ( investigadores que no han realizado ninguna reserva).

Page 54: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 190 -

NombreNo hay facultades con investigadores ociososSELECT Nombre FROM [FACULTAD$]WHERE Codigo IN ( SELECT Facultad FROM [INVESTIGADORES$] WHERE DNI NOT IN ( SELECT DNI FROM [RESERVA$] ) )

9.6 Obtener el numero de serie y nombre de los equipos que nunca han sido reservados

NumSerie Nombre8 SENSORES DE LUZ

/* juntando tablas +/SELECT E.NumSerie, NombreFROM [EQUIPOS$] E LEFT JOIN [RESERVA$] RON R.NumSerie = E.NumSerieGROUP BY E.NumSerie, NombreHAVING COUNT (R.NumSerie)=0/* con subconsulta IN */

SELECT NumSerie, NombreFROM [EQUIPOS$]WHERE NumSerie NOT IN( SELECT NumSerie FROM [RESERVA$])/* con subconsulta Exists */SELECT NumSerie, NombreFROM [EQUIPOS$] EWHERE NOT EXISTS( SELECT * FROM [RESERVA$] RWHERE R.NumSerie=E.NumSerie)

Tarea. Pruebe las consultas con la base de datos De Ventas

5. SENTENCIAS SQL

5.1 LAS CONSULTAS 3445.2 Pasos para ejecutar sentencia SQL en Visual Basic 20125 3 SELECT | SELECCIONAR[editar] 3395.4 SELECCIONAR CAMPOS 3455.5 Definir campos calculados 3455.6 En SQL también se puede trabajar sin tablas 3465.7Encabezados de columna 3465,8 Ordenar las filas 3465.9 Incluir criterios de búsqueda (Seleccionar filas) 347

Page 55: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 191 -

5.10 Búsqueda de valores conocidos (TEXTO)5.11 CONCIDENCIA DE PATRONES carácter Comodin 3485.12 El operador Entre between 3505.13 El operador In : (Inclusión) 350 y No inclusión 355.14 LAS CONSULTAS DE RESUMEN 351

Funciones de columna 352Funciones de columnaLa función SUM() . AVG() ,StDev() y StDevP() , MIN() y MAX() La función COUNT(nb) yCOUNT(*) 5.15 Agrupar registros 353 GROUP BY HAVING .- 3545.16 LAS CONSULTAS MULTITABLA 3545.16.1 Combinaciones internas. Inner Join 3545.16.2Combinaciones externas. Left join5.17. 3EL OPERADOR UNION 3615.18 L5.182 AS CONSULTAS DE REFERENCIAS CRUZADAS 360

Operador de pivote: 3615.19 FUNCIONES DE FECHA Y HORA 3635.20 El predicado TOP y la clave PERCENT 3645.21 CONSULTAS SELECT ANIDADAS 364  SubConsultas5.22 Función ROW_NUMBER() 3655.23 LAS CONSULTAS DE ACCIÓN 3665.24 Consultas de creación de tabla.( consultas que se almacenan en una tabla) 366

Crear tablas con SQL 3665.25 Consulta de datos anexados. Datos anexados en base a una consulta 367Datos anexados con valores5.26 Consultas de actualización. 3685.27 Consulta de eliminación 3695.28 ELIMINAR TODA LA TABLA 3695.29 Agregar un nuevo campo a la tabla ALUMNOS1 370Ejercicios 369EJERCICIOS DE CONSULTAS DE REFERENCIAS CRUZADAS(Acces)3725.30 EJERCICIOS DE MODIFICACION DE TABLAS (CAMPOS) 373

CREATE TABLE FACULTAD( Codigo int,Nombre nvarchar(100),primary key (Codigo))

Page 56: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 192 -

CREATE TABLE INVESTIGADORES( DNI varchar(8),NomApels nvarchar(255),Facultad intprimary key (DNI))

SENTENCIA SQL AVANZADAS

Listar el esquema de una base de datos

SELECT * FROM INFORMATION_SCHEMA.TABLESWHERE TABLE_TYPE = 'BASE TABLE'

TABLE_CATALOGTABLE_SCHEMA

TABLE_NAME

TABLE_TYPE

E:\DATOS\ALUMNOS.MDF dbo ALUMNOS

BASE TABLE

E:\DATOS\ALUMNOS.MDF dbo PAGOS

BASE TABLE

E:\DATOS\ALUMNOS.MDF dbo CURSOS

BASE TABLE

E:\DATOS\ALUMNOS.MDF dbo

ALUMNOS1

BASE TABLE

E:\DATOS\ALUMNOS.MDF dbo

SUBTOTALES

BASE TABLE

E:\DATOS\ALUMNOS.MDF dbo

ALUMNOS2

BASE TABLE

E:\DATOS\ALUMNOS.MDF dbo TB2015B

BASE TABLE

La consulta muestra todos las caracteristicas de los objetos de la base de datosselect * from sysobjects

Page 57: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 193 -

use [E:\DATOS\ALUMNOS.MDF]select name from sysobjects

--La consulta muestra todos los objetos de la base de datos Alumnosselect name from sysobjects ‘osea 82 objetos

--La consulta muestra todas las tablas de la base de datosselect name from sysobjects where type='U'

--La consulta muestra todas las propiedades de tablas de la base de datos*/ select * from sysobjects where type='U'

muestra el esquema de las tablasSELECT * FROM INFORMATION_SCHEMA.TABLESWHERE TABLE_TYPE = 'BASE TABLE'

Page 58: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 194 -

*--La consulta muestra todas las tablas de la base de datos*/ select name from sysobjects where type='U'

Código:/*--La consulta muestra todas las vistas de la base de datos*/ select name from sysobjects where type='V'

Código:/*--La consulta muestra todos los procedimientos de la base de datos*/ select name from sysobjects where type='P'

Código:/*--La consulta muestra todos los triggers de la base de datos*/ select name from sysobjects where type='T'

Código:/*--La consulta muestra todas las llaves foraneas de la base de datos*/ select name from sysobjects where type='F'

Código:/*--La consulta muestra todas las llaves primarias de la base de datos*/ select name from sysobjects where type='K'

Código:/*--La consulta muestra todos los objetos del sistema de la base de datos*/ select name from sysobjects where type='S'

Código:/*--La consulta muestra todos los objetos de la base de datos: Tablas, procedimientos almacenados, etc.*/ SELECT CAST(table_name as varchar)  FROM INFORMATION_SCHEMA.TABLES

Código:/*la consulta muestra todas las bases de datos, pero no muestra las de sistema: master,model, msdb y temdb*/ SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('master','model','msdb','tempdb')

Listar la todas las tablas de una base de datos

Page 59: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 195 -

SELECT * FROM sys.Tables

Pruebe

PRUEBA CON LA BASE DE DATOS ADVENTURE WORK

Listar lo nombres de los objetos de la base de datos Adventure Worksuse [E:\DATOS1\ADVENTUREWORKSLT.MDF] select name from sysobjects

select name from sysobjects182 objetos

LISTAR LAS propiedades de las tablas

SELECT * FROM sys.Tables

LISTARA LAS PRPIEDADES DE LA TABLA PRODUCTOSSELECT * FROM sys.Tables WHERE NAME='Product'

Page 60: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 196 -

MOSTRAR INFORMACION de esqeuma de las columnas SELECT * FROM INFORMATION_SCHEMA.COLUMNS

MOSTRAR INFORMACION de esqeuma de las columnas DE UNA SOLA TABLA

SELECT * FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME ='Product'

VER el contenido de la table productos

select * from [SalesLT].[Product] order by namepor la definición de la tabla

HAGA LO MISMO CON La tabla NORWIND

1. Listar las tablas

USE [E:\DATOS1\NORTHWIND.MDF]SELECT * FROM SYS.TABLES

Page 61: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 197 -

Listar el contenido de la tabla productos

SELECT * FROM Products

Utilizando la base de datos Northwind . Genere una lista de selección de la tabla Employees (Empleado) donde solo se genere una columna de salida y esta contenga loscampos: EmployeeID, LastName y FirstName

Select convert(nvarchar(2), EmployeeID) + ' ' + LastName + ' ' + FirstName as Nombrefrom from Employees

Utilizando la tabla Employees liste las columnas EmployeeID, LastName,  FirstName, además envié dos mensajes en conjunto con cada fila utilizando para cadauno una de las opciones de literales.

Select EmployeeID, LastName as Apellido, FirstName as Nombre, 'ESTOS SON EMPLEADOS' as Literal, [Otra Forma] = 'Esta es otra forma' from Employees

Page 62: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 198 -

Encontrar todos los apellidos (LastName) en la tabla Employees que comiencen con la letra <<S>>. Use el carácter comodín %.

SELECT LastName FROM Employees WHERE LastName LIKE 'S%'

Para recuperar el apellido de los Empleados cuya primera letra comienza entre <<A>> y<<M>>. Utilice el comodín [ ]

SELECT LastName FROM Employees WHERE LastName LIKE '[A-M ]%'

Juegue con la base de datos NORWIND elaborando consultas creadas por usted mismo

Vea la base de datos Neptuno hecho en Access

Vea estas relaciones

Page 63: TBD2015B-3 SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Véliz Vilca - 199 -

TRABAJO FINAL DE BASE DE DATOS (vea el video)