Sei sulla pagina 1di 29

Administacin de Bases

de Datos SQL MySQL

Ing. Timoteo Caldern Letona

DATA MANIPULATION LANGUAGE(DML)


Data Manipulation Language (DML) o Lenguaje de Manipulacin de Datos, es una parte de SQL
que se utiliza para insertar, actualizar, eliminar y realizar todo tipo de consultar, sobre los datos
almacenados en la base de datos. A continuacin se presentan los comandos DML ms
comunes:
INSERT INTO
En SQL, hay bsicamente dos formas de insertar datos en una tabla: uno es para insertarla una
fila a la vez y el otro es insertar en lote varias filas a la vez.
La sintaxis para insertar datos de una fila a la vez en una tabla es la siguiente:
INSERT INTO <nombre_tabla>(columna1, columna2, ) VALUES (valor1, valor2, )
Asumiendo que tenemos una tabla con la siguiente estructura:
Tabla: Vendedor
Column Name Data Type
ID_Vendedor integer
Nombre
char(30)
Zona_venta
Char(20)
Fecha_ing
date
y ahora deseamos insertar una fila adicional dentro de la tabla, representando a un nuevo
vendedor de la zona nor oriental, cuya fecha de ingreso fu el 12/09/2015. Usaremos el
siguiennte scrip SQL:

INSERT INTO Vendedor(Id_vendedor, Nombre, Zona_venta, Fecha_ing)


VALUES (10, Luis Salas, Nor Oriental, 12/09/2015)
Ahora la tabla tendr los siguientes datos:
Tabla Vendedor
ID_Vendedor Nombre Zona_venta Fecha_ing
10

Luis Salas Nor Oriental 12-09-2015

Tenga en cuenta que podemos especificar los nombres de columna en cualquier orden - el orden
no tiene por qu ser el mismo que el de la tabla-; sin embargo los valores debern ser registrados
en el orden especificado para las columnas.
No especificar el nombre de columna en la declaracin INSERT INTO
Si dejamos fuera los nombres de columna en la instruccin INSERT INTO, tendremos que
asegurarnos de que los datos se insertan en el mismo orden de las columnas de la tabla. Por
ejemplo:
INSERT INTO Vendedor
VALUES (11, Mario Gonzales, Sur,13/09/2015)
Insertando valores slo en algunas columnas
En los ejemplos anteriores, insertamos un valor para cada columna de la tabla. A veces, podemos
decidir insertar valores slo en algunas de las columnas y dejar el resto de las columnas en blanco.
Para esos casos, simplemente debemos especificar las columnas que queremos insertar valores
en en nuestra declaracin de SQL, como en el siguiente ejemplo:

INSERT INTO Vendedor(Id_vendedor, Nombre, Fecha_ing)


VALUES (12, Rosa Garca, 15/09/2015)
Ahora la tabla se convierte en:
Tabla Vendedor
ID_Vendedor Nombre

Zona_venta Fecha_ing

10

Luis Salas

Nor Oriental 12-09-2015

12

Rosa Garca

15-09-2015

En este caso, el valor para la columna de la Zona_venta en la segunda fila es NULL. NULL
significa que no existen datos.

Ejercicios de Aprendizaje Prctico


1. Crear la tabla Peronas (Id_emp, Nombre), cuya estructura de datos es la siguiente:

2. Insertar datos para un total de 10 registros.


3. Crear la tabla Telefonos(Id, Numero), cuya estructura de datos es la siguiente.

4. Insertar datos de modo tal que los datos de nmeros telefnicos, estn relacionados con
las personas, asumiendo que una persona puede tener uno o ms telfonos.

INSERT INTO SELECT


En la seccin anterior, aprendimos acerca de cmo insertar valores individuales en una tabla,
una fila a la vez. Qu pasa si queremos insertar varias filas en una tabla? Adems de INSERT
INTO, combinaremos con la instruccin SELECT para lograr este objetivo.
La sintaxis es la siguiente:
INSERT INTO "tabla1" ("columna1", "columna2", ...)
SELECT "columna3", "columna4", ...
FROM "tabla2";
Tenga en cuenta que esta es la forma ms simple. Todo la sentencia puede contener fcilmente
clusulas WHERE, GROUP BY y HAVING, as como uniones de tablas(joins) y alias. Suponiendo
que tenemos las tablas siguientes :
Tabla Informacion_Almacen
Nombre Columna Tipo Datos
Nombre_Almacen char(50)
Ventas
Float
Fecha_inf
Datetime
3

Tabla Datos_Venta
Nombre_Columna
Nombre_Almacen
ID_Producto
Ventas
Fecha_inf

Tipo Datos
char(50)
Integer
Float
Datetime

Tabla Datos_Venta ha detallado la informacin de ventas, mientras que el la tabla


Informacion_Almacen mantiene datos resumidos de las ventas por tienda por da. Para mover
datos de Datos_Venta a Informacion_Almacen, escribiremos:
INSERT INTO Informacion_Almacen (Nombre_Almacen, Ventas, Fecha_inf)
SELECT Nombre_Almacen, SUM(Ventas), Fecha_inf
FROM Informacion_Almacen
GROUP BY Nombre_Almacen, Fecha_inf;
Tenga en cuenta que nosotros especificamos el orden de las columnas para insertar datos en el
ejemplo anterior (la primera columna es Nombre_Almacen, la segunda columna es Ventaa, y la
tercera columna es Fecha_inf). Si bien esto no es absolutamente necesario, es una buena
prctica a seguir, ya que esto puede garantizar que siempre estamos insertando datos en la
columna correcta.

Ejercicios
Asumimos que la tabla Datos_Venta definido arriba contiene los siguientes datos:
Nombre_Almacen ID_Producto Ventas Fecha_inf
Trujillo

101

50

Feb-22-2015

Cusco

120

35

