INTRODUÇÃO
A linguagem SQL (Structured Query Language) foi, sem sombra de dúvida, uma das principais razões do enorme sucesso alcançado pelos SGBD relacionais (SGBDR). Se não a totalidade, a grande maioria dos fornecedores de SGBD relacionais implementam algum dialeto desta linguagem.
Pelo fato de ser o padrão adotado pelos SGBDR, ela permite que esquemas de bancos de dados relacionais sejam migrados entre plataformas (quase) sem problemas. Na prática, apenas aqueles comandos mais utilizados seguem o padrão. Por conta disto, sempre que há migração de plataformas, algum(ns) ajuste(s) deve(m) ser feito(s).
A linguagem SQL é uma linguagem de domínio específico (DSL – Domains Specific Language), isto é, ela foi criada com o propósito específico de manipular objetos em bancos de dados relacionais. SQL também é uma linguagem declarativa. Isto significa que os “programas” (scripts) em SQL se preocupam em definir o “que” e não o “como”.
A linguagem SQL é dividida em sublinguagens, de acordo com o tipo de manipulação executada. A divisão mais granular envolve 5 sublinguagens:
Alguns autores consideram a DML como parte da DQL e dividem a linguagem SQL em apenas quatro sublinguagens.
A linguagem SQL não é um SGBDR, mas sim parte dele. Comandos SQL são enviados ao SGBDR por aplicações (programas) ou de forma interativa, através de um front-end[1]. O SGBDR recebe os comandos, os envia para o mecanismo de armazenamento (database engine) que os interpreta e **executa, retornando o resultado para o solicitante.
Os comandos SQL possuem todos a mesma forma: começam com um verbo, que indica a função do comando, seguido por uma ou mais cláusulas que especificam um objeto (tabela, índice etc.), um componente de um objeto (coluna), uma condição ou complementam a ação a ser tomada. Por exemplo, o comando a seguir cria um novo esquema relacional chamado FINANCEIRO:
CREATE SCHEMA FINANCEIRO DEFAULT CHARACTER SET utf8;
O comando CREATE (verbo) é seguido das cláusulas SCHEMA, que completa o significado do comando, indicando a criação de um novo esquema relacional, e DEFAULT CHARACTER SET, que especifica o conjunto de caracteres padrão. Todo comando SQL deve ser terminado com um ponto-e-vírgula.
Nem todas as cláusulas são obrigatórias. A sintaxe completa do comando INSERT, como implementado no SGBDR MySQL[2], é mostrado abaixo. As cláusulas entre colchetes são opcionais.
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO]tbl_name
[PARTITION (partition_name [,partition_name] …)]
[(col_name [,col_name] …)]
{ {VALUES | VALUE} (value_list) [, (value_list)] …
|
VALUESrow_constructor_list
}
[ASrow_alias[(col_alias [,col_alias] …)]]
[ON DUPLICATE KEY UPDATEassignment_list]
Em SQL, utilizam-se os termos banco de dados (ou esquema), tabela, campo (ou coluna), tipo e registro (ou linha) no lugar de esquema relacional, relação, atributo, domínio e tupla, respectivamente. Ao longo do texto, ambas as denominações poderão ser utilizadas.
Na apresentação dos comandos da linguagem SQL, será utilizada a seguinte notação: