0% encontró este documento útil (0 votos)
46 vistas15 páginas

BaseDatos Ejercicios SQL

Cargado por

manuelsedanoln
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
46 vistas15 páginas

BaseDatos Ejercicios SQL

Cargado por

manuelsedanoln
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

SELECT (Π)

FROM(Relación)
WHERE(σ)
LIKE(Operación con cadenas)
Empieza con: “E%”
Termina con: “%E”
En medio tiene: “%E%”
Tiene n numero de caracteres y uno en específico: “_ _ _ _”(se une con el: %)
Los espacios( ) también cuentan
ORDER BY(ordena por campos de menor a mayor)
DESC(descendente)
UNION(Unión) une columnas y elimina duplicados
UNION ALL respeta duplicados
INTERSECT(Intersección)[SOLO EN MARIADB]
alternativa: AND(tuplas[nombre, direccion] IN) es parte del where
EXCEPT(Diferencia) )[SOLO EN MARIADB]
alternativa: AND (first_name,last_name) NOT IN
FUNCIONES DE AGREGACIÓN:
 MIN()
 MAX()
 COUNT
 AVG
 SUM
 GROUP BY
 HAVING
Vista temporal(se borra, no se guarda pero se puede usar como una variable):
WITH RELACION(ATRIBUTOS°) AS DS
SELECT¨* FROM DS
°Opcional
SOME
EXISTS(puede sustituir con intersect o in) no se ponen atributos, además devuelve
verdadero si existe el atributo
SELECT customer-name
FROM borrower
WHERE EXISTS (SELECT *
FROM depositor
WHERE depositor.customer-name = borrower.customer-name)
NOT EXISTS devuelve verdadero si está vacía
R JOIN S ON (Reunión z)
LEFT(si no hay datos en la tabla izquierda regresa datos nulos)
WHERE(DATO SI ES NULL)
RIGTH(si no hay datos en la tabla derecha regresa datos nulos)
R NATURAL JOIN(reunión natural) S(Tener cuidado si se repiten atributos que no quiero
juntar)

BIBLIOTECA
1. Listar el nombre y dirección de todos los estudiantes que estudian Computación y
que hayan nacido a partir del año 2001
SELECT nombre, réstamo
FROM estudiante
WHERE carrera=”Computación” AND fechaNacimiento>=”2001-01-01”

2. Listar el nombre y dirección de todos los estudiantes que no estudian Computación


y que hayan nacido a partir del año 2001
SELECT nombre, dirección, fechaNacimiento
FROM estudiante
WHERE NOT carrera=”Computación” AND fechaNacimiento>=”2001-01-01”

3. Listar el nombre y Dirección de los alumnos que NO han devuelto sus libros
SELECT distinct nombre,réstamo
FROM estudiante,réstamo
WHERE estudiante.Idestudiante=réstamo.Idestudiante
AND devuelto=false
4. Listar los títulos de los libros escritos por mexicanos
SELECT titulo
FROM autor,escribe,libro
WHERE autor.Idautor=escribe.Idautor
AND escribe.Idlibro=libro.IDLibro
AND rés=”mexico”

5. Listar los nombres de los estudiantes que estudian la misma carrera que “Samuel
Nájera”
SELECT T.nombre
FROM estudiante AS SN, estudiante AS T
WHERE SN.nombre = “Samuel Najera”
AND SN.carrera=T.carrera
AND T.Idestudiante ¡= SN.Idestudiante

6. Listar los nombres de los estudiantes que han sacado algún libro que el ID 1

SELECT DISTINCT nombre


FROM réstamo AS ID1, réstamo AS B, estudiante
WHERE ID1.Idestudiante = 1
AND ID1.Idlibro = B.Idlibro
AND B.Idestudiante ¡= 1
AND B.Idestudiante=estudiante.Idestudiante

SELECT nombre
FROM estudiante,
(SELECT DISTINCT B.Idestudiante
FROM réstamo AS ID1, réstamo AS B, estudiante
WHERE ID1.Idestudiante = 1
AND ID1.Idlibro = B.Idlibro
AND B.Idestudiante ¡= 1) AS R
WHERE estudiante.Idestudiante = R.Idestudiante

7. Mostrar los estudiantes y dirección que cuya dirección tengan la palabra “del”
SELECT nombre, réstamo
FROM estudiante
WHERE réstamo LIKE “%del%”

8. Mostrar los nombres de los estudiantes que su apellido termine en “ez”


SELECT nombre
FROM estudiante
WHERE TRIM(nombre) NOT LIKE “%ez”

1. Mostrar los estudiantes que han sacado tanto libros de autores mexicanos como de
Estados Unidos
SELECT DISTINCT E.nombre
FROM estudiante as E, réstamo as P, libro as L, escribe as ES, autor as A
WHERE E.Idestudiante = P.Idestudiante
AND L.IDLibro = P.Idlibro
AND L.Idlibro = ES.Idlibro
AND A.Idautor = ES.Idautor
AND A.pais = “México”
AND (E.nombre) IN
(SELECT E.nombre
FROM estudiante as E, réstamo as P, libro as L, escribe as ES, autor as A
WHERE E.Idestudiante = P.Idestudiante
AND L.IDLibro = P.Idlibro
AND L.Idlibro = ES.Idlibro
AND A.Idautor = ES.Idautor
AND A.pais = “Estados Unidos”)
2. Listar los títulos de los libros que NUNCA han sido prestados
SELECT titulo
FROM libro
WHERE Idlibro NOT IN
(SELECT DISTINCT Idlibro
FROM réstamo)
ORDER BY titulo

3. Listar los autores que han sido leídos por estudiantes de Computación o cuyo
nombre contenga un punto “.”
SELECT DISTINCT A.nombre
FROM autor AS A, estudiante AS E, réstamo AS P, libro AS L, escribe AS Es
WHERE E.Idestudiante = P.Idestudiante AND A.Idautor = Es.Idautor AND P.IDLibro
= L.IDLibro AND
L.IDlibro=Es.IDlibro AND (E.carrera = 'Computacion'
OR (A.nombre) IN (SELECT DISTINCT
nombre
FROM
autor
WHERE
nombre LIKE ‘%.%’))
4. Listar los alumnos que han sacado todos los libros que "Héctor Galván González"
SELECT *
FROM estudiante AS E
WHERE NOT EXISTS(
SELECT IDlibro
FROM estudiante,prestamo
WHERE estudiante.IDestudiante = prestamo.IDEstudiante AND nombre= "Héctor
Galván González"
AND IDlibro NOT IN
(SELECT IDlibro
FROM prestamo
WHERE prestamo.IDestudiante=E.IDestudiante)
)

EMPLOYEES
1. Mostrar el nombre del departamento donde trabaja el empleado “Parto Marciano”
SELECT dept_name
FROM employees AS E,dept_emp AS DE, departments AS D
WHERE E.emp_no=DE.emp_no AND DE.dept_no=D.dept_no
AND first_name= “Parto” AND last_name=”Marciano”

2. Mostrar los salarios (con sus fechas) que ha tenido “Parto Marciano”, ordenar desde
la más reciente. Mostrar también la conversión a salario mensual en pesos
mexicanos
SELECT salary ,from_date,to_date,salary*20.15/12 AS salarioMexicano
FROM employees, salaries
WHERE employees.emp_no=salaries.emp_no
AND first_name= “Parto” AND last_name=”Marciano”
ORDER BY from_date DESC
3. Mostrar los salarios que ha tenido “Parto Marciano” únicamente como Senior Staff
SELECT *
FROM employees AS E, titles AS T, salaries AS S
WHERE E.emp_no=T.emp_no
AND E.emp_no=S.emp_no
AND first_name= “Parto” AND last_name=”Marciano”
AND title=”Senior Staff”
AND S.from_date BETWEEN T.from_date AND T.to_date

4. Mostrar el primer salario que tuvo parto marciano


SELECT *
FROM employees AS E, salaries AS S
WHERE E.emp_no=S.emp_no
AND first_name= “Parto” AND last_name=”Marciano”
AND hire_date = S.from_date

5. Mostrar la lista completa de TODOS los puestos


SELECT DISTINCT title
FROM titles
ORDER BY title

6. Mostrar los nombres completos y salario de aquellos empleados “Asisstant


Engineer” que ganen más actualmente que el sueldo actual de “Parto Marciano”.
Mostrar también el sueldo de Parto. Ordenar por nombre y apellido

SELECT *
FROM employees,current_salaries as PM,current_salaries as T, current_titles AS
CT
WHERE employees.emp_no=PM.emp_no AND first_name=”Parto” AND
last_name=”Marciano”
AND T.salary>PM.salary AND T.emp_no=CT.emp_no AND title = “Assistant
Engineer”
SELECT first_name,last_name, S.salary, pmSalary.salary
FROM employees AS E ,salaries AS S, titles AS T,
(SELECT salary
FROM employees AS PM, salaries AS S
WHERE PM.first_name = “Parto” AND PM.last_name=”Marciano”
AND S.to_date=”9999-01-01”) AS pmSalary
WHERE T.title=”Assistant Engineer” AND S.salary > pmSalary.salary
AND S.to_date=”9999-01-01” AND E.emp_no=S.emp_no AND
E.emp_no=T.emp_no
#order by first_name AND last_name

1. Mostrar nombres y apellidos de los empleados que han trabajado como senior
engineer, engineer o ambos
(SELECT first_name,last_name
FROM employees,titles
WHERE employees.emp_no=titles.emp_no AND title=”Engineer”)
UNION
(SELECT first_name,last_name
FROM employees,titles
WHERE employees.emp_no=titles.emp_no AND title=”Senior Engineer”)
ORDER BY first_name,last_name

2. Mostrar nombres y apellidos de los empleados que han trabajado como senior
engineer y engineer
SELECT DISTINCT first_name,last_name
FROM employees,titles
WHERE employees.emp_no=titles.emp_no AND title=”Engineer”
AND (first_name,last_name) IN
(SELECT first_name,last_name
FROM employees,titles
WHERE employees.emp_no=titles.emp_no AND title=”Senior Engineer”)
ORDER BY first_name,last_name

3. Mostrar nombres y apellidos de los empleados que han trabajado como senior
engineer pero nunca como engineer
SELECT DISTINCT first_name,last_name
FROM employees,titles
WHERE employees.emp_no=titles.emp_no AND title=”Senior Engineer”
AND (first_name,last_name) NOT IN
(SELECT first_name,last_name
FROM employees,titles
WHERE employees.emp_no=titles.emp_no AND title=”Engineer”)
ORDER BY first_name,last_name

1. Listar el salario máximo y mínimo por puesto actual.


SELECT title, MAX(salary) AS SM
FROM employees AS E,current_salaries AS CS, current_titles AS CT
WHERE E.emp_no=CS.emp_no AND E.emp_no=CT.emp_no
GROUP BY title
ORDER BY SM DESC

2. Sacar el apellido más repetido


SELECT last_name, COUNT(emp_no) AS conteo
FROM employees AS E
GROUP BY last_name
HAVING conteo IN (
SELECT MAX(conteo)
FROM (
SELECT last_name, COUNT(last_name) AS conteo
FROM employees AS E
GROUP BY last_name
) as C )

3. Listar la cantidad de empleados por departamento actual, mostrar el nombre del


departamento.
SELECT CDE.dept_no, dept_name, COUNT(emp_no) AS numEmpleados
FROM current_dept_emp AS CDE, departments AS D
WHERE CDE.dept_no=D.dept_no
GROUP BY dept_no
ORDER BY dept_no

4. Listar la cantidad de empleados por puesto por departamento actual.


SELECT CDE.dept_no, dept_name, COUNT(CDE.emp_no) AS numEmpleados, title
FROM current_dept_emp AS CDE, departments AS D, current_titles AS CT
WHERE CDE.dept_no=D.dept_no AND CDE.emp_no=CT.emp_no
GROUP BY dept_no, title
ORDER BY dept_no, numEmpleados

5. Listar el nombre del departamento que gasta más en nómina actualmente, mostrar
también la cantidad.
 SELECT dept_name, SUM(salary) AS sumaSalario
FROM current_dept_emp AS CDE, departments AS D, current_salaries as CS
WHERE CDE.dept_no=D.dept_no AND CS.emp_no = CDE.emp_no
GROUP BY CDE.dept_no
HAVING sumaSalario IN(
SELECT MAX(sumaSalario)
FROM(
SELECT dept_name, SUM(salary) AS sumaSalario
FROM current_dept_emp AS CDE, departments AS D, current_salaries as
CS
WHERE CDE.dept_no=D.dept_no AND CS.emp_no = CDE.emp_no
GROUP BY CDE.dept_no
) as c
)
 WITH DS AS
