Linguagem sql nice Pereira, Tuani Zanatta



Baixar 37.49 Kb.
Encontro31.07.2016
Tamanho37.49 Kb.
Linguagem SQL

Nice Pereira, Tuani Zanatta.

Faculdade de Informática de Taquara – Curso de Sistemas de Informação

Fundação Educacional Encosta Inferior do Nordeste

Av. Oscar Martins Rangel, 4500 – Taquara – RS – Brasil


nice.pereira@faccat.br, tuani@faccat.br
Resumo. Este artigo refere-se ao histórico e evolução, características técnicas, aplicabilidade e desenvolvimento da Linguagem SQL. A linguagem SQL é tanto uma linguagem de definição como de manipulação de dados.
Abstract. This article mentions the description and evolution, characteristics techniques, applicability and development to it of Language SQL. Language SQL is as a language of definition as of manipulation of data.

1. Introdução

A linguagem estruturada de consultas SQL (Structured Query Language), é uma linguagem de alto nível para manipulação de dados dentro do modelo relacional. É de tal ordem sua importância para a indústria dos bancos de dados relacionais que ela acabou por se tornar o mecanismo mais popular de acesso aos grandes bancos de dados cliente/servidor. Quando o primeiro sistema gerenciador de banco de dados relacional foi desenvolvido, no início da década de 70, o primeiro mecanismo de acesso aos dados ali mantidos foi uma forma primitiva de SQL.


2. Histórico

A Linguagem SQL surgiu no início dos anos 70, como fruto de um projeto da IBM no laboratório de San José. Eles trabalhavam num projeto de uma linguagem que se adequasse ao modelo relacional. Este projeto trabalhava em paralelo com um outro projeto que visava desenvolver um sistema de gerência de Banco de Dados relacional, chamado "System R". O primeiro sistema de Banco de Dados baseado em SQL se tornou disponível comercialmente no final dos anos 70, juntamente com outros sistemas de Banco de Dados relacionais. O sucesso da linguagem foi tal que obrigou o Instituto Americano de Padrões (ANSI) a padronizar as implementações do produto. Assim, a maior parte - senão todas - as implementações da linguagem seguem de perto o padrão ANSI definido. As pequenas variações existentes não afetam a padronização global e costumam ser incorporadas para complementar as capacidades da linguagem. Ainda que tais variações possam aumentar a complexidade da migração de um ambiente para outro, elas não afetam a estratégia global de portabilidade entre plataformas. Se é o caso de desenvolver aplicações portáteis, o padrão ANSI - suportado por todos os produtos, de uma forma geral - deve ser seguido rigorosamente. Ainda que se percam alguns pontos em desempenho e facilidade, a portabilidade estará garantida. Então meados da década de 80, foi publicada a primeira versão padronizada da linguagem SQL, dois institutos trabalharam na sua padronização, o ANSI e o ISO. Desde então, a linguagem vem evoluindo o que leva à criação de novas versões padronizadas, a saber a SQL-92 e a SQL-99, assim chamadas em regerências aos anos em que foram publicadas. Com suas seguidas evoluções, a linguagem se tornou a mais poderosa ferramenta de definição e manipulação de Bancos de Dados relacionais, e é hoje utilizada na grande maioria dos sistemas de Bancos de Dados relacionais, tais como MySQL, DB2, SQLServer etc..


3. Paradigma

A linguagem SQL possui um paradigma cliente/servidor.


4. Características

A SQL estabeleceu-se como linguagem padrão de Banco de Dados Relacional. SQL apresenta uma série de comandos que permitem a definição dos dados, chamada de DDL (Data Definition Language), composta entre outros pelos comandos Create, que é destinado a criação do Banco de Dados, das Tabelas que o compõe, além das relações existentes entre as tabelas. Como exemplo de comandos da classe DDL temos os comandos Create, Alter e Drop. Os comandos da série DML (Data Manipulation Language), destinados a consultas, inserções, exclusões e alterações em um ou mais registros de uma ou mais tabelas de maneira simultânea. Como exemplo de comandos da classe DML temos os comandos Select, Insert, Update e Delete. Uma subclasse de comandos DML, a DCL (Data Control Language), dispõe de comandos de controle como Grant e Revoke.

