Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Into SQL - Tutorial

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

#TUTORIAL Introduccion-SQL

## (version 1.0.0)
## @autor = Lic. Cristian Benitez
PRESENTACION

CONTENIDOS DEL TUTORIAL ::


En este tutorial aprenderás los conceptos generales de bases de datos, arquitectura
Cliente – Servidor, instalación, diseño, normalización e implementación de una base de
datos. Luego de practicar con diferentes entornos de administración para Bases de Datos,
el tutorial continúa con el armado y diseño de un modelo administrativo de facturación, en
el que se debaten y desarrollan diferentes tablas, claves primarias, claves foráneas,
índices auxiliarles, etc. Luego de la construcción del modelo, el tutorial continúa con la
introducción del lenguaje de consultas SQL, en el cual se desarrolla una importante
práctica de consultas y modificaciones de datos a través de este lenguaje transaccional.
PARA QUIEN ESTA ORIENTADO EL TUTORIAL ::
Este tutorial está orientado para quienes intentan desarrollar una carrera como
Desarrollador (sin importar el lenguaje de programación). También está dirigido para
quienes buscan poseer conocimientos para el análisis de datos o para quienes dan sus
primeros pasos hacia la formación de DBA (Data Base Administrador – Administrador de
Bases de Datos)

SALIDA LABORAL ::
Este tutorial es un importante complemento para la formación técnica del desarrollador.
Independientemente de la tecnología que se utilice para programar, el tutorial proporciona
una introducción al conocimiento del lenguaje de programación para bases de datos SQL
tanto en DDL (Data Definition Language) y DML (Data Manipulation Language).
#TUTORIAL Introduccion-SQL
## (version 1.0.0)
## @autor = Lic Cristian Benitez

CAPITULO 1

Entender los siguientes conceptos:


- que es una base de datos
- que es un servidor de base de datos
- que es una arquitectura Cliente Servidor (C/S)
o Comentar que el servidor a utilizar es MySQL Server y el cliente es MySQL Query Browser.
o Analizar la analogía con arquitectura C/S Web (Browser vs. Web Server)
- que es una tabla, que es un campo y que es un registro
- que es un tipo de dato, mencionar ejemplos: INTEGER, DOUBLE, VARCHAR, DATETIME (comentar
formato: AAAA-MM-DD).
- similitudes y diferencias entre Base de Datos y una planilla de calculos de Excel.

Acceder:
- la pagina de mysql donde pueden bajar el servidor y el cliente MySQL Query Browser
- como levantar el MySQL Server como servicio.
Abrir mySQL QueryBrowser y revisar cada dato de la ventana de login:
- que es server y que es localhost
- entender que es el puerto y que por default es 3306
- que es user (usar 'root') y que es password (no usar vacio)

A continuación, el alumno debe realizar prácticas en el mySQL Query Browser los siguientes pasos:
- Crear una base de datos llamada "intro"
- Setear la base de datos como "default schema"
- Crear la tabla "clientes" con los siguientes datos:

codigo INTEGER, AUTO INC


nombre VARCHAR(50), NOT NULL
apellido VARCHAR(50), NOT NULL
cuit VARCHAR(13), NOT NULL
direccion VARCHAR(100), NULL
comentarios VARCHAR(255), NULL

A medida q se va construyendo los campos, entender los temas de:


- que es la PK (o clave primaria)
- que es y cuando se utiliza el AUTO INC (auto incremental)
- tamaño del VARCHAR
o cuando utilizar diferentes tamaños, citar el caso del campo 'cuit' de VARCHAR(13)
- que significa NULL y NOT NULL

Luego de crear la tabla, el alumno debe ingresar 10 clientes teniendo en cuenta lo siguiente:
- Practicar como usar el mySQL Query Browser para agregar registros
- no completar campo autoincremental
o ver que luego se autocompletan
- los campos NOT NULL deben ser completados
- el CUIT debe tener 13 caracteres
o si se exceden en cantidad de caracteres trunca
- la direccion puede quedar nula

EJERCICIO 1
1
1. Crear la tabla 'facturas' dentro de la base de datos 'intro' con el siguiente detalle:

letra CHAR y PK
numero INTEGER
fecha DATETIME
monto DOUBLE

2. Crear la tabla 'articulos' dentro de la base de datos 'intro' con el siguiente detalle:
codigo INTEGER y PK
nombre VARCHAR(255)
precio DOUBLE
stock INTEGER

3. Cargar 5 registros en cada tabla


- Practicar que pasa si se ingresa una fecha invalida
- Practicar que significa una PK compuesta, mostrar como la tabla 'facturas' deberian tener como PK
compuesta el campo 'letra' y 'numero'
- Modificar junto con los alumnos la tabla 'facturas' para que el campo 'numero' sea PK
- Ingresar datos en la tabla 'facturas' intentando agregar facturas iguales en la PK, Practicar por que no
funciona

