Skip to content

Commit 7be0733

Browse files
committed
cm
1 parent def7095 commit 7be0733

File tree

2 files changed

+69
-33
lines changed

2 files changed

+69
-33
lines changed

README.md

Lines changed: 69 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1676,70 +1676,106 @@ INSERT INTO Order_Items (id_order, id_product, quantity, unit_value) VALUES (
16761676

16771677
## 13. SQL Simple Queries
16781678

1679-
-- 1. Listar todos os clientes que não têm canal de aquisição definido (NULL)
1680-
SELECT id_cliente, nome, canal_aquisicao
1679+
1. List all clients with no acquisition channel defined (NULL)
1680+
1681+
```sql
1682+
SELECT id_cliente, nome, canal_aquisicao
16811683
FROM Clientes
16821684
WHERE canal_aquisicao IS NULL;
1685+
```
16831686

1684-
-- 2. Listar os 10 clientes mais recentes (por ordem decrescente de data de criação)
1687+
2. List the 10 most recently created clients (descending by creation date)
1688+
1689+
```sql
16851690
SELECT id_cliente, nome, data_criacao
16861691
FROM Clientes
16871692
ORDER BY data_criacao DESC
16881693
LIMIT 10;
1694+
```
16891695

1690-
-- 3. Mostrar todos os produtos cujo nome contém "Gold"
1696+
3. Show all products whose name contains "Gold"
1697+
1698+
```sql
16911699
SELECT id_produto, designacao
16921700
FROM Produtos
16931701
WHERE designacao LIKE '%Gold%';
1702+
```
16941703

1695-
-- 4. Listar produtos do tipo cerveja com preço entre 2.5 e 4.0 EUR
1704+
4. List beer products priced between 2.5 and 4.0 EUR
1705+
1706+
```sql
16961707
SELECT id_produto, designacao, preco_venda
16971708
FROM Produtos
16981709
WHERE tipo_de_produto = 'cerveja'
16991710
AND preco_venda BETWEEN 2.5 AND 4.0
17001711
ORDER BY preco_venda ASC;
1712+
```
17011713

1702-
-- 5. Quantidade de clientes por canal de aquisição (GROUP BY e COUNT)
1714+
5. Count of clients by acquisition channel
1715+
1716+
```sql
17031717
SELECT canal_aquisicao, COUNT(*) AS total_clientes
17041718
FROM Clientes
17051719
GROUP BY canal_aquisicao
17061720
ORDER BY total_clientes DESC;
1721+
```
17071722

1708-
-- 6. Listar clientes cujo nome começa por "A"
1723+
6. List clients whose name starts with "A"
1724+
1725+
```sql
17091726
SELECT id_cliente, nome
17101727
FROM Clientes
17111728
WHERE nome LIKE 'A%';
1729+
```
17121730

1713-
-- 7. Mostrar fornecedores com email que termina em ".pt"
1731+
7. Show suppliers with email ending in ".pt"
1732+
1733+
```sql
17141734
SELECT id_fornecedor, nome_empresa
17151735
FROM Fornecedores
17161736
WHERE email LIKE '%.pt';
1737+
```
17171738

1718-
-- 8. Listar encomendas pendentes de pagamento (AND/OR e DESC)
1739+
8. List orders pending payment (descending order date)
1740+
1741+
```sql
17191742
SELECT id_encomenda, id_fornecedor, estado_pagamento, data_encomenda
17201743
FROM encomendas
17211744
WHERE estado_pagamento = 'pendente'
17221745
ORDER BY data_encomenda DESC;
1746+
```
1747+
1748+
9. Show clients subscribed to newsletter and who authorized GDPR
17231749

1724-
-- 9. Mostrar clientes que recebem newsletter e autorizaram GDPR
1750+
```sql
17251751
SELECT id_cliente, nome
17261752
FROM Clientes
17271753
WHERE newsletter = 1 AND autorizacao = 1;
1754+
```
1755+
1756+
10. List products with stock below minimum level
17281757

1729-
-- 10. Listar produtos com stock abaixo do mínimo
1758+
```sql
17301759
SELECT id_produto, designacao, stock_atual, stock_minimo
17311760
FROM Produtos
17321761
WHERE stock_atual < stock_minimo;
1762+
```
1763+
1764+
11. Distinct products of type "snacks"
17331765

1734-
-- 11. Produtos distintos do tipo “snacks”
1766+
```sql
17351767
SELECT DISTINCT designacao, tipo_de_produto
17361768
FROM Produtos
17371769
WHERE tipo_de_produto = 'snacks';
1770+
```
1771+
1772+
12. Show employees whose phone does NOT start with "91"
17381773

1739-
-- 12. Mostrar todos os funcionários cujo telemóvel NÃO começa por “91”
1774+
```sql
17401775
SELECT id_funcionario, nome, nr_telemovel
17411776
FROM Funcionarios
17421777
WHERE NOT nr_telemovel LIKE '91%';
1778+
```
17431779

17441780
-- 13. Clientes cujo NIF está entre 100000000 e 200000000 (BETWEEN)
17451781
SELECT id_cliente, nome, nif
@@ -1892,22 +1928,22 @@ WHERE estado_pagamento IS 'pendente';
18921928
SELECT DISTINCT canal_aquisicao
18931929
FROM Clientes;
18941930

1895-
SELECT
1931+
SELECT
18961932
moeda, -- Tipo de moeda usada no pagamento
18971933
COUNT(*) AS total_pagamentos -- Contagem de pagamentos por moeda
18981934
FROM Pagamentos -- Origem dos dados
18991935
GROUP BY moeda -- Agrupa por moeda
19001936
HAVING COUNT(*) < 5; -- Filtra apenas moedas com menos de 5 pagamentos
19011937

19021938
-- Listar fornecedores cujo nome inclua a palavra "brew", sem diferenciar maiúsculas de minúsculas
1903-
SELECT
1939+
SELECT
19041940
id_fornecedor, -- ID do fornecedor
19051941
nome_empresa -- Nome da empresa fornecedora
19061942
FROM Fornecedores -- Origem dos fornecedores
19071943
WHERE nome_empresa ILIKE '%brew%'; -- Pesquisa sem considerar maiúsculas/minúsculas
19081944

19091945
-- Lista os clientes que fizeram mais do que 3 compras concluídas e quanto gastaram no total
1910-
SELECT
1946+
SELECT
19111947
id_cliente, -- ID do cliente
19121948
COUNT(*) AS total_compras, -- Nº total de compras
19131949
ROUND(SUM(valor), 2) AS total_gasto -- Soma do valor total gasto
@@ -1918,18 +1954,18 @@ HAVING COUNT(*) > 1 -- Apenas quem comprou mais de
19181954
ORDER BY total_compras DESC; -- Ordenar por quem mais comprou
19191955

19201956
-- Lista os produtos com preço de venda entre 5€ e 15€, ordenados do mais caro para o mais barato
1921-
SELECT
1957+
SELECT
19221958
id_produto, -- ID do produto
19231959
designacao, -- Nome/designação do produto
19241960
preco_venda -- Preço de venda do produto
19251961
FROM Produtos -- Origem: tabela de produtos
19261962
WHERE preco_venda BETWEEN 2 AND 3 -- Apenas produtos cujo preço está entre 2 e 3 euros
19271963
ORDER BY preco_venda DESC; -- Ordena do preço mais alto para o mais baixo
1928-
1964+
19291965
## 14. SQL Advanced Queries
19301966

19311967
-- Seleciona os 10 clientes com maior número de compras (visitas)
1932-
SELECT
1968+
SELECT
19331969
c.id_cliente, -- ID do cliente
19341970
c.nome, -- Nome do cliente
19351971
COUNT(p.id_pagamento) AS frequencia_visitas -- Conta o nº total de pagamentos realizados
@@ -1943,63 +1979,63 @@ ORDER BY frequencia_visitas DESC -- Ordena dos clientes mais frequentes para
19431979
LIMIT 10; -- Mostra apenas os 10 primeiros resultados
19441980

19451981
-- Seleciona os 10 clientes que mais compram em média (em unidades de produto por compra)
1946-
SELECT
1982+
SELECT
19471983
c.id_cliente, -- ID do cliente
19481984
c.nome, -- Nome do cliente
1949-
ROUND(AVG(qtd_por_compra), 2) AS volume_medio_consumo -- Média de unidades por compra
1985+
ROUND(AVG(qtd_por_compra), 2) AS volume_medio_consumo -- Média de unidades por compra
19501986
-- (arredondado a 2 casas decimais)
19511987
FROM (
19521988
-- Subconsulta para calcular a quantidade total de produtos por compra
1953-
SELECT
1989+
SELECT
19541990
p.id_cliente, -- ID do cliente
1955-
SUM(ip.quantidade) AS qtd_por_compra -- Soma da quantidade de produtos comprados
1991+
SUM(ip.quantidade) AS qtd_por_compra -- Soma da quantidade de produtos comprados
19561992
-- nessa compra
19571993
FROM Pagamentos p
1958-
JOIN Itens_Pagamento ip
1994+
JOIN Itens_Pagamento ip
19591995
ON p.id_pagamento = ip.id_pagamento -- Liga pagamento com os seus itens
1960-
GROUP BY p.id_pagamento, p.id_cliente -- Agrupa por compra para calcular total de unidades
1996+
GROUP BY p.id_pagamento, p.id_cliente -- Agrupa por compra para calcular total de unidades
19611997
-- por transação
19621998
) sub
1963-
JOIN Clientes c ON c.id_cliente = sub.id_cliente -- Junta com a tabela de clientes para trazer
1999+
JOIN Clientes c ON c.id_cliente = sub.id_cliente -- Junta com a tabela de clientes para trazer
19642000
-- os nomes
19652001
GROUP BY c.id_cliente, c.nome -- Agrupa novamente para calcular a média por cliente
19662002
ORDER BY volume_medio_consumo DESC -- Ordena dos que mais consomem para menos
19672003
LIMIT 10; -- Mostra apenas os 10 primeiros resultados
19682004

19692005
-- Seleciona os 10 clientes cuja última compra foi mais recente
1970-
SELECT
2006+
SELECT
19712007
c.id_cliente, -- ID do cliente
19722008
c.nome, -- Nome do cliente
19732009
MAX(p.data_pagamento) AS ultima_compra -- Obtém a data mais recente de pagamento
19742010
FROM Clientes c
1975-
LEFT JOIN Pagamentos p
2011+
LEFT JOIN Pagamentos p
19762012
ON c.id_cliente = p.id_cliente -- Liga com a tabela de pagamentos
19772013
GROUP BY c.id_cliente, c.nome -- Agrupa por cliente
19782014
ORDER BY ultima_compra DESC -- Ordena da compra mais recente para a mais antiga
19792015
LIMIT 10; -- Mostra apenas os 10 primeiros resultados
19802016

19812017
-- Seleciona os 10 clientes que mais gastaram no total (€)
1982-
SELECT
2018+
SELECT
19832019
c.id_cliente, -- ID do cliente
19842020
c.nome, -- Nome do cliente
19852021
ROUND(SUM(p.valor), 2) AS total_gasto -- Soma do valor total gasto (apenas compras concluídas)
19862022
FROM Clientes c
1987-
LEFT JOIN Pagamentos p
2023+
LEFT JOIN Pagamentos p
19882024
ON c.id_cliente = p.id_cliente
19892025
AND p.estado_pagamento = 'concluido' -- Filtra apenas pagamentos concluídos
19902026
GROUP BY c.id_cliente, c.nome -- Agrupa por cliente
19912027
ORDER BY total_gasto DESC -- Ordena do maior para o menor gasto
19922028
LIMIT 10; -- Mostra apenas os 10 primeiros resultados
19932029

19942030
-- Seleciona os 10 clientes com maior ticket médio por compra
1995-
SELECT
2031+
SELECT
19962032
c.id_cliente, -- ID do cliente
19972033
c.nome, -- Nome do cliente
19982034
ROUND(AVG(p.valor), 2) AS media_consumo_compra -- Calcula o valor médio gasto por compra
19992035
FROM Clientes c
2000-
LEFT JOIN Pagamentos p
2036+
LEFT JOIN Pagamentos p
20012037
ON c.id_cliente = p.id_cliente
20022038
AND p.estado_pagamento = 'concluido' -- Apenas compras concluídas
20032039
GROUP BY c.id_cliente, c.nome -- Agrupa por cliente
20042040
ORDER BY media_consumo_compra DESC -- Ordena do maior valor médio para o menor
2005-
LIMIT 10; -- Mostra apenas os 10 primeiros resultados
2041+
LIMIT 10; -- Mostra apenas os 10 primeiros resultados

images/ERD_PortalEmprego.png

-86.9 KB
Binary file not shown.

0 commit comments

Comments
 (0)