Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Linguagens internas dos Bancos de Dados

Foi dito no vídeo, que conta a História do SQL , que "A linguagem SQL não é uma linguagem bem estruturada. Para suprir essa falta, os bancos de dados criaram suas linguagens internas que fazem esse tipo de estruturação usando o SQL.". Poderia aprofundar um pouco este assunto. Quais são essas linguagens e qual a importância e necessidade de saber utilizá-las para as pessoas que pretenderem atuar no back-end.

1 resposta
solução!

Oii Telmo, como você está?

Peço desculpas pela demora em obter um retorno.

A maioria dos bancos de dados relacionais utiliza a linguagem SQL (Structured Query Language). A linguagem possui comandos estruturados como mostrados abaixo:

SELECT id, nome FROM tabela WHERE id >= 10;
INSERT INTO tabela VALUES (1, 'joao');
UPDATE tabela SET nome = 'Pedro' WHERE id = 2

Podemos afirmar que a linguagem SQL não é estruturada.

E o que quero dizer com não estruturada?

Uma linguagem estruturada é aquela que possui comandos de desvios. Por exemplo:

var X as string
x = 1
while x > 1
   x += 1
end

Não importa a linguagem usada acima. Mas podemos notar que é uma linguagem estruturada porque possui loopings e comandos de repetição.

Normalmente estas linguagens possui uma estrutura com:

  • Declaração de variáveis;
  • Funções ou procedures;
  • Comandos orientados a objetos;
  • Estruturas de desvio (IF, CASE, etc...);
  • Estruturas de repetições (WHILE, FOR, etc...).

Se observarmos a sintaxe nativa ANSI da linguagem SQL não existem nenhum destes elementos mencionados anteriormente.

Logo podemos afirmar que a linguagem SQL não possui uma estrutura como um linguagem e programação de desenvolvimento. É o padrão ANSI que é seguido por quase a totalidade dos bancos.

Porém bancos de dados como Oracle, SQL Server ou MYSQL, além de suportarem o padrão ANSI de SQL, possuem, cada uma delas, uma linguagem própria estruturada que suporta comandos de SQL.

Estas linguagens não são fiscalizadas pelo padrão ANSI e por isso, cada um possui a sua própria sintaxe.

Mas todas elas mesclam estruturas com comandos SQL.

  • No caso do SQL Server, da Microsoft, temos a linguagem T-SQL. Veja abaixo um exemplo:
USE AdventureWorks2012;  
GO  
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300  
BEGIN  
   UPDATE Production.Product  
      SET ListPrice = ListPrice * 2  
   SELECT MAX(ListPrice) FROM Production.Product  
   IF (SELECT MAX(ListPrice) FROM Production.Product) > $500  
      BREAK  
   ELSE  
      CONTINUE  
END  
PRINT 'Too much for the market to bear';  
  • A Oracle criou o PL-SQL:
CREATE TABLE dept_temp AS SELECT * FROM departments;
DECLARE
  dept_no NUMBER(4) := 270;
BEGIN
  DELETE FROM dept_temp WHERE department_id = dept_no;
  IF SQL%FOUND THEN  -- delete succeeded
    INSERT INTO dept_temp VALUES (270, 'Personnel', 200, 1700);
  END IF;
END;
  • O MYSQL possui sua própria linguagem estruturada, mas sem um nome comercial. Veja um exemplo:
DELIMITER $$

CREATE PROCEDURE LoadCalendars(
    startDate DATE, 
    day INT
)
BEGIN

    DECLARE counter INT DEFAULT 1;
    DECLARE dt DATE DEFAULT startDate;

    WHILE counter <= day DO
        CALL InsertCalendar(dt);
        SET counter = counter + 1;
        SET dt = DATE_ADD(dt,INTERVAL 1 day);
    END WHILE;

END$$

DELIMITER ;

Aqui na Alura oferecemos alguns cursos sobre estas linguagens, destacando:

Lembrando que você deve conhecer a linguagem SQL antes de fazer esses cursos acima.

Agora. Qual a importância do conhecimento destas linguagens no desenvolvimento do BackEnd?

Você deve entender que a execução destes scripts estruturados ocorrem diretamente no banco de dados. Ou seja: Se eu quero executar uma query (Comando SELECT) em uma tabela, percorrer todas a linhas e para cada linha efetuar um INSERT em uma outra tabela, se eu desenvolver isso em T-SQL, PL/SQL ou no MYSQL (Vai depender do banco de dados usado por você) a performance disto será "absurda" . Isso porque está sendo tudo executado a nível de banco de dados.

Se você , usando um JAVA, ou um C#, ou uma outra linguagem qualquer, caso você queira executar a mesma query jogando seu resultado em um Datatable em memória, depois fazer um looping, usando a sua linguagem de programação, onde em cada interação você efetua um INSERT, neste cenário, você vai ter que fazer uma conexão e se comunicar com o banco muitas vezes através de protocolo TCP/IP (Ou HTTP) trocando mensagens entre seu BACK END e o banco de dados. Isso será extremamente lento.

Logo caso performance seja importante basta seu programa BACK END em Java, C#, ou outra linguagem, se conectar no banco e apenas executar o script que foi desenvolvido na linguagem estruturada do banco de dados até ele finalizar.

Espero que isso tenha esclarecido suas dúvidas.

E qualquer dúvida fico a disposição.

Grande abraço e bons estudos!