4. Definir que es SQL (Structured Query Language)

Entender la diferencia entre ANSI SQL y SQL propietario (citar Oracle, SQL Server, etc)

Graficar con la herramienta de MYSQL WorkBench la tablas

Analizar esta organizacion de SQL:

SQL
DDL (Data Definition Language)
CREATE TABLE / DATABASE
ALTER TABLE / DATABASE
DROP TABLE / DATABASE

DML (Data Manipulation Language)


SELECT
INSERT
UPDATE
DELETE

Entender que el DDL se ejecuta automáticamente cada vez que se crea una base de datos o una tabla, lo hace
el MySQL Query Browser

Entender los siguientes ejemplos, el alumno debe


hacerlos en la PC y debatir como funciona:
SELECT * FROM FACTURAS
SELECT letra, numero FROM FACTURAS
SELECT letra, numero, monto FROM FACTURAS WHERE monto > 500

2
#TUTORIAL Introduccion-SQL
## (version 1.0.0)
## @autor = Lic Cristian Benitez

CAPITULO 2

EJERCICIO 2
Llenar las tablas articulos, clientes y facturas con 10 registros cada una
--

explicar SELECT y FROM, practicar el *


select * from facturas

practicar campos en lugar de *


select letra, numero, monto from facturas

practicar columnas autocalculables


select letra, numero, monto, monto * 0.21 from facturas

practicar alias
select letra, numero, monto, monto * 0.21 as IVA from facturas
select letra, numero, monto, monto * 0.21 as IVA, monto * 1.21 as
monto_con_iva from facturas

practicar columnas agregadas


select 21 as IVA, letra, numero, monto FROM facturas

practicar operadores numericos y uso de comilla simple


select * from facturas where letra = 'A'
select * from facturas where letra <> 'A'
select * from facturas where letra != 'A'
select * from facturas where monto > 500

practicar operadores logicos


select * from facturas where letra = 'a' AND numero = 2
select * from facturas where letra = 'a' OR letra = 'b'

practicar BETWEEN y NOT BETWEEN


select * from facturas where monto BETWEEN 500 AND 1000
select * from facturas where monto NOT BETWEEN 500 AND 1000

practicar IN y NOT IN
select * from facturas where numero IN (10,15,29,115,200,320)
select * from facturas where numero NOT IN (10,15,29,115,200,320)

practicar LIKE y %
select * from articulos where nombre LIKE 'a%'
select * from articulos where nombre LIKE 'a%n'
select * from articulos where nombre LIKE '%n'

practicar LIKE y _
1
select * from articulos where nombre LIKE 'tv __ pulgadas'

practicar ORDER BY, practicar diferencia entre ASC y DESC


select * from articulos order by precio ASC
select * from articulos order by precio DESC
select * from articulos order by nombre ASC

entender que el ORDER BY puede usarse con WHERE


select * from articulos where precio < 1000 order by precio DESC

entender como funciona si no se escribe la palabra ASC o DESC, por


defecto es "ASC"
select * from articulos order by precio

entender ordenamiento por mas de un campo


select * from articulos order by precio, stock
select * from articulos order by precio ASC, stock DESC

EJERCICIO 3
Basandose en la tabla 'productos', realizar los siguientes puntos:

1. Obtener los articulos con:


a. precio mayor 100
where precio > 100
b. precio mayor 500 y menor 1000 (utilizar operadores > y <)
where precio > 500 AND precio < 1000

c. precio mayor 500 y menor 1000 (utilizar BETWEEN)


where precio BETWEEN 500 AND 1000

d. precio igual a 1000 y stock mayor a 3


where precio =1000 AND stock > 3
e. precio sea 100, 500 o 1000 (no utilizar el IN)
where precio = 100 OR precio = 500 OR precio = 1000
where precio = 10*10 OR precio = 50*10 OR precio = 100*10

f. precio sea 100, 500 o 1000 (utilizar el IN)


where precio IN (100,500,1000)
where precio IN (10*10,50*10,100*10)

g. precio no sea 500, 600 o 700


where precio NOT IN (10*10,50*10,100*10)

2. Listar los articulos ordenados por precio de mayor a menor, y si hubiera precios iguales deben
quedar ordenados por nombre de forma ascendente
select * from articulos
where precio NOT IN (10*10,50*10,100*10)
order by precio DESC, nombre ASC

2
3. Listar todos los articulos incluyendo una columna denominada "precio_con_IVA", la cual debera
tener el monto con iva del articulo
select nombre,precio,monto,monto*1.21 as precio_con_IVA from articulos
order by precio DESC, nombre ASC

