Apuntes SQL 2021
Apuntes SQL 2021
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.
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 IN (‘García’, ‘Perez’, ‘Martinez’)
NOT IN Lo contrario a IN. Nos muestra todo menos lo que haya escrito entre
paréntesis.
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.
Ej: SELECT * FROM emp WHERE sal IS NULL
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…
Ej: SELECT * FROM emp WHERE nombre LIKE ‘%PE’
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:
ORDER BY Esto sirve para mostrar las columnas por orden, ya sea alfabético o
numérico. Si queremos que lo ordene de forma descendente, después del nombre
de la columna escribimos DESC
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.
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
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, UNION ALL, INTERSECT, MINUS
UNION . Combina los resultados de dos sentencias y elimina los duplicados (A y no B
ó B y no A).
Ej: SELECT First_name, Last_name FROM emp WHERE deptno = ‘Madrid’
UNION
SELECT First_name, Last_name FROM clientes WHERE ciudad = ‘Madrid’
Nos mostrará el nombre y apellido tanto de clientes como de empleados de Madrid,
eliminando los duplicados (una misma persona puede ser cliente y empleado a la
vez).
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.