Advertisement
vinicius_oliveira

Untitled

May 24th, 2022
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.87 KB | None | 0 0
  1. use ex9
  2. --1) Consultar nome, valor unitário, nome da editora e nome do autor dos livros do estoque que foram vendidos. Não podem haver repetições. 
  3. SELECT DISTINCT
  4.     est.nome AS 'nome livro'
  5.     , est.valor
  6.     , edt.nome AS 'nome editora'
  7.     , aut.nome AS 'nome autor'
  8. FROM estoque AS est
  9.     INNER JOIN compra AS cp
  10.         ON cp.codEstoque = est.codigo
  11.     INNER JOIN autor AS aut
  12.         ON aut.codigo = est.codAutor
  13.     INNER JOIN editora AS edt
  14.         ON edt.codigo = est.codEditora
  15. ORDER BY est.nome
  16.            
  17. --2) Consultar nome do livro, quantidade comprada e valor de compra da compra 15051
  18. SELECT
  19.     est.nome
  20.     , com.qtdComprada
  21.     , com.valor
  22. FROM estoque AS est
  23.     INNER JOIN compra as com
  24.         ON com.codEstoque = est.codigo
  25. WHERE com.codigo = 15051
  26.  
  27. --3) Consultar Nome do livro e site da editora dos livros da Makron books (Caso o site tenha mais de 10 dígitos, remover o www.).
  28. SELECT
  29.     est.nome AS 'nome livro'
  30.     , CASE WHEN (LEN(edt.site) > 10)
  31.         THEN
  32.             SUBSTRING(edt.site,5,(LEN(edt.site)-4))
  33.         ELSE
  34.             edt.site
  35.         END AS 'site'
  36. FROM estoque AS est
  37.     INNER JOIN editora AS edt
  38.         ON edt.codigo = est.codEditora
  39. WHERE edt.nome = 'Makron Books'
  40.  
  41. --4) Consultar nome do livro e Breve Biografia do David Halliday   
  42. SELECT
  43.     est.nome AS 'nome do livro'
  44.     ,   aut.nome AS 'nome do autor'
  45.     ,   aut.biografia
  46. FROM estoque AS est
  47.     INNER JOIN autor AS aut
  48.         ON aut.codigo = est.codAutor
  49. WHERE aut.nome = 'David Halliday'
  50.  
  51. --5) Consultar código de compra e quantidade comprada do livro Sistemas Operacionais Modernos
  52. SELECT
  53.     com.codigo
  54.     , com.qtdComprada
  55. FROM compra AS com
  56.     INNER JOIN estoque AS est
  57.         ON com.codEstoque = est.codigo
  58. WHERE est.nome = 'Sistemas Operacionais Modernos'
  59.  
  60. --6) Consultar quais livros não foram vendidos
  61. SELECT
  62.     est.codigo
  63.     , est.nome
  64. FROM estoque AS est
  65.     LEFT OUTER JOIN compra AS com
  66.         ON com.codEstoque = est.codigo
  67. WHERE com.codigo IS NULL
  68.    
  69. --7) Consultar quais livros foram vendidos e não estão cadastrados   
  70. SELECT
  71.     est.codigo
  72.     , est.nome
  73.     , com.codigo
  74.     , com.codEstoque
  75.     , com.qtdComprada
  76.     , com.valor
  77.     , com.dataCompra
  78. FROM compra AS com
  79.     LEFT OUTER JOIN estoque AS est
  80.         ON com.codEstoque = est.codigo
  81. WHERE est.codigo IS NULL
  82. --8) Consultar Nome e site da editora que não tem Livros no estoque (Caso o site tenha mais de 10 dígitos, remover o www.)   
  83. SELECT
  84.     edt.nome
  85.     , CASE WHEN (LEN(edt.site) > 10)
  86.         THEN
  87.             SUBSTRING(edt.site,5,(LEN(edt.site)-4))
  88.         ELSE
  89.             edt.site
  90.         END AS 'site'
  91. FROM editora AS edt
  92.     LEFT OUTER JOIN estoque AS est
  93.         ON est.codEditora = edt.codigo
  94. WHERE est.codigo IS NULL
  95. --9) Consultar Nome e biografia do autor que não tem Livros no estoque (Caso a biografia inicie com Doutorado, substituir por Ph.D.)
  96. SELECT
  97.     aut.nome
  98.     , CASE WHEN (aut.biografia LIKE 'Doutorado%')
  99.         THEN
  100.             'Ph.D.' + SUBSTRING(aut.biografia,10,(LEN(aut.biografia)-9))
  101.         ELSE
  102.             aut.biografia
  103.         END AS 'biografia'
  104. FROM autor as aut
  105.     LEFT OUTER JOIN estoque AS est
  106.         ON est.codAutor = aut.codigo
  107. WHERE est.codigo IS NULL
  108. --10) Consultar o nome do Autor, e o maior valor de Livro no estoque. Ordenar por valor descendente
  109. SELECT
  110.     aut.nome
  111.     , MAX(est.valor) AS maior_valor
  112. FROM autor AS aut
  113.     INNER JOIN estoque AS est
  114.         ON est.codAutor = aut.codigo
  115. GROUP BY aut.nome
  116. ORDER BY maior_valor DESC
  117.  
  118. --11) Consultar o código da compra, o total de livros comprados e a soma dos valores gastos. Ordenar por Código da Compra ascendente.
  119. SELECT
  120.     com.codigo
  121.     , SUM(com.qtdComprada) AS 'total de livros comprados'
  122.     , SUM(com.valor) AS 'soma dos valores gastos'
  123. FROM compra AS com
  124. GROUP BY com.codigo
  125. ORDER BY com.codigo
  126. --12) Consultar o nome da editora e a média de preços dos livros em estoque.Ordenar pela Média de Valores ascendente.   
  127. SELECT
  128.     edt.nome
  129.     , CAST(AVG(est.valor) AS DECIMAL(4,1)) AS media
  130. FROM editora AS edt
  131.     INNER JOIN estoque as est
  132.         ON est.codEditora = edt.codigo
  133. GROUP BY edt.nome
  134. ORDER BY media
  135. --13) Consultar o nome do Livro, a quantidade em estoque o nome da editora, o site da editora (Caso o site tenha mais de 10 dígitos, remover o www.), criar uma coluna status onde:   
  136.     --Caso tenha menos de 5 livros em estoque, escrever Produto em Ponto de Pedido
  137.     --Caso tenha entre 5 e 10 livros em estoque, escrever Produto Acabando
  138.     --Caso tenha mais de 10 livros em estoque, escrever Estoque Suficiente
  139.     --A Ordenação deve ser por Quantidade ascendente
  140. SELECT
  141.     est.nome AS nome_livro
  142.     , edt.nome AS nome_editora
  143.     , CASE WHEN (LEN(edt.site) > 10)
  144.         THEN
  145.             SUBSTRING(edt.site,5,(LEN(edt.site)-4))
  146.         ELSE
  147.             edt.site
  148.         END AS 'site'
  149.     , CASE WHEN (est.quantidade < 5)
  150.          THEN
  151.             'Produto em Ponto de Pedido'
  152.         WHEN (est.quantidade < 11)
  153.          THEN
  154.             'Produto Acabando'
  155.         ELSE
  156.             'Estoque Suficiente'
  157.       END AS 'status'
  158. FROM estoque AS est
  159.     INNER JOIN editora AS edt
  160.         ON edt.codigo = est.codEditora
  161. ORDER BY est.quantidade
  162.  
  163. --14) Para montar um relatório, é necessário montar uma consulta com a seguinte saída: Código do Livro, Nome do Livro, Nome do Autor, Info Editora (Nome da Editora + Site) de todos os livros
  164.     --Só pode concatenar sites que não são nulos
  165. SELECT
  166.     est.codigo AS cod_livro
  167.     , est.nome AS nome_livro
  168.     , aut.nome AS nome_autor
  169.     , CASE WHEN (edt.site IS NOT NULL)
  170.         THEN
  171.             edt.nome + ' - ' + edt.site
  172.         ELSE
  173.             edt.nome
  174.         END AS 'Info Editora'
  175. FROM estoque AS est
  176.     INNER JOIN autor AS aut
  177.         ON aut.codigo = est.codAutor
  178.     INNER JOIN editora AS edt
  179.         ON edt.codigo = est.codEditora
  180. --15) Consultar Codigo da compra, quantos dias da compra até hoje e quantos meses da compra até hoje
  181. SELECT
  182.     com.codigo
  183.     , DATEDIFF(DAY,com.dataCompra,GETDATE()) AS 'dias da compra até hoje'
  184.     , DATEDIFF(MONTH,com.dataCompra,GETDATE()) AS 'meses da compra até hoje'
  185. FROM compra as com
  186.  
  187. --16) Consultar o código da compra e a soma dos valores gastos das compras que somam mais de 200.00   
  188. SELECT
  189.     com.codigo
  190.     , SUM(com.valor) as 'valor'
  191. FROM compra AS com
  192. GROUP BY com.codigo
  193. HAVING SUM(com.valor) > 200
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement