SQL avançado
Não faz muito tempo criei um tutorial de SQL para iniciantes, você pode ler aqui . Hoje é hora de falar sobre tópicos mais avançados, como operadores GROUP BY e HAVING, instrução MERGE e stored procedures.
GRUPO POR
A cláusula GROUP BY no SQL é usada para agrupar linhas em um conjunto de resultados com base em uma ou mais colunas. Geralmente é usado em conjunto com funções de agregação como COUNT, SUM, AVG, MIN e MAX para calcular valores para cada grupo.
SELECT category, SUM(sales)
FROM orders
GROUP BY category;
Outro exemplo:
SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;
É importante observar que você deve utilizar funções de agregação em quaisquer colunas que escolher que não sejam cobertas pela cláusula GROUP BY para evitar receber um erro. Além disso, é importante lembrar que as colunas na cláusula GROUP BY são as que definem os grupos; a ordem das colunas na instrução SELECT não tem relação com o conjunto de resultados.
TENDO
Com base nas condições da função agregada, os grupos de linhas em um conjunto de resultados podem ser filtrados usando a cláusula HAVING no SQL. Geralmente é combinado com a cláusula GROUP BY para eliminar grupos que não atendem a requisitos específicos.
Por exemplo, considere a seguinte consulta SQL que seleciona o total de vendas para cada categoria de produto em uma ordertabela de amostra e retorna apenas as categorias com vendas totais maiores que 1.000:
SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;
Outro exemplo:
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;
Semelhante à cláusula WHERE, a cláusula HAVING é usada para filtrar grupos depois que a cláusula GROUP BY os produziu e as funções de agregação foram aplicadas.
MERGE
A instrução SQL MERGE é usada para atualizar ou inserir dados em uma tabela de destino com base nos dados de uma tabela de origem ou para combinar dados de duas ou mais tabelas em uma única tabela. É freqüentemente usado como uma alternativa para instruções que combinam INSERT, UPDATE e DELETE.
Sintaxe:
MERGE INTO target_table
USING source_table
ON (join_condition)
WHEN MATCHED THEN
UPDATE SET target_table.column1 = source_table.column1, ...
WHEN NOT MATCHED THEN
INSERT (column1, column2, ...)
VALUES (source_table.column1, source_table.column2, ...)
MERGE INTO products
USING prices
ON (products.product_id = prices.product_id)
WHEN MATCHED THEN
UPDATE SET products.price = prices.price;
MERGE INTO employees
USING temp_employees
ON (employees.employee_id = temp_employees.employee_id)
WHEN MATCHED THEN
UPDATE SET employees.salary = temp_employees.salary
WHEN NOT MATCHED THEN
INSERT (employee_id, first_name, last_name, department, salary)
VALUES (temp_employees.employee_id, temp_employees.first_name, temp_employees.last_name, temp_employees.department, temp_employees.salary);
Alguns sistemas de gerenciamento de banco de dados, como MySQL e SQLite, não suportam a instrução MERGE, então você precisa usar a combinação das instruções INSERT, UPDATE e DELETE.
O comando MERGE deve ser testado em um pequeno subconjunto de dados antes de ser usado na tabela inteira porque pode ter um grande impacto no desempenho em tabelas grandes.
Procedimentos armazenados
Um grupo pré-compilado de instruções SQL que são mantidas em um banco de dados como um procedimento armazenado. Eles geralmente são empregados para realizar uma tarefa específica ou uma coleção de atividades, como obter informações de um banco de dados ou fazer cálculos complicados. Em comparação com a execução de várias instruções SQL separadas, os procedimentos armazenados são mais versáteis e eficazes, pois podem receber parâmetros de entrada e retornar valores de saída.
Aqui está um exemplo de um procedimento armazenado simples que recupera todas as linhas de uma tabela employees:
CREATE PROCEDURE GetAllEmployees
AS
BEGIN
SELECT * FROM employees;
END
EXEC GetAllEmployees;
Apoie nossa publicação seguindo-a
Consulte também os seguintes artigos.
Perguntas e respostas da entrevista da API Java 8 Stream




































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)