Sei sulla pagina 1di 63

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 137 -

5 SENTENCIAS SQL
El lenguaje de consulta estructurado o SQL (por sus siglas en ingls 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
caractersticas es el manejo del lgebra y el clculo relacional que permiten efectuar
consultas con el fin de recuperar de forma sencilla informacin de inters 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 seleccin. Una consulta de seleccin genera una tabla lgica (se llama
lgica porque no est fsicamente en el disco duro sino en la memoria del ordenador y
cada vez que se abre se vuelve a calcular).
Consultas de accin.
Son consultas que realizan cambios a los registros. Existen
varios tipos de consultas de accin, de eliminacin, de actualizacin, de datos
anexados y de creacin de tablas.
Consultas especficas de SQL.
Son consultas que no se pueden definir desde la cuadrcula 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
CodAlumn
o
A1
A2
A3
A4
A5

NombreAlumno FechaNac
JUAN
01/01/1970
PEDRO
01/01/1977
LUIS
01/01/1980
JORGE
01/01/1990
MARIO
01/01/1993

2. TABLA CURSOS
CodCurs
o
NombreCurso
AD
Admision
M1
Matrcula 1
C1
Ergonoma
C2
Gestin de Recursos Humanos
C3
Condiciones de Seguridad
C4
Salud Ocupacional
3. TABLA PAGOS

Profesor

LOPEZ
RIOS
FLORES
PEREZ

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

Nro
1
2
3
4
5
6
7
8

CodAlumno
A1
A2
A1
A3
A2
A1
A4
A4

FechaPag
o
Monto
01/04/2007
100
01/12/2007
100
01/02/2008
200
01/03/2008
100
01/02/2009
200
02/04/2009
200
03/05/2009
200
04/08/2009
200

- 138 -

CodCurso
AD
AD
C1
AD
C2
C2
AD
C1

Para realizar consultas en Visual Basic 2012


Agregue su base de datos del servidor con y Utilice la siguiente origen de datos

Utilice la siguiente conexin

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

Debe aparecer la siguiente conexin

Elija

Agrega las tablas que desea

- 139 -

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 140 -

Para ejecutar ponga

En base de datos atachada o adjuntada


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

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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 141 -

CONSULTAS SQL

5.3 SELECT | SELECCIONAR[editar]


La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la
base de datos.
Forma bsica[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 ]}]]
Palabra clave que indica que la sentencia de SQL que queremos ejecutar
SELECT
es de seleccin.
Indica que queremos seleccionar todos los valores.Es el valor por defecto y
ALL
no suele especificarse casi nunca.
DISTINCT Indica que queremos seleccionar slo los valores distintos.
Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el
caso de que exista ms de una tabla se denomina a la consulta "consulta
FROM
combinada" o "join". En las consultas combinadas es necesario aplicar una
condicin de combinacin a travs de una clusula WHERE.
Especifica una condicin que debe cumplirse para que los datos sean
WHERE
devueltos por la consulta. Admite los operadores lgicos AND y OR.
GROUP Especifica la agrupacin que se da a los datos. Se usa siempre en
BY
combinacin con funciones agregadas.
Especifica una condicin que debe cumplirse para que los datos sean
devueltos por la consulta. Su funcionamiento es similar al de WHERE pero
HAVING aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse
siempre junto a GROUP BY y la condicin debe estar referida a los campos
contenidos en ella.
Presenta el resultado ordenado por las columnas indicadas. El orden puede
ORDER
expresarse con ASC (orden ascendente) y DESC (orden descendente). El
BY
valor predeterminado es ASC.
5.4 SELECCIONAR CAMPOS
EJERCICIOS: Usando la aplicacin pruebe las siguientes sentencias SQL

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

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

2) Listar todos los registros de la tabla CURSOS


SELECT Cursos.* FROM Cursos;

3) Generar la lista de pagos SELECT * FROM Pagos

- 142 -

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 143 -

5.5 Definir campos calculados: Los campos calculados son campos obtenidos del
resultado de una expresin o de una funcin.
Ejemplo Supongamos que se debe separar el 15% de los pagos para la Universidad
entonces creamos un campo calculado que se llamar Descuento que seria
select * from pagos
SELECT Nro,CodAlumno, monto ,monto*0.10
as descuento,
monto-monto*0.10 as neto,codcurso FROM PAGOS
Para copiar con cabecera

5.6 En SQL tambin se puede trabajar sin tablas


SELECT (2+4)/3 muestra 2
select 23 as pago (muestra el valor 23)
(Sin nombre de
columna)
23
select 2+3 as resultado (muestra una operacin)
select len('gato') as resultado ( muestra el resultado de una frmula)
Resultado
4
SELECT
SELECT

Resultado
5

SenoAngul sin(3.1416/4) as senoAngulo


o
0.7071080 SQRT(2) AS raz
8
Raz
1,4142135623731

SELECT Power(2,5) AS potencia


potencia

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 144 -

32
NUMERO ALEATORIOS SELECT rand () AS aleatorio
aleatorio
0.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 ALUMNOS
ORDER BY ALUMNOS.NombreAlumno ASC
El orden puede ser ascendente o descedente ASC o DESC)
1. Generar El cdigo 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 cdigo del alumno y monto pagado ordenado en forma
descendente de acuerdo al pago ( que se muestre solo cdigo del alumno y
monto)
SELECT Pagos.codAlumno,Pagos.Monto FROM Pagos ORDER BY Monto DESC;
5.9 Incluir criterios de bsqueda (Seleccionar filas)
La opcin Dnde permite poner un criterio de bsqueda que se aplicar a las filas del
origen de la consulta antes de realizar los clculos. Por ejemplo queremos saber
cuntos alumnos son nacidos antes de ao 1980, para ello tenemos que contar los
registros de la tabla alumnos pero seleccionando previamente los nacidos antes del
ao 1980
SELECT Alumnos.* FROM Alumnos Where Year(FechaNac) <1980;
codalumno NombreAlumno FechaNAc
A1
JUAN
01/01/1970
Para indicar varias condiciones se emplean los operadores Y y O.
Las condiciones: Los operadores de comparacin: > < = ..

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 145 -

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


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

5.10 Bsqueda de valores conocidos(TEXTO)


Listar pagos del alumno que tiene cdigo A1
SELECT PAGOS.* FROM PAGOS WHERE CodAlumno ='A1';
FechaPag CodAlumn
CodCurs
Nro
o
o
Monto
o
01/04/200
1
7 A1
100 AD
01/02/200
3
8 A1
200 C1
01/04/200
6
9 A1
300 C2
01/05/201
7
0 A1
200 AD
01/08/201
8
1 A1
120 C1
O puede ser SELECT PAGOS.* FROM PAGOS WHERE CodAlumno LIKE 'A1';
Se puede hacer varias consultas

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 146 -

5.11 CONCIDENCIA DE PATRONES Caracteres Comodin


Coincidencia de patrones es una tcnica que determina si una cadena de caracteres
coincide con un patrn especificado. Puede crear un patrn mediante una combinacin
de caracteres regulares y caracteres comodn. Durante la coincidencia de patrones,
deben coincidir exactamente con patrones regulares como especificado en la cadena
de caracteres. LIKE y NOT LIKE (negacin) son los operadores utilizados para la
coincidencia de patrones. Recuerde que la coincidencia de patrones distingue
maysculas de minsculas. SQL Server admite los siguientes caracteres comodn para
la coincidencia de patrn:
% (porcentaje marca): este comodn representa cero para muchos caracteres. Por
ejemplo, ttulo donde como '%VB 2008 %' encuentra todos los ttulos de libros que
contiene el texto "vb 2008", independientemente de dnde en el ttulo que el texto se
produce, en principio, medio o al final.
_ (subrayado): un nico carcter de subrayado representa cualquier carcter
individual. Por ejemplo, '_ean' encuentra todos los primeros nombres que constan de
cuatro letras y que terminan con "ean" (Dean, Sean, etctera). 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, Ammn, ario, y as sucesivamente.
[] (corchetes): estos especifican cualquier carcter 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 carcter individual entre "C" y "K", como por
ejemplo Carsen, Darsen, Larsen, Karsen, y as sucesivamente.
[^] (corchetes y smbolo de intercalacin): estos especifican cualquier carcter
individual dentro del rango especificado, como [^ a-f], o conjunto, como [^ abcdef]. Por
ejemplo, dnde 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 R
SELECT * FROM ALUMNOS;
SELECT * FROM Alumnos WHERE NombreAlumno Like '%R%';

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 147 -

En Algunos sistemas seria


SELECT Alumnos.* FROM Alumnos WHERE Alumnos.NombreAlumno Like '*R*';
Usando el caracter % Listar los alumnos que contienen la letra A
select * FROM Alumnos where NombreAlumno like '%A%';
codalumno NombreAlumno
A1
JUAN
A5
MARIO

FechaNAc
01/01/1970
01/08/1993

Listar los alumnos que comienzan con la letra J


select * FROM Alumnos where NombreAlumno like 'J%';
Listar los alumnos que terminan con la letra O
select * FROM Alumnos where NombreAlumno like '%O';
Utilizando el carcter _ (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 smbolo de intercalacin).
Listar los alumnos cuyo nombre empieza de A-K
select * FROM Alumnos where NombreAlumno like '[A-K]%';
Listar los alumnos que no comienzan con J
select * FROM Alumnos where NombreAlumno like '[^J]%';
listar los alumonos cuya primera no esten en el intervalo A-K
select * 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]%';

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 148 -

5.12 El operador Entre (Between)Tiene la siguiente sintaxis: Expresin Entre valor1 Y


valor2
Ejemplo: listar todos los alumnos nacidos entre entre #01/01/60# y #04/06/70#,
SELECT ALUMNOS.*, ALUMNOS.FechaNac FROM ALUMNOS
WHERE FechaNac Between '1/1/1960' And '6/4/1980'
codalum NombreAlu
no
mno
A1

JUAN

A3

LUIS

FechaN
Ac
01/01/19
70
02/02/19
80

FechaN
ac
01/01/19
70
02/02/19
80

Esta sentencia es lo mismo


SELECT ALUMNOS.*, ALUMNOS.FechaNac FROM ALUMNOS
WHERE FechaNac >= '1/1/1960' And FechaNac <= '6/4/1980'
5.13 El operador In : (Inclusin) Tiene la siguiente sintaxis: Expresin In (valor1,
valor2, ...)
Examina si el valor de la expresin es uno de los valores incluidos en la lista de valores
escritos entre parntesis.
Por ejemplo, para seleccionar los alumnos que pagaron en Admisin y matricula seria
SELECT PAGOS.* FROM PAGOS WHERE CodCurso IN ('AD', 'M1');
Nro
1
2
4
7

FechaPa
go
01/04/200
7
01/12/200
7
01/03/200
8
01/05/201
0

CodAlum
no

CodCurs
o

A2

Monto
09/04/19
00 AD
09/04/19
00 M1

A3

100 AD

A1

200 AD

A1

No inclusin Listar aquellos registros que no contienen ni admisin ni matricula


SELECT PAGOS.* FROM PAGOS WHERE CodCurso NOT IN ('AD', 'M1');
Nro
3
5
6
8

FechaPa
go
01/02/200
8
01/02/200
9
01/04/200
9
01/08/201
1

CodAlum
no

CodCurs
o

A2

Monto
18/07/19
00 C1
18/07/19
00 C1

A1

300 C2

A1

120 C1

A1

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 149 -

5.14 LAS CONSULTAS DE RESUMEN


Introduccin
En SQL de Microsoft Jet 4.x y de la mayora 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, tambin se conocen como consultas sumarias.
En el ejemplo que viene a continuacin 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 clusulas a la sentencia SELECT, la


clusula GROUP BY y la clusula HAVING, son clusulas que slo se pueden utilizar
en una consulta de resumen, se tienen que escribir entre la clusula WHERE y la
clusula ORDER BY y tienen la siguiente sintaxis:

Funciones de columna

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 150 -

En la lista de seleccin de una consulta de resumen aparecen funciones de columna


tambin denominadas funciones de dominio agregadas. Una funcin 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 funcin SUM() calcula la suma de los valores indicados en el argumento. Los datos
que se suman deben ser de tipo numrico (entero, decimal, coma flotante o
monetario...).
La funcin AVG() calcula el promedio (la media arimtica) de los valores indicados en el
argumento, tambin se aplica a datos numricos,
StDev() y StDevP() calculan la desviacin estndar de una poblacin o de una muestra
de la poblacin 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 numrico, texto o
fecha.
La funcin COUNT(nb columna) cuenta el nmero de valores que hay en la columna,
los datos de la columna pueden ser de cualquier tipo, y la funcin siempre devuelve un
nmero entero.
COUNT(*) permite contar filas en vez de valores. Si la columna no contiene ningn
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 desviacin tpica 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;

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

Cuenta

Suma
8

Promedi
o

1600

200

Maximo
300

- 151 -

desviacio
n
desviacion
86.602540
100 92.58201
4

Minimo

5.15 Agrupar registros


La opcin GROUP BY permite definir columnas de agrupacin. Una consulta de
resumen sin columnas de agrupacin obtiene una nica fila resultado y los clculos se
realizan sobre todos los registros del origen.
Por ejemplo queremos saber cuntos alumnos tenemos en cada Curso. Tenemos que
indicar que queremos contar los registros de la tabla Pagos pero antes agrupndolos
por el campo CodCurso. De esta manera la funcin cuenta() la calcular sobre cada
grupo de registros (los Cdigos de curso similares). La consulta quedara as:
SELECT Pagos.CodCurso, Count(Pagos.CodCurso) AS CuentaDeCodCurso
FROM Pagos GROUP BY Pagos.CodCurso;
CodCur CuentaDeCodC
so
urso
AD
3
C1
3
C2
1
M1
1
Ejercicio . Elaborar una consulta donde nos muestre la suma, el promedio , el mayor y
el menor y la desviacin tpica de los totales de la tabla PAGOS agrupado por codigo
( se puede agrupar por fechas, aos, meses)

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 152 -

HAVING se comporta como WHERE, pero se aplica a grupos (las filas o tuplas en el
conjunto de resultados representan grupos). La clusula 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 Instruccin
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 Diseo 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 orgenes de datos)

Paso 2. Elija Dataset y arrastre al formulario

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 153 -

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 154 -

Combinar tablas
Cuando dos tablas estn 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 unin, con lo cual se emparejan slo las filas que luego aparecen en el
resultado y la consulta es ms eficiente.
Ejemplo de composicin interna
INNER JOIN CON LA BASE DE DATOS ALUMNOS
Obtener un listado completo de a tabla PAGOS incluyendo el cdigo 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;

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 155 -

Combinar tres tablas


SELECT 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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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 JOIN
select 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 combinacin interna es la combinacin ms utilizada. Devuelve slo las filas que
cumplen la especificacin de combinacin. Aunque en teora cualquier operador
relacional (como > o <) puede utilizarse en la especificacin de combinacin, casi
siempre se utiliza el operador de igualdad (=). Usando el operador de igualdad se
denomina combinaciones naturales.
Combinaciones externas.
Combinaciones externas devolucin todas las filas de una de las tablas combinadas
(mnimo) aunque filas en una tabla no coinciden con las filas de la otra. Existen tres
tipos de combinaciones externas: combinacin externa, combinacin externa derecha y
combinacin externa completa.
5.16.2LA COMPOSICION EXTERNA
La composicin externa se utiliza cuando queremos que tambin aparezcan las filas
que no tienen una fila coincidente en la otra tabla.
Ejemplo de combinacin externa Encontrar los pagos
incluyendo los alumnos que no pagaron

Totales

por alumno

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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 mayora de las consultas requieren informacin de ms de una tabla. Una Unin es
una operacin relacional que produce una tabla por recuperar los datos de dos tablas
(no necesariamente distintas) y que coinciden con sus filas segn una especificacin
de combinacin(UNION).
Existen diferentes tipos de combinaciones, que miran individualmente, pero tenga en
cuenta que cada combinacin es una operacin 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
operacin de combinacin 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 UNION
SELECT CodAlumno from Pagos
Unir dos tablas con repeticiones ( tabla nombres y pagos)
SELECT CodAlumno from Alumnos UNION ALL
SELECT CodAlumno from Pagos;

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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 agrupacin como una tabla de doble entrada
en la que cada una de las columnas de agrupacin es una entrada de la tabla.
Por ejemplo queremos obtener las pagos realizados por alumno en cada curso
Con la consulta se obtiene
SELECT CodAlumno,Monto,CodCurso From Pagos
CodAlumn
o
A1
A2
A1
A2
A3
A1
A2
A4

Monto
100
200
100
200
100
300
400
100

CodCurs
o
C1
C2
C2
C3
C4
C2
C3
C4

La consulta quedara mucho ms elegante


ms compacto como el siguiente:
CODALUMN
O
AD M1 C1 C2 C3
A1
0
0 100 400 0
A2
0
0
0 200 600
A3
0
0
0
0
0
A4
0
0
0
0
0

y clara presentando los datos en un formato


C4
0
0
100
100

total
500
800
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 total
from pagos group by CODALUMNO
SELECT CODcurso ,
COUNT (case when codalumno='A1'
COUNT (case when codalumno='A2'
COUNT (case when codalumno='A3'
COUNT (case when codalumno='A4'
COUNT (case when codalumno='A5'
COUNT(*) as total
from pagos group by CODCURSO
5.18.2Operador de pivote:

then monto else 0 end ) as A1,


then monto else 0 end ) as A2,
then monto else 0 end ) as A3,
then monto else 0 end ) as A4,
then monto else 0 end ) as A5,

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 159 -

Un escenario comn donde dinmica 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,C4
from ( select Codalumno , CodCurso From Pagos
)piv Pivot
(
count(CodCurso) for CodCurso in (AD,M1,C1,C2,C3,C4)
) as CantCurso

Al revez
select codcurso, A1,A2,A3,A4
from ( select Codcurso , Codalumno From Pagos
) A Pivot
( count(Codalumno) for Codalumno in (A1,A2,A3,A4,A5)
) as Cantaumno
codcurs
o
AD
C1
C2
C3
M1

A1
2
1
0
0
0

A2
0
0
0
1
1

A3
0
1
1
0
1

A4
0
0
0
0
0

Para sumar
select codAlumno, AD,M1,C1,C2,C3,C4
from ( 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 aos y meses

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 160 -

Aunque el estndar SQL define un tipo


SELECT YEAR(FechaPago) AS AO ,
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 total
from pagos group by year(fechapago)
5.19 FUNCIONES DE FECHA Y HORA
de datos DATETIME y sus componentes, ao, mes, da, hora, minuto y segundo,
Select current_timestamp 'standard datetime',
getdate()'Transact-SQL datetime',
year(getdate())'year function',
datepart(year, getdate())'datepart Ao',
datepart(month, getdate())'datepart Mesr',
datepart(day, getdate())'datepart Dia',
datepart(DAYOFYEAR , getdate())'datepart Dia del ao',
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'
stand
ard
dateti
me

Transac
date
t-SQL
year date part
datetim func part Mes
e
tion Ao r

dat
epa
rt
Dia

datepa
rt Dia
del
ao

h
o
r
a

Mi
n
ut
o

Se
gu
nd
o

datepa
rt dia
seman
a

datepar
t
miliseg
undos

datepar
t
microse
gundo

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

35:27.
201 201
7 35:27.7
5
5

28

1
179 0

3
5 27

- 161 -

667 667000

EJERCICIOS DE FECHAS Y HORAS


1 Obtener la fecha actual

select getdate()

2015-06-28 10:39:05.557

2 Obtener ao, mes y dia de la Select getdate() as fecha fecha actual


select 'ao=',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 hora
select datepart(minute, getdate()) as minuto
select datepart(second, getdate()) as segundo
4 Obtener el ao, mes y dia de una fecha
select getdate() as fechahora,year(getdate()) as ao,
month(getdate()) as mes,day(getdate()) as dia

5 Dia de semana en SQLserver 2008


SELECT DATENAME(dw, getdate()) Viernes
6 Obtener el ao , mes y dia de una fecha de pago del alumno A1
SELECT codalumno, fechapago, year(getdate()) as ao ,
month(getdate()) as mes ,day(getdate()) as dia from pagos
where codalumno= 'A1'
7 encontrar el ao de una fecha
SELECT DATENAME(dw, '8/15/2015') AS FECHA
8 encontar dia de la semana de una fecha

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 162 -

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


FECHA
Saturday
5.20 El predicado TOP y la clave PERCENT
SELECT DATENAME (dw,'02/02/2015') as dia
TOP Devuelve cierto nmero de registros que se encuentran entre la parte superior e
inferior de un intervalo especificado por una clusula ORDER BY.(los primeros n
registros), si hubiera dos registros con el mismo nombre , devolver ambos ,al utilizar el
predicado TOP si la clusula 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 > 0
Muestra el 50 % de los registros que cumplen la condicin especificado en WHERE
( si hay 5 registros listara 3)
5.21. CONSULTAS SELECT ANIDADAS
SubConsultas
Una subconsulta es una instruccin SELECT anidada dentro de una instruccin
SELECT, SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra
subconsulta.
Las consultas anidadas SELECT se conoce como subconsultas
contenidas en otra

son consultas

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)c
WHERE 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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 163 -

SELECT * FROM ALUMNOS WHERE CODALUMNO LIKE


(SELECT CODALUMNO FROM PAGOS WHERE MONTO= (Select MAX(MONTO)
FROM PAGOS ) )
codalum
no
A1

NombreAlum FechaN
no
Ac
01/01/19
JUAN
70

Pruebe la siguiente consulta


SELECT X.NRO, X.CODALUMNO,
X.NOMBREALUMNO, X.MONTO, X.CODCURSO,Y.PROFESOR
FROM (SELECT NRO , A.CODALUMNO, B.NOMBREALUMNO,
MONTO ,CODCURSO FROM PAGOS A ,ALUMNOS B
WHERE A.CODALUMNO =B.CODALUMNO) X, CURSOS Y
WHERE X.CODCURSO= Y.CODCURSO

Ejercicio resuelto en clase


1. cual es el mayor pago de la tabla pagos
SELECT * FROM PAGOS;
SELECT MAX(MONTO) AS MAYOR FROM PAGOS;
Nro
1
2
3
4
5

FechaPag
o
01/02/200
1
01/02/200
1
01/02/200
1
01/02/201
0
01/02/200

Codalumn
o
Monto

CodCurs
o

A1

100 C1

A2

200 C2

A1

100 C2

A2
A3

200 C3
100 C4

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

1
01/02/201
6
5 A1
20/02/201
7
5 A2
01/02/201
8
5 A4

- 164 -

300 C2
400 C3
100 C4

MAYOR
400
b) a que codigo del alumno le corresponde ese mayor pago
SELECT CODALUMNO FROM PAGOS WHERE MONTO=
(SELECT MAX(MONTO) AS MAYOR FROM PAGOS)
CODALU
MNO
A2
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))
nombrealu
mno
PEDRO
5.22 Funcin ROW_NUMBER()
SQL Server 2005 ha introducido la funcin ROW_NUMBER() para clasificacin:
devuelve un nmero 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
1
2
3
4
5
6

CODALUMN
O
A4
A6
A1
A3
A5
A2

NOMBREALUMN
O
JORGE
JOSE
JUAN
LUIS
MARIO
PEDRO

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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
NroFech
a
1
2
3
4
5
6
7
8