A Linguagem SQL tem como grandes virtudes sua capacidade de gerenciar índices, sem a necessidade de controle individualizado de índice corrente, algo muito comum nas linguagens de manipulação de dados do tipo registro a registro. Outra característica muito importante disponível em SQL é sua capacidade de construção de visões, que são formas de visualizarmos os dados na forma de listagens independente das tabelas e organização lógica dos dados.

Outra característica interessante na linguagem SQL é a capacidade que dispomos de cancelar uma série de atualizações ou de as gravarmos, depois de iniciarmos uma seqüência de atualizações. Os comandos Commit e Rollback são responsáveis por estas facilidades.

Devemos notar que a linguagem SQL consegue implementar estas soluções, somente pelo fato de estar baseada em Banco de Dados, que garantem por si mesmo a integridade das relações existentes entre as tabelas e seus índices.
4.1. Utilização da SQL

A compreensão e a utilização da SQL é decisiva por alguns bons motivos:

-É poderosa e flexível. É muito mais rápida a recuperação e a manipulação de dados utilizando a SQL que os objetos disponíveis na DAO. Com uma única instrução SQL podemos substituir dezenas ou mesmo centenas de linhas de código baseadas nos objetos da biblioteca DAO.

-É um padrão na indústria. Como a SQL, com pequenas variações, é suportada pelos mais importantes bancos de dados relacionais, podemos criar programas de front-end para a administração de bancos de dados relativamente independentes do back-end. Por exemplo, podemos escrever um aplicativo voltado para administração de um banco de dados Access e, sem alterações significativas, portá-lo de modo a utilizar o Microsoft SQL Server ou outro banco de dados ODBC.

Freqüentemente, a implementação da linguagem SQL incorporada ao Microsoft Jet será utilizada para desempenho máximo, em conjunto com os objetos da DAO. Uma utilização comum poderá ser selecionar um subconjunto dos dados através de uma instrução SQL, gerar um objeto Recordset e manipulá-lo com os métodos navegacionais disponibilizados pela DAO. Com isso, o programador obterá o melhor de dois mundos. Além disso, essa estratégia costuma facilitar a portabilidade do aplicativo: deve variar somente o mecanismo de conexão com a fonte de dados SQL, tudo o mais permanecendo constante.

O objetivo fundamental da SQL é fornecer ao usuário de um RDBMS uma interface de alto nível, capaz de isolá-lo completamente das complexidades de implementação do sistema. Com tal objetivo em mente, desenvolveu-se uma linguagem totalmente não-procedural. Ao usuário da SQL não cabe definir como o gerenciador do banco de dados executará uma tarefa em particular, mas somente o que deve ser feito.


4.2. Sintaxe do SQL

Uma declaração SQL pode consistir dos seguintes componentes:

- Uma declaração de parâmetros. Quando uma declaração requer parâmetros, isto é, valores somente disponíveis em tempo de execução a partir da interação com o usuário, é conveniente - ainda que opcional - a declaração explícita dos parâmetros utilizados. Tal declaração deve ser feita da seguinte forma: PARAMETERS nomeDoParâmetro tipoDeDado; Qualquer quantidade de parâmetros, dentre os tipos de dados suportados pelo dispositivo Jet (ou pelo sistema gerenciador ao qual o aplicativo está conectado via ODBC), é inteiramente válida.

- O comando SQL. Este componente informa ao gerenciador a ação a ser executada. Por exemplo, a declaração SELECT * FROM Clientes solicita ao dispositivo gerenciador que retorne todos os campos da tabela Clientes.

- Cláusulas opcionais. Informam ao dispositivo gerenciador as condições segundo as quais os registros serão selecionados, tais como ordenações, condições lógicas de filtro, agrupamentos, etc. Se o comando SQL informa ao dispositivo o que fazer, as cláusulas opcionais especificam os registros a serem incluídos no processamento e o critério específico dessa inclusão.


4.3. Comandos SQL

