Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SELECT Seleccionar, siempre que queramos que la tabla nos devuelva algo, debemos escribir “select”.
Si queremos que nos muestre la tabla con un título distinto, tenemos que escribir el nombre de la tabla
seguido del nombre que queremos que se muestre. Si es una sola palabra, se escribe sin comillas. Si
queremos usar más palabras, tenemos que meterlas entre “comillas dobles”.
Ej: SELECT sal “Salario mensual” FROM emp; SELECT sal salario FROM emp;
FROM Indica con qué tabla vamos a trabajar. Ej: SELECT * FROM *emp (emp es la tabla). En lugar de la
estrella podemos elegir la columna que queramos (tenemos que saber el nombre). Si escribimos * nos
devolverá todas las columnas.
WHERE columna = ‘loquesea’ Va después de un SELECT x FROM y y se usa para poner parámetros.
AND columna = ‘loquesea2’ Cuando escribimos parámetros no podemos usar WHERE constantemente.
Si queremos especificar 2 o más parámetros, el primero siempre será con un WHERE y los siguientes con
AND. Ej: SELECT * FROM emp WHERE puesto = ‘jefe’ AND sal = ‘1200’ Lo que va entre comillas simples
es sensible a mayúsculas y minúsculas, así que cuidado con eso.
Modificadores para el WHERE y el AND. En el ejemplo hemos usado el símbolo =, con lo que solo nos
muestra los resultados que son iguales a lo que hemos escrito. También podemos usar > para mayor
que, o < para menor que. También se pueden combinar para decir que sea mayor o igual (>=) o menor o
igual (<=) Ej: SELECT * FROM emp WHERE sal >= ‘1500’ AND id < ‘50000’. Esto nos seleccionará todas las
columnas de la tabla empleados, pero solo nos mostrará los empleados cuyo salario sea mayor o igual a
1500 y su ID de empleado sea menor a 50000.
= igual
OR Es lo contrario al AND. Ej. SELECT * FROM emp WHERE sal > ‘1200’ OR sal < ‘300’
IN Si queremos obtener resultados con parámetros que están en la misma columna (gente que se
apellide García, Perez y Martinez, por ejemplo) en vez de usar un OR para cada nombre, podemos
meterlos todos dentro de un IN. Si lo que buscamos es texto, tiene que ir entre comillas.
Ej: SELECT * FROM emp WHERE nombre NOT IN (‘García’, ‘Perez’, ‘Martinez’)
BETWEEN Nos sirve para encontrar filas con valores entre los que establecemos.
Ej: SELECT * FROM emp WHERE sal BETWEEN ‘1000’ AND ‘2000’
NOT BETWEEN Lo contrario que BETWEEN. Nos lo muestra todo menos lo que está en los rangos que
hemos establecido.
Ej: SELECT * FROM emp WHERE sal NOT BETWEEN ‘1000’ AND ‘2000’
IS NULL Nos muestra las filas que no tienen valor asignado en esa columna. No es lo mismo no tener
valor que tener valor 0.
IS NOT NULL Lo contrario que IS NULL. Nos muestra solo las filas que tienen valor asignado en esa
columna.
LIKE Es parecido al igual, pero en vez de buscar un resultado exacto busca resultados parecidos. Para ello
usamos el símbolo %. Ese símbolo quiere decir que en su lugar puede haber cualquier cosa. Por ejemplo,
para buscar a PEPITO podemos buscar P%, PE%, %TO, %O %PI% etc…
AS Si queremos que nos muestre la tabla con un título distinto, tenemos que escribir el nombre de la
tabla seguido de AS y luego el nombre que queremos que se muestre. Si es una sola palabra, se escribe
sin comillas. Si queremos usar más palabras, tenemos que meterlas entre “comillas dobles”.
Ej: SELECT sal AS “Salario mensual” FROM emp; SELECT sal AS salario FROM emp;
|| Esto se llaman “tuberías”. Se usan para encadenar texto con resultados de las tablas. El texto que
queremos que se muestre debe ir con ‘comillas simples’.
Ej: SELECT 'BUENOS DÍAS ' || nombre AS "buenos días, empleados" FROM emp; Nos mostrará algo
parecido a esto:
Ej: SELECT nombre, sal FROM emp ORDER BY sal DESC; Esto nos mostrará el nombre y salario de los
empleados y los ordenará por salario, del que más cobra al que menos. Se pueden elegir varios
parámetros de ordenación. Por ejemplo, podemos decir que elija por número de departamento
(muchos empleados lo comparten) y luego por salario: SELECT nombre, sal, numdep FROM emp ORDER
BY numdep, sal DESC. Esto primero agrupará a la gente con el mismo número de departamento, y luego
a los de cada grupo los ordenará de forma descendiente por salario.
UPPER, LOWER e INITCAP Básicamente hace que lo que esté entre paréntesis se muestre en mayúsculas
o minúsculas. Si se usa en una búsqueda de texto buscará solo el texto que esté en mayúsculas o
minúsculas. INITCAP hace que la primera letra de cada palabra sea mayúscula y el resto minúsculas.
SELECT UPPER(nombre) FROM emp; Nos muestra los nombres de los empleados en mayúsculas.
SELECT nombre FROM emp WHERE nombre = LOWER(‘MANUEL’); Nos mostrará los empleados cuyo
nombre sea Manuel y haya sido escrito todo en minúsculas. Nos mostrará a alguien que tenga como
nombre manuel pero no a alguien que tenga MANUEL o Manuel.
SUBSTR Nos muestra solo parte de lo que le pidamos SUBSTR(nombre, 2, 3). En este ejemplo nos
mostrará solo parte de la columna “nombre”. Empezará por el 2º carácter, y nos mostrará 3 caracteres
(en este caso, si la persona se llamase Manuel, nos mostraría “anu”)
SELECT SUBSTR(nombre, 2, 5) FROM emp; Nos mostrará 5 caracteres a partir del 2º de los nombres de
todos los empleados.
LPAD y RPAD Es parecido al SUBSTR, pero en vez de partir el texto, lo que hace es añadir caracteres
hasta completar el número que le decimos con el carácter seleccionado.
Ej: SELECT RPAD(nombre, 50, ‘%’) FROM emp; Nos mostrará los nombres de los empleados y añadirá el
símbolo % tantas veces como sea necesario hasta rellenar los 50 caracteres.
ROUND y TRUNC ROUND redondea un número hasta los decimales que le digamos (si no decimos nada
nos da un número entero), y TRUNC elimina los decimales a partir de lo que le digamos (si no decimos
nada, nos da un número entero). Imaginemos que los empleados cobran 1200.884658.
Ej: SELECT ROUND(sal, 1) FROM emp; Nos dará 1200.9 (solo 1 decimal, y como el 2º decimal es 8
redondea hacia arriba).
Ej: SELECT TRUNC(sal) FROM emp; Nos dará 1200, porque no le hemos dicho que nos dé ningún decimal.
TO_CHAR Se utiliza para tratar valores numéricos como si fuesen texto y darles el formato que
queramos (fecha, sueldo, moneda etc…)
FECHAS
Ej: SELECT TO_CHAR (sysdate, 'day, ddth "of" month, yyyy') FROM dual;
MONEDA
Ej: SELECT NVL(salario, 0) FROM emp; La gente que no tenga valor asignado en la columna “salario”
saldrá un 0 en vez de un guión.
Ej: SELECT NULLIF(salario, 1500) FROM emp; La gente que tenga asignado un salario de 1500 pasará a
tener NULL en esa casilla.
MAX Nos da el valor máximo de una columna.
GROUP BY Nos agrupa todas las filas del valor especificado. Si por ejemplo tenemos 4 trabajos distintos,
nos agrupa a los empleados en 4 trabajos, y podemos operar con esos grupos por separado.
Ej: SELECT AVG(salario), puesto FROM emp GROUP BY puesto; Esto nos dirá la media de sueldo de cada
puesto de trabajo distinto (si hay 4 puestos distintos, nos dará 4 números).
Ej: SELECT AVG(salario), puesto FROM emp GROUP BY puesto HAVING puesto LIKE ‘jefe’; Aquí nos dirá la
media de sueldo para todos los puestos distintos que incluyan la palabra ‘jefe’. Por ejemplo, nos dirá el
de ‘jefe de ventas’ y ‘jefe de personal’ pero no el de ‘operario’.
Nested queries.
Si queremos hacer una búsqueda dentro de una búsqueda (para buscar algo en una tabla distinta, por
ejemplo), simplemente debemos poner una condición (where, in etc…) seguido de apertura de
paréntesis y la siguiente búsqueda que quedamos hacer.
Ej: SELECT * FROM emp WHERE deptno = ( SELECT deptno FROM dept WHERE loc = ‘MADRID’ )
Primero hará la búsqueda que hay entre paréntesis. Esa búsqueda nos devolverá el número de
departamento que tenga como localización Madrid. Después, lo que hay fuera de paréntesis nos
devolverá todos los resultados de la tabla empleados cuyo número de departamento se corresponda
con el de Madrid. Tener en cuenta que si lo que hay entre paréntesis nos devuelve más filas que las que
nos tiene que mostrar la búsqueda que hay fuera de los paréntesis, nos dará un error.
SET OPERATORS
UNION . Combina los resultados de dos sentencias y elimina los duplicados (A y no B ó B y no A).
UNION
Tiene que haber el mismo número de columnas solicitadas para ambas tablas y deben ser del mismo
tipo (texto, fecha etc…). Para ordenarlo, se usa ORDER BY y el número de columna (ORDER BY 1, 3)
Para que no elimine los duplicados, el proceso es exactamente le mismo pero en vez de UNION usamos
UNION ALL (A ó B).
INTERSECT: Igual que UNION, pero solo nos muestra la intersección de sucesos, en el ejemplo anterior,
solo nos mostraría las entradas que estén tanto en clientes como en empleados (A y B).
MINUS: Nos muestra los elementos que solicita en la primera sentencia excluyendo los elementos de la
segunda sentencia (A y no B)
JOINS
INNER JOIN, LEFT/RIGHT OUTER JOIN, NATURAL JOIN, CARTESIAN JOIN, SELF JOIN
Nos permiten mostrar información de dos o más tablas a la vez usando un valor común. Son como los
SET OPERATORS pero combinando tablas en vez de sentencias.
INNER JOIN: El join más común, simplemente une dos tablas usando una columna común de cada tabla
y nos da las coincidencias. Ej: SELECT first_name, last_name, department_name FROM employee JOIN
department ON employee.department_id = department.department_id;
Esto nos da la información de nombre y apellido de la tabla “employee” y el nombre del departamento
de la tabla “department”, haciendo la unión en la columna común, en este caso la ID del departamento.
LEFT OUTER JOIN: Como el INNER JOIN, une dos tablas en una columna común, pero en vez de enseñar
sólo las coincidencias, nos muestra toda la tabla izquierda (la primera después de FROM) y las
coincidencias de la tabla derecha. Si una fila de la tabla izquierda no tiene coincidencia en la tabla
derecha (tenemos un artículo con id=5 en la tabla de artículos pero en la tabla de ventas nadie ha
comprado ese artículo) nos muestra el valor NULL.
Ej: SELECT c.customer_id, c.first_name, c.last_name, co.order_date FROM customer c LEFT JOIN
customer_order co ON c.customer_id = co.customer_id;
RIGHT OUTER JOIN: Igual que el LEFT OUTER JOIN pero usa toda la información de la columna derecha, y
donde no haya coincidencias pone el valor NULL.
FULL OUTER JOIN: Combinación del LEFT y RIGHT JOIN. Nos da la información total de ambas tablas,
rellenando con NULL donde no haya coincidencias.
NATURAL JOIN: En esencia es un INNER JOIN pero no hay que especificar las columnas que unen las
tablas, las selecciona automáticamente SI TIENEN EL MISMO NOMBRE.
Ej: CREATE TABLE tiendas (id_tienda NUMBER NOT NULL, ciudad VARCHAR(50));
INSERT ALL Sirve para insertar varias filas en una tabla de golpe.
SELECT * FROM dual; Esto nos añadirá 3 tiendas de golpe. Al final hay que añadir una función SELECT
para que funcione. No hay razón lógica, simplemente es así. Este comando es específico de Oracle SQL,
puede que no funcione en otros lenguajes.
ALTER TABLE tabla MODIFY columna Sirve para modificar los atributos de una tabla (por ejemplo, pasar
del tipo NUMBER al tipo VARCHAR)
Ej: ALTER TABLE tiendas MODIFY id_tienda VARCHAR2(20) NOT NULL. Esto cambia el tipo de dato de la
columna “id_tienda”. Pasa de ser numérico a ser de caracteres con un límite de 20 caracters.
ALTER TABLE tabla ADD columnas Sirve para añadir columnas a una tabla ya existente.
CREATE TABLE nombre AS SELECT columnas tabla objetivo FROM tabla objetivo Crea una tabla usando
columnas de otra tabla ya existente.
Ej: CREATE TABLE empleados AS SELECT nombre, salario, dni FROM emp;
UPDATE tabla SET columna_objetivo = atributo WHERE columna = información_existente Sirve para
cambiar la información en una tabla existente. Tenemos que decir qué columna queremos cambiar y si
queremos que sea una casilla específica, tenemos limitarlo a información que coincida (decir qué clave
primaria tiene, por ejemplo).
Ej: UPDATE empleados SET salario = 3000 WHERE dni = 0543215B Al empleado que tenga el DNI
0543215B se le pondrá 3000 en la casilla ‘salario’
FUNCIONES
SELECT name, Price, CASE WHEN Price <10 THEN ‘Menos 10’ WHEN Price BETWEEN 10 AND 50 THEN
‘entre 10 y 50’ ELSE ‘más de 50’ FROM productos