Vous êtes sur la page 1sur 59

El LMD es la parte del SQL que nos permite manipular datos (Lenguaje de Manipulacin de Datos).

Tenemos tres acciones posibles para manipular: Insertar datos (INSERT), Actualizar datos (UPDATE), Borrar datos (DELETE) y seleccionar datos (SELECT).

INSERT: sentencia para agregar una o mas tuplas a una tabla. tuplas INSERT INTO Nombre tabla ( columnas , values ( valores , , INSERT INTO nombre_tabla (columnas) values (valores), (mas valores); ) )

INSERT:

INSERT INTO ('RAS','RAAS');

departamento

VALUES

INSERT INTO departamento(depto, nombre) VALUES ('GRA','GRANADA'); INSERT INTO departamento (depto) VALUES ('LEO'), (CHI);

UPDATE: sentencia para modificar una o mas tuplas a una tabla. UPDATE Nombre tabla = , and /or UPDATE nombre_tabla WHERE condicin; SET columna=valor valor set where condicin

columna

UPDATE: UPDATE departamento SET nombre='REGIONA', depto='RAAS' WHERE depto='RAS';

UPDATE departamento SET depto=GRN WHERE depto=GRA AND nombre=GRANADA ;

DELETE: sentencia para borrar una o mas tuplas a una tabla. DELETE Nombre tabla condicin and /or

DELETE FROM depto=LEO';

departamento

WHERE

SELECT: sentencia recuperar una o varias tuplas de una o varias tablas, pudiendo tener una o varias condiciones. reunion condicin * SELECT and Nombre /or columna tabla , , agrupados ordenados

SELECT: SELECT * FROM departamento; SELECT depto FROM departamento; SELECT depto, nombre FROM departamento WHERE depto=GRN;

agrupados La agrupacin es la funcin que se encarga de formar grupos de las tuplas de una tabla. Estos grupos los hace basndose en columnas que se especifican. group by Nombre columna ,

Funciones con agrupacin. count: cuenta cada una de las filas del resultado de una consulta. Puede ser sobre toda la fila (*), o una columna(nombre_columna). sum: Suma los valores de una columna, si algunos de las columnas tienen el valor null el resultado ser null. Todos los valores deben de ser numricos. avg: Calcula la media de los valores de la columnas. Si alguno de los valores tiene null el resultado sera null. Todos los valores deben de ser numricos. min: Regresa el valor mnimo de las columnas. max: Regresa el valor mximo de las columnas.

ordenamiento El ordenamiento es la funcin que se encarga de ordenas las tuplas de una tabla o resultados de un resultado de una consulta.

order by

Nombre columna ,

ASC/DESC

La operacin SELECT es la encargada de mostrar aquellos valores que tenemos en la base de datos. Se podra considerada la mas compleja y la esencia de las bases de datos. Veremos la relacin de esta consulta con lo que es el algebra relacional.

SELECT DISTINCT nombre FROM Cliente; SELECT DISTINCT nombre, apellido FROM Cliente; Estas dos sentencias SQL nos regresaran los nombres (en el caso de la primera sentencia) y el apellido (en el caso de la segunda), pero no mostrara dos o mas clientes con el mismo nombre.
NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez NOMBRE Juan Rebeca APELLIDO Fonseca lvarez

SELECT ALL nombre FROM Cliente; SELECT ALL nombre, apellido FROM Cliente; Estas dos sentencias SQL nos regresaran los nombres (en el caso de la primera sentencia) y el apellido (en el caso de la segunda), sin importar que el nombre este repetido. Esta caracterstica esta por defecto aunque no utilicemos ALL.
NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez NOMBRE Juan APELLIDO Fonseca

Rebeca
Juan

lvarez
Melndez

Dentro del SELECT se puede poner operaciones matemticas, lgicas, de renombre, valores estticos, ETC. SELECT nombre, saldo-100 FROM Cliente;
NOMBRE
Juan Rebeca Juan

APELLIDO
Fonseca lvarez Melndez

Saldo
2500 500 130

NOMBRE
Juan Rebeca Juan

Saldo-100
2400 400 30

SELECT nombre, saldo-100 as valor FROM Cliente;


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130 NOMBRE Juan Rebeca Juan valor 2400 400 30

SELECT nombre, son clientes FROM Cliente;


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130 NOMBRE Juan Rebeca Juan Son clientes Son clientes Son clientes Son clientes

SELECT nombre, saldo-100 as valor, 100 as quitado


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130 NOMBRE Juan Rebeca Juan valor 2400 400 30 Quitado 100 100 100

