# SQL/Introdução ao SQL

SQL (do inglês Structured Query Language, ou Linguagem de Consulta Estruturada), é uma linguagem de pesquisa declarativa para Bancos de Dados Relacionais (base de dados relacional).
Ela é uma linguagem para consultar, adicionar, atualizar, ou remover informações de um banco de dados. Pode ser usada também para manipular metadados de um banco de dados. SQL é uma linguagem declarativa onde os resultados ou operações são dadas sem muita especificação detalhada sobre como completar as tarefas. Os passos requeridos para executar demonstrações SQL são manuseados de forma transparente pelo banco de dados SQL. Algumas vezes essa linguagem é caracterizada como não-procedural porque linguagens procedurais geralmente precisam que detalhes das operações sejam especificados, tal como abertura e fechamento de tabelas, carregamento e busca, ou flushing buffers e escrição de dados para sistemas de arquivo. Contudo, SQL é considerada uma linguagem de alto nível, que abstrai o nível das operações realizadas e a maneira como estas são realizadas.
Instruções são dadas na forma de declarações, consistindo de declarações específicas do SQL, parâmetros adicionais e operandos que aplicam esses comandos. As declarações SQL e seus modificadores são baseados no oficial SQL standart e certas extensões que cada fornecedor de banco de dados implementa. As declarações mais comuns estão agrupadas nas categorias que citaremos abaixo.

## História do SQL

O SQL foi desenvolvido originalmente no início dos anos 70 nos laboratórios da IBM em San Jose, dentro do projeto w:System R, que tinha por objetivo demonstrar a viabilidade da implementação do modelo relacional proposto por E. F. Codd. O nome original da linguagem era SEQUEL, acrônimo para "Structured English Query Language" (Linguagem de Consulta Estruturada em Inglês), vindo daí o fato de, até hoje, a sigla, em inglês, ser comumente pronunciada "síquel" ao invés de "és-kiú-él", letra a letra. No entanto, em português, a pronúncia mais corrente é a letra a letra: "ésse-quê-éle".

## SQL como linguagem padrão

A linguagem SQL é um grande padrão de banco de dados. Isto decorre da sua simplicidade e facilidade de uso. Ela se diferencia de outras linguagens de consulta a banco de dados no sentido em que uma consulta SQL especifica a forma do resultado e não o caminho para chegar a ele. Ela é uma linguagem declarativa em oposição a outras linguagens procedurais. Isto reduz o ciclo de aprendizado daqueles que se iniciam na linguagem.
Embora o SQL tenha sido originalmente criado pela IBM, rapidamente surgiram vários "dialetos" desenvolvidos por outros produtores. Essa expansão levou à necessidade de ser criado e adaptado um padrão para a linguagem. Esta tarefa foi realizada pela w:American National Standards Institute (ANSI) em 1986 e ISO em 1987.
SQL foi revisto em 1992 e a esta versão foi dado o nome de SQL-92. Foi revisto novamente em 1999 e 2003 para se tornar SQL-99 (SQL3) e SQL:2003, respectivamente.
No entanto embora o SQL, seja padronizado pela ANSI e ISO, possui muitas variações e extensões produzidos pelos diferentes fabricantes de sistemas gerenciadores de bases de dados. Tipicamente a linguagem pode ser migrada de plataforma para plataforma, sem mudanças estruturais principais.

## Subconjuntos

A linguagem SQL é dividida em subconjuntos de acordo com as operações que queremos efetuar sobre um banco de dados.

### DDL - Linguagem de Definição de Dados

Linguagem de definição de dados (ou DDL, de Data Definition Language) é um conjunto de comandos dentro da SQL usada para a definição das estruturas de dados, fornecendo as instruções que permitem a criação, modificação e remoção das tabelas, assim como criação de índices. Estas instruções SQL permitem definir a estrutura de uma base de dados, incluindo as linhas, colunas, tabelas, índices, e outros metadados.
Entre os principais comandos DDL estão:
* CREATE - Usado para criar uma nova tabela, uma visão de uma tabela, ou outro objeto em um banco de dados.
* ALTER - Usado para modificar um objeto existente de um banco de dados, como uma tabela.
* DROP - Usado para apagar toda uma tabela, uma visão de uma tabela ou outro objeto em um banco de dados.

### DML - Linguagem de Manipulação de Dados

Linguagem de manipulação de dados (ou DML, de Data Manipulation Language) é o grupo de comandos dentro da linguagem SQL utilizado para a recuperação, inclusão, remoção e modificação de informações em bancos de dados.
Os principais comandos DML são INSERT (Inserção de Dados), UPDATE (Atualização de Dados) e DELETE (Exclusão de Dados).

### DQL - Linguagem de Consulta de Dados

Linguagem de consulta de dados (ou DQL, de Data Query Language), que é um subconjunto de linguagem de manipulação. O comando é SELECT, usado para obter certos dados ou registros a partir de uma ou mais tabelas.

### DCL - Linguagem de Controle de Dados

Linguagem de controle de dados (ou DCL, de Data Control Language) é o grupo de comandos que permitem ao administrador de banco de dados controlar o acesso aos dados deste banco. Alguns exemplos de comandos DCL são:
* 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.
As tarefas básicas que podemos conceder ou barrar permissões são:
* CONNECT
* SELECT
* INSERT
* UPDATE
* DELETE
* USAGE