Nro

FechaPago

1
2
3
4
5
6
7
8

01/04/2007
01/12/2007
01/02/2008
01/03/2008
01/02/2009
01/04/2009
01/05/2010
01/08/2011

CodAlumn
o
Monto
A1
100
A2
100
A1
200
A3
100
A2
200
A1
300
A1
200
A1
120

CodCurs
o
AD
M1
C1
AD
C1
C2
AD
C1

5.23 LAS CONSULTAS DE ACCIN


Las consultas de accin 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 creacin de tabla.( consultas que se almacenan en una tabla)
Las consultas de creacin de tabla son consultas que almacenan en una nueva tabla el
resultado de una consulta de seleccin.
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 SQL
CREATE TABLE ALUMNOS2
(CodAlumno char(10),
NombreAlumno char(50),
FechaNac date,
primary key (CodAlumno)
)

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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 aaden 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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 167 -

Datos anexados con valores


Si puede anexar datos que no se obtiene de ninguna tabla
INSERT INTO ALumnos ( codAlumno, NombreAlumno, FechaNac )
('A6','JOSE','01/01/2009');

values

5.26 Consultas de actualizacin.


Las consultas de actualizacin 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 slo los que cumplan una
determinado condicin.
Ejercicios
Crea 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 registros
UPDATE Pagos1 SET Monto =300
5.27 Consulta de eliminacin
Las consultas de eliminacin son consultas que eliminan de una tabla los registros que
cumplen el criterio de bsqueda especificado.
1. Eliminar todos los registros de aquellos alumnos que tienen cdigo A1
DELETE 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)

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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 seria
DELETE FROM TABLE1
INSERT 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 debera 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]

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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 codalumno
EXEC sp_rename 'Alumnos.Codigo', 'CodAlumno'

Cambiamos el campo nombre con nombre alumno


EXEC 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 NULL
O primero borrar el campo fecha y agregarlo con los datos correctos
ALTER TABLE Alumnos DROP COLUMN FechaNac
ALTER TABLE Alumnos ADD FechaNac Date;
ALTER TABLE ALUMNOS
ALTER COLUMN CodAlumno varchar (5) not NULL ;
Volver a colocar la clave principal
ALTER TABLE Alumnos
ADD CONSTRAINT [PK_alumnos]
PRIMARY KEY CLUSTERED ([Codalumno]);
Previamente la creacion de la table deberia haber sido
CREATE 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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 170 -

Crear la clave principal


ALTER TABLE ALUMNOS
ADD CONSTRAINT [PK_Alumnos]
PRIMARY KEY CLUSTERED ([Id]);
Remover el campo clave
ALTER TABLE ALUMNOS
drop CONSTRAINT [PK_Alumnos]
Se puede copiar los datos a Excel recuperarlo
Cuando 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;
Nro
1
2
3
4
5
6
7
8

FechaPag CodAlumn
o
o
01/04/200
7
A1
01/12/200
7
A2
01/02/200
8
A1
01/03/200
8
A3
01/02/200
9
A2
01/04/200
9
A1
01/05/201
0
A1
01/08/201
1
A1

Monto

CodCurs
o

100

AD

100

M1

200

C1

100

AD

200

C1

300

C2

200

AD

120

C1

2) Mostrar los pagos totales por alumno


SELECT codalumno,SUM(monto) As total FROM Pagos GROUP BY codalumno;
codalumn
o
A1
A2
A3

Total
920
300
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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

codalumn
o
A1

- 171 -

suma
920

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


SELECT COUNT(monto) AS NroPagos from Pagos WHERE monto<=100
NroPago
s
3
5) Obtener los cdigos de los alumnos de la tabla pagos sin repeticiones
SELECT DISTINCT codalumno FROM Pagos;
6) Obtener el cdigo del alumno que hizo mayor pago y en que curso
SELECT CodAlumno,Monto,CodCurso FROM Pagos WHERE Monto =(SELECT
MAX(Monto) from Pagos);
CodAlum
no
A1

Monto
300

CodCurs
o
C2

Si hay varios mayores lista todos los registros


7) Elaborar un listado de aquellos alumnos que no pagaron
SELECT codalumno ,nombrealumno FROM Alumnos WHERE codalumno NOT IN
(SELECT CodAlumno FROM Pagos)
codalum nombrealu
no
mno
A4
JORGE
A5
MARIO
8) Elaborar los pagos totales agrupado por ao
SELECT YEAR (fechapago) AS APago , SUM(monto) as pagototal from Pagos
GROUP BY YEAR (fechapago)
Nota . en algunos sistemas no reconoce caracteres especiales como AO
APago
2007
2008
2009
2010
2011

pagotota
l
200
300
500
200
120

9) Calcular la cantidad de pagos totales por mes

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 172 -

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


BY MONTH(fechapago)
mes
cantidad
2
2
3
1
4
2
5
1
8
1
12
1
10) Encontrar los subtotales por curso
SELECT CodCurso as Curso , SUM(Monto) as TOTAL
FROM Pagos GROUP BY CodCurso
Curso
AD
C1
C2
M1

TOTAL
400
520
300
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
A
B
C

P1

P2
200
300
100

100
100
20

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


nomb
re
p1
20
A
0
30
B
0
10
C
0

p2 Dif
10 10
0 0
10 20
0 0
20 80

Caso 2 .Se tiene la siguientes tablas (ingresos y egresos) de una base de datos
se desea obtener los saldos
INGRESOS
NOMBRE INGRESOS
A
200
B
300

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 173 -

50

EGRESOS
NOMBRE Egresos
A
100
B
200
SELECT B.NOMBRE , B.EGRESOS FROM Egresos B
SELECT A.NOMBRE , A.INGRESOS FROM Ingresos A
SELECT a.NOMBRE ,A.INGRESOS ,B.EGRESOS,A.INGRESOS-B.EGRESOS AS
SALDO FROM Ingresos A
LEFT JOIN Egresos B
ON A.NOMBRE = B.NOMBRE
NOMB INGRES EGRES SAL
RE
OS
OS
DO
A
200
100 100
B
300
200 100
C
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 CURSOS
CodAlumno