Dentro de la seccin SELECT podemos colocar un condicional a los valores que mostraremos. Este condicional es la sentencia IF. IF(condicion, en caso verdadero, de lo contrario) SELECT nombre, IF(salario<200,Muy poco, valor) as valor FROM Cliente;
NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130 NOMBRE Juan Rebeca Juan valor 2500 500 Muy poco

En la seccin FROM del SELECT es donde pondremos los objetos de donde queremos mostrar los valores. Si tenemos lo siguiente: SELECT * FROM clientes; Estaremos mostrando los valores del objeto, en este caso tabla, clientes. Tambin podemos mostrar valores de mas de un objeto. SELECT * FROM clientes, cuenta; Esto producira un producto cartesiano. En el caso que no se desee el producto cartesiano se puede incluir una clausula WHERE.

La seccin WHERE del SELECT es la encargada de restringir los valores que se muestran como resultado de una consultan. Existen tres formas de condicionar valores, una es teniendo el valor exacto (x=0), otra es teniendo parte del valor (nombre=j%) y la ultima seria con un rango de valores. SELECT * FROM Cliente WHERE saldo=130

NOMBRE

APELLIDO

Saldo

NOMBRE Juan

APELLIDO Melndez

Saldo 130

Juan
Rebeca Juan

Fonseca
lvarez Melndez

2500
500 130

SELECT * FROM Cliente WHERE nombre LIKE %a%;


NOMBRE Juan APELLIDO Fonseca Saldo 2500 NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130

Rebeca
Juan

lvarez
Melndez

500
130

SELECT * FROM Cliente WHERE Saldo<300


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130 NOMBRE Juan APELLIDO Fonseca Saldo 2500

Rebeca

lvarez

500

SELECT * FROM Cliente WHERE nombre in (Juan,Maria);


NOMBRE Juan APELLIDO Fonseca Saldo 2500 NOMBRE Juan Juan APELLIDO Fonseca Melndez Saldo 2500 130

Rebeca
Juan

lvarez
Melndez

500
130

SELECT * FROM Cliente WHERE AND Saldo=130;


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130 NOMBRE

Saldo=2500
Saldo

APELLIDO

SELECT * FROM Cliente WHERE Saldo=2500 OR Saldo=130;


NOMBRE Juan APELLIDO Fonseca Saldo 2500 NOMBRE Juan Juan APELLIDO Fonseca Melndez Saldo 2500 130

Rebeca
Juan

lvarez
Melndez

500
130

SELECT * FROM Cliente WHERE (Saldo=2500 OR Saldo=130) AND nombre=Rebeca;


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130 NOMBRE APELLIDO Saldo

SELECT * FROM Cliente WHERE nombre NOT IN (Juan,Maria);


NOMBRE Juan APELLIDO Fonseca Saldo 2500 NOMBRE APELLIDO Saldo

Rebeca

lvarez

500

Rebeca
Juan

lvarez
Melndez

500
130

SELECT * FROM Cliente Saldo=2500 AND Saldo=130;


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130

WHERE
APELLIDO
Melndez

NOT
Saldo
130

NOMBRE
Juan

SELECT * FROM Cliente ORDER BY saldo;


NOMBRE
Juan Rebeca Juan

APELLIDO
Fonseca lvarez Melndez

Saldo
2500 500 130

NOMBRE Juan Rebeca

APELLIDO Melndez lvarez

Saldo 130 500

Juan

Fonseca

2500

SELECT * FROM Cliente ORDER BY saldo ASC;


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130 NOMBRE Juan Rebeca Juan APELLIDO Melndez lvarez Fonseca Saldo 130 500 2500

SELECT * FROM Cliente ORDER BY saldo DESC;


NOMBRE
Juan Rebeca Juan

APELLIDO
Fonseca lvarez Melndez

Saldo
2500 500 130

NOMBRE
Juan Rebeca Juan

APELLIDO
Fonseca lvarez Melndez

Saldo
2500 500 130

SELECT * FROM Cliente ORDER BY saldo, Apellido ASC;


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 130 130 NOMBRE Rebeca Juan Juan APELLIDO lvarez Melndez Fonseca Saldo 130 130 2500

SELECT * FROM Cliente WHERE apellido =Juan ORDER BY saldo;


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 500 130 NOMBRE Juan Juan APELLIDO Melndez Fonseca Saldo 130 2500

SELECT * FROM Cliente ORDER BY saldo, Apellido ASC;