4. Listar todos los articulos incluyendo una columna denominada "cantidad_cuotas" y otra
"valor_cuota". La cantidad de cuotas es fija y debe ser 3, y el valor de la cuota corresponde a 1/3 del
monto con un 5% de interes
select nombre,precio,monto,monto*1.21 as precio_con_IVA,3 as
cantidad_cuotas, (monto*1.21)/3 as valor_cuota cuota from articulos
order by precio DESC, nombre ASC

3
#TUTORIAL Introduccion-SQL
## (version 1.0.0)
## @autor = Lic Cristian Benitez

CAPITULO 3

explicar INSERT INTO sin establecer los campos (forma simplificada),


destacar que corresponde al orden de los campos en la tabla cuando fueron creados
insert into articulos values (100, 'grabadora dvd', 1250, 5)

ejecutar nuevamente la consulta anterior y entender que significa " duplicate key entry '100' "

practicar INSERT INTO estableciendo los campos (forma extendida), destacar que se pueden obviar
campos que no conozco el valor o son autocalculables
insert into articulos (nombre, precio, stock) values ('grabadora dvd',
1250, 5)

explicar UPDATE con un campo


update articulos set nombre = 'mini-componente' where codigo = 1

practicar UPDATE con multiples campos


update articulos set precio = 100, stock = 5 where codigo = 2

practicar UPDATE masivo


update articulos set stock = 15

practicar DELETE por clave primaria


delete from articulos where codigo = 1

practicar DELETE por otras condiciones


delete from articulos where stock < 5

practicar DELETE masivo


delete from articulos

--
EJERCICIO 4
"clientes" con los siguientes datos:
codigo INTEGER, AUTO INC
nombre VARCHAR(255), NOT NULL
apellido VARCHAR(255), NOT NULL
cuit VARCHAR(13), NOT NULL
direccion VARCHAR(255), NULL
comentarios VARCHAR(255), NULL
Basandose en la tabla 'clientes', realizar los siguientes puntos:
1. Insertar 5 clientes en la tabla clientes utilizando el INSERT INTO sin utilizar campos como parte de
la sentencia, es decir de la forma simplificada
INSERT INTO clientes VALUES (100,’juan’,’perez’,’20-12345678-1’,’san juan
123’,’commentario uno’);
.
.
1
2. Insertar 5 clientes en la tabla clientes utilizando el INSERT INTO utilizando campos como parte de la
sentencia, es decir de la forma extendida. Completar solo los campos nombre, apellido y CUIT
INSERT INTO clientes(codigo, nombre, apellido, cuit, direccion, comentario) VALUES
(100,’juan’,’perez’,’20-12345678-1’,’san juan 123’,’commentario uno’);

INSERT INTO clientes(nombre, apellido,cuit) VALUES (’juan’,’perez’,’20-12345678-


1’);
3. Actualizar el nombre del cliente a 'Manuel' donde el codigo de cliente es 1
UPDATE clientes SET nombre = ‘Manuel’ WHERE codigo = 1
4. Actualizar el nombre, apellido y CUIT del cliente a 'Pablo', 'Fuentes', '20-21053119-0' donde el
codigo de cliente es 2
UPDATE clientes SET nombre = ‘Manuel’,apellido=’perez’,’20-30123123-1’ WHERE
codigo = 2
5. Actualizar los comentarios de todos los registros a vacio (representado por '')
UPDATE clientes SET comentarios = ‘’
6. Eliminar los clientes con apellido 'Perez'
DELETE FROM clientes WHERE apellido =‘perez’
7. Eliminar los clientes con CUIT terminado el 0
DELETE FROM clientes WHERE cuit LIKE ‘%0’

tabla 'articulos'
codigo INTEGER y PK
nombre VARCHAR(255)
precio DOUBLE
stock INTEGER
Basandose en la tabla 'articulos', realizar los siguientes puntos:
8. Aumentar un 20% el precio de los articulos con precio menor a $500
UPDATE articulos SET precio=(precio + precio*0.20) WHERE precio<500;
UPDATE articulos SET precio=(precio*1.20) WHERE precio<500;

9. Aumentar un 15% el precio de los articulos con precio entre $1000 y $2000
UPDATE articulos SET precio=(precio + precio*0.15) WHERE precio BETWEEN 1000 AND
2000;

UPDATE articulos SET precio=(precio*1.15) WHERE precio BETWEEN 1000 AND 2000;

UPDATE articulos SET precio=(precio + precio*0.15) WHERE precio >= 1000 AND precio
<=2000;

UPDATE articulos SET precio=(precio*1.15) WHERE precio >= 1000 AND precio <=2000;

10. Bajar un 10% el precio de los articulos con precio mayor a $5000
UPDATE articulos SET precio=(precio - precio*0.10) WHERE precio > 5000;
UPDATE articulos SET precio=(precio*0.90) WHERE precio > 5000;

11. Eliminar los articulos con stock igual a 0


DELETE FROM articulos WHERE stock =0;

--