Feb-22-2015

Arequipa

101

40

Feb-22-2015

Chiclayo

80

60

Feb-22-2015

Arequipa

120

20

Feb-22-2015

Chiclayo

101

30

Feb-22-2015

Trujillo

120

35

Feb-23-2015

Cusco

80

25

Feb-23-2015

Trujillo

101

30

Feb-23-2015

Cusco

120

40

Feb-23-2015

Arequipa

101

40

Feb-23-2015

Chiclayo

80

50

Feb-23-2015
4

1) Cul de las siguientes sentencias SQL son vlidas? (Puede haber ms de una respuesta)
a) INSERT INTO Informacion_Almacen SELECT * FROM Datos_Venta WHERE Fecha_inf =
'Feb-22-2015';
b) INSERT INTO Informacion_Almacen SELECT Nombre_Almacen, Ventas, Fecha_inf
FROM Datos_Venta WHERE Fecha_inf = 'Feb-22-2015';
c) INSERT INTO Informacion_Almacen(Ventas, Fecha_inf, Nombre_Almacen) SELECT
SUM(Ventas), Fecha_inf, Nombre_Almacen FROM Datos_Venta WHERE Fecha_inf = 'Feb22-2015';
d) INSERT INTO Informacion_Almacen(Nombre_Almacen, Ventas, Fecha_inf) SELECT
Nombre_Almacen, Ventas, Fecha_inf FROM Datos_Venta WHERE ID_Producto
BETWEEN 80 AND 100;
2) Que datos son insertados en la tabla Informacion_Almacen por la siguiente instruccin
SQL ?
INSERT INTO Informacion_Almacen SELECT Nombre_Almacen, SUM(Ventas), Fecha_inf
FROM Datos_Venta WHERE ID_Producto < 101 GROUP BY Nombre_Almacen, Fecha_inf;
3) Escribir una sentencia SQL que permita recuperar todos los datos de ventas de la
tabla Datos_Venta y almacenar los datos de las ventas totales por da en la
tabla Informacion_Almacen. Cuntas filas sern insertadas?

UPDATE
Una vez que los datos estn en la tabal, podemos tener necesidad de modificar y/o actualizar
dichos datos. Para realizar estas operaciones, podemos usar el comando UPDATE.
La sintaxis para UPDATE es:
UPDATE "nombre_tabla"
SET "columna_1" = [nuevo valor]
WHERE "condicion";
Por ejemplo, supongamos que tenemos la tabla datos_venta, mostrado en la seccin anterior:
Y queremos que and we notice that the sales for Los Angeles on Jan-08-1999 is actually $500
instead of $300, and that particular entry needs to be updated. To do so, we use the following
SQL query:
UPDATE "nombre_tabla"
SET "columna_1" = [nuevo valor]
WHERE "condicion";

En este caso, slo hay una fila que satisface la condicin en la clusula WHERE. Si hay varias filas
que satisfacen la condicin, todos ellos sern modificados. Si no se especifica una clusula
WHERE, se modificarn todas las filas.

Update Multiples Columnas


Es posible utilizar UPDATE para actualizar multiples columnas al mismo tiempo. La sintaxis en
este caso es el siguiente:
UPDATE "nombre"
SET columna_1 = [valor1], columna_2 = [valor2]
WHERE "condicion";
Por ejemplo, digamos que nos damos cuenta que el registro de la entrada del 'Trujillo' tiene la
informacin de las Ventas equivocadas en Fecha_inf. Para solucionarlo, se corre la siguiente
sentencia SQL:
UPDATE Informacion_Almacen
SET Sales = 600, Fecha_inf = 'Jan-15-1999'
WHERE Nombre_Almacen = 'Trujillo';

IMPORTANTE: Cuando se utiliza la instruccin UPDATE, preste especial atencin para


asegurarse de que se especifica la condicin correctamente. De lo contrario, el valor de todas las
filas se puede cambiar.
Exercicios
1) Usando la tabla Informacion_Almacen , que datos se consigna en la tabla luego de ejecutar
la siguiente sentencia SQL?
UPDATE Informacion_Almacen
SET Ventas = 800
WHERE Nombre_Almacen = 'Arequipa';
2) Continuando con el uso de la misma tabla. Cul es el contenido de la tabla despus de
ejecutar la siguiente instruccin SQL?
UPDATE Informacion_Almacen
SET Ventas = 2000
WHERE Nombre_Almacen = 'Lima' AND Fecha_inf = 'Jan-10-1999';
3) Usando la misma tabla. Cul es el contenido de la tabla despues de jecutar la siguiente
instruccin SQL?
UPDATE Informacion_Almacen
SET Ventas = 1000;
6

DELETE FROM
A veces es posible que deseemos utilizar una consulta para eliminar registros de una tabla.
Para ello, podemos utilizar el comando DELETE FROM. La sintaxis para esto es:
DELETE FROM "nombre_tabla"
WHERE "condicion";
Veamos un ejemplo, utilizando la tabla Informacion_Almacen, y decidimos no mantener ningn
tipo de informacin en esta tabla sobre el almacen de Trujillo. Para lograr esto, escribimos el
siguiente cdigo SQL:
DELETE FROM Informacion_Almacen
WHERE Nombre_Almacen=Trujillo;
En este ejemplo, los criterios que utilizamos para determinar qu filas eliminar es simple.
Tambin podemos usar una condicin ms compleja. A continuacin se muestra un ejemplo
donde se utiliza una subconsulta como condicin. Supongamos que tenemos las dos tablas
siguientes:

CONSULTA Y RECUPERACIN DE DATOS


SELECT
Un uso comn de SELECT es seleccionar los datos de las tablas ubicadas en una base de datos.
Inmediatamente, vemos dos palabras clave: necesitamos SELECT para seleccionar
informacion y FROM para sealar la tabla o tablas. Por lo tanto tenemos la estructura bsica de
una consulta SQL:
SELECT <nombre_columna> FROM <nombre_tabla>