AD

A1

100,00

A2

100,00

A3

100,00

A4

200,00

C1
200,00

C2
200,00
200,00

200,00

2 elaborar cuadricula de pagos por alumnos y aos


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

2007

A1

500,00

A2

100,00

A3

2008

200,00
100,00

A4
A5

2009

400,00
200,00

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 174 -

1. Elaborar cuadricula de pagos por alumnos y meses


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

12

500,00

A2

200,00

A3

100,00

100,00

A4

200,00

A5

200,00

200,00

3 Elaborar cuadriculas aos y meses


TRANSFORM SUM(Monto) SELECT year(FechaPago) as AO
FROM Pagos GROUP BY Year(Fechapago) PIVOT MONTH(FechaPago)
PAGOS Consulta
AO

2007

500,00

12
100,00

2008

100,00

2009

200,00

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
evaluacin . mostrar las pruebas
Ejemplo

Probar los Ejercicios de SQL de Borja Sotomayor se le enva un modelo ( realizar los
ejercicios de 2 al 9 como el caso de la tienda de Informatica que se deja como Modelo
1.
2.
3.
4.

La Tienda de Informatica
Empleados
Los Almacenes
Peliculas y Salas

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca


5.
6.
7.
8.
9.

Los Directores
Piezas y Proveedores
Los Cientificos
Los Grandes Almacenes
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)
)

- 175 -

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 176 -

Agregar los siguientes valores


FABRICANTES
Codig
o
Nombre
1 Intel
2 Quantum
3 Fabricante 1
ARTICULOS
Codig
o
Nombre
Precio Fabricante
Microprocesado
1 r
200
1
2 Disco Duro
100
2
3 Laptop Core I5
600
1
4 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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 178 -

SELECT nombre FROM ARTICULOS WHERE Precio <=200

1.4 Obtener todos los datos de los artculos 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, Fabricante
FROM
Articulos
WHERE (Precio BETWEEN 60 AND 120)

1.4 Obtener el nombre y el precio en pesetas (es decir, el precio en euros multiplicado
por 166386)
/*Sin As */
SELECT Nombre, Precio * 166.386 FROM ARTICULOS

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 180 -

1.8 Obtener el nmero de artculos 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 artculos cuyo precio sea mayor o igual a 180
Euros y ordenarlos desdendentemente por precio y luego ascendentemente por
nombre
SELECT Nombre, Precio
FROM
Articulos
WHERE (Precio >= 180)
ORDER BY Precio DESC, Nombre

1.10 Obtener un listado completo de artculos, incluyendo por cada artculo los datos
del artculo y de su fabricante.
/* SIN INNER JOIN */
SELECT * FROM ARTICULOS, FABRICANTES

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 181 -

WHERE ARTICULOS. Fabricante = FABRICANTES. Codigo

/* Con INNER JOIN */


SELECT * FROM ARTICULOS INNER JOIN FABRICANTES ON
ARTICULOS.FABRICANTE= FABRICANTES.CODIGO

1.11 Obtener un listado de artculos, incluyendo el nombre del artculo, su precio y el


nombre de su fabricante.
/* SIN INNER JOIN */
SELECT ARTICULOS.Nombre, Precio, FABRICANTES. Nombre
FROM ARTICULOS, FABRICANTES
WHERE ARTICULOS. Fabricante = FABRICANTES. Codigo

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 182 -

/*con INNER JOIN */


SELECT ARTICULOS.Nombre , Precio, FABRICANTES.Nombre
FROM ARTICULOS INNER JOIN FABRICANTES
ON ARTICULOS.Fabricante = FABRICANTES.Codigo

1.12 Obtener el precio medio de los productos de cada fabricante, mostrando solo los
cdigos de fabricante.
SELECT AVG(Precio) AS Expr1, Fabricante
FROM
Articulos
GROUP 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.Nombre
FROM ARTICULOS, FABRICANTES
WHERE ARTICULOS.Fabricante=FABRICANTES.Codigo
GROUP BY FABRICANTES.Nombre

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 183 -

/* CON INNER JOIN*/


SELECT
FROM

AVG(Articulos.Precio) AS Expr1, Fabricantes.Nombre


Articulos INNER JOIN
Fabricantes ON Articulos.Fabricante = Fabricantes.Codigo
GROUP 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.Nombre
FROM
Articulos,FABRICANTES
WHERE ARTICULOS.Fabricante = Fabricantes.Codigo
GROUP BY Fabricantes.Nombre
HAVING
(AVG(Articulos.Precio) >= 150)

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 184 -

/* CON INNER JOIN*/


SELECT AVG(Articulos.Precio) AS Precio_medio, Fabricantes.Nombre
FROM
Articulos INNER JOIN
Fabricantes ON Articulos.Fabricante = Fabricantes.Codigo
GROUP BY Fabricantes.Nombre
HAVING
(AVG(Articulos.Precio) >= 150)

1.15 Obtener el nombre y precio del articulo ms barato


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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 185 -

1.16 Obtener una lista con el nombre y precio de los artculos ms 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.Codigo
AND 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 Expr1
FROM
Articulos AS A INNER JOIN
Fabricantes AS F ON A.Fabricante = F.Codigo
WHERE (A.Precio =
(SELECT MAX(Precio) AS Expr1
FROM
Articulos AS A
WHERE
(Fabricante = F.Codigo)))

17 Aadir un Nuevo producto: Altavoces de 70 ( del fabricante 2)


INSERT INTO Articulos

(Codigo, Nombre, Precio, Fabricante)

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

VALUES

- 186 -

(6, 'Altavoces', 70, 2)

1.18 Cambiar el nombre del producto 8 a impresora laser


UPDATE ARTICULOS
SET Nombre = ' Impresora Laser '
WHERE Codigo =8

