segunda-feira, 30 de setembro de 2013

Linguagem de Consulta – SQL


Com o objetivo de auxiliar os estudantes iniciantes nas Linguagens de Consulta, estarei postando alguns textos que poderá servir como material de apoio. Para iniciar, vamos falar um pouco sobre a Linguagem SQL.



 1.       Introdução
Linguagem de consulta é uma linguagem que permite que usuários requisitem e acessem informações armazenadas em Bancos de Dados, sem causar alterações no banco de dados. Normalmente, estas linguagens são escritas em um nível mais alto do que as linguagens de programação padrão (DATE, 2000). 
As linguagens de consulta são classificadas em dois grupos, sendo as linguagens de consulta procedurais, na qual o usuário realiza uma sequência de operações no banco de dados para obter os resultados desejados, e as linguagens de consulta não procedurais, que refere-se a descrição das informações desejadas pelo usuário sem fornecer procedimentos específicos para obtê-las (SILBERCHATZ, 2012).
A grande maioria dos Sistemas de Gerenciamento de Banco de Dados Relacionais (SGBDR) oferecem uma linguagem de consulta que incluem elementos procedurais e não procedurais. Dentre as linguagens de consultas utilizadas por SGBDRs destaca-se a SQL (em português, linguagem de consulta estruturada), que será tratada neste texto (SILBERCHATZ, 2012).
Existem também, na literatura, linguagens de consulta “puras” que são concisas e formais e tem, por objetivo, ilustrar as técnicas fundamentais para extração de dados de BDs. Como exemplo deste tipo de linguagem de consulta, podemos citar a álgebra relacional e o cálculo relacional (SILBERCHATZ, 2012).
2.       Linguagem SQL.

A SQL (Linguagem de Consulta Estruturada) é uma linguagem de consulta declarativa padrão para bancos de dados relacionais. Ela utiliza uma combinação de construções de álgebra relacional e cálculo relacional. Embora seja uma linguagem de consulta, a SQL permite a realização de tarefas mais amplas do que, simplesmente, consultar. Com a SQL é possível também definir e modificar estruturas de banco de dados, manipular dados e especificar restrições de segurança (SILBERCHATZ, 2012).
O objetivo deste texto é de apresentar alguns conceitos fundamentais de SQL, sem aprofundar ou apresentar todos os aspectos que esta linguagem permite. 

2.1.    Aspectos Gerais
 A SQL foi desenvolvida pela IBM e, inicialmente, teve o nome de SEQUEL, no início da década de 70, com a sua evolução, a linguagem SEQUEL foi alterada para SQL (Linguagem de Consulta Estruturada).  É considerada a linguagem padrão para SGDBR[1] (Sistemas de Gerenciamento de Banco de Dados Relacional), ou seja, mantém as características essenciais nos produtos de diversos fabricantes (DAMAS, 2007). 
Por ser uma linguagem considerada padrão, a SQL apresenta vantagens de utilização para os usuários, pois, facilita a migração entre SGBDRs, no que diz respeito ao conhecimento dos Sistemas de Gerenciamentos. 


Silberchatz (2012) comenta que a linguagem SQL possui diversas partes, sendo elas: 

·         Linguagem de Definição de Dados (DDL): Fornece comandos que permite definir, alterar e excluir esquemas[2] de dados.
·         Linguagem de Manipulação de Dados (DML): Fornece comandos que permite incluir, alterar e excluir dados em bancos de dados.
·         Integridade: inclui comandos que permite especificar restrições de integridade.
·         Definição de view: Inclui comandos que permite definir visões[3] do banco de dados.
·         Controle de transação: possui comandos que permitem especificar o início e o fim de uma transação.
·         SQL embutida e SQL dinâmica: define como as instruções SQL podem ser incorporadas nas linguagens de programação de finalidade geral.
·         Autorização: Inclui comandos que permitem especificar direitos de acessos aos dados e as visões.

1.1.    Definição de Dados
As relações (tabelas) de um banco de dados são especificadas para o SGBD por meio de linguagem de definições de dados (DDL). A DDL SQL permite especificar, além das relações, informações sobre cada relação, como (SILBERCHATZ, 2012):
·         O esquema para cada relação;
·         O domínio[4] de valores associados a cada atributo;
·         As restrições de integridade;
·         O conjunto de índice a serem mantidos em cada relação;
·         As informações de segurança e autorização de cada relação;
·         A estrutura de armazenamento físico de cada relação.
Para uma melhor compreensão, discutiremos neste texto apenas as definições básicas de DDL, entretanto, é importante ressaltar que há outros recursos disponíveis em SQL, em nível de DDL, além dos recursos tratados neste texto.