Hay tres maneras en que podemos recuperar datos de una tabla:


Recuperar una columna
Recuperar multiples columnas
Recuperar todas las columnas
Usaremos la siguiente tabla para ilustrar los tres casos:

Tabla: Producto
Nombre_producto U_medida Precio Stock
Arroz Campero
Aceite Friol
Leche Gloria
Atn Grated
Mermelada A-1
Yogurt Batido Gloria
Lecha Gloria

Saco x50k 164


Galn 26
Caja x 48 130

120
85
75

Unidad 6.50

99

Kilo 9.60

65

Litro 4.90

89

Caja x 24 70

57

Seleccionar una columna


Para seleccionar una columna simple, especiicamos el nombre de la columna
entre SELECT y FROM como sigue:
SELECT Nombre_producto FROM Producto;
Resultado?....

Seleccionar mltiples columnas


Podemos utilizar la instruccin SELECT para recuperar ms de una columna. Para seleccionar
Nombre_Producto y Precio de la tabla Producto, utilizamos el siguiente SQL:

SELECT Nombre_producto, Precio FROM Producto;


Seleccionar todas las columnas
Hay dos maneras de seleccionar todas las columnas. El primero es usar la lista del nombre de
colmn. La segunda, y muy facil, es usar el smbolo *. Por ejemplo para seleccionar todas las
colmnas de la Tabla Producto, escribimos el siguiente SQL.

SELECT * FROM Producto;


Resultado?....

Ejercicios
Asumir que tenemos una tabla llamada Usuarios con las siguientes columnas:
Tabla: Usuarios
Nombre Columna
Nombre
Apellido
Fecha_Nac
Genero
Fecha_Creacion
Cual(es) de las siguientes instrucciones SQL es incorrect0?
a) SELECT * FROM Usuarios;
b) SELECT Nombre, Genero, Apellido FROM Usuarios;
c) SELECT Nombre, Apellido Usuarios;
d) SELECT All FROM Usuarios;
2. (Verdadero o Falso) En SQL, el orden de las columnas en un instruccin SELECT debe ser el
mismo que el orden de las columnas en la tabla subyacente. Por ejemplo, en la
tabla Usuarios, debe seleccionar Nombre antes de Apellido.
3. (Verdadero o Falso) Las siguientes instrucciones SQL son equivalentes:
a) Select * From Usuarios;
b) SELECT * FROM Usuarios;
1.

CLAUSULA DISTINCT
La palabra clave SELECT nos permite recuperar toda la informacin de una columna (o
columnas) en una tabla. Esto, por supuesto, necesariamente significa que habr redundancias.
Qu pasa si slo queremos seleccionar cada elemento distinto? Esto es fcil de lograr en SQL.
Todo lo que necesitamos hacer es agregar DISTINCT despus de SELECT.
La sintaxis es la siguiente:

SELECT DISTINCT <nombre_columna> FROM <nombre_tabla>


Por ejemplo, para seleccionar todas los distintos nombres de producto en la Tabla Producto:

SELECT DISTINCT Nombre_producto FROM Producto;


Resultado?...
Ejercicios
Para estos ejercicios, asumamos que tenemos una tabla llamada Usuarios con los siguientes
datos.
Tabla: Usuarioss
Nombre Apellido Fecha_Nac Genero Fecha_creacin
Sophia

Lazo

Jan-05-1960

Apr-05-2015

Richard Bravo

Jan-07-1975

Apr-05-2015

Gorky

Santos

Oct-08-1983

Apr-09-2015

Jaime

Gonzales Sep-20-1969

Apr-09-2015

Cecilia

Bernal

Apr-15-2015

Nov-20-1979

Cul de las siguientes sentencias SQL es vlida?


a) SELECT DISTINCT * FROM Usuarios;
b) SELECT DISTINCT Nombre FROM Usuarios;
c) SELECT DISTINCT Nombre, Apellido FROM Usuarios;
2. Cual es el resultado de la siguiente consulta(query)?
SELECT DISTINCT Fecha_creacion From Usuarios;
3. Cual es el resultado de la siguiente consulta(query)?
SELECT DISTINCT Genero, Fecha_Creacin From Usuarios;
1.

10

CLAUSULA WHERE
Podemos utilizar la clusula WHERE para filtrar el conjunto de resultados sobre la base de ciertas
condiciones. La sintaxis para utilizar WHERE en la sentencia SELECT es el siguiente:
SELECT <nombre_columna>
FROM <nombre_tabla>
WHERE <condicion>
"Condicin" puede incluir una nica clusula de comparacin (llamada condicin simple) o
mltiples clusulas de comparacin las cuales se combinan utilizando operadores AND u OR
(condicin compuesta).

Ejemplo 1: Clsula WHERE con un condicion simple


Para seleccionar todos los productos con precios mayores a S/. 100 en la Tabla Producto,
Tabla: Producto
Nombre_producto U_medida Precio Stock
Arroz Campero
Aceite Friol
Leche Gloria
Atn Grated
Mermelada A-1
Yogurt Batido Gloria
Lecha Gloria

Saco x50k 164


Galn 26
Caja x 48 130
Unidad 6.50

120
85
75
199

Kilo 9.60

65

Litro 4.90

120

Caja x 24 70

57

SELECT Nombre_Producto
FROM Producto
WHERE Precio>=100;

Ejemplo 2: Clsula WHERE con operador OR


Par ver todos los datos con precios mayores a S/. 100 o con Stock mayores a 100, usaremos la
siguiente consulta SQL:
SELECT Nombre_Producto
FROM Producto
WHERE Precio>=100 OR Stock>100;
11

Ejemplo 3: Clsula WHERE con operador AND


Par ver todos los datos con precios mayores a S/. 100 y con Stock mayores a 100, usaremos la
siguiente consulta SQL:
SELECT Nombre_Producto
FROM Producto
WHERE Precio>=100 AND Stock>100;
Las condiciones compuestas estn formados por mltiples condiciones simples conectadas por
AND u OR. No hay lmite para el nmero de condiciones simples que pueden estar presentes en
una nica sentencia SQL.

Usando WHERE con UPDATE y DELETE


Adems de la instruccin SELECT, la clusula WHERE tambin se puede utilizar con UPDATE y
DELETE. Ejemplos de cmo utilizar la clusula WHERE con estos dos comandos se vern al
utilizar DELETE Y UPDATE.
Ejercicios
Para estos ejercicios, asumamos que tenemos una tabla llamada Usuarios con los siguientes
datos.
Tabla: Usuarios
Nombre Apellido Fecha_Nac Genero Fecha_creacin
Sophia

Lazo

Jan-05-1960

Apr-05-2015

Richard Bravo

Jan-07-1975

Apr-05-2015

Gorky

Santos

Oct-08-1983

Apr-09-2015

Jaime

Gonzales Sep-20-1969

Apr-09-2015

Cecilia

Bernal

Apr-15-2015

Nov-20-1979

Cual de las siguientes sentencias SQL es vlido? (Puede haber ms de una respuesta)
a) SELECT * FROM Usuarios WHERE Genero = 'M';
b) SELECT * WHERE Genero = 'M' FROM Usuarios;
c) SELECT Genero= 'M' FROM Usuarios;
d) SELECT Genero FROM Usuarios WHERE Apellido = 'Bernal';
2. Cul es el resultado de la siguiente consulta?
SELECT * FROM Usuario WHERE Fecha_Creacion = 'Apr-09-2015';
3. (True or False) La condicin utilizada en la clusula WHERE debe incluir una columna
que forma parte de la clusula SELECT.
Cual de las siguientes sentencias SQL es vlido? (Puede haber ms de una respuesta)
1.

12

a) SELECT Nombre AND ApellidoFROM Usuarios;


b) SELECT Nombre, Apellido FROM Usuarios WHERE Fecha_Creacion > 'Apr-01-2015'
AND Fecha_Nac < 'Jan-01-1980';
c) SELECT Nombre OR Nombre_Usuario FROM Usuarios;
d) SELECT * FROM Usuarios WHERE Apellido= 'Bernal' AND Genero = 'F';
4. Cuantos registros sern devueltos por la siguiente consulta?
SELECT * FROM Usuario WHERE Genero = 'M' AND Fecha_Creacion = 'Apr-09-2015';
5. Cuantos registros sern devueltos por la siguiente consulta?
SELECT * FROM User WHERE Genero = 'M' OR Fecha_Creacion = 'Apr-05-2015';

OPERADOR IN
En SQL, hay dos usos de la palabra clave IN, y se relaciona con la clusula WHERE. Cuando se
utiliza en este contexto, sabemos exactamente el valor de los valores devueltos que queremos
ver por lo menos una de las columnas. La sintaxis para utilizar la palabra clave IN es la siguiente:
SELECT <nombre_columna>
FROM <nombre_tabla>
WHERE <nombre_columna> IN (valor1, valor2, ) ;
El nmero de valores en el parntesis puede ser uno o ms, cada uno con valores separados por
comas. Los valores pueden ser numricos o caracteres. Si slo hay un valor dentro de los
parntesis, esto es equivalente a :
WHERE <nombre_columna> = valor1
Por ejemplo, es posible que desee seleccionar todos los registros de Leche Gloria y Aceite Friol
en la Tabla Producto:
SELECT *
FROM Producto
WHERE Nombre IN (Leche Gloria, Aceite Friol);

13

Ejercicios
Para estos ejercicios, usaremos la tabla Usuarios.
1. Cual de las siguientes sentencias SQL es vlido? (Puede haber ms de una respuesta)
a) SELECT Genero FROM Usuarios IN ('M');
b) SELECT * FROM Usuarios HAVING Genero IN ('M','F');
c) SELECT First_Name, Last_Name FROM Usuarios WHERE Genero IN ('M','F');
d) SELECT DISTINCT First_Name, Last_Name WHERE Genero IN ('M','F');
2. Cuantos registros sern devueltos por la siguiente consulta?
SELECT * FROM Usuarios WHERE Fecha_Creacion IN ('Apr-05-2015','Apr-15-2015');
3. Cuantos registros sern devueltos por la siguiente consulta?
SELET * FROM Usuarios WHERE Genero IN ('M') AND Fecha_Creacion = 'Apr-15-2015');

OPERADOR BETWEEN
El operador BETWEEN se utiliza para seleccionar un rango. La sintaxis para el operador
BETWEEN es el siguiente:
SELECT <nombre_columna>
FROM <nombre_tabla>
WHERE <nombre_columna> BETWEEN valor1 AND valor2 ;
Esto seleccionar todas las filas cuya columna tiene un valor entre 'valor1' y 'valor2'.
Por ejemplo, es posible que desee seleccionar una vista de toda la informacin de ventas de 6 de
enero de 2015 y 30 de junio de 2015, de la siguiente tabla:
Table: Informacion_Almacen
Nombre_Almacen Ventas Fecha_Inf
Lima

3500

Ene-10-2015

Cusco

1250

Mar-07-2015

Arequipa

2300

Jun-08-2015

Lima

1700

Ago-08-2015

Chiclayo

1900

Sep-15-2015

14

Tecleamos:
SELECT *
FROM Informacion_Almacen
WHERE Fecha_Inf BETWEEN (Ene-06-2015 AND Jun-30-2015);
Tengamos en cuenta que la fecha puede ser almacenada en diferentes formatos, por lo que se
deber considerar a la hora de realizar la consulta.
Resultado?....
BETWEEN es un operador inclusivo, lo que significa que 'valor1' y 'valor2' se incluyen en el
resultado. Si queremos excluir 'valor1' y 'valor2' pero incluimos todo, tenemos que cambiar la
consulta a :
SELECT <nombre_columna>
FROM <nombre_tabla>
WHERE nombre_columna> valor1 AND nombre_columna<valor2 ;
SELECT *
FROM Informacion_Almacen
WHERE Ventas NOT BETWEEN 1000 AND 2000);
Tambin podemos usar el operador BETWEEN para excluir un rango de valores al aadir NOT
delante de BETWEEN. En el ejemplo anterior, si queremos mostrar todas las filas donde la
columna Ventas no es entre 1000 y 2000, utilizaremos el siguiente SQL:

Ejercicios:
Para estos ejercicios, asumiremos tener una tabla llamada Ventas_Vendedor con los siguientes
datos:
Tabla: Ventas_Vendedor
Nombre Apellido Fecha_Nac Genero Fecha_Ingreso Total_Ventas
Sofia

Lazo

Jan-05-1960 F

Apr-05-2015

500

Richard Bernal

Jan-07-1975 M

Apr-05-2015

200

Jaime

Santos

Oct-08-1983 M

Apr-09-2015

350

Carlos

Huaman Sep-20-1969 M

Apr-09-2015

80

Julia

Willman Nov-20-1979 F

Apr-15-2015

210

1. Cual de las siguientes sentencias SQL es vlido? (Puede haber ms de una respuesta)
a) SELECT * FROM Ventas_Vendedor WHERE Total_Ventas BETWEEN 200 OR 300;
b) SELECT * FROM Ventas_Vendedor WHERE Total_Ventas IS BETWEEN 200 OR 300;

15

c) SELECT * FROM Ventas_Vendedor WHERE Total_Ventas IS BETWEEN 200 AND 300;


d) SELECT * FROM Ventas_Vendedor WHERE Total_Ventas BETWEEN 200 AND 300;
2. Cuantos registros sern devueltos por la siguiente consulta?
SELECT * FROM Ventas_VendedorWHERE Fecha_Ingreso BETWEEN 'Apr-05-2015' AND
'Apr-10-2015';
3. Cuantos registros sern devueltos por la siguiente consulta?
SELECT * FROM Ventas_VendedorWHERE Genero = 'F' OR Total_Ventas BETWEEN 50
AND 100;

USO DE COMODIN
Hay situaciones en los que queremos hacer coincidir una cadena patrn. Para ello, tendremos
que emplear el concepto de comodn. En SQL, hay dos comodines:
1. % (Signo de porcentaje) representa cero, uno o ms caracteres.
2. _ (Guin bajo) representa exactamente un carcter.
Los comodines se utilizan con la palabra clave LIKE en SQL.
A continuacin se presentan algunos ejemplos de uso de comodines:
'A_Z': Todo cadena que comienza con "A", otro caracter, y al final con la 'Z'. Por ejemplo, 'ABZ'
y 'A8Z' , ambos satisfacen la condicin, mientras que 'AKKZ' no (porque hay dos caracteres
entre A y Z en lugar de uno).
'ABC%': Todas las cadenas que comienzan con 'ABC'. Por ejemplo, 'ABCD' y 'ABCABC', ambos
satisfacen la condicin.
'% XYZ': Todas las cadenas que terminan con "XYZ". Por ejemplo, 'WXYZ' y 'ZZXYZ'
satisfaceran la condicin.
'% AN%': Todas las cadenas que contienen el patrn 'AN' en cualquier lugar. Por ejemplo, 'LOS
ANGELES' y 'SAN FRANCISCO', ambos satisfacen la condicin.
'_AN%': Todas las cadenas que contienen un carcter, luego 'AN', seguida de cualquier otra cosa.
Por ejemplo, "SAN FRANCISCO" satisface la condicin, mientras que 'LOS ANGELES' no
cumplira la condicin.

16

LIKE
LIKE es otra palabra clave que se utiliza en la clusula WHERE. Bsicamente, LIKE permite
hacer una bsqueda basada en un patrn en lugar de especificar exactamente lo que se desea
(como en IN) o especificar un rango de valores (como en BETWEEN).
La sintaxis es la siguiente:
SELECT <nombre_columna>
FROM <nombre_tabla>
WHERE <nombre_columna> LIKE [Patron] ;
[PATRON] frecuentemente consiste de comodines. A continuacin se usan ejemplos para ver
cmo se utiliza el comodn junto a LIKE:

SELECT *
FROM Ventas_Vendedor
WHERE Nombre LIKE J%;

SELECT *
FROM Ventas_Vendedor
WHERE Apellido LIKE %a%;

Ejercicios:
Para estos ejercicios, asumiremos tener una tabla llamada Ventas_Vendedor consignado
anteriormente:
1) Cual de las siguientes sentencias SQL es vlido? (Puede haber ms de una respuesta)
a) SELECT Nombre, Last_Name FROM Ventas_Vendedor WHERE NombreLIKE 'A%'
Apellido LIKE 'W%';
b) SELECT Nombre, Apellido FROM Ventas_Vendedor WHERE NombreLIKE 'J%' AND
Apellido LIKE 'W%';
c) SELECT Nombre, Apellido FROM Ventas_Vendedor NombreLIKE 'J%' AND Apellido LIKE
'W%';
d) SELECT Nombre, Apellido FROM Ventas_Vendedor WHERE NombreLIKE 'J%', Apellido
LIKE 'W%';
2) Cuantos registros sern devueltos por la siguiente consulta? (Asumir que la base de datos
est configurado para ser case-insensitive)
SELECT * FROM Ventas_Vendedor WHERE Apellido LIKE '%l_e%';
17

3) Cuantos registros sern devueltos por la siguiente consulta? (Asumir que la base de datos
est configurado para ser case-insensitive)
SELECT * FROM Ventas_Vendedor WHERE NombreLIKE '%a%' OR Apellido LIKE '%e%';

ORDER BY
Hasta ahora, hemos visto cmo obtener datos de una tabla utilizando comandos SELECT y
WHERE. A menudo, sin embargo, tenemos necesidad de listar la salida en un orden
determinado. Esto podra ser en orden ascendente, en orden descendente, o podra ser sobre la
base de cualquier valor numrico o valor de texto. En tales casos, podemos usar la palabra clave
ORDER BY para lograr nuestro objetivo.
La sintaxis de una instruccin ORDER BY es el siguiente:
SELECT <nombre_columna>
FROM <nombre_tabla>
WHERE [condicion ]
ORDER BY nombre_columna [ASC, DESC] ;
El [ ] significa que la sentencia WHERE es opcional. Sin embargo, si existe una clusula WHERE,
se trata antes de la clusula ORDER BY. ASC significa que los resultados se muestran en orden
ascendente y DESC significa que los resultados sern mostrados en orden descendente. Si no se
especifica ninguno, el valor predeterminado es ASC.
Es posible ordenar por ms de una columna. En este caso, la clusula ORDER BY anterior se
convierte en:
ORDER BY nombre_columna1 [ASC, DESC], nombre_columna2 [ASC, DESC] ;

Suponiendo que elegimos orden ascendente para ambas columnas, la salida se ordenar en
orden ascendente de acuerdo con la columna 1. Si hay un empate en el valor de la columna 1, a
continuacin, ordenar en orden ascendente por la columna 2.
Por ejemplo, es posible que desee mostrar el contenido de la tabla Informacin_Almacen por
ventas, en orden descendente:

18

SELECT Nombre_Almacen, Fecha_Inf


FROM Informacion_Almacen
ORDER BY Ventas DESC ;
Adems del nombre de columna, tambin podemos utilizar la posicin de la columna (basado
en la consulta SQL) para indicar qu columna queremos aplicar la clusula ORDER BY. La
primera columna es 1, segunda columna es 2, y as sucesivamente. En el ejemplo anterior, vamos
a lograr los mismos resultados mediante la siguiente consulta SQL:
SELECT Nombre_Almacen, Fecha_Inf
FROM Informacion_Almacen
ORDER BY 2 DESC ;
La columna (s) que utilizamos para ordenar el resultado no es necesario que est en la clusula
SELECT. Por ejemplo, el siguiente cdigo SQL:
SELECT Nombre_Almacen
FROM Informacion_Almacen
ORDER BY Ventas DESC ;
funciona bien y dar el resultado esperado.
Tambien es posible ordenar el resultado por una expresin. Por ejemplo, en la siguiente tabla:
Table Ventas_Producto
Producto_ID Precio Cantidad
1

10

15

25

Podemos usar la siguiente consulta SQL para ordenar el resultado por ingresos (definido como
Precio * Unidades):
SELECT Producto_ID, Precio*Cantidad Venta
FROM Ventas_Producto
ORDER BY Precio * Cantidad DESC ;
Exercises
For these exercises, assume we have a table called User_Sales with the following data:
Table User_Sales

19

First_Name Last_Name Birth_Date Gender Joi n_Date

Total_Sales

Sophie

Lee

Jan-05-1960 F

Apr-05-2015

500

Richard

Brown

Jan-07-1975 M

Apr-05-2015

200

Jamal

Santo

Oct-08-1983 M

Apr-09-2015

350

Casey

Healy

Sep-20-1969 M

Apr-09-2015

80

Jill

Wilkes

Nov-20-1979 F

Apr-15-2015

210

1. Which of the following SQL statement is valid? (There can be more than one answer)
a) SELECT * FROM User_Sales ORDER BY Total_Sales;
b) SELECT * FROM User_Sales ORDER BY Last_Name DESC;
c) SELECT * FROM User_Sales ORDER BY First_Name WHERE Total_Sales > 100;
d) SELECT * FROM User_Sales ORDER BY Last_Name, First_Name;
2. Cul es el resultado de la siguiente consulta?
SELECT * FROM User_Sales WHERE Join_Date IN ('Apr-05-2015','Apr-15-2015') ORDER
BY Total_Sales;
3. Cul es el resultado de la siguiente consulta?
SELECT * FROM User_Sales ORDER BY Join_Date DESC, Total_Sales;

GROUP BY
La clusula GROUP BY se usa para generar valores de agregado para cada fila del conjunto de
resultados. Cuando se usan sin una clusula GROUP BY, las funciones de agregado(SUM, AVG,
COUNT, MAX, MIN) slo devuelven un valor de agregado para una instruccin SELECT.
Recuerdemos que se utiliza la palabra clave SUM para calcular las ventas totales para todas las
tiendas? Qu pasa si queremos calcular las ventas totales de cada tienda? Bueno, tenemos que
hacer dos cosas: En primer lugar, tenemos que asegurarnos de que seleccionamos el nombre de
la tienda, as como las ventas totales. En segundo lugar, tenemos que asegurarnos de que todas
las cifras de ventas se agrupan por las tiendas.
La sintaxis SQL correspondiente es:
SELECT nombre_columna1 SUM (nombre_columna2)
FROM nombre_tabla
GROUP BY nombre_columna1 ;
Ilustramos su uso con la tabla : Informacion_Almacen

20

Tabla: Informacion_Almacen
Nombre_Almacen Ventas Fecha_Inf
Lima

3500

Ene-10-2015

Cusco

1250

Mar-07-2015

Arequipa

2300

Jun-08-2015

Lima

1700

Ago-08-2015

Chiclayo

1900

Sep-15-2015