É costume tratar a SQL como composta de subconjuntos de comandos - linguagens - para a execução de diferentes tarefas. Tal como a DAO, a SQL suporta tanto uma linguagem de definição de dados (DDL) - para a criação e alteração de tabelas e índices quanto uma linguagem de manipulação de dados (DML) - para a seleção e atualização dos dados armazenados nas tabelas. A Figura 15.3 mostra os comandos SQL.



Figura 15.3: Os comandos SQL .


4.4. Cláusulas SQL

As cláusulas são modificadores utilizados para definir os dados a serem selecionados para a manipulação. A Figura 15.4 mostra as cláusulas SQL.



Figura 15.4: As cláusulas SQL.


4.5. Operadores


A SQL suporta dois tipos de operadores:

-Os operadores lógicos, utilizados para conectar expressões, normalmente numa cláusula WHERE.

-Os operadores de comparação, utilizados para comparar os valores de duas expressões.

A Figura 15.5 mostra os operadores SQL.



Figura 15.5: Os operadores SQL.


4.6. Funções Agregadas


Além dos comandos vistos anteriormente, a SQL suporta ainda um conjunto de funções pré-definidas. Tais funções, utilizadas numa cláusula SELECT, referem-se a determinados grupos de registros e retomam um valor aplicável ao grupo.

Como já foi dito, a DDL é um subconjunto de comandos SQL capazes de criar e modificar a estrutura de uma tabela, incluindo os seus índices. De uma forma geral, a DDL pode substituir boa parte das operações efetuadas pelos objetos da DAO, tal como discutimos anteriormente. No entanto, há algumas limitações para as operações com a DDL:

Somente os bancos de dados nativos do Jet - no formato do Microsoft Access - admitem os comandos DDL a partir do VB.

Apenas um limitado número de propriedades de tabelas, campos e índices é abarcado pelos comandos DDL.


4.7. Operações com a DDL

Com DDL, é possível:

-Criar e remover uma tabela, definindo as propriedades básicas (nome, tipo e tamanho) dos campos;

-Alterar a estrutura de uma tabela, incluindo e removendo campos;

-Criar e remover um índice.
4. Aplicabilidade e uso

A linguagem SQL é basicamente uma linguagem de consulta a banco de dados. Ela é bem diferente das linguagens comuns de programação, a principal diferença é que a linguagem SQL não é uma linguagem procedural, ao contrário da grande maioria das linguagens de programação. Na linguagem SQL não se especifica como, ou em que ordens serão executados os processos que irão fornecer os resultados requeridos, na SQL, nós apenas informamos o que queremos e o sistema de banco de dados é o responsável por escolher adequadamente os procedimentos a serem executados, de forma que os resultados sejam obtidos com a maior eficiência possível. A linguagem SQL é uma linguagem relacional, isto é, ela é ideal para o tratamento de dados relacionados. De uma forma grotesca, dados relacionados são aqueles que podem ser arranjados em uma tabela, onde cada linha forma uma unidade lógica de dados. A linguagem SQL é tanto uma linguagem de definição como de manipulação de dados, isto é, com a SQL podemos tanto definir e construir relações (tabelas), como manipular diversas relações de forma a obter resultados desejados.

A linguagem SQL está presente numa imensa quantidade de sistemas de banco de dados, ela pode estar visível ou mascarada (embutida). Na forma visível o usuário digita os comandos na linguagem SQL diretamente em um prompt de comando, de onde também é possível visualizar os resultados. Já na forma embutida a linguagem SQL não está visível diretamente ao usuário, os programadores podem imbutir os comandos em SQL, dentro de um programa, e criar uma interface mais amigável com o usuário comum, este pode interagir mais facilmente com a interface do que com a própria linguagem SQL. Desta forma usuários comuns podem manipular um banco de dados sem mesmo ter um conhecimento de SQL.
5. Exemplos

A seguir colocaremos alguns exemplos de SQL.




5.1. Criando e Removendo Tabelas

Para criar uma tabela com um comando DDL, apenas especificamos os nomes, tipo de dado e tamanho, se for o caso, de cada campo numa cláusula CREATE TABLE. Os nomes dos campos não precisam ser delimitados por aspas. Contudo, nomes de campos contendo espaços devem ser delimitados por colchetes.