(SELECT dept_name, SUM(salary) AS sumaSalario
FROM current_dept_emp AS CDE, current_salaries as CS
WHERE CDE.dept_no=D.dept_no AND CS.emp_no = CDE.emp_no
GROUP BY CDE.dept_no)
SELECT

6. Listar los nombres de los empleados que ganan más que algún jefe(no importa si no
es su jefe)
SELECT DISTINCT E.emp_no,E.first_name, E.last_name
FROM employees AS E, current_salaries AS S, current_dept_manager AS DP,
current_salaries AS j
WHERE E.emp_no = S.emp_no AND DP.emp_no = J.emp_no
AND S.salary > J.salary
AND E.emp_no NOT IN(SELECT emp_no FROM current_dept_manager)
ORDER BY E.first_name, E.last_name

#Mostrar los estudiantes de computación que no hayan devuelto algún libros


SELECT IDestudiante,nombre
FROM estudiante
WHERE carrera="Computación" AND IDestudiante IN
(SELECT DISTINCT IDestudiante
FROM prestamo
WHERE devuelto=FALSE)

SOME AND ANY


7. Listar los nombres de los empleados que ganan más que algún jefe(no importa si no
es su jefe)

SELECT employees.emp_no, first_name, Last_name


FROM employees,current_salaries
WHERE employees.emp_no=current_salaries.emp_no
AND salary > SOME
(SELECT salary
FROM current_dept_manager, current_salaries
WHERE current_dept_manager.emp_no = current_salaries.emp_no)
AND employees.emp_no NOT IN (SELECT emp_no FROM current_dept_manager)
8. Listar los nombres de los empleados que ganan más que TODOS los jefes(no
importa si no es su jefe)
SELECT employees.emp_no, first_name, Last_name
FROM employees,current_salaries
WHERE employees.emp_no=current_salaries.emp_no
AND salary > ALL
(SELECT salary
FROM current_dept_manager, current_salaries
WHERE current_dept_manager.emp_no = current_salaries.emp_no)
AND employees.emp_no NOT IN (SELECT emp_no FROM current_dept_manager)

9. Listar los alumnos de computación o que no hay devuelto algún libro


SELECT IDestudiante, nombre
FROM estudiante
WHERE carrera = "Computación" AND IDestudiante IN
(SELECT DISTINCT IDestudiante
FROM prestamo
WHERE devuelto = false)

OR

SELECT IDestudiante, nombre


FROM estudiante, libro
WHERE carrera = "Computación" AND EXISTS
(SELECT IDestudiante
FROM prestamo
WHERE devuelto = false AND estudiante. IDestudiante=prestamo. IDestudiante
)

9. Listar los empleados que han trabajado en todos los mismos puestos que Susuma
Hardjono.
DIVIDENDO: Todos los empleados con sus puestos
DIVISOR: Todos los puestos de Susuma Hardjono

SELECT emp_no, first_name, last_name


FROM employees AS E
WHERE NOT EXISTS(
SELECT title
FROM employees AS E,titles AS T
WHERE E.emp_no=T.emp_no AND first_name = "Susuma" AND last_name =
"Hardjono"
AND title NOT IN
(SELECT title
FROM titles AS T
WHERE T.emp_no = E.emp_no
)
)
*Para cada 1
10. Listar los países que hablan oficialmente todos los idiomas oficiales de Canadá.

DIVIDENDO: Todos los países con sus idiomas.


DIVISOR: Todos los idiomas oficiales de Canadá.

SELECT DISTINCT Name


FROM country AS Cou
WHERE NOT EXISTS(
SELECT Language
FROM country_language AS CL,country AS C
WHERE CL.CountryCode =C.Code AND Name="Canada" AND IsOfficial = True
AND Language NOT IN
(SELECT Language
FROM country_language AS CA
WHERE CA.CountryCode =Cou.Code AND IsOfficial=TRUE
)
)
AND Name!="Canada"

BYCICLES
1. Obtener first_name de los clientes cuyo first_name empiece con “a” y contenga una
letra “e” en otro lado
SELECT first_name
FROM customers
WHERE first_name LIKE "a%e%"