Queremos encontrar las ventas totales de cada tienda. Para ello, deberemos realizar la
consulta:
SELECT Nombre_Almacen SUM (Ventas)
FROM Informacion_Almacen
GROUP BY Nombre_Almacen ;

GROUP BY [Varias Columnas]


En el ejemplo anterior, slo hay una columna asociada con GROUP BY. Es posible tener dos
columnas o ms asociados con GROUP BY.
La palabra clave GROUP BY se utiliza cuando estamos seleccionando varias columnas de una
tabla (o tablas) y al menos un operador aritmtico aparece en la sentencia SELECT. Tales
operadores incluyen COUNT, SUM, MAX, MIN y AVG. Cuando eso sucede, tenemos que GROUP
BY todas las otras columnas seleccionadas, es decir, todas las columnas excepto la (s) operados
por el operador aritmtico. Como tal, es importante tener en cuenta que es posible que
tengamos dos columnas o ms asociado con GROUP BY. La sintaxis general es la siguiente:
SELECT "column_name1", "column_name2", ... "column_nameN",
Function("column_nameN+1")
FROM "table_name"
GROUP BY "column_name1", "column_name2", ... "column_nameN";
GROUP BY MONTH / DATE / WEEK

Un uso comn de la funcin GROUP BY est en manejo de un perodo de tiempo, que puede ser
meses, semanas, das, o incluso horas. Este tipo de consulta se combina a menudo con ORDER
BY palabra clave para proporcionar un resultado de la consulta que muestra una serie de tiempo.

21

Por ejemplo, para encontrar las ventas totales por da de la tabla Informacion_Almacen,
utilizamos el siguiente SQL:
SELECT fecha_inf SUM (Ventas)
FROM Informacion_Almacen
GROUP BY fecha_inf ;

Ejercicios
Para estos ejercicios, asumimos que tenemos una tabla llamada Ventas_Region con los
siguientes datos:
Tabla Ventas_Region
Region Ao Pedidos Total_Ventas
Oeste 2013 1560

325000

Oeste 2014 1820

380000

Norte 2013 790

148000

Norte 2014 995

185000

Este

2013 1760

375000

Este

2014 2220

450000

Sur

2013 1790

388000

Sur

2014 1695

360000

Cul de las siguientes ordenes es correcta para la sentencia SQL?


a) SELECT...FROM...WHERE...GROUP BY...ORDER BY
b) SELECT...FROM...ORDER BY...WHERE...GROUP BY
c) SELECT...FROM...WHERE...ORDER BY...GROUP BY
d) SELECT...WHERE...FROM...GROUP BY...ORDER BY
2. Escriba una sentencia SQL que calcule la cantidad total de las ventas en soles para cada
regin. Cul es el resultado?
3. Escriba una sentencia SQL que calcule el promedio anual de las ventas en soles solo
para la regin Este y para la regin oeste. Cul es el resultado?
4. Escriba una sentencia SQL que calcule la cantidad de pedidos atendidos durante el ao
2013 y durante el ao 20104. Cul es el resultado?
1.

HAVING
Otra cosa que con frecuencia se desea hacer, es limitar la salida sobre la base de la suma
correspondiente (o cualquier otra funcin de agregado). Por ejemplo, podramos querer ver
solamente las tiendas con ventas de ms de S/. 1.500. En lugar de utilizar la clusula WHERE en
22

la sentencia SQL, podemos utilizar la clusula HAVING, que est reservado para funciones de
agregado. La clusula HAVING se coloca generalmente cerca del final de la instruccin SQL, y
una declaracin de SQL con la clusula HAVING puede o no incluir la clusula GROUP BY.
La sintaxis para HAVING es:
SELECT ["nombre_columna1"], Funcion("nombre_columna2")
FROM "nombre_tabla"
[GROUP BY "nombre_columna1"]
HAVING (condicion de funcion aritmetica);
Nota: es posible seleccionar cero, una, o ms columnas, adems de la funcin de agregado. Si
seleccionamos la columna cero, no hay necesidad de la clusula GROUP BY.
En nuestro ejemplo, tabla Informacion_Almacen,
Tabla: Informacion_Almacen
Nombre_Almacen Ventas Fecha_Inf
Lima

3500

Ene-10-2015

Cusco

1250

Mar-07-2015

Arequipa

2300

Jun-08-2015

Lima

1700

Ago-08-2015

Chiclayo

1900

Sep-15-2015

Nosotros podemos escribir:

SELECT Nombre_Almacen, SUM(Ventas)


FROM Informacion_Almacen
GROUP BY Nombre_Almacen
HAVING SUM(Ventas) > 1500;

23

Ejercicios
Para estos ejercicios, asumimos que tenemos una tabla llamada Ventas_Region con los
siguientes datos:
Tabla Ventas_Region
Region Ao Pedidos Total_Ventas
Oeste 2013 1560

325000

Oeste 2014 1820

380000

Norte 2013 790

148000

Norte 2014 995

185000

Este

2013 1760

375000

Este

2014 2220

450000

Sur

2013 1790

388000

Sur

2014 1695

360000

Cul de las siguientes ordenes es correcta para la sentencia SQL?


a) SELECT...FROM...ORDER BY...WHERE...HAVING
b) SELECT...FROM...WHERE...ORDER BY...HAVING
c) SELECT...WHERE...FROM...HAVING...ORDER BY
d) SELECT...FROM...WHERE...HAVING...ORDER BY
2. Cual es el resultado de la siguiente sentecia SQL?
SELECT Region, SUM(Pedidos) FROM Ventas_Region GROUP BY Region HAVING
SUM(Pedidos) > 2500;
3. Cual es el resultado de la siguiente sentencia SQL?
SELECT Region, SUM(Pedidos) FROM Ventas_Region WHERE Total_Ventas < 385000
GROUP BY Region HAVING SUM(Pedidos) > 2500;
1.