Na criação de uma tabela com a DDL, apenas as propriedades Name, Type e Size do equivalente objeto Field são especificadas. As demais propriedades suportadas pelo objeto, como ValidationRule, ForeignName, etc., não são suportadas. Se necessárias, a tabela deve ser modificada com o auxílio da DAO.

O seguinte fragmento de código cria uma tabela Clientes no banco de dados Base32.Mdb, para a empresa Limpa Tudo Materiais de Limpeza Ltda., tal como já foi descrito:

Dim db As Database

Set db = Workspaces(0).CreateDatabase (App.Path & _

"\Base32.Mdb", dbLangGeneral, dbVersion30)

db.Execute "CREATE TABLE Clientes " & _

"(Cliente TEXT (4), CGC TEXT " & _

"(14), RazãoSocial TEXT (30), " & _

"Endereço TEXT (50), CEP TEXT (8))"

db.Close


A remoção de uma tabela em SQL é tão simples quanto utilizando a DAO. O seguinte fragmento de código remove a tabela criada no exemplo anterior:

Dim db As Database

Set db = Workspaces(0).OpenDatabase(App.Path & _

"\Base32.Mdb")

db.Execute "DROP TABLE Clientes"

db.Close
5.2. Modificando Tabelas

Do mesmo modo que na DAO, não é possível alterar as propriedades de um campo já anexado a uma tabela. Sendo assim, utilizando os comandos DDL, é possível apenas remover um campo (coluna) ou anexar um novo à tabela. Portanto, a alteração de uma das propriedades do campo, via SQL, requer que ele seja primeiro removido e depois novamente incluído com as características alteradas. Note-se uma vez mais que apenas o nome, o tipo de dado e o tamanho de um campo podem ser especificados.

O seguinte fragmento de código altera a estrutura da tabela Clientes, criada na seção anterior:

Dim db As Database

Set db = Workspaces(0).OpenDatabase (App.Path & _

"\Base32.Mdb")

db.Execute "ALTER TABLE Clientes " & _

"DROP COLUMN Cliente"

db.Execute "ALTER TABLE Clientes " & _

"ADD COLUM Cliente SHORT"

db.Close
5.3. Criando e Removendo Índices

Há três diferentes maneiras de criarmos um índice utilizando os comandos SQL:

-Na criação da tabela, após a especificação do comando CREATE TABLE. É possível, neste momento, criar um índice a partir de uma única coluna ou a partir de diversas. Apenas acrescente a cláusula CONSTRAINT especificando os campos e propriedades do índice.

-Utilizando o comando CREATE INDEX isoladamente. Neste caso, pode-se também especificar as diversas propriedades do índice, bem como definir regras de validação com a cláusula WITH.

-Utilizando o comando ALTER TABLE. Apenas utilize a combinação de palavras-chave ADD CONSTRAINT após o comando ALTER TABLE.

Como se pode notar, utilizamos a cláusula CONSTRAINT para criar ou remover um índice junto com os comandos CREATE TABLE e ALTER TABLE. Com esta cláusula é possível também definir uma chave primária ou externa, definir relacionamentos e forçar a integridade referencial dos dados.

O seguinte fragmento de código cria um índice primário para a tabela Clientes utilizando o campo Cliente:

Dim db As Database

Set db = Workspaces(0).OpenDatabase(App.Path & _

"\Base32.Mdb")

db.Execute "ALTER TABLE Clientes " & _

"ADD CONSTRAINT Cliente " & _

" PRIMARY KEY (Cliente)"

db.Close

O fragmento de código seguinte cria uma nova tabela, chamada Telefones dos Clientes e, a seguir, estabelece um relacionamento por chave externa com a tabela Clientes, através do campo Cliente:

Dim db As Database

Set db = Workspaces(0).OpenDatabase(App.Path & _

"\Base32.Mdb")

db.Execute "CREATE TABLE [Telefones dos Clientes] " & _

"(Cliente SHORT, Telefone TEXT (10), " & _

"Contato TEXT (30)) "

db.Execute "ALTER TABLE [Telefones dos Clientes] " & _