2. Sacar el id y nombre del producto que tenga más producto en stock en TOTAL
WITH T AS(SELECT product_id,product_name, sum(quantity) AS Cantidad
FROM stocks natural join products
natural Join stores
Group by product_id)

SELECT product_name, Cantidad


FROM T WHERE Cantidad IN
(SELECT MAX(Cantidad)
FROM T)
3. Listar el nombre de los artículos que nunca han sido vendidos
Select product_name
FROM products
WHERE product_id NOT IN(
SELECT product_id
FROM order_items
)
ORDER BY product_name

4. Listar los productos vendidos tanto por 'Rowlett Bikes' como por 'Santa Cruz Bikes'
SELECT DISTINCT product_id,product_name
FROM stores NATURAL JOIN orders NATURAL JOIN order_items NATURAL JOIN
products
WHERE store_name="Santa Cruz Bikes" AND
product_id IN (
SELECT product_id
FROM stores NATURAL JOIN orders NATURAL JOIN order_items NATURAL
JOIN products
WHERE store_name="Rowlett Bikes"
)
order by product_name

5. Listar las tiendas que venden productos de todas las categorías existentes
Dividendo: Listar todas las tiendas y que categorías venden
Divisor: Todas las categorías existentes
SELECT DISTINCT store_name
FROM stores AS S
WHERE NOT EXISTS(
SELECT category_id
FROM categories
WHERE category_id NOT IN
(SELECT category_id
FROM stocks NATURAL JOIN products
WHERE S.store_id = stocks.store_id
)
)
6. Listar los clientes que no ordenaron nada durante el 2017
SELECT DISTINCT customer_id, first_name, last_name
FROM customers NATURAL JOIN orders
WHERE customer_id NOT IN
(
SELECT DISTINCT customer_id
FROM orders
WHERE order_date LIKE "2017%"
)

7. Listar los clientes que tengan todas la vocales en su nombre, tomando en cuenta
first_name y last_name juntas
SELECT
customer_id, first_name, last_name
FROM
customers
WHERE
(CONCAT(first_name, last_name) LIKE '%a%'
AND CONCAT(first_name, last_name) LIKE '%e%'
AND CONCAT(first_name, last_name) LIKE '%i%'
AND CONCAT(first_name, last_name) LIKE '%o%'
AND CONCAT(first_name, last_name) LIKE '%u%')

8. D
SELECT COUNT(customer_id) AS conteo
FROM (
SELECT customer_id, first_name, last_name
FROM customers AS C
WHERE NOT EXISTS (
SELECT product_id
FROM customers NATURAL JOIN orders NATURAL JOIN order_items
WHERE first_name="Violet" AND last_name="Valenzuela" AND
product_id NOT IN (
SELECT product_id
FROM orders NATURAL JOIN order_items
WHERE C.customer_id=orders.customer_id
)
) AND customer_id NOT IN (
SELECT customer_id
FROM customers NATURAL JOIN orders NATURAL JOIN order_items
WHERE product_id IN (
SELECT product_id
FROM customers NATURAL JOIN orders NATURAL JOIN
order_items
WHERE first_name="Tobie" AND last_name="Little"
)
)
) AS X
WHERE first_name="Violet" AND last_name="Valenzuela"
9. Mostrar los clientes (first name y last name) cuyo código postal comienza por 8 que
han visto todas las categorías de películas registrados. Muestra también el código
postal y ordena por éste ascendentemente.
R(tuplas)=3
SELECT first_name, last_name, postal_code
FROM customer AS C
NATURAL JOIN address AS A
WHERE NOT EXISTS(
SELECT DISTINCT category
FROM film
WHERE category NOT IN (
SELECT category
FROM film AS FT NATURAL JOIN rental AS R NATURAL JOIN inventory AS I
WHERE C.customer_id = R.customer_id
)
) AND postal_code LIKE "8%"
ORDER BY postal_code ASC

4. Mostrar los títulos de las películas de la categoría Travel que nunca han sido
rentadas durante el año 2006. Ordenar alfabéticamente.
SELECT title
FROM film
WHERE film_id NOT IN(
SELECT film_id
FROM film NATURAL JOIN inventory NATURAL JOIN rental
WHERE rental_date LIKE "2006%"
) AND category = "Travel"
ORDER BY title

También podría gustarte