Jessica Zanelato/ junho 25, 2019/ Blog/ 0 comments

SQL é, em tradução livre, uma linguagem de consulta estruturada criada pela IBM na década de 1970 com o objetivo de demonstrar a viabilidade da implementação do modelo relacional proposto por E. F. Codd. SQL é uma linguagem declarativa, o que reduz em muito a curva de aprendizado daqueles que querem aprendê-la.

Embora a linguagem SQL seja padronizada por instituições como ANSI e ISO, possui muitas variações e extensões produzidas pelos diferentes fabricantes de sistemas gerenciadores de bases de dados. Neste artigo abordaremos a linguagem SQL de forma genérica, porém é importante que você leia a documentação do SGDB que irá usar para conhecer suas especificações.

Categoria de comandos SQL

Os comandos SQL podem ser dividios em 3 categorias, sendo elas:

  • DDL (Data Definition Language ou Linguagem de Definição de Dados) é usada para estruturar, criar, modificar e remover tabelas ou databases. Exemplo:
    • CREATE DATABASE, CREATE TABLE
    • DROP DATABASE, DROP TABLE
    • ALTER DATABASE, ALTER TABLE
  • DML (Data Manipulation Language ou Linguagem de Manipulação de Dados) é usada para a recuperar, inserir, remover e alterar dados que estejam inseridos na Base de Dados. Exemplo:
    • SELECT
    • INSERT
    • UPDATE
    • DELETE
  • DCL (Data Control Language ou Linguagem de Controle de Dados) é usada pela pessoa administradora da Base de Dados para controlar o acesso dos usuários.
    • GRANT: Permite dar permissões a um ou mais usuários e determinar as regras para tarefas determinadas;
    • REVOKE: Revoga permissões dadas por um GRANT.

Comandos DML

SELECT

Em um banco de dados, selecionar dados significa efetuar uma consulta utilizando um comando que retornará as informações solicitadas se existirem. Para efetuar estas consultas utilizamos o comando SELECT.

Sintaxe básica:

SELECT Nome_campo FROM  Nome_Tabela [WHERE  condição];

O comando SELECT deve conter o nome do campo e o nome da tabela, opcionalmente você poderá utilizar o WHERE para definir as condições de retorno. Caso queira retornar todos os campos, basta utilizar asterico, como no exemplo abaixo.

SELECT * FROM  Nome_Tabela [WHERE  condição];

Caso queira testar os comandos apresentados neste artigo e não tenha um banco de dados local, você poderá acessar o editor SQL da W3Schools.

ORDENAÇÃO

Podemos ordenar o resultado da nossa consulta por um ou mais campos utilizando o comando ORDER BY após o WHERE (caso exista). A ordenação poderá ser de forma crescente (ASC) ou decrescente (DESC) para cada campo. Da seguinte forma:

SELECT CustomerName, City FROM Customers ORDER BY City DESC, CustomerName DESC;

AGRUPAMENTO

Podemos tbm agrupar dados utilizando o comando GROUP BY que permite unir em uma única linha todas as linhas selecionadas que possuam os mesmos valores. Da seguinte forma:

SELECT Country FROM Customers GROUP BY Country;

FUNÇÕES DE AGREGAÇÃO

SUM (soma de um campo numérico):

SELECT SUM(Price), CategoryID FROM Products GROUP BY CategoryID;

AVG (média de um campo numérico):

SELECT AVG(Price), CategoryID FROM Products GROUP BY CategoryID;

COUNT (quantidade de linhas retornadas pela consulta):

SELECT COUNT(*), Country FROM Customers GROUP BY Country;

MAX (valor máximo de uma coluna):

SELECT MAX(Price), CategoryID FROM Products GROUP BY CategoryID;

MIN (valor mínimo de uma coluna):

SELECT MIN(Price), CategoryID FROM Products GROUP BY CategoryID;

DISTINCT (retorna apenas dados diferentes das colunas por linha):

SELECT DISTINCT Country FROM Customers;

HAVING

O comando HAVING seleciona grupos de linhas após as agregações e agrupamentos serem efetuados. Diferente do WHERE que seleciona apenas as linhas que contém um determinado valor antes do agrupamento.

SELECT count(*) as Total, Country FROM Customers GROUP BY Country HAVING Total > 10;

JUNÇÕES

Em um banco de dados podemos ter duas ou mais tabelas relacionadas. É comum ao elaborarmos uma consulta termos a necessidade de trazer dados de diferentes tabelas. Para criarmos esta seleção devemos definir os critérios de agrupamento. Estes critérios são chamados de Junções (JOIN). Uma junção de tabelas cria uma pseudo-tabela derivada de duas ou mais tabelas de acordo com as regras especificadas, o que lembra as regras de teoria dos conjuntos.

Teoria de conjuntos

Teoria de Conjuntos

Junção de produto cartesiano

Uma junção de produto cartesiano é uma junção entre duas tabelas que origina uma terceira tabela constituída por todos os elementos da primeira combinadas com todos os elementos da segunda.

SELECT ProductId, ProductName, CategoryName
FROM Products, Categories
WHERE Products.CategoryID = Categories.CategoryID;
SELECT max(Price), Categories.CategoryName FROM Products, Categories
WHERE Products.CategoryID = Categories.CategoryID
GROUP BY Categories.CategoryName;

Junção interna (INNER JOIN)

Uma Junção Interna é caracterizada por uma seleção que retorna apenas os dados que atendem às condições de junção, isto é, quais linhas de uma tabela se relacionam com as linhas de outras tabelas. Para isto utilizamos a cláusula ON, que é semelhante à cláusula WHERE. Quando não existem dados que atendem as condições especificadas, eles não são retornados.

SELECT ProductId, ProductName, CategoryName 
FROM Products INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;
SELECT max(Price), Categories.CategoryName 
FROM Products INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID
GROUP BY Categories.CategoryName;

Junção externa (OUTER JOIN)

Uma Junção Externa é uma seleção que não requer que os registros de uma tabela possuam registros equivalentes em outra. O registro é mantido na pseudo-tabela se não existe outro registro que lhe corresponda. Este tipo de junção se subdivide dependendo da tabela do qual admitiremos os registros que não possuem correspondência: a tabela esquerda, a direita ou ambas.

LEFT OUTER JOIN

O resultado desta seleção sempre contém todos os registros da tabela esquerda (isto é, a primeira tabela mencionada na consulta), mesmo quando não exista registros correspondentes na tabela direita. Desta forma, esta seleção retorna todos os valores da tabela esquerda com os valores da tabela direita correspondente, ou quando não há correspondência retorna um valor NULL.

SELECT ProductId, ProductName, CategoryName 
FROM Products LEFT JOIN Categories ON Products.CategoryID = Categories.CategoryID;
SELECT max(Price), Categories.CategoryName
FROM Products
LEFT JOIN Categories ON Products.CategoryID = Categories.CategoryID
GROUP BY Categories.CategoryName;

RIGHT OUTER JOIN

Esta operação é inversa à anterior e retorna sempre todos os registos da tabela à direita (a segunda tabela mencionada na consulta), mesmo se não existir registo correspondente na tabela à esquerda. Nestes casos, o valor NULL é retornado quando não há correspondência.

SELECT ProductId, ProductName, CategoryName 
FROM Products RIGHT JOIN Categories ON Products.CategoryID = Categories.CategoryID;

Observação: comando não suportado pelo editor do W3Schools

FULL OUTER JOIN

Esta operação apresenta todos os dados das tabelas à esquerda e à direita, mesmo que não possuam correspondência em outra tabela. A tabela combinada possuirá assim todos os registros de ambas as tabelas e apresentará valores nulos para os registros sem correspondência.

SELECT ProductId, ProductName, CategoryName 
FROM Products FULL OUTER JOIN Categories ON Products.CategoryID = Categories.CategoryID;

Observação: comando não suportado pelo editor do W3Schools

RESUMO EM IMAGEM

Exemplo de diferente tipos de Junções

Junções

INSERT

Inserir dados em uma tabela significa preencher uma linha de determinada tabela com dados correspondentes ao suportado pela tabela. Esta inserção de dados deve seguir as regras de integridade da tabela, assim como respeitar as regras de chave primária estabelecidas na tabela.

Sintaxe básica:

INSERT INTO Nome_Tabela VALUES (valor 1, valor2, valor3,...);

ou

INSERT INTO Nome_Tabela (coluna_a, coluna_b) VALUES (valor_a, valor_b);

Exemplo:

INSERT INTO Categories (CategoryName, Description) VALUES ('Test', 'Test Description');

UPDATE

Em um banco de dados, alterar dados de uma tabela significa atualizar um dado de uma determinada tabela, por outro dado de mesmo tipo daquele que é atualizado.

Sintaxe básica:

UPDATE Nome_Tabela  SET coluna a ser atualizada= valor atualizado [WHERE condição];

Exemplo:

UPDATE Categories SET Description = 'Test Better Description' WHERE CategoryName = 'Test';

Observação: o WHERE é opcional no comando UPDATE, caso não seja usado causará a atualização de todos os dados de uma coluna ou mais da tabela.

DELETE

Em um banco de dados, apagar dados de uma tabela significa eliminar um dado ou todos de uma determinada tabela. Para isto utilizamos a instrução DELETE.

Sintaxe básica:

DELETE FROM Nome_Tabela [WHERE condição ];

Exemplo:

DELETE FROM Categories WHERE CategoryName = 'Test';

Observação: o WHERE é opcional no comando DELETE, caso não seja usado causará a remoção de todos os dados da tabela.

Share this Post

Leave a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*
*