"ADD CONSTRAINT TelefonesCliente " & _

"FOREIGN KEY (Cliente) " & _

"REFERENCES Clientes (Cliente)"

db.Close

O fragmento de código seguinte ilustra a utilização do comando CREATE INDEX para indexar a tabela anterior utilizando o campo Telefone:

Dim db As Database

Set db = Workspaces(0).OpenDatabase (App.Path & _

"\Base32.Mdb")

db.Execute "CREATE INDEX Telefones " & _

"ON [Telefones dos Clientes] (Telefone)"

db.Close


Para remover um índice existente, apenas utilize o comando DROP com referência ao índice desejado. Por exemplo, para remover o índice Telefones da tabela Telefones dos Clientes, utilize o seguinte comando:

db.Execute "DROP INDEX Telefones " & _

"ON [Telefones dos Clientes]"
5.4. Extração de Dados das Tabelas

De longe, a utilização mais comum da linguagem SQL - mais especificamente do subconjunto conhecido como DML, a linguagem de manipulação de dados - é na recuperação de subconjuntos dos dados para posterior tratamento. É o que se convencionou chamar Consultas. Aliás, o maior poder da SQL não se revela no subconjunto DDL, mas principalmente na sua capacidade de selecionar um conjunto complexo de registros segundo um conjunto, também complexo, de condições e tratá-lo num único passo.

Na SQL, é o comando SELECT o utilizado na recuperação de dados. A forma básica do comando SELECT é a seguinte:

SELECT nomesDosCampos FROM nomeDaTabela [cláusulas]

Assim, a forma mais simples de uma consulta poderia ser a que segue, aplicada a uma das tabelas definidas para a Limpa Tudo:

SELECT * FROM Fornecedores

A instrução anterior seleciona todos os campos da tabela Fornecedores e retorna um subconjunto dos dados, que pode ser visualizado no Microsoft Access, conforme a Figura 15.7:

Figura 15.7: Uma consulta de seleção.

Naturalmente, não é obrigatória a seleção de todos os campos da tabela. Pode-se selecionar qualquer quantidade desejada de campos. O comando a seguir recupera apenas dois campos da tabela Estoque do mesmo banco de dados:

SELECT Produto, [Quantidade Estocada] FROM Estoque
5.5. Especificando um Intervalo para os Registros

Uma outra necessidade comum é a especificação de um intervalo de valores de um determinado campo para a seleção dos registros. Imaginemos que seja necessário visualizar todas as vendas efetuadas na segunda quinzena do mês de janeiro de 1998. Para isso precisamos utilizar a cláusula BETWEEN na condição lógica de seleção. Veja o exemplo a seguir:

SELECT Vendas.Data, Produtos.[Nome do Produto],

Faturas.[Quantidade Vendida] FROM

(Vendas INNER JOIN Faturas ON

Vendas.Fatura = Faturas.Fatura)

INNER JOIN Produtos

ON Faturas.Produto = Produtos.Produto

WHERE (Vendas.Data BETWEEN CVDate('16/01/98')

AND CVDate('31/01/98'))


5.6. Especificando uma Lista de Condições

Suponhamos agora que você deseje todos os produtos categorizados como 1- Saponáceo, 2 - Detergente e 5 -Água Sanitária. Isso pode ser obtido pela seguinte cláusula:

SELECT Produto, [Nome do Produto] FROM Produtos

WHERE Categoria = 1 OR Categoria = 2 OR Categoria = 5

Na verdade, o que se deseja aqui é um conjunto de registros que satisfaçam a uma lista de condições alternativas. Uma forma mais compacta de obter o mesmo resultado é o comando:

SELECT Produto, [Nome do Produto] FROM produtos



WHERE Categoria IN (1, 2, 5)
6. Referências Bibliográficas

http://gigaflops.tripod.com/page/lp/sql/sql.html

http://www.postgresql.org.br/tutorial2/tutorial-sql.html

http://www.codelines.com/ManualVB/Cap%C3%ADtulos/Cap%C3%ADtulo15.htm


©principo.org 2016
enviar mensagem

    Página principal