1.19Aplicar un descuento del 10% (multiplicar el precio por 09) a todos los productos
Update ARTICULOS
Set 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) 381


En este caso practicamos el ejercicio 9

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

CREAMOS LAS SIGUIENTES TABLAS


1 TABLA INVESTIGADORES
DNI
1111
2222
3333
4444
5555

NomApels
JUAN
PEREZ
JOSE
PEREZ
JAVIER
RIOS
LUIS
MONTES
CARLOS
RIOS

Faculta
d
1
2
3
1
2

2 TABLA FACULTAD
CODIGO
1
2
3
4

NOMBRE
PRODUCCION Y SERVICIOS
MEDICINA
EDUCACION
CIENCIAS FORMALES

3 TABLA RESERVA
NumSeri Comienz
DNI
e
o
01/06/200
1111
1
9
01/06/200
2222
2
9
01/06/200
3333
3
9
01/06/200
4444
4
9

Fin
12/06/201
0
12/06/201
0
12/06/201
0
12/06/201
0

- 187 -

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

5555

1111

01/06/200
9
01/06/200
9

- 188 -

12/06/201
0
12/06/201
0

1. TABLA EQUIPOS
NumSeri
e
Nombre
1
UNIDAD PLC
2
MICROSCOPIO
3
PROYECTOR MULTIMEDIA
4
EQUIPO LABORATORIO
5
GPS
6
LAPTOP TOSHIBA
8
SENSORES DE LUZ

Facultad
1
2
3
4
1
2
1

5.1 Obtener el DNI y Nombre de aquellos Investigadores que han realizado ms


de una reserva
/* juntando tablas */
SELECT I.DNI, NomApels FROM [INVESTIGADORES$] I
LEFT JOIN [RESERVA$] R
ON R.DNI = I.DNI GROUP BY I.DNI, NomApels HAVING COUNT (R.DNI) >1
DNI NomApels
1111 JUAN PEREZ
2222 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
NumSeri
DNI NomApels F_INV.Nombre e
E.Nombre
F_EQUIP.Nombre Comienzo
222 JOSE
PRODUCCION Y
2
PEREZ
MEDICINA
5
GPS
SERVICIOS
01/06/2009
JUAN
PRODUCCION
PRODUCCION Y
1111 PEREZ
Y SERVICIOS 1
UNIDAD PLC
SERVICIOS
01/06/2009
222 JOSE
2
PEREZ
MEDICINA
2
MICROSCOPIO MEDICINA
01/06/2009
JUAN
PRODUCCION
LAPTOP
1111 PEREZ
Y SERVICIOS 6
TOSHIBA
MEDICINA
01/06/2009
333 JAVIER
PROYECTOR
3
RIOS
EDUCACION 3
MULTIMEDIA
EDUCACION
01/06/2009
444 LUIS
PRODUCCION
EQUIPO
CIENCIAS
4
MONTES Y SERVICIOS 4
LABORATORIO FORMALES
01/06/2009
Numero de serie y nombre de equipo reservado , junto con el nombre de la
facultad a la que pertenece

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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, Fin
FROM [RESERVA$] R, [INVESTIGADORES$] I, [EQUIPOS$] E, [FACULTAD$]
F_INV , [FACULTAD$] F_EQUIP
WHERE R.DNI=I.DNI
AND R.NumSerie = E.NumSerie
AND I.Facultad=F_INV.Codigo
AND 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
1111
222
2
444
4

NomApels
JUAN PEREZ
JOSE PEREZ
LUIS MONTES

/* juntando tablas +/
SELECT DISTINCT I.DNI, NomApels
FROM [RESERVA$] R , [INVESTIGADORES$] I, [EQUIPOS$] E
WHERE R.DNI=I.DNI
AND R.NumSerie= E.NumSerie
AND I.Facultad <> E.Facultad
/*con EXISTS */
SELECT DNI, NomApels FROM [INVESTIGADORES$] I
WHERE EXISTS
( SELECT *
FROM [RESERVA$] R INNER JOIN [EQUIPOS$] E
ON R.NumSerie = E.Numserie
WHERE R.DNI=I.DNI
AND I.Facultad <> E.Facultad
)
9.4 Obtener los nombres de las facultades en las que ningun investigador ha
realizado una reserva
Nombre
En este caso todos ha realizado alguna reserva
SELECT Nombre FROM [FACULTAD$]
WHERE Codigo IN
( SELECT Facultad
FROM [INVESTIGADORES$] I LEFT JOIN [RESERVA$] R
ON I.DNI =R.DNI
GROUP BY Facultad
HAVING COUNT (R.DNI)=0
)
9.5 Obtener los nombres de las facultades con investigadores ociosos
( investigadores que no han realizado ninguna reserva).
Nombre

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 190 -

No hay facultades con investigadores ociosos


SELECT 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
NumSeri
e
Nombre
8
SENSORES DE LUZ
/* juntando tablas +/
SELECT E.NumSerie, Nombre
FROM [EQUIPOS$] E LEFT JOIN [RESERVA$] R
ON R.NumSerie = E.NumSerie
GROUP BY E.NumSerie, Nombre
HAVING COUNT (R.NumSerie)=0
/* con subconsulta IN */
SELECT NumSerie, Nombre
FROM [EQUIPOS$]
WHERE NumSerie NOT IN
( SELECT NumSerie FROM [RESERVA$]
)
/* con subconsulta Exists */
SELECT NumSerie, Nombre
FROM [EQUIPOS$] E
WHERE NOT EXISTS
(
SELECT * FROM [RESERVA$] R
WHERE R.NumSerie=E.NumSerie
)
Tarea. Pruebe las consultas con la base de datos De Ventas
5. SENTENCIAS SQL
5.1 LAS CONSULTAS 344
5.2 Pasos para ejecutar sentencia SQL en Visual Basic 2012
5 3 SELECT | SELECCIONAR[editar] 339
5.4 SELECCIONAR CAMPOS 345
5.5 Definir campos calculados 345
5.6 En SQL tambin se puede trabajar sin tablas 346
5.7Encabezados de columna 346
5,8 Ordenar las filas 346
5.9 Incluir criterios de bsqueda (Seleccionar filas) 347
5.10 Bsqueda de valores conocidos (TEXTO)

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 191 -

