Criamos um banco de dados usando o exemplo de um serviço de entrega e analisamos consultas SQL

Hoje veremos um banco de dados de exemplo e vários comandos para agregação, agrupamento, classificação, junção de tabelas e muito mais, usando o MySQL como exemplo. Os próprios dados são um conjunto de tabelas com nomes e valores arbitrários. A estrutura das tabelas e seus relacionamentos são apresentados a seguir.





Para entender melhor, você terá um conhecimento inicial desejável de SQL e bancos de dados. Este tutorial o ajudará a estruturar informações, atualizar a memória e pode funcionar como uma folha de dicas que você pode usar quando necessário. Os pedidos para criar todas as tabelas podem ser encontrados aqui .





excel:





Tabela de produtos
"products"
Mesa de clientes
"customers"
Tabela "courier_info"
"courier_info"
A mesa de pedidos
"orders"
A tabela "delivery_list"
"delivery_list"
A tabela "orders_products"
"orders_products"

, , . .





: , , .





Tabela "year_statistics"
Table "year_statistics"

, ,





:





SELECT SUM(amount_of_orders) AS orders_per_year FROM year_statistics;







:





SELECT month_name, amount_of_orders

FROM year_statistics

ORDER BY amount_of_orders DESC;








, :





SELECT month_name, amount_of_orders FROM year_statistics

WHERE amount_of_orders = (SELECT MAX(amount_of_orders)

FROM year_statistics);








:





SELECT district

FROM customers

GROUP BY district

ORDER BY COUNT(district) DESC;








:





SELECT courier_id, COUNT(order_id)

From delivery_list

WHERE date_arrived IS NOT NULL

GROUP BY courier_id;








IN, EXISTS, UNION .





, "South":





SELECT * FROM Customers

WHERE district IN ('South');








, :





SELECT * FROM delivery_list

WHERE taken NOT IN ('Yes');








, :





SELECT menu_name FROM products

WHERE EXISTS

(SELECT * FROM orders_products

WHERE orders_products.product_id = products.product_id);





, :





SELECT menu_name FROM products

WHERE NOT EXISTS

(SELECT * FROM orders_products

WHERE orders_products.product_id = products.product_id);








:





SELECT 'Customer' AS category, first_name, last_name, phone_number

FROM customers

UNION

SELECT 'Employee' AS category, first_name, last_name, phone_number

FROM courier_info;








INNER, NATURAL, CROSS, LEFT JOIN





, (, , ). ROUND, :





SELECT orders_products.order_id, products.menu_name, quantity,

ROUND(price*quantity, 2) AS total_price

FROM orders_products

INNER JOIN products ON orders_products.product_id = products.product_id

ORDER BY order_id, quantity;








, , :





SELECT *, SEC_TO_TIME(TIMESTAMPDIFF(second, date_get, date_arrived))

AS time_of_delivery

FROM orders

NATURAL JOIN delivery_list;








, :





SELECT DISTINCT courier_info.courier_id, customers.district

FROM courier_info

CROSS JOIN customers WHERE courier_info.delivery_type = 'car'

ORDER BY courier_id;








, :





SELECT customers.first_name, customers.last_name,

customers.phone_number, orders.order_id

FROM customers

LEFT JOIN orders ON customers.customer_id = orders.customer_id;












Como resultado, analisamos muitas consultas úteis de busca SQL. Operações básicas e raras foram mostradas. Na verdade, não importa quantos dados em sua tabela sejam dez ou mil, isso não mudará as consultas, mas sempre permanecerá o mesmo. O principal é que o significado seja claro, a quantidade de dados desempenha um papel muito menor. É absolutamente estúpido ter medo e ficar chateado por ainda não ser capaz de obter o pedido desejado. É absolutamente normal se você pesquisar no Google, ler um livro sobre um tópico de interesse e ainda não houver resultado. Isso pode levar de uma dúzia de minutos a dias. Somos todos seres humanos e uma pessoa não pode saber tudo. Seja paciente, pergunte aos seus companheiros, nos fóruns e continue procurando por você mesmo, você terá sucesso! Boa sorte.








All Articles