Consulta de datos - IES Gonzalo Nazareno

Anuncio
Consulta de datos
SELECT [ALL | DISTINCT]
[colum1, ..column | *]
FROM tabla1, .., tablan
[WHERE condicion]
[ORDER BY colum1 [DESC | ASC],
colum1 [DESC | ASC],…]
;
Consulta de datos
• FROM, obligatoria, se especifican las tablas
donde está la información necesaria.
– SELECT * FROM emp;
• Se puede poner alias a las tablas
– SELECT * FROM emp e;
Consulta de datos
• WHERE condición
– expresión operador expresión
• Operadores
– IN, NOT IN, BETWEEN, NOT BETWEEN, LIKE
• Condiciones múltiples
– AND, OR, NOT y ( )
• SELECT ename FROM EMP where SAL > 1000;
– WHERE (SAL > 1000) AND (COMM IS NOT NULL)
– WHERE (comm IS NULL) AND (UPPER(ENAME)
=‘MARY’)
Consulta de datos
• ORDER BY colum [ASC |DESC], …
– Por defecto es ASC.
– SELECT ename FROM emp ORDER BY sal *
12;
• si tiene 2 o más criterios de ordenación, el
principal es el más a la izquierda y dentro de este
los siguientes.
SELECT ename, job, sal * 12 AS salario_anual
FROM emp
ORDER BY job ASC, sal * 12 DESC;
Consulta de datos
• ALL, recupera todas las filas, opción por
defecto.
• DISTINCT, recupera las filas distintas.
SELECT DISTINCT deptno
FROM emp;
SELECT DISTINCT sal
FROM emp;
Proyección
SELECT [ALL|DISTINCT]
colum1, ..column
FROM tabla1,…tablan;
Todas las columnas
SELECT empno, ename,…
FROM EMP;
SELECT * FROM emp;
Algunas columnas
SELECT deptno, dname from dept;
Selección de filas
• Es necesaria la clausula: WHERE condicion.
SELECT ename, job, mgr
FROM emp
WHERE deptno = 10
ORDER BY job, ename;
SELECT *
FROM emp
WHERE job = ‘CLERK’ AND deptno = 10
ORDER BY deptno, ename;
ALIAS a columnas
• Si el nombre (aparece como cabecera ) de la
columna resulta demasiado largo, corto o
críptico, se puede hacer uso de los alias.
SELECT ename as nombre_empleado,
dname as nombre_departamento
FROM emp e, dept d
WHERE e.deptno = d.deptno;
Comparación de cadenas
=, para comparar cadenas enteras.
Si deseamos los empleados que empiezan
por‘P’, usaremos LIKE y los comodines
% cualquier cadena de 0 o más caracteres.
- Cualquier carácter en la posición donde se
encuentre el –
En c. WHERE columna LIKE ‘cadena_car’
Comparación de cadenas
LIKE ‘ANALYST’
LIKE ‘M%’
LIKE ‘%X%’
LIKE ‘_ _M’
LIKE ‘N _’
LIKE ‘_ R%’
Se distinguen mayúsculas de las minúsculas
NULL, NOT NULL
NULL, columna vacía
SELECT ename
FROM emp
WHERE comm IS NULL;
NOT NULL, columna llena
SELECT ename
FROM emp
WHERE comm IS NOT NULL;
Pertenencia a un conjunto
• Operador IN. comprueba si una expresión pertenece o no a
un conjunto de valores.
• Formato:
Expresion [NOT] IN ( lista de valores)
SELECT ename
FROM emp
WHERE deptno IN (10, 20);
SELECT ename FROM emp
WHERE deptno NOT IN (30, 40);
Pertenencia a un rango
• BETWEEN, comprueba si un valor o no está
comprendido en un rango de valores.
• Formato:
Expresion [NOT] BETWEEN valor_inicial
AND valor_final
SELECT ename FROM emp
WHERE sal BETWEEN 1000 and 2000;
SELECT ename FROM emp WHERE sal
NOT BETWEEN 1000 AND 2000;
Combinación AND, OR y NOT
• Orden de prioridad en la evaluación :
NOT
AND
OR
SELECT ename, sal, deptno from emp
WHERE sal > 2000
AND (deptno = 10 OR deptno = 20);
La misma sin paréntesis que significaría?
Como sería con IN?
Subconsultas
Consultas que forman parte de WHERE en
otra SELECT
SELECT …………… FROM ………
WHERE columna
operador_comparacion
(SELECT ….
WHERE…
);
Subconsultas
Obtén los nombres de los empleados con el
mismo oficio que Gil.
SELECT job FROM emp
WHERE ename = ‘Gil’;
SELECT ename FROM emp
WHERE job = ‘ANALYST’;
SELECT ename FROM emp
WHERE job = (SELECT job FROM emp
WHERE ename = ‘Gil’);
Ejercicio
• Muestra nombre, oficio, salario y fecha de
ingreso de los empleados que tengan el
mismo oficio que JAMES o que tengan un
salario mayor o igual que MILLER.
Condiciones de búsqueda en subconsultas
• Las subconsultas aparecen como parte de
una condición de búsqueda de una cláusula
WHERE o HAVING.
• Las condiciones de búsqueda son:
– Test de comparación en subconsultas(<, >..)
– Test de pertenencia a un conjunto de valores
(IN).
– Test de existencia (EXISTS, NO EXISTS).
– Test de comparación cuantificada (ANY, ALL).
Condiciones de búsqueda en subconsultas
Test de comparación en subconsultas(<, >, =,
>=, <=, <>, !=). Compara el valor de una expresión
con un valor único producido por una subconsulta.
SELECT ename
FROM emp
WHERE job = (SELECT job
FROM emp
WHERE ename = ‘JAMES’);
Condiciones de búsqueda en subconsultas
Test de pertenencia a un conjunto de valores
(IN). Comprueba el valor de una expresión
con uno de los valores producido por una
Subconsulta.
SELECT ename
FROM emp
WHERE job IN (SELECT job
FROM emp
WHERE deptno = 20);
Condiciones de búsqueda en subconsultas
Test de existencia (EXISTS, NO EXISTS).
Examina si una subconsulta produce alguna fila
de resultado(TRUE o FALSE)
SELECT dname
FROM dept
WHERE EXISTS (SELECT *
FROM emp
WHERE emp.deptno =
dept.deptno);
Condiciones de búsqueda en subconsultas
Test de comparación cuantificada (ANY,
ALL). Se usan junto a <, >, = ,...
ANY, compara el valor de una expresión con
cada uno del conjunto de valores producido
por una subconsulta, si alguna de las
comparaciones devuelve TRUE, ANY
devuelve TRUE, si la subconsulta no
devuelve nada, devolverá FALSE.
Condiciones de búsqueda en subconsultas
ANY, ejemplo
SELECT *
FROM emp
WHERE sal = ANY
(SELECT sal
FROM emp
WHERE deptno = 30);
Condiciones de búsqueda en subconsultas
ALL, compara el valor de una expresión con
cada uno del conjunto de valores producido
por una subconsulta, si todas las
comparaciones devuelven TRUE, ALL
devuelve TRUE, en caso contrario, devolverá
FALSE.
Condiciones de búsqueda en subconsultas
ALL, ejemplo.
SELECT *
FROM emp
WHERE sal < ALL
(SELECT sal
FROM emp
WHERE deptno = 30);
Subconsultas que generan valores simples
Devuelven una fila o valor simple, se usan <,
>.., si la subconsulta produce más de un valor
se origina un error.
SELECT ename
FROM emp
WHERE job = (SELECT job
FROM emp
WHERE deptno = 20);
Subconsultas que generan listas de valores
Devuelven más de una fila o más de un valor,
usaremos el operador IN en la c. WHERE.
SELECT ename
FROM emp
WHERE job IN (SELECT job
FROM emp
WHERE deptno = 20);
Ejemplo
Visualizar los datos de los empleados que trabajan
en DALLAS o CHICAGO
SELECT *
FROM emp
WHERE deptno IN
(SELECT deptno
FROM dept
WHERE loc IN
(‘DALLAS’, ‘CHICAGO’));
Ejemplo
Consulta los nombres y oficios de los empleados del
departamento 20 cuyo oficio sea igual al de cualquiera de
los empleados del departamento SALES.
SELECT ename, job
FROM emp
WHERE deptno = 20
AND job IN (SELECT job
FROM emp
WHERE deptno = (SELECT deptno
FROM dept
WHERE dname =‘SALES’));
Ejemplo
Consulta los apellidos de los empleados con
el mismo oficio y salario que JAMES.
SELECT ename, sal
FROM emp
WHERE (job, sal) =
(SELECT job, sal
FROM emp
WHERE ename = ‘JAMES’);
Ejemplo
El mismo de otra forma
SELECT ename, sal
FROM emp
WHERE job =(SELECT job
FROM emp
WHERE ename = ‘JAMES’)
AND sal =(SELECT sal
FROM emp
WHERE ename = ‘JAMES’);
Combinación de tablas
A veces las consultas necesitan datos de 2 o
más tablas, se indican a continuación de
FROM.
Formato:
SELECT columnas de las tablas
FROM tabla1, tabla2…
WHERE tabla1.columna1 =
tabla2.columna2;
Combinación de tablas
Reglas:
Se pueden unir tantas tablas como deseemos.
En SELECT se pueden citar columnas de
todas las tablas.
Si hay columnas con el mismo nombre en
varias tablas, se pueden especificar como:
Nombre_tabla.nombre_columna.
La condicion de combinación se especifica en
WHERE. Si se omite se obtiene el producto
cartesiano.
Combinación de tablas
Consultar nombre de empleados, salario,
nombre del departamento al que pertenecen y
localidad de este.
SELECT ename, sal, dname, loc
FROM emp e, dept d
WHERE e.deptno = d.deptno;
Ejercicios
• Visualiza los nombres de los empleados con
un salario entre 500 y 1000, cuyo oficio sea
MANAGER.
• Visualiza los nombres de los departamentos
que no tengan empleados.
• Visualiza los nombres de los departamentos
que tengan algún empleado.
Funciones en SQL
• Funciones: Se usan con expresiones y
actúan con valores de columnas, variables
y ctes. Se usan en cláusulas SELECT,
WHERE Y ORDER BY.
• Hay 5 tipos:
– Aritméticas.
– De cadena de caracteres.
– De manejo de fechas.
– De conversión.
– Otras funciones.
Funciones aritméticas
•
De valores simples:
ABS(n)= Devuelve el valor absoluto de (n).
CEIL(n)=Obtiene el valor entero inmediatamente superior o igual a "n".
FLOOR(n) = Devuelve el valor entero inmediatamente inferior o igual a "n".
MOD (m, n)= Devuelve el resto resultante de dividir "m" entre "n".
POWER (m, exponente)= Calcula la potencia de un numero.
ROUND (numero [, m])= Redondea números con el numero de decimales indicado.
SIGN (valor)= Indica el signo del "valor".
SQRT(n)= Devuelve la raíz cuadrada de "n".
TRUNC (numero, [m])= Trunca números para que tengan una cierta cantidad de decimales
–
http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html
Ejemplos
SELECT ename, sal, ABS(sal - 10000) from emp;
SELECT CEIL(20.3), CEIL(16), CEIL(-20.3), CEIL(-16) FROM DUAL ;
SELECT FLOOR(20.3), FLOOR(16), FLOOR(-20.3), FLOOR(-16)
FROM DUAL ;
SELECT MOD(11,4), MOD(10, -15), MOD(-10, -3), MOD(10.4, 4.5)
FROM DUAL;
SELECT POWER(2, 4), POWER(2, -4), POWER(3.5, 2.4),
POWER(4.5, 2) FROM DUAL;
SELECT ROUND(1.56, 1), ROUND(1.56), ROUND(1.2234, 2),
ROUND(1.2676, 3) FROM DUAL;
SELECT ROUND(145.5, -1), ROUND(145.5, -2), ROUND(145.5, -3),
ROUND(141, -1), ROUND(145, -1) FROM DUAL;
Ejemplos
SELECT SIGN(-10), SIGN(10) FROM DUAL;
SELECT SQRT(25), SQRT(25.6) FROM DUAL;
SELECT TRUNC(1.5634, 1), TRUNC(1.1684, 2),
TRUNC(1.662) FROM DUAL;
SELECT TRUNC(187.98, -1), TRUNC(187.98, -2),
TRUNC(187.98, -3) FROM DUAL;
Funciones de agregación
Funciones de grupos de valores:
AVG(n)= Calcula el valor medio de "n" ignorando los valores nulos.
COUNT (* | Expresión)= Cuenta el numero de veces que la
expresión evalúa algún dato con valor no nulo. La opción "*" cuenta
todas las filas seleccionadas.
MAX (expresión)= Calcula el máximo.
MIN (expresión)= Calcula el mínimo.
SUM (expresión)= Obtiene la suma de los valores de la expresión.
•
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
Ejemplos
SELECT AVG(SAL) FROM EMP WHERE DEPTNO = 10;
SELECT COUNT(*) FROM EMP;
SELECT COUNT(COMM) FROM EMP;
SELECT MAX(SAL) FROM EMP;
SELECT MAX(ENAME) FROM EMP;
SELECT MIN(SAL) FROM EMP;
SELECT MIN(ENAME) FROM EMP;
SELECT SUM(SAL) FROM EMP;
SELECT VARIANCE(SAL) FROM EMP;
SELECT COUNT(DISTINCT(JOB)) FROM EMP;
Funciones aritméticas
Funciones de listas.
GREATEST (valor1, valor2…)= Obtiene el
mayor valor de la lista.
LEAST (valor1, valor2…)= Obtiene el
menor valor de la lista.
Ejemplos
SELECT ENAME,
GREATEST(SAL, NVL(COMM, 0)),
LEAST(SAL, NVL(COMM, 0))
FROM EMP;
Funciones de cadenas de caracteres
CHR(n) = Devuelve el carácter cuyo valor en binario es
equivalente a "n".
CONCAT (cad1, cad2)= Devuelve "cad1" concatenada con "cad2".
LOWER (cad)= Devuelve la cadena "cad" en minúsculas.
UPPER (cad)= Devuelve la cadena "cad" en mayúsculas.
LPAD (cad1, n[,cad2])= Añade caracteres a la izquierda de la
cadena hasta que tiene una cierta longitud.
RPAD (cad1, n[,cad2])= Añade caracteres a la derecha de la
cadena hasta que tiene una cierta longitud.
Funciones de cadenas de caracteres
LTRIM (cad [,set])= Suprime un conjunto de caracteres a la izquierda de la
cadena.
RTRIM (cad [,set])= Suprime un conjunto de caracteres a la derecha de la
cadena.
REPLACE (cad, cadena_busqueda [, cadena_sustitucion])= Sustituye
un carácter o caracteres de una cadena con 0 o mas caracteres.
SUBSTR (cad, m [,n])= Obtiene parte de una cadena.
•
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
Ejemplos
SELECT CHR(75), CHR(65) FROM DUAL;
SELECT CONCAT('El nombre es: ', ename) FROM EMP;
SELECT LOWER('oRACLe Y sql'), UPPER('oRACLe Y sql'),
INITCAP('oRACLe Y sql') FROM DUAL;
SELECT LPAD(ENAME, 20, '.'), RPAD(ENAME, 20, '.') FROM EMP;
SELECT LTRIM('
HOLA'), RTRIM('
ADIOS') FROM DUAL;
SELECT REPLACE ('BLANCO Y NEGRO', 'O', 'AS') FROM DUAL;
SELECT SUBSTR(ENAME, 1, 1) FROM EMP;
Funciones que devuelven valores numéricos
ASCII(cad)= Devuelve el valor ASCII de la
primera letra de la cadena "cad".
INSTR (cad1, cad2 [, comienzo [,m]])= Permite una búsqueda de
un conjunto de caracteres en una cadena pero no suprime ningún
carácter después.
LENGTH (cad)= Devuelve el numero de caracteres de cad.
Ejemplos
SELECT ASCII('A') FROM DUAL;
SELECT INSTR('II VUELTA CICLISTA A
TALAVERA', 'TA', 3,2) FROM DUAL;
SELECT INSTR('II VUELTA CICLISTA A
TALAVERA', 'A', -1) FROM DUAL;
SELECT ENAME, LENGTH(ENAME) FROM
EMP;
Funciones para manejo de fechas
CURDATE()= Devuelve la fecha del sistema.
DATE_FORMAT(fecha,formato): símbolo '%' seguido de una letra que define
el formato. Nosotros hemos utilizado:
%Y: devuelve el año en formato largo (2002);
%m: devuelve el mes en formato de dos cifras (01/12);
%m: devuelve el día en formato de dos cifras (01/31); cha2".
ADDDATE(fecha INTERVAL tiempo): añade 'tiempo' a 'fecha'.
TO_DAYS(fecha): devuelve el numero de días desde el 1 de enero del año 0
DATEDIFF(fecha1,fecha2), que devuelve el número de días entre la fecha1 y
la fecha 2
http://dev.mysql.com/doc/refman/5.0/es/date-and-time-functions.html.
Funciones de conversión
CAST(exp as type)
• type puede ser uno de los siguientes valores:
•
BINARY
•
CHAR
•
DATE
•
DATETIME
•
DECIMAL
•
SIGNED [INTEGER]
•
TIME
•
UNSIGNED [INTEGER]
Descargar