5.11 CONCIDENCIA DE PATRONES carcter Comodin 348


5.12 El operador Entre between 350
5.13 El operador In : (Inclusin) 350 y No inclusin 35
5.14 LAS CONSULTAS DE RESUMEN 351
Funciones de columna 352
Funciones de columna
La funcin SUM() . AVG() ,StDev() y StDevP() , MIN() y MAX()
La funcin COUNT(nb) yCOUNT(*)
5.15 Agrupar registros 353 GROUP BY HAVING .- 354
5.16 LAS CONSULTAS MULTITABLA 354
5.16.1 Combinaciones internas. Inner Join 354
5.16.2Combinaciones externas. Left join
5.17. 3EL OPERADOR UNION 361
5.18 L5.182 AS CONSULTAS DE REFERENCIAS CRUZADAS 360
Operador de pivote: 361
5.19 FUNCIONES DE FECHA Y HORA 363
5.20 El predicado TOP y la clave PERCENT 364
5.21 CONSULTAS SELECT ANIDADAS 364 SubConsultas
5.22 Funcin ROW_NUMBER() 365
5.23 LAS CONSULTAS DE ACCIN 366
5.24 Consultas de creacin de tabla.
( consultas que se almacenan en una tabla) 366
Crear tablas con SQL 366
5.25 Consulta de datos anexados.
Datos anexados en base a una consulta 367
Datos anexados con valores
5.26 Consultas de actualizacin. 368
5.27 Consulta de eliminacin 369
5.28 ELIMINAR TODA LA TABLA 369
5.29 Agregar un nuevo campo a la tabla ALUMNOS1 370
Ejercicios 369
EJERCICIOS DE CONSULTAS DE REFERENCIAS CRUZADAS(Acces)
372
5.30 EJERCICIOS DE MODIFICACION DE TABLAS (CAMPOS) 373

CREATE TABLE FACULTAD


( Codigo int,
Nombre nvarchar(100),
primary key (Codigo)
)

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 192 -

CREATE TABLE INVESTIGADORES


( DNI varchar(8),
NomApels nvarchar(255),
Facultad int
primary key (DNI)
)
SENTENCIA SQL AVANZADAS
Listar el esquema de una base de datos
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
TABLE_CATALOG
E:\DATOS\ALUMNO
S.MDF
E:\DATOS\ALUMNO
S.MDF
E:\DATOS\ALUMNO
S.MDF
E:\DATOS\ALUMNO
S.MDF
E:\DATOS\ALUMNO
S.MDF
E:\DATOS\ALUMNO
S.MDF
E:\DATOS\ALUMNO
S.MDF

TABLE_SCH TABLE_N
EMA
AME
dbo

ALUMNOS

dbo

PAGOS

dbo

dbo

CURSOS
ALUMNOS
1
SUBTOTA
LES
ALUMNOS
2

dbo

TB2015B

dbo
dbo

TABLE_T
YPE
BASE
TABLE
BASE
TABLE
BASE
TABLE
BASE
TABLE
BASE
TABLE
BASE
TABLE
BASE
TABLE

La consulta muestra todos las caracteristicas de los objetos de la base de datos


select * from sysobjects

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 193 -

use [E:\DATOS\ALUMNOS.MDF]
select name from sysobjects
--La consulta muestra todos los objetos de la base de datos Alumnos
select name from sysobjects osea 82 objetos
--La consulta muestra todas las tablas de la base de datos
select 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 tablas
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 194 -

*--La consulta muestra todas las tablas de la base de datos*/


select name from sysobjects where type='U'
Cdigo:
/*--La consulta muestra todas las vistas de la base de datos*/
select name from sysobjects where type='V'
Cdigo:
/*--La consulta muestra todos los procedimientos de la base de datos*/
select name from sysobjects where type='P'
Cdigo:
/*--La consulta muestra todos los triggers de la base de datos*/
select name from sysobjects where type='T'
Cdigo:
/*--La consulta muestra todas las llaves foraneas de la base de datos*/
select name from sysobjects where type='F'
Cdigo:
/*--La consulta muestra todas las llaves primarias de la base de datos*/
select name from sysobjects where type='K'
Cdigo:
/*--La consulta muestra todos los objetos del sistema de la base de datos*/
select name from sysobjects where type='S'
Cdigo:
/*--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
Cdigo:
/*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


SELECT * FROM sys.Tables

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 195 -

Pruebe

PRUEBA CON LA BASE DE DATOS ADVENTURE WORK


Listar lo nombres de los objetos de la base de datos Adventure Works
use [E:\DATOS1\ADVENTUREWORKSLT.MDF]
select name from sysobjects
select name from sysobjects
182 objetos
LISTAR LAS propiedades de las tablas
SELECT * FROM sys.Tables

LISTARA LAS PRPIEDADES DE LA TABLA PRODUCTOS


SELECT * FROM sys.Tables WHERE NAME='Product'

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz 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 name
por la definicin de la tabla

HAGA LO MISMO CON La tabla NORWIND


1. Listar las tablas
USE [E:\DATOS1\NORTHWIND.MDF]
SELECT * FROM SYS.TABLES

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 197 -

Listar el contenido de la tabla productos


SELECT * FROM Products
Utilizando la base de datos Northwind . Genere una lista de seleccin 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,


adems 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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

- 198 -

Encontrar todos los apellidos (LastName) en la tabla Employees que comiencen con la
letra <<S>>. Use el carcter comodn %.
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 comodn [ ]
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

GUIA DE PRACTICAS DE TBD2015B\SQL \ Ismael Vliz Vilca

TRABAJO FINAL DE BASE DE DATOS (vea el video)

- 199 -

Potrebbero piacerti anche