NOMBRE Juan Rebeca Juan APELLIDO Fonseca lvarez Melndez Saldo 2500 130 130 NOMBRE Rebeca Juan Juan APELLIDO lvarez Melndez Fonseca Saldo 130 130 2500

SELECT * FROM Cliente GROUP BY sexo;


NOMBRE Juan Juan Rebeca APELLIDO Fonseca Melndez lvarez Sexo M M F NOMBRE Juan Juan NOMBRE Rebeca APELLIDO Fonseca Melndez APELLIDO lvarez Sexo M M Sexo F

NOMBRE Juan Rebeca

APELLIDO Fonseca lvarez

Sexo M F

SELECT count(*) FROM Cliente GROUP BY sexo;


NOMBRE Juan Juan Rebeca APELLIDO Fonseca Melndez lvarez Sexo M M F

NOMBRE Juan Juan NOMBRE Rebeca

APELLIDO Fonseca Melndez APELLIDO lvarez

Sexo M M Sexo F COUNT(*) 2 1

SELECT sexo, count(*) as cantidad FROM Cliente GROUP BY sexo;


NOMBRE Juan Juan Rebeca APELLIDO Fonseca Melndez lvarez Sexo M M F

NOMBRE Juan Juan NOMBRE

APELLIDO Fonseca Melndez APELLIDO

Sexo M M Sexo Sexo cantidad

M
F

2
1

Rebeca

lvarez

SELECT * FROM Cliente GROUP BY Apellido, sexo;


NOMBRE Juan Juan APELLIDO Fonseca Melndez Sexo M M NOMBRE Juan NOMBRE APELLIDO Fonseca APELLIDO Sexo M Sexo

Rebeca Mara NOMBRE


Juan Mara NOMBRE Juan NOMBRE Rebeca

lvarez Fonseca APELLIDO


Fonseca Fonseca APELLIDO Melndez APELLIDO lvarez

F F Sexo
M F Sexo M Sexo F

Mara
NOMBRE Juan NOMBRE Rebeca

Fonseca
APELLIDO Melndez APELLIDO lvarez

F
Sexo M Sexo F

NOMBRE Juan Juan Rebeca

APELLIDO Fonseca Melndez lvarez

Sexo M M F

Cedula 09980 00998

Consulta Count(*) Count(nombre) Count(Cedula)

Resultado 3 3 2

Cuando hacemos el conteo con count, sobre un atributo que contiene valores nulos, el count no los cuenta.

NOMBRE Juan Juan Rebeca

APELLIDO Fonseca Melndez lvarez

Salario 100 100 200

edad 30 25

Consulta sum(*) Sum(nombre)

Resultado Produce error 0

Solo se puede sumar (sum) valores numricos. Si algn valor es null es ignorado.

Sum(salario) Sum(edad)

400 55

NOMBRE Juan Juan Rebeca

APELLIDO Fonseca Melndez lvarez

Salario 100 100 200

edad 30 25

Consulta AVG(*) AVG(nombre)

Resultado Produce error 0

AVG(salario) AVG(edad)

133.33 27.5

Solo se puede calcular la media (AVG) de valores numricos. Si algn valor es null es ignorado.

NOMBRE Juan Juan Rebeca

APELLIDO Fonseca Melndez lvarez

Salario 100 100 200

edad 30 25

Consulta MIN(*) MIN(nombre)

Resultado Produce error Juan

MIN(salario) MIN(salario)

100 25

Solo se puede sacar el mnimo (min) de todo tipo de valores. Si algn valor es null es ignorado.

NOMBRE Juan Juan Rebeca

APELLIDO Fonseca Melndez lvarez

Salario 100 100 200

edad 30 25

Consulta MAX(*) MAX(nombre)

Resultado Produce error Rebeca

MAX(salario) MAX(salario)

200 30

Solo se puede sacar el mnimo (min) de todo tipo de valores. Si algn valor es null es ignorado.

Limit sirve para colocar un rango de filas que deseo que me muestre. SELECT * FROM cliente LIMIT 2;
NOMBRE Juan Juan Rebeca Mara APELLIDO Fonseca Melndez lvarez Fonseca Sexo M M F F NOMBRE APELLIDO Sexo

Juan
Juan

Fonseca
Melndez

M
M

SELECT * FROM cliente LIMIT 0,2;


NOMBRE Juan Juan Rebeca Mara APELLIDO Fonseca Melndez lvarez Fonseca Sexo M M F F NOMBRE APELLIDO Sexo

Juan
Juan

Fonseca
Melndez

M
M

Limit sirve para colocar un rango de filas que deseo que me muestre. SELECT * FROM cliente LIMIT 1,2;
NOMBRE Juan Juan Rebeca Mara APELLIDO Fonseca Melndez lvarez Fonseca Sexo M M F F NOMBRE APELLIDO Sexo

Juan
Rebeca

Melndez
lvarez

M
F

SELECT apellido, count(*) FROM cliente group by nombre order by apellido LIMIT 1,2;
NOMBRE Juan Juan Rebeca
Mara APELLIDO Fonseca Fonseca

APELLIDO Fonseca Melndez lvarez


Fonseca Count(*) 1 2

Sexo M M F
F

NOMBRE

APELLIDO Fonseca lvarez APELLIDO Fonseca APELLIDO lvarez

Sexo M M Sexo F Sexo F

GROUP BY

Juan Juan NOMBRE Mara NOMBRE Rebeca

COUNT(*)
APELLIDO Count(*) 1 1 2

LIMIT

lvarez Fonseca Fonseca

ORDER BY

APELLIDO Fonseca Fonseca lvarez

Count(*) 2 1 1

La palabra reservada UNION nos sirve para unir los resultados de dos consulta en un solo resultado. (SELECT nombre FROM cliente) UNION (SELECT apellido FROM cliente);
NOMBRE Juan Juan NOMBRE Juan Juan Rebeca Mara APELLIDO Fonseca Melndez lvarez Fonseca Sexo M M F F APELLIDO Fonseca Melndez lvarez Fonseca Rebeca Mara

UNION

NOMBRE Juan Rebeca Mara Fonseca Melndez

lvarez

Con la palabra UNION se puede utilizar ALL y DISTINCT. DISTINCT es su comportamiento por defecto. (SELECT nombre FROM cliente) UNION ALL (SELECT apellido FROM cliente);
NOMBRE Juan Juan NOMBRE Juan Juan Rebeca Mara APELLIDO Fonseca Melndez lvarez Fonseca Sexo M M F F APELLIDO Fonseca Melndez lvarez Fonseca Rebeca Mara NOMBRE Juan Juan

UNION ALL

Rebeca
Mara Fonseca Melndez lvarez Fonseca

Con la palabra UNION se puede utilizar ALL y DISTINCT. DISTINCT es su comportamiento por defecto. (SELECT nombre FROM cliente ORDER BY apellido) UNION ALL (SELECT apellido FROM cliente) ORDER BY nombre;NOMBRE NOMBRE
Rebeca NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca Sexo M F M F Juan Mara lvarez Fonseca Fonseca Juan Juan Mara Melndez Rebeca

Juan
APELLIDO Fonseca lvarez Melndez Fonseca

Las sub-consultas son consultas que se incluyen dentro de otra consultas. A pesar que no es recomendable realizar, pero dentro de una subconsulta se puede anidar otra sub-consulta y as sucesivamente. Para unir la sub-consulta con la consulta se puede hacer en la clausula WHERE a travs de operadores de comparacin de valor =, <, >, <> o de operadores de comparacin de conjuntos ANY, SOME, ALL, IN, EXISTS.

Los operadores de sub-consulta de valor son =, >, < y <>. Se les denomina as porque si son usados para tener una sub-consulta en el WHERE, la subconsulta deber retornar solo un valor o provocara error. SELECT nombre FROM cliente WHERE apellido = (SELECT apellido FROM cliente);
NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca Sexo M F M F

SubConsulta
APELLIDO Fonseca lvarez Melndez Fonseca

El resultado de la SubConsulta tiene que ser 1 sola fila.

SELECT * FROM cliente WHERE edad > (SELECT AVG(edad) FROM cliente);
NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca 30 edad 30 15 AVG(edad)

SubConsulta
25

NOMBRE Juan Mara

APELLIDO Fonseca Fonseca

edad 30 30

En los casos en que la consulta inevitablemente regrese mas de una fila. Podemos utilizar los operados anteriores, y en algunos casos combinarlos con los operadores de valor. IN: Sirve para encontrar al menos una coincidencia en la sub-consulta. ANY SOME: Ambas funcionan de la misma forma. Deben de ser usadas siempre en combinacin con operadores de valor (=,<,>,<>, LIKE). Y se encarga de encontrar al menos una entrada valida. ALL: Debe ser usada siempre con operadores de valor. Y se encarga de que todas sean entradas validas.