2
#TUTORIAL Introduccion-SQL
## (version 1.0.0)
## @autor = Lic Cristian Benitez

CAPITULO 4

- Entender que existen en SQL funciones para resolver ciertos casos


• MAX(………..)
• MIN(………..)
• AVG(………..)
• SUM(………..)
• COUNT(………..)
• GROUP BY
• HAVING
• DISTINCT

- Practicar MAX con numeros


SELECT max(monto) from facturas;
SELECT max(monto) as maximo from facturas;
SELECT max(monto) as maximo from facturas where letra = 'a';

- Practicar MAX con fechas


SELECT max(fecha) from facturas;
SELECT max(fecha) as fecha_maxima from facturas;
SELECT max(fecha) as fecha_maxima from facturas where letra = 'a';

- Practicar MIN con numeros


SELECT min(monto) from facturas;
SELECT min(monto) as maximo from facturas;
SELECT min(monto) as maximo from facturas where letra = 'a';

- Explicar MIN con fechas


SELECT min(fecha) from facturas;
SELECT min(fecha) as fecha_maxima from facturas;
SELECT min(fecha) as fecha_maxima from facturas where letra = 'a';

- Explicar AVG
SELECT avg(monto) from facturas;
SELECT avg(monto) as promedio from facturas;
SELECT avg(monto) as promedio from facturas where letra ='c';

- Explicar SUM
SELECT sum(monto) from facturas;
SELECT sum(monto) as total from facturas;
SELECT sum(monto) as total from facturas where letra = 'a';

- Explicar COUNT
SELECT count(*) from facturas;
1
SELECT count(*) as cantidad from facturas;
SELECT count(*) as cantidad from facturas where letra = 'a';

- Explicar GROUP BY

SELECT count(*) from facturas group by letra;


SELECT letra, count(*) as total from facturas group by letra;
SELECT letra, count(*) as total, sum(monto) as facturacion from
facturas group by letra;

- Explicar GROUP BY junto con HAVING (comentar que HAVING es el "where"


del GROUP BY).

SELECT letra, count(*) as total, sum(monto) as facturacion from


facturas group by letra having facturacion < 5000

- Practicar subqueries

SELECT * from facturas where fecha = (select min(fecha) from facturas)


SELECT * from facturas where monto = (select max(monto) from facturas)

- Entender que significa las relaciones entre tablas


- Practicar con un ejemplo como lograr identificar que una factura pertenece a un cliente,
destacar que es necesario una referencia al cliente en la tabla facturas.
- Entender el concepto de FK
- crear campo codigo_cliente del tipo INTEGER en tabla facturas (representa la FK)
o completar datos de esta columna con 1, 2 o 3
- Practicar como traer los datos de dos tablas relacionadas, y Entender alias de tablas

SELECT * FROM cliente c, facturas f where c.codigo = f.codigo_cliente.

- Practicar como traer solo la informacion que se necesita de dos tablas relacionadas, pudiendo
hacer ordenamiento

SELECT c.nombre, f.letra, f.numero, f.monto


from cliente c, facturas f
where c.codigo = f.codigo_cliente
order by c.nombre asc

--
EJERCICIO 5
1. Crear la tabla 'autos' dentro de la base de datos 'intro' con el siguiente detalle:

codigo INTEGER y PK
marca VARCHAR(255)
modelo VARCHAR(255)
color VARCHAR(255)
anio INTEGER
precio DOUBLE

2
2. Cargar la tabla con 15 autos (hacerlo con MySQL Query Browser o el INSERT INTO)
3. Realizar las siguientes consultas:.

a. obtener el precio maximo


b. obtener el precio minimo
c. obtener el precio minimo entre los años 2000 y 2008
d. obtener el precio promedio
e. obtener el precio promedio del año 2006
f. obtener la cantidad de autos
g. obtener la cantidad de autos que tienen un precio entre $35.000 y $40.000
h. obtener la cantidad de autos que hay en cada año
i. obtener la cantidad de autos y el precio promedio en cada año
j. obtener la suma de precios y el promedio de precios segun marca

SOLUCIONES
EJERCICIO 5
a. SELECT max(precio) as precio_maximo from autos
b. SELECT min(precio) as precio_minimo from autos
c. SELECT min(precio) as precio_minimo from autos where anio between
2000 and 2008
d. SELECT avg(precio) as promedio_autos from autos
e. SELECT avg(precio) as promedio_año2006 from autos where anio = '2006'
f. SELECT count(*) from autos
g. SELECT count(*) from autos where precio between 35.000 and 40.000
h. SELECT año, count(*) as cantidad_autos from autos group by anio
i. SELECT año, count(*) as cantidad_autos, avg(precio) as
promedio_precio from autos group by año
j. SELECT marca, sum(precio) as total, avg(precio) as precio_promedio
from autos group by marca

También podría gustarte