1.2.    CREATE
Por meio do comendo Create, é possível objetos de banco de dados, como o esquema de banco de dados, relações (tabelas), visões, trigger, entre outros.
Para definirmos um banco de dados, utilizamos o script apresentado no Quadro 1:

CREATE DATABASE baseteste;
Quadro 1 - Scripte de criação de Banco de Dados.

Após a definição do banco de dados, podemos então, criar as tabelas que irão compor o banco de dados, para tanto, vamos utilizar o esquema exemplificado na Tabela 1. O Quadro 2 apresenta o script de criação da tabela. 

CREATE TABLE funcionário (
idfuncionario INT NOT NULL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
salario NUMBER(12,2) NOT NULL,
sexo CHAR(1),
uf CHAR(2) ); 
Quadro 2 - Script de criação de tabela

No Script apresentado no Quadro 2, todos os termos escritos em letra maiúscula são comandos e/ou palavras reservadas do SQL. Para entendermos melhor este script, temos: 


  •   CREATE TABLE comando SQL específico para a criação da tabela;
  •  funcionário -    O nome atribuído a tabela;
  • (  - após o parenteses, inicia-se a lista de atributos (colunas / campos) que pertencem a tabela;
  • Os itens idfuncionario, nome, salario, sexo e uf são atributos pertencentes a esta tabela. 


Na definição de cada atributo, temos a seguinte sintaxe básica, embora possa existir algumas variantes desta sintaxe:
 

Nome_do_atributo domínio obrigatoriedade,

  •   Nome_do_atributo - refere-se ao nome dado a coluna que irá guardar um determinado valor; 
  • Domínio - especifica o tipo de dado que aquele atributo poderá armazenar, no exemplo temos os seguintes tipos:

o   INT - Tipo Inteiro que pode armazenar valores numéricos inteiro (com sinal);
o VARCHAR(n) - Caractere Variante que pode armazenar uma string de comprimento variável.
o   NUMBER(n,d) - Valor numérico constituído por n dígitos, sendo d  o número de casas decimais;
o   CHAR(n) - uma string de comprimento fixo.

  •  Obrigatoriedade - especifica se o atributo deverá ter o seu valor preenchido (NOT NULL) ou poderá ser nulo/vazio (NULL). 
  • , - a vírgula separa colunas que serão inseridas na tabela. 


A primeira coluna criada nesta tabela possui uma regra que a define como chave primária (primary key). Uma chave primária é um atributo ou um conjunto de atributos que tem a finalidade de identificar o registro. Como característica, uma chave primária deve ter o seu preenchimento obrigatório (NOT NULL) e deve ser única, ou seja, não pode ocorrer dois campos (coluna) de chaves primária com o mesmo valor. As chaves primárias também são utilizadas para realizar os relacionamentos entre as tabelas, por meio das chaves estrangeiras (foreign key).  

Questões a considerar:
É importante seguir um padrão de nomenclatura (nome dados aos objetos – bancos de dados, tabelas, atributos e outros) em SQL. A utilização do padrão pode amenizar ou, até mesmo, eliminar problemas futuros de manutenção. 

No final de cada script temos o “;” que indica o final do comando.
 


   No próximo post estarei apresentando a cláusula de Alteração Alter Table. 



Referências
DATE, C. J. Sistemas de Banco de Dados. Rio de Janeiro: Ed. Campus, 2000.
DAMAS, L. SQL – Linguagem de Consulta Estruturada. Rio de Janeiro: Ed. LTC, 2007.
ELMASRI, R. Sistemas de Banco de Dados. São Paulo: Ed. Addisson Wesley, 2012.
SILBERCHATZ, A. Sistemas de Banco de Dados. Ed. Elsevier, 2012. 


[1] SGBDR é um conjunto de programas de computador (softwares) responsáveis pelo gerenciamento de uma base de dados.
[2] Esquema de Dados refere-se a coleção de objetos de um banco de dados que estão disponíveis para um determinado usuário ou grupo
[3] Visões de banco de dados refere-se a um objeto que não armazena dados, ou seja, não ocupa espaço em disco e é composto por uma consulta.
[4] O valor de domínio refere-se, sucintamente, ao tipo de dados (integer, char, varchar, entre outros) que cada atributo pode receber. Para maiores esclarecimentos sobre domínios de valores e demais itens que a DDL permite especificar, faz-se necessário uma leitura complementar na bibliografia.
 

Nenhum comentário: