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:
, , . .
: , , .
, ,
:
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.