SELECT * FROM cliente WHERE apellido IN (SELECT apellido FROM cliente WHERE edad>25); SubNOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca edad 30 20 26 24

Consulta
APELLIDO

Fonseca
Melndez

NOMBRE Juan Mara Juan

APELLIDO Fonseca Fonseca Melndez

edad 30 24 25

SELECT * FROM cliente WHERE edad <ANY (SELECT edad FROM cliente);
SubConsulta
NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca edad 30 20 26 24 edad 30 20 26 24

NOMBRE Rebeca Juan Mara

APELLIDO lvarez Melndez Fonseca

edad 20 26 24

SELECT * FROM cliente WHERE edad >SOME (SELECT edad FROM cliente);
SubConsulta
NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca edad 30 20 26 24 edad 30 20 26 24

NOMBRE
Juan Juan Mara

APELLIDO
Fonseca Melndez Fonseca

edad
30 26 24

SELECT * FROM cliente WHERE edad (SELECT edad FROM cliente);


SubConsulta
NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca edad 30 20 26 24 edad 30 20 26 24

>=ALL

NOMBRE Juan

APELLIDO Fonseca

edad 30

SELECT * FROM cliente WHERE EXISTS (SELECT * FROM cliente WHERE edad=40);
SubConsulta
NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca edad 30 20 26 24 NOMBRE APELLIDO edad NOMBRE APELLIDO edad

SELECT * FROM cliente WHERE NOT EXISTS (SELECT * FROM cliente WHERE edad=40);
SubConsulta
NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca edad 30 20 26 24 NOMBRE APELLIDO edad

NOMBRE Juan Rebeca Juan Mara

APELLIDO Fonseca lvarez Melndez Fonseca

edad 30 20 26 24

SELECT * FROM cliente as cl WHERE apellido IN (SELECT apellido FROM cliente WHERE edad>cl.edad);
SubConsulta
APELLIDO

NOMBRE Juan Rebeca Juan Mara

APELLIDO Fonseca lvarez Melndez Fonseca

edad 30 20 26 24 NOMBRE

cl.edad=30

APELLIDO

edad

Fonseca IN ()

SELECT * FROM cliente as cl WHERE apellido IN (SELECT apellido FROM cliente WHERE edad>cl.edad);
SubConsulta
APELLIDO
Fonseca Melndez Fonseca

NOMBRE Juan Rebeca Juan Mara

APELLIDO Fonseca lvarez Melndez Fonseca

edad 30 20 26 24

cl.edad=20

NOMBRE

APELLIDO

edad

lvarez IN (Fonseca,Melndez,Fonseca)

SELECT * FROM cliente as cl WHERE apellido IN (SELECT apellido FROM cliente WHERE edad>cl.edad);
SubConsulta APELLIDO cl.edad=26
Fonseca

NOMBRE Juan Rebeca Juan Mara

APELLIDO Fonseca lvarez Melndez Fonseca

edad 30 20 26 24

NOMBRE

APELLIDO

edad

Melndez IN (Fonseca)

SELECT * FROM cliente as cl WHERE apellido IN (SELECT apellido FROM cliente WHERE edad>cl.edad);
SubConsulta
APELLIDO Fonseca Melndez

NOMBRE Juan Rebeca Juan Mara

APELLIDO Fonseca lvarez Melndez Fonseca

edad 30 20 26 24

cl.edad=24

NOMBRE Mara

APELLIDO Fonseca

edad 24

Fonseca IN (Fonseca,Melndez)

SELECT * FROM (SELECT apellido FROM cliente WHERE edad>25) as mayores;


SubConsulta
APELLIDO

NOMBRE Juan Rebeca Juan Mara

APELLIDO Fonseca lvarez Melndez Fonseca

edad 30 20 26 24

Fonseca
Melndez

APELLIDO Fonseca Melndez

SELECT * FROM (SELECT apellido FROM cliente WHERE edad>25) as mayores order by apellido desc;
NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca edad 30 20 26 24

SubConsulta
APELLIDO

Fonseca
Melndez

APELLIDO Melndez Fonseca

SELECT *, (SELECT max(edad) FROM Cliente) as maxima FROM cliente;


SubConsulta
NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca edad 30 20 26 24 NOMBRE Juan Rebeca Juan Mara APELLIDO Fonseca lvarez Melndez Fonseca edad 30 20 26 24 maxima 30 30 30 30 Max(edad) 30

Vous aimerez peut-être aussi