ALIAS
A continuacin centraremos nuestra atencin en el uso de alias. Hay dos tipos de alias que se
utilizan con mayor frecuencia: alias de columna y alias de tabla.
a) Alias de columna para ayudar a la organizacin de la salida. En el ejemplo anterior, cada vez
que vemos las ventas totales, que est catalogado como SUM (Ventas). Si bien esto es
comprensible, podemos imaginar casos en que la cabecera de la columna puede ser
complicado (sobre todo si se trata de varias operaciones aritmticas). El uso de un alias de
columna sera muy util para que la salida sea mucho ms legible.

24

b) El segundo tipo de alias es el alias de la tabla. Esto se logra al poner un alias directamente
despus del nombre de la tabla en la clusula FROM. Esto es conveniente cuando se desea
obtener informacin de dos tablas separadas (el trmino tcnico es "realizar join '). La
ventaja de utilizar un alias de tabla al hacer joins es evidente cuando hablamos de union.
Sintaxis, tanto para los alias de columna y de tabla:
SELECT "alias_table"."nombre_columna1" "alia_column"
FROM "nombre_tabla" "alias_tabla";
En pocas palabras, los dos tipos de alias se colocan directamente despus del elemento al que
se desea asignar el alias, separado por un espacio en blanco. De nuevo utilizamos nuestra tabla,
Infirmacion_Almacen. Utilizaremos el mismo ejemplo mostrado en la seccin de GroupBy,
excepto que hemos puesto tanto en el alias de columna y el alias de tabla:
SELECT A1.Nombre_Almacen Almacen SUM (A1.Ventas) Total Ventas
FROM Informacion_Almacen A1
GROUP BY A1.Nombre_Almacen ;
Tenga en cuenta la diferencia en el resultado: los ttulos de columna ahora son diferentes. Ese
es el resultado de usar el alias de columna. En lugar de la "Sum (Ventas)" un tanto crptica, ahora
tenemos "Total Ventas", que es mucho ms comprensible, como el encabezado de la columna.
La ventaja de usar un alias de tabla no es aparente en este ejemplo. Sin embargo, ellos se
pondrn de manifiesto cuando se realizenJoin(relaciones entre tablas o uniones).
AS
La palabra clave que se utiliza para asignar un alias a la columna o una tabla es AS. Se inserta
entre el nombre de la columna y el alias de columna o entre el nombre de la tabla y el alias de
tabla. La sintaxis para utilizar AS es el siguiente:

SELECT "alias_table"."nombre_columna1" AS "alia_column"


FROM "nombre_tabla" AS "alias_tabla";

Por lo tanto el anterior ejemplo podemos escribirlo de la siguientes manera:


SELECT A1.Nombre_Almacen Almacen SUM (A1.Ventas) AS Total Ventas
FROM Informacion_Almacen AS A1
GROUP BY A1.Nombre_Almacen ;
25

Hay una diferencia entre entre usar un alias sin AS y con AS en SQL? La respuesta es no, no hay
ninguna diferencia funcional, ya que ambas versiones lograrn exactamente lo mismo. El uso de
AS es simplemente una manera ms explcita de mencionar el alias.

FUNCIONES SQL
SQL implementa varias funciones aritmticas:
AVG: Promedio de una columna.
COUNT: Numero de registros.
MAX: Mayor valor de una columna.
MIN: Minimo valor de una columna.
SUM: Suma de la columna.
Adems de usar funciones, tambin es posible utilizar SQL para realizar tareas sencillas tales
como adicin (+) y resta (-). Para los datos de tipo carcter, hay tambin varias funciones de
cadenas disponibles, como la concatenacin, trim(recortar), y funciones de
Substring(subcadena).
La sintaxis para utilizar las funciones es:
SELECT "tipo_de_funcion" ("nombre_columna")
FROM "nombre_tabla";

Average
SQL utiliza la funcin AVG () para calcular el promedio de los datos de una columna. La sintaxis
para utilizar esta funcin es:
SELECT AVG ("nombre_columna")
FROM "nombre_tabla";
Por ejemplo, si queremos obtener el promedio de todas las ventas de la siguiente tabla:
Tabla Informacion_Almacen
Nombre_Almacen Ventas Fecha_inf
Lima

1500 Ene-05-2015

Cusco

250 Ene-07-2015

Lima

300 Ene-08-2015

Arequipa

700 Ene-08-2015

26

La instruccin SQL ser:


SELECT AVG (Ventas)
FROM Informacion_Almacen;
Resultado:
AVG(Ventas)
687.5
687.5 representa el promedio de todas las ventas: (1500 + 250 + 300 + 700) / 4.

Count
Otra funcin aritmtica es COUNT. Esta funcin nos permite contar el nmero de filaa de una
determinada tabla. La sintaxis es:
SELECT COUNT ("nombre_columna")
FROM "nombre_tabla";

FUNCIONES SQL DE CADENA (STRING FUNCTIONS)


En esta seccin, se tgratar las funciones de cadena ms comunes que se observan en SQL.
Diferentes RDBMS pueden emplean diferentes funciones de cadena, y tambin puede haber
diferencias en la sintaxis para cada RDBMS incluso cuando la llamada a la funcin es la misma.

Funcin de conversin (CAST)


En muchos casos, una base de datos convertir automticamente un tipo de datos a otro cuando
sea necesario. Por otro lado, cuando se desea especificar explcitamente qu tipo de datos se
debe cambiarse, en estos casos, se puede utilizar la funcin CAST.
La sintaxis de la funcin CAST es el siguiente:
CAST (expression AS [tipo de datos])
donde [Tipo de datos] es un tipo de datos vlido en el RDBMS en el cul se est trabajando.
Veamos algunos ejemplos para ver cmo se utiliza la funcin CAST. Supongamos que tenemos
la siguiente tabla:

27

28

Potrebbero piacerti anche