ejemplo

Anuncio
Sql Basico
Seminar
Introduction
SQL Basico
Agenda
Sql Básico
Sobre el modelo anterior de datos haremos un repaso de las consultas sql mas comunes.
• Devolver todos los datos de una tabla sin filtrar.
• Select campo_1, campo_2, campo_n FROM nombre_tabla
EJEMPLO : select id,nombre,telefono from persona;
• Devolver los datos de la misma tabla filtrando por el campo nombre que contenga la palabra
‘lo que sea’, si se pone el signo ‘%’ coge cualquier caracter, dependiendo de donde se ponga.
EJEMPLO : select id,nombre,telefono from persona WHERE nombre LIKE ‘%lo que sea%’
La misma consulta, pero ahora quiero que el nombre contenga ‘lo que sea’ y acabe en cualquier
letra, pero que solo acabe añadiendo un caracter, para esto usamos el wildcard ‘_’.
select id,nombre,telefono from persona WHERE nombre LIKE ‘%lo que sea_’
La misma consulta pero ahora queremos que se compare con un string que contenga unos
determinados caracteres, usaremos los Brackets
EJEMPLO : select id,nombre,telefono from persona WHERE nombre LIKE ‘[Ll]o que sea’
• Devolver los datos filtrando por campo numerico:
• No lleva comillas, las comillas son para comparar strings.
EJEMPLO : select nombre,telefono from persona WHERE id=1;
Sql Básico
Agenda
• Devolver los datos filtrando por mas de un id simultaneamente.
• Se puede hacer de 2 maneras, usando la instruccion OR o la instruccion IN.
•
•
•
•
Con OR
select nombre,telefono from persona where id= 3 or id = 1;
Con IN
select nombre,telefono from persona where id in (3,1);
• Tambien se puede buscar los que no estan dentro de esa definicion usando el NOT IN
• select nombre,telefono from persona where id not in (3,1);
• Para devolver los N primeros registros usaremos el comando TOP
Select top(3) * from persona; Nos devolvera 3 registros.
• Para devolver los registros ordenados usaremos la instruccion ORDER BY;
• select nombre,telefono from persona ORDER BY id DESC / ASC (descendiente / ascendiente)
Sql Básico
Agenda
• Filtrar datos usando la clausula GROUP BY
• Para poder usar el group by tenemos que usar previamente alguna funcion de agregacion
como: sum, max, min…
SELECT count(id), nombre
FROM persona
GROUP BY nombre order by nombre asc;
INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN (las mas comunes)
INNER JOIN:
Inner join es usado para devolver los datos que coincidan entre los 2 campos de 2 tablas.
EJEMPLO :SELECT u.* FROM usuario AS u INNER JOIN persona AS p ON
p.id_usuario=u.id_persona;
Sql Básico
Agenda
LEFT OUTER JOIN
Left outer join es usado para devolver todos los datos de la tabla izquierda y los que no
coincidan de la tabla de la derecha los devolvera como null.
EJEMPLO :SELECT u.* FROM usuario AS u LEFT OUTER JOIN persona AS p ON
p.id_usuario=u.id_persona;
RIGHT OUTER JOIN
right outer join es usado para devolver todos los datos de la tabla derecha y los que no
coincidan de la tabla de la izquierda los devolvera como null.
EJEMPLO :SELECT u.* FROM usuario AS u RIGHT OUTER JOIN persona AS p ON
p.id_usuario=u.id_persona;
Sql Básico
Agenda
ACTUALIZAR REGISTROS (UPDATE)
Para actualizar campos usaremos la instruccion update.
UPDATE nombre_table SET nombre_campo1=lo que sea , nombre_campo2=lo que sea;
EJEMPLO:
UPDATE persona SET nombre=‘Juan’ WHERE id=2;
Recordatorio:
Si actualizamos registros debemos tener en cuenta la posiblidad de que sean campos FK de
otras tablas por lo que deberemos asegurarnos de no violar la restriccion de referecialidad.
Sql Básico
Agenda
BORRAR REGISTROS (DELETE)
Para borrar campos usaremos la instruccion delete.
DELETE nombre_campo1, nombre_campo_n FROM nombre_tabla.
EJEMPLO:
DELETE * FROM persona where id=2;
Recordatorio:
Si borramos registros debemos tener en cuenta la posiblidad de que sean campos FK de otras
tablas por lo que deberemos asegurarnos de no violar la restriccion de referencialidad.
Sql Básico
Agenda
INSERTAR REGISTROS (INSERT)
Para insertar registros usaremos la instruccion Insert.
INSERT INTO nombre_tabla (nombre_campo1, nombre_campo_n) VALUES (valor_1, valor_2).
EJEMPLO:
INSERT INTO persona (nombre) VALUES (“Luis”);
Recordatorio:
Si insertamos registros debemos tener en cuenta aquellos campos que esten definidos como
not null en la tabla, ya que seran de obligatorios, ademas de tener en cuenta si son campos FK
de otras tablas.
Sql Básico
Agenda
EJEMPLOS:
Muestrame todas las personas que vivan en la provincia de Barcelona.
SELECT * FROM persona AS pers INNER JOIN provincia AS pro ON pers.fk_provincia=pro.id and
UPPER/LOWER (pro.descripcion) Like “BARCELONA/barcelona”;
CON SUBQUERY:
SELECT p.* FROM persona AS p WHERE
p.fk_localidad = (SELECT local.id FROM localidad as local WHERE
local.descripcion=“barcelona”)
Muestrame todas las personas que no tengan trabajo.
SELECT * FROM persona AS p WHERE p.fk_trabajo IS NULL
Sql Básico
CONSEJOS:
• Evitar en la medida de la posible las instruccions IN y NOT IN, son muy costosas.
• Si vamos a hacer una consulta cruzando muchas tablas y filtrando por una descripcion/
identificador o cualquier valor, deberiamos poner el valor a filtrar como primer elemento en la
clausula WHERE.
EJEMPLO:
• Select * FROM tabla1, tabla2,tabla3 WHERE tabla2.descripcion=‘juan’ AND tabla1.id=tabla2.id
AND tabla2.id =tabla3.id;
• Todas las tablas que esten definidas en la clausula FROM deberan filtrarse sino la consulta
nos devolvera valores equivocados.
EJEMPLO INCORRECTO
Select * from tabla1, tabla2,tabla3 where tabla2.descripcion=‘juan’ and tabla1.id=tabla2.id;
Descargar