Académique Documents
Professionnel Documents
Culture Documents
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:
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
DELETE: sentencia para borrar una o mas tuplas a una tabla. DELETE Nombre tabla condicin and /or
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
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
Rebeca
Juan
lvarez
Melndez
500
130
Rebeca
lvarez
500
Rebeca
Juan
lvarez
Melndez
500
130
Saldo=2500
Saldo
APELLIDO
Rebeca
Juan
lvarez
Melndez
500
130
Rebeca
lvarez
500
Rebeca
Juan
lvarez
Melndez
500
130
WHERE
APELLIDO
Melndez
NOT
Saldo
130
NOMBRE
Juan
APELLIDO
Fonseca lvarez Melndez
Saldo
2500 500 130
Juan
Fonseca
2500
APELLIDO
Fonseca lvarez Melndez
Saldo
2500 500 130
NOMBRE
Juan Rebeca Juan
APELLIDO
Fonseca lvarez Melndez
Saldo
2500 500 130
Sexo M F
M
F
2
1
Rebeca
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
Sexo M M F
Resultado 3 3 2
Cuando hacemos el conteo con count, sobre un atributo que contiene valores nulos, el count no los cuenta.
edad 30 25
Solo se puede sumar (sum) valores numricos. Si algn valor es null es ignorado.
Sum(salario) Sum(edad)
400 55
edad 30 25
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.
edad 30 25
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.
edad 30 25
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
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
Sexo M M F
F
NOMBRE
GROUP BY
COUNT(*)
APELLIDO Count(*) 1 1 2
LIMIT
ORDER BY
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
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
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
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
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
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
>=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
edad 30 20 26 24
SELECT * FROM cliente as cl WHERE apellido IN (SELECT apellido FROM cliente WHERE edad>cl.edad);
SubConsulta
APELLIDO
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
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
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
edad 30 20 26 24
cl.edad=24
NOMBRE Mara
APELLIDO Fonseca
edad 24
Fonseca IN (Fonseca,Melndez)
edad 30 20 26 24
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