Вы находитесь на странице: 1из 27

Introdução a

Banco de Dados e
SQL

Maio/2008
Por: Adriano Cagnini
SUMÁRIO
1.Banco de Dados................................................................................................3
1.1.Histórico..........................................................................................................3
1.2.Conceitos........................................................................................................5
1.3.Visões do Banco de Dados............................................................................7
1.4.Vantagens do Banco de Dados......................................................................8
2.SQL .................................................................................................................10
2.1.Comandos DDL............................................................................................11
2.2.Comandos DML............................................................................................17
REFERÊNCIAS..................................................................................................27

LISTA DE TABELAS
Tabela 1 – Tipos de Dados para Colunas de Tabelas.......................................13
Tabela 2 – Condições permitidas na sintaxe do WHERE..................................17
Tabela 3 – Funções agregadas..........................................................................20
Tabela 4 – Exemplos de funções agregadas.....................................................20
Tabela 5 – Tipos de junção permitidos (tipo_join)..............................................21
Tabela 6 – Compatibilidade entre sintaxes mostrados nos quadros 11 e 12....22

LISTA DE QUADROS
Quadro 1 – Sintaxe do comando Create Table (DLL – SQL)............................11
Quadro 2 – Sintaxe do comando Alter Table (DLL – SQL)................................13
Quadro 3 – Sintaxe do comando Drop Table (DLL – SQL)................................15
Quadro 4 – Sintaxe do comando Create Index (DLL – SQL)............................15
Quadro 5 – Sintaxe do comando Drop Index (DLL – SQL)................................15
Quadro 6 – Sintaxe do comando Select (DML – SQL)......................................17
Quadro 7 – Sintaxe do comando AS (DML – SQL)............................................18
Quadro 8 – Sintaxe do comando All / Distinct (DML – SQL).............................18
Quadro 9 – Sintaxe do comando Order By (DML – SQL)..................................19
Quadro 10 – Sintaxe do comando Group By (DML – SQL)
............................................................................................................................21
Quadro 11 – Sintaxe Select múltiplas tabelas utilizando Join (DML – SQL).....21
Quadro 12 – Sintaxe Select múltiplas tabelas utilizando Where (DML – SQL). 22
Quadro 13 – Sintaxe do comando Insert em toda a tabela (DML – SQL).........23
Quadro 14 – Sintaxe do comando Insert atributos definidos (DML – SQL).......23
Quadro 15 – Sintaxe do comando Insert a partir do Select (DML – SQL).........23
Quadro 16 – Sintaxe do comando Delete (DML – SQL)....................................24
Quadro 17 – Sintaxe do comando Update (DML – SQL)...................................24
Quadro 18 – Sintaxe Update buscando dados de outra tabela (DML – SQL)...25
Quadro 19 – Sintaxe do comando Create View (DML – SQL)...........................25
1. Banco de Dados

Segundo Date (2000,p.2), “um sistema de banco de dados é


basicamente um sistema computadorizado de armazenamento de registros,
isto é, um sistema computadorizado cujo propósito geral é armazenar
informações e permitir ao usuário buscar e atualizar essas informações quando
solicitado’.
Machado (2004, p.20) em sua obra diz que “um banco de dados pode
ser definido como um conjunto de dados devidamente relacionados. Podemos
compreender como dados os objetos conhecidos que podem ser armazenados
e que possuem um significado implícito”.
Um banco de dados é uma coleção autodescritiva de registros
integrados. É autodescritiva porque contém a descrição de si mesma
em um dicionário de dados. Este dicionário de dados é também
conhecido como diretório de dados ou metadados. Um banco de
dados é um conjunto de registros integrados porque os
relacionamentos entre eles são armazenados no banco de dados
Kroenke (1999, p.12).
Ainda Salemi (1995, p.17) descreve que “um Banco de Dados
Relacional é um banco de dados que segue o modelo relacional, onde os
dados são organizados em conjuntos matemáticos lógicos dentro de uma
estrutura tabular, cada campo de dados pertencente a uma coluna, e cada
registro a uma linha de uma tabela”.
Um Banco de Dados Relacional pode ser definido, conforme relatado,
como um conceito abstrato que define maneiras de armazenar, manipular e
recuperar dados estruturados unicamente na forma de tabelas, construindo um
banco de dados.
O principal objetivo do modelo de banco de dados relacional é preservar
a integridade dos dados.
O termo Banco de Dados é aplicável aos próprios dados, quando
organizados dessa forma, ou a um “Sistema Gerenciador de Banco de Dados"
(SGBD), um programa de computador que implementa a abstração.

1.1. Histórico

Os Bancos de dados relacionais (BDR) surgiram no início da década de


1980, quando as empresas passaram a utilizá–los no lugar de arquivos planos
(do inglês flat file), bancos de dados hierárquicos e em rede.
Edgar F. Codd, publicou em 1969, um artigo onde definia o modelo para
bancos de dados relacionais com base no conceito matemático de conjuntos
relacionais Salemi (1995,p.17).
Em 1985 Codd,define, por meio da publicação de outro artigo 12 regras
para que um Sistema Gerenciador de Banco de Dados (SGDB) fosse
considerado totalmente relacional.
As doze regras de Codd estão baseadas na regra zero, que determina
o seguinte: "Qualquer sistema considerado, ou que deseja ser, um sistema
gerenciador de banco de dados relacionam deve ser capaz de gerenciar, por
completo, bases de dados através de sua capacidade relacional". Essa regra
determina que um SGBDR não permite exceções quanto ao modelo relacional
de gerenciamento de bases de dados.
As doze regras definidas por Codd são as seguintes:
1. Todas as informações em um banco de dados relacional são
representadas de forma explícita no nível lógico e exatamente em apenas uma
forma – por valores em tabelas.
2. Cada um e qualquer valor atômico (datum) em um banco de dados
relacional possui a garantia de ser logicamente acessado pela combinação do
nome da tabela, do valor da chave primária e do nome da coluna.
3. Valores nulos devem ser suportados de forma sistemática e
independente do tipo de dado para representar informações inexistentes e
informações inaplicáveis.
4. A descrição do banco de dados é representada no nível lógico da
mesma forma que os dados ordinários, permitindo que usuários autorizados
utilizem a mesma linguagem relacional aplicada aos dados regulares.
5. Um sistema relacional pode suportar várias linguagens e várias
formas de recuperação de informações. Entretanto, deve haver pelo menos
uma linguagem, com uma sintaxe bem definida e expressa por conjuntos de
caracteres, que suporte de forma compreensiva todos os seguintes itens:
definição de dados, definição de "views", manipulação de dados (interativa e
embutida em programas), restrições de integridade, autorizações e limites de
transações (begin, commit e rollback).
6. Todas as views que são teoricamente atualizáveis devem também
ser atualizáveis pelo sistema.
7. A capacidade de manipular um conjunto de dados (relação) através
de um simples comando deve–se estender às operações de inclusão, alteração
ou exclusão de dados.
8. Programas de aplicação permanecem logicamente inalterados
quando ocorrem mudanças no método de acesso ou na forma de
armazenamento físico.
9. Mudanças nas relações e nas views provocam pouco ou nenhum
impacto nas aplicações.
10. As aplicações não são afetadas quando ocorrem mudanças nas
regras de restrições de integridade.
11. As aplicações não são logicamente afetadas quando ocorrem
mudanças geográficas dos dados.
12. Se um sistema possui uma linguagem de baixo nível, essa
linguagem não pode ser usada para subverter as regras de integridades e
restrições definidas no nível mais alto ( CUNHA, 1991).

1.2. Conceitos

Existem muitos conceitos e termos relacionados com Bancos de Dados.


Como complementação do estudo, apresenta–se a seguir uma descrição de
termos comumente utilizados na área.
• Banco de Dados – Representa o arquivo físico de dados,
armazenado em dispositivos periféricos, onde estão armazenados
os dados de diversos sistemas, para consulta e atualização pelo
usuário.
• Tabelas Lógicas – Representam as estruturas de
armazenamento de dados (arquivos) dos sistemas.
• SGDB (Sistema Gerenciador de Banco de Dados) – É o
software responsável pelo gerenciamento (armazenamento e
recuperação) dos dados no Banco de Dados.
• Dado – É o valor do campo quando é armazenado no Banco de
Dados. Exemplo: O valor do campo "nome do cliente" para quem
está fazendo a entrada de dados.
• Conteúdo do campo – É o valor do campo armazenado no
Banco de Dados. Ex. O valor do campo "nome do cliente" sem
estar, momentaneamente, sendo utilizado.
• Informação – É o valor que este campo representa para as
atividades da empresa. Ex. Resposta a uma consulta. Quais os
nomes dos clientes localizados no Rio de Janeiro?
• Modelo de Banco de Dados: Modelo Relacional, Modelo
Hierárquico e Modelo em Rede. Representa a estrutura física no
qual o armazenamento dos dados foi projetado. O modelo
identifica a estrutura interna de recuperação e armazenamento
dos dados no qual o SGBD foi projetado.
1.3. Visões do Banco de Dados

Os dados de um banco de dados estão dividindo em diversas


abstrações, isso significa que cada usuário do banco de dados, poderá ver os
dados de uma forma, dependendo do nível de conhecimento que tenham.
Segundo Silberschatz (1999, p.4), “já que muitos dos usuários dos
sistemas de banco de dados não são treinados em computação, os técnicos
em desenvolvimento de sistemas omitem essa complexidade desses usuários
por meio dos diversos níveis de abstração, de modo a facilitar a interação dos
usuários com o sistema”.
As visões do banco de dados relacional estão divididas em três níveis,
descritos a seguir:
• Visão Interna – É aquela vista pelo responsável pela manutenção
e desenvolvimento do SGBD. Existe a preocupação com a forma
de recuperação e manipulação dos dados dentro do Banco de
Dados.
• Visão Conceitual – É aquela vista pelo analista de
desenvolvimento e pelo administrador das bases de dados.
Existe a preocupação na definição de normas e procedimentos
para manipulação dos dados, para garantir a sua segurança e
confiabilidade, o desenvolvimento de sistemas e programas
aplicativos e a definição no banco de dados de novos arquivos e
campos. Na visão conceitual, existem 2 (duas) linguagens de
operação que são:
o Linguagem de definição dos dados (DDL) – Linguagem
que define as aplicações, arquivos e campos que irão
compor o banco de dados (comandos de criação e
atualização da estrutura dos campos dos arquivos).
o Linguagem de manipulação dos dados (DML) –
Linguagem que define os comandos de manipulação e
operação dos dados (comandos de consulta e atualização
dos dados dos arquivos).
• Visão Externa – É aquela vista pelo usuário que opera os
sistemas aplicativos, através de interfaces desenvolvidas pelo
analista (programas), buscando o atendimento de suas
necessidades.

1.4. Vantagens do Banco de Dados

Segundo Salemi (1995, p.18), “o modelo relacional apresenta várias


vantagens sobre os modelos hierárquicos e em rede, a mais importante é a sua
completa flexibilidade em descrever as relações entre os vários itens de
dados”.
Analisando a utilização de bancos de dados relacional frente à utilização
de bancos não relacionais como DBF (Data Base File – Arquivo de Banco de
Dados) é possível citar algumas vantagens diretas.
• Redução ou Eliminação de Redundâncias – Possibilita a
eliminação de dados privativos de cada sistema. Os dados, que
eventualmente são comuns a mais de um sistema, são
compartilhados por eles, permitindo o acesso a uma única
informação sendo consultada por vários sistemas.
• Eliminação de Inconsistências – Através do armazenamento da
informação em um único local com acesso descentralizado e, sendo
compartilhada a vários sistemas, os usuários estarão utilizando uma
informação confiável. A inconsistência ocorre quando um mesmo
campo tem valores diferentes em sistemas diferentes. Exemplo, o
estado civil de uma pessoa é solteiro em um sistema e casado em
outro, isto ocorre porque esta pessoa atualizou o campo em um
sistema e não o atualizou no outro. Quando o dado é armazenado
em um único local e compartilhado pelos sistemas, este problema
não ocorre.
• Compartilhamento dos Dados – Permite a utilização simultânea e
segura de um dado, por mais de uma aplicação ou usuário,
independente da operação que esteja sendo realizada. Deve ser
observada apenas o processo de atualização concorrente, para não
gerar erros de processamento (atualizar simultaneamente o mesmo
campo do mesmo registro). Os aplicativos são por natureza
multiusuário.
• Restrições de Segurança – Define para cada usuário o nível de
acesso a ele concedido (leitura, leitura e gravação ou sem acesso)
ao arquivo e/ou campo. Este recurso impede que pessoas não
autorizadas utilizem ou atualizem um determinado arquivo ou campo.
• Padronização dos Dados – Permite que os campos armazenados
na base de dados sejam padronizados segundo um determinado
formato de armazenamento (padronização de tabela, conteúdo de
campos, etc.) e ao nome de variáveis seguindo critérios padrões
preestabelecidos pela empresa. Ex. Para o campo "Sexo" somente
será permitido armazenamento dos conteúdos "M" ou "F".
• Independência dos Dados – Representa a forma física de
armazenamento dos dados no Banco de Dados e a recuperação das
informações pelos programas de aplicação. Esta recuperação deverá
ser totalmente independente da maneira com que os dados estão
fisicamente armazenados. Quando um programa retira ou inclui
dados o SGBD compacta–os para que haja um menor consumo de
espaço no disco. Este conhecimento do formato de armazenamento
do campo é totalmente transparente para o usuário. A independência
dos dados permite os seguintes recursos:
o Os programas de aplicação definem apenas os campos
que serão utilizados independente da estrutura interna dos
arquivos.
o Quando há inclusão de novos campos no arquivo, será
feita manutenção apenas nos programas que utilizam
esses campos, não sendo necessário mexer nos demais
programas. Obs.: Nos sistemas tradicionais este tipo de
operação requer a alteração no layout de todos os
programas do sistema que utilizam o arquivo.
• Manutenção da Integridade – Consiste em impedir que um
determinado código ou chave em uma tabela não tenha
correspondência em outra tabela. Ex. Um código de uma
determinada disciplina na tabela “Histórico Escolar” sem a sua
descrição na tabela “Disciplina”.
2. SQL

SQL significa Structured Query Language – Linguagem de Consulta


Estruturada. De grande utilização, teve seus fundamentos no modelo relacional
de Codd (1969). Sua primeira versão recebeu o nome de SEQUEL (Structured
English Query Language), sendo desenvolvida no Laboratório de Pesquisa da
IBM San Jose, Califórnia. Essa linguagem, foi implementada como parte do
projeto System R. A linguagem SEQUEL evoluiu desde então, e seu nome foi
mudado para SQL (DATE, 2000).
Embora o SQL tenha sido originalmente criado pela IBM, rapidamente
surgiram vários dialectos desenvolvidos por outros produtores. A SQL se
tornou um padrão nos ambientes de bancos de dados relacionais. Essa
expansão levou à necessidade de ser criado e adaptado um padrão para a
linguagem. Esta tarefa foi realizada pela ANSI em 1986 e ISO em 1987. O 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 SQL1999 (SQL3) e SQL2003,
respectivamente. O SQL:1999 usa expressões regulares de emparelhamento,
queries recursivas e gatilhos (triggers). Também foi feita uma adição
controversa de tipos não–escalados e algumas características de orientação a
objeto. O SQL:2003 introduz características relacionadas ao XML (DATE,
2000).
Tal como dito anteriormente, o SQL, embora 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.
A SQL representa um conjunto de comandos responsáveis pela
definição das tabelas, inserção, atualização e exclusão dos dados em um
SGBD. Pode ser utilizado diretamente pelo usuário, quando o SGBD oferece
um interpretador SQL interativo, ou através de comandos embutidos em uma
aplicação desenvolvida em uma linguagem de programação.
A SQL pode ser dividida em dois grandes grupos, onde inclui
operações de definição de dados e operações de manipulação de dados:
• Comandos DDL – Conjunto de comandos para definir e revisar a
estrutura de bancos de dados relacionais;
• Comandos DML – Conjunto de comandos para ler e escrever os
dados.

2.1. Comandos DDL

O comando CREATE TABLE tem o objetivo de criar à estrutura de uma


tabela (arquivo), definido as colunas (campos) e as chaves primárias e
estrangeiras existentes. Como poder ser observado no quadro 1.

CREATE TABLE <nome–tabela>


(<nome–coluna> , <tipo–do–dado> [NOT NULL]
[NOT NULL WITH DEFAULT])
PRIMARY KEY (nome–coluna–chave)
FOREIGN KEY (nome–coluna–chave–estrangeira) REFERENCES
(nome–tabela–pai) ON DELETE [RESTRICT]
[CASCADE]
[SET NULL]
Quadro 1 – Sintaxe do comando Create Table (DLL – SQL)

A seguir será especificado o significado de cada expressão:


• Nome–tabela – Representa o nome da tabela que será criada.
• Nome–coluna – Representa o nome da coluna que será criada.
A definição das colunas de uma tabela é feita relacionando–as
uma após a outra.
• Tipo–do–dado – Cláusula que define o tipo e tamanho dos
campos definidos para a tabela. Os tipos de dados mais comuns
serão definidos mais à frente.
• NOT NULL – Exige o preenchimento do campo, ou seja, no
momento da inclusão é obrigatório que possua um conteúdo.
• NOT NULL WITH DEFAULT – Preenche o campo com valores
pré–definidos, de acordo com o tipo do campo, caso não seja
especificado o seu conteúdo no momento da inclusão do
registro. Os valores pré–definidos são:
o Campos numéricos – Valor zero.
o Campos alfanuméricos – Caractere branco.
o Campo formato Date – Data corrente.
o Campo formato Time – Horário no momento da operação.
• PRIMARY KEY (nome–coluna–chave) – Definir para o banco de
dados a coluna que será a chave primária da tabela. Caso ela
tenha mais de uma coluna como chave, elas deverão ser
relacionadas entre os parênteses.
• FOREIGN KEY (nome–coluna–chave–estrangeira)
REFERENCES (nome–tabela–pai) – Definir para o banco de
dados às colunas que são chaves estrangeiras, ou seja, os
campos que são chaves primárias de outras tabelas. Na opção
REFERENCES deve ser especificado a tabela na qual a coluna
é a chave primária.
• ON DELETE – Esta opção especifica os procedimentos que
devem ser feitos pelo SGBD quando houver uma exclusão de
um registro na tabela pai quando existe um registro
correspondente nas tabelas filhas. As opções disponíveis são:
o RESTRICT – Opção default. Esta opção não permite a
exclusão na tabela pai de um registro cuja chave primária
exista em alguma tabela filha.
o CASCADE – Esta opção realiza a exclusão em todas as
tabelas filhas que possua o valor da chave que será
excluída na tabela pai.
o SET NULL – Esta opção atribui o valor NULO nas
colunas das tabelas filhas que contenha o valor da chave
que será excluída na tabela pai.

Ao se definir uma coluna em uma tabela, deve se especificar o tipo de


dado que ela receberá. A tabela 1 apresenta estes tipos de dados.
Tabela 1 – Tipos de Dados para Colunas de Tabelas
Tipos de Dados Descrição
Tipos Numéricos
Armazena valores numéricos, em dois bytes binários, compreendidos entre
Smallint
o intervalo –32768 a +32767.
Armazena valores numéricos, em quatro bytes binários, compreendidos
Integer
entre o intervalo –2147483648 a +2147483647.
Armazena valores numéricos com no máximo 15 dígitos. Nesta opção deve
Decimal(n,m) ser definida a quantidade de dígitos inteiros (n) e casas decimais (m)
existentes no campo.
Tipos Alfanuméricos
Define um campo alfanumérico de até n caracteres, onde n deve ser menor
Varchar (n)
ou igual a 254 caracteres.
Define um campo alfanumérico de n caracteres, onde n deve ser menor ou
Char (n)
igual a 254 caracteres.
Long Varchar Define um campo alfanumérico de comprimento maior que 254 caracteres.
Tipos Data e Hora
Date Definir um campo que irá armazenar datas.
Time Definir um campo que irá armazenamento de horário.

Depois de criada a estrutura de uma tabela (arquivo), é possível utilizar


o comando ALTER TABLE para acrescer, alterar, retirar e alterar nomes,
formatos das colunas e a integridade referencial definidas em uma determinada
tabela. Pode ser observado no quadro 2 a sintaxe do comando.

ALTER TABLE <nome–tabela>


DROP <nome–coluna>
ADD <nome–coluna> <tipo–do–dado> [NOT NULL]
[NOT NULL WITH DEFAULT]
RENAME <nome–coluna> <novo–nome–coluna>
RENAME TABLE <novo–nome–tabela>
MODIFY <nome–coluna> <tipo–do–dado> [NULL]
[NOT NULL]
[NOT NULL WITH DEFAULT]
ADD PRIMARY KEY <nome–coluna>
DROP PRIMARY KEY <nome–coluna>
ADD FOREIGN KEY (nome–coluna–chave–estrangeira) REFERENCES
(nome–tabela–pai) ON DELETE [RESTRICT]
[CASCADE]
[SET NULL]
DROP FOREIGN KEY (nome–coluna–chave–estrangeira) REFERENCES
(nome–tabela–pai)

Quadro 2 – Sintaxe do comando Alter Table (DLL – SQL)


A seguir será especificado o significado de cada expressão:
• Nome–tabela – Representa o nome da tabela que será
atualizada.
• Nome–coluna – Representa o nome da coluna que será criada.
• tipo–do–dado – Cláusula que define o tipo e tamanho dos
campos definidos para a tabela.
• DROP <nome–coluna> – Realiza a retirada da coluna
especificada na estrutura da tabela.
• ADD <nome–coluna> <tipo–do–dado> – Realiza a inclusão da
coluna especificada na estrutura da tabela. Na coluna
correspondente a este campo nos registros já existentes será
preenchido o valor NULL (Nulo). As definições NOT NULL e
NOT NULL WITH DEFAULT são semelhantes à do comando
CREATE TABLE.
• RENAME <nome–coluna> <novo–nome–coluna> – Realiza a
troca do nome da coluna especificada.
• RENAME TABLE <novo–nome–tabela> – Realiza a troca do
nome da tabela especificada.
• MODIFY <nome–coluna> <tipo–do–dado> – Permite a
alteração na característica da coluna especificada.
• Opção: Além das existentes na opção ADD (NOT NULL e NOT
NULL WITH DEFAULT), temos a opção NULL que altera a
característica do campo passando a permitir o preenchimento
com o valor Nulo.
• ADD PRIMARY KEY <nome–coluna> – Esta opção é utilizada
quando é acrescido um novo campo como chave primária da
tabela.
• DROP PRIMARY KEY <nome–coluna> – Esta opção é
utilizada quando é retirado um campo como chave primária da
tabela.
• ADD FOREIGN KEY <nome–coluna> – Esta opção é utilizada
quando é acrescido um novo campo sendo ele uma chave
estrangeira.
• DROP FOREIGN KEY <nome–coluna> – Esta opção é utilizada
quando é retirado uma chave estrangeira da estrutura da tabela.
Para eliminar a estrutura e os dados existentes em uma tabela, é
utilizado o comando DROP TABLE, como mostra a sintaxe exemplificado no
quadro 3. Após a execução deste comando estarão deletados todos os dados,
estrutura e índices de acessos que estejam a ela associados.

DROP TABLE <nome–tabela>


Quadro 3 – Sintaxe do comando Drop Table (DLL – SQL)

O comando CREATE INDEX tem o objetivo de criar uma estrutura de


índice de acesso para uma determinada coluna em uma tabela, como mostra o
quadro 4. Um índice de acesso permite um acesso mais rápido aos dados em
uma operação de seleção. Os índices podem ser criados a partir de um ou
mais campos de uma tabela.

CREATE [UNIQUE] INDEX <nome–índice>


ON <nome–tabela> (<nome–coluna> [ASC], [<nome–coluna>[ASC ] ])
[DESC] [DESC]
Quadro 4 – Sintaxe do comando Create Index (DLL – SQL)

A seguir está especificado o significado de cada expressão:


• Nome–índice: representa o nome da estrutura de índice que
será criada;
• Nome–tabela – Representa o nome da tabela que contem a
coluna na qual será criado o índice de acesso.
• Nome–coluna – Representa o nome da coluna que será criada.
• Opção ASC/DESC – Representa a criação do índice ordenada
crescentemente (ASC) ou decrescentemente (DESC).
Para eliminar uma estrutura de índice de acesso para uma determinada
coluna em uma tabela, é utilizado o comando DROP INDEX, como mostra o
quadro 5.

DROP INDEX <nome–índice>

Quadro 5 – Sintaxe do comando Drop Index (DLL – SQL)


2.2. Comandos DML

A estrutura básica de uma expressão SQL consiste de três cláusulas,


como mostra o quadro 6, que são SELECT, FROM e WHERE:
• A cláusula SELECT corresponde à operação projeção da álgebra
relacional. É usada para listar os atributos desejados no resultado
de uma consulta.
• A cláusula FROM corresponde à operação produto cartesiano da
álgebra relacional. Ela lista as relações a ser examinadas na
avaliação da expressão.
• A cláusula WHERE corresponde a predicado de seleção da
álgebra relacional. Consiste em um predicado envolvendo
atributos de relações que aparecem na cláusula FROM.

SELECT nome_atributo1, nome_atributo2,...


FROM nome_tabela1, nome_tabela2...
WHERE condição

Quadro 6 – Sintaxe do comando Select (DML – SQL)

Caso a cláusula WHERE seja omitida, a sentença é sempre verdadeira.


A lista de atributos pode ser substituída por um asterisco (*) para selecionar
todos os atributos de todas as relações presentes na cláusula FROM.
A SQL forma o produto cartesiano das relações chamadas na cláusula
FROM, executa uma seleção da álgebra relacional usando o predicado da
cláusula WHERE e, então projeta o resultado para os atributos da cláusula
SELECT.
O resultado de uma consulta SQL é, obviamente, uma relação. A
cláusula WHERE especifica quais linhas devem ser recuperadas a partir das
condições de pesquisa. A tabela 2 mostra as condições permitidas na sintaxe
do WHERE.

Tabela 2 – Condições permitidas na sintaxe do WHERE


Operações Operadores
Relacionais = > < >= <= <> != !< !>
Faixa de valores BETWEEN e NOT BETWEEN
Comparação com cadeia de caracteres LIKE e NOT LIKE
Pertinência a conjuntos IN e NOT IN
Valores desconhecidos IS NULL e IS NOT NULL
Combinação de operações AND, OR
Negações NOT
Na SQL, também é possível renomear atributos através da clausula
AS. Um exemplo do uso desta clausula está declarado na sentença do quadro
7:

SELECT nome,endereco AS rua FROM clientes

Quadro 7 – Sintaxe do comando AS (DML – SQL)

A SQL permite duplicações em relações. As consultas que resultam em


linhas duplicadas terão todas as linhas exibidas. Nos casos em que queremos
forçar a eliminação de duplicações (na exibição do resultado), inserimos a
palavra–chave DISTINCT depois de SELECT .
A SQL permite o uso da palavra–chave ALL para especificar
explicitamente que as duplicações não sejam removidas.
Uma vez que a detenção das duplicações é o padrão, não é necessario
usar ALL. A fim de assegurar a eliminação de duplicações no resultados de
consultas, se deve usar DISTINCT quando necessário.
O quadro 8 mostra a sintaxe dos comando ALL e DISTINCT.

SELECT [ALL/DISTINCT] nome_atributo1, nome_atributo2....


FROM tabela
WHERE condições
Quadro 8 – Sintaxe do comando All / Distinct (DML – SQL)

A cláusula ORDER BY ocasiona o aparecimento de linhas no


resultado de uma consulta em uma ordem determinada.
Como padrão, a SQL lista itens na ordem ascendente. Para especificar
a ordem de classificação, se deve especificar DESC para ordem descendente
ou ASC para a ordem ascendente. Pode ser utilizado o número relativo da
coluna no lugar do nome da coluna.
A fim de preencher a requisição ORDER BY, a SQL precisa executar
uma classificação. Uma vez que a classificação de um grande número de
tuplas pode ser custoso, é desejável classificar apenas quando necessário.
O quadro 9 mostra a sintaxe dos comandos ORDER BY, ASC e DESC.
SELECT nome_atributo1, nome_atributo2....
FROM tabela
WHERE condições
[ORDER BY nome_atributon / número_da_coluna
[ASC / DESC]]...
Quadro 9 – Sintaxe do comando Order By (DML – SQL)

As funções agregadas retornam valores resumo, para a tabela inteira


ou para grupo de colunas dentro da tabela. O resultado aparece como uma
nova coluna no resultado da consulta.
A SQL oferece a habilidade para computar funções em grupos de
tuplas (linhas) usando a cláusula GROUP BY. O atributo ou atributos dados na
cláusula GROUP BY são usados para formar grupos. Tuplas com o mesmo
valor em todos os atributos na cláusula GROUP BY são colocados em um
grupo. A SQL inclui funções para computar que são:
• média : avg;
• mínimo: min;
• máximo: max;
• total: sum;
• contar: count;
Existem casos nos quais duplicações precisam ser eliminadas antes de
uma função agregada ser computada. Para eliminar duplicações, é usada a
palavra–chave DISTINCT na expressão agregada.
Às vezes é útil definir uma condição que se aplique a grupos em vez de
tuplas. Por exemplo, pode ser interessante para o gerencimaneto do
estabelecimento obter–se uma listagem informando quais pedidos possuem
mais do que 3 produtos . Esta condição não se aplica a tuplas simples. Pelo
contrário, aplica–se a cada grupo construído pela cláusula GROUP BY
(agrupamento por pedido). Para expressar tal consulta usa–se a cláusula
HAVING. A cláusula HAVING habilita a aplicação de condições a grupos. Os
predicados na cláusula HAVING são aplicados depois da formação dos grupos,
para que funções agregadas possam ser usadas.
Resumindo as funções agregadas produzem um único valor baseado
em uma determinada coluna como mostra a tabela 3, a cláusula GROUP BY
permite organizar em grupos estes dados sumarizados e a cláusula HAVING
aplica restrições aos grupos gerados.
Tabela 3 – Funções agregadas
Função Parâmetros Descrição
([ALL/ DISTINCT] Média de valores na coluna especificada, todos
AVG
expressão) ou distintos.
([ALL/ DISTINCT] Número de valores na coluna, todos ou
COUNT
expressão) distintos.
COUNT (*) Número de linhas selecionadas
MAX (expressão) Maior valor na coluna
MIN (expressão) Menor valor na coluna
([ALL/ DISTINCT] Somatório de valores na coluna, todos ou
SUM
expressão) distintos.

A tabela 4 mostra exemplos nos quais se pode utilizar as funções


agregadas, com a sintaxe dos comandos.

Tabela 4 – Exemplos de funções agregadas


Objetivo da Consulta Expressão SQL
MAX, MIN – Listar o menor e o maior salário de Select min(salario),max(salário)
funcionários. From funcionários
SUM – Mostrar a soma total do salário dos Select sum(salario)
funcionários. From funcionários
AVG – Qual a média dos salários dos Select avg(salario)
funcionários. From funcionários
Select count(*)
COUNT – Quantos funcionários ganham acima From funcionarios
de R$ 1.500,00 de salário. Where salário > 1500

As funções agregadas são utilizadas junto à lista de atributos do


comando SELECT e/ou na cláusula HAVING.
A ordem de execução dos comando em um select contendo as
cláusulas WHERE, GROUP BY e HAVING, exemplificado no quadro 10, é a
seguinte:
a) O predicado na cláusula WHERE é aplicado primeiro, excluindo
linhas que não satisfaçam as condições.
b) As linhas satisfazendo o predicado WHERE são então
colocadas em grupos pela cláusula GROUP BY.
c) A cláusula HAVING é então aplicada a cada grupo. Os grupos
que satisfazem o predicado da cláusula HAVING são usados
pela cláusula SELECT para gerar linhas do resultado da
consulta.
Uma consulta que possui uma cláusula HAVING deve,
preferencialmente, conter uma cláusula GROUP BY. Caso não haja GROUP
BY as linhas não excluídas pela cláusula WHERE são processadas como um
único grupo.
Cada nome de atributo no SELECT deve ser mencionado na cláusula
GROUP BY.

SELECT nome_atributo1, nome_atributo2,...


FROM nome_tabela1, nome_tabela2...
WHERE condição
[GROUP BY expressão,....]
[HAVING condição]
Quadro 10 – Sintaxe do comando Group By (DML – SQL)

Nos exemplos anteriores, foi utilizado somente uma tabela. Entretanto


muitas vezes, para formular o resultado das consultas, é necessário a busca de
dados de várias tabelas. Nestes casos é preciso realizar uma junção entre
estas tabelas, esta junção é efetivada através de colunas que são
comparáveis, representando dados similares em cada uma das tabelas
incluídas na junção.
Quando é realizado junções é comum que as tabelas possuam colunas
com o mesmo nome, neste caso deve–se utilizar o qualificador de nomes,
ou seja, o nome da tabela antes do nome do atributo.

É possivel implementar junções utilizando duas sintaxes diferentes.


Nos quadros 11 e 12 são descritas as características dos dois formatos
disponíveis.

SELECT nome_tabela.nome_atributo1, ....


FROM {nome_tabela1 [tipo_join] JOIN nome_tabela2 ON condições}
WHERE condições

Quadro 11 – Sintaxe Select múltiplas tabelas utilizando Join (DML – SQL)

A tabela 5 mostra os tipos de junções (tipo_join) que são permitidos


utilizar na sintaxe do quadro 11.

Tabela 5 – Tipos de junção permitidos (tipo_join)


Tipo de junção Descrição
INNER JOIN Somente linhas que satisfazem a condição de junção
Combinação de todas as linhas entre as tabelas – equivale ao
CROSS JOIN
produto cartesiano da álgebra relacional
OUTER JOIN Inclui as linhas que satisfazem a condição de junção e as linhas
(permitido somente entre duas tabelas) remanescentes de uma das tabelas conforme descrito abaixo:
LEFT OUTER JOIN Inclui todas as linhas da tabela do lado esquerdo da expressão
RIGHT OUTER JOIN Inclui todas as linhas da tabela do lado esquerdo da expressão
Inclui todas as linhas de ambas as tabelas, mesmo as que não
FULL OUTER JOIN
tenham correspondentes.

SELECT nome_tabela1.nome_atributo1, ....


FROM nome_tabela1, nome_tabela2 ...
WHERE nome_tabela.nome_atributo1 operador_junção
nome_tabela2.nome_atributo2

Quadro 12 – Sintaxe Select múltiplas tabelas utilizando Where (DML – SQL)

Neste formato a cláusula FROM especifica as tabelas que serão


utilizadas na consulta e a cláusula WHERE especifica quais linhas serão
incluídas no resultado utilizando a equação de junção.
Os operadores de junção que podem ser usados são os descritos
como relacionais da tabela 2. A tabela 6 mostra a compatibilidade entre os
exemplos dos quadros 11 e 12.

Tabela 6 – Compatibilidade entre sintaxes mostrados nos quadros 11 e 12

Sintaxe Quadro 11 Sintaxe Quadro 12


INNER JOIN Condição de junção na cláusula WHERE com os operadores
descritos acima
CROSS JOIN Comando SELECT sem a cláusula WHERE
LEFT OUTER JOIN Operador *= na equação de junção
RIGHT OUTER JOIN Operador =* na equação de junção
FULL OUTER JOIN Não tem comando compatível

Para qualquer um dos formatos é possível fazer a junção de diversas


tabelas no mesmo comando SELECT.
Até o momento as situações ficaram restritas à extração de
informações do banco de dados. A seguir serão mostradas como adicionar,
apagar ou alterar informações usando a SQL.
Para inserir um dado em uma tabela, ou especificar uma tupla para ser
inserida ou escrever uma consulta cujo resultado seja um conjunto de tuplas a
serem inseridas é usado o INSERT, como pode ser observado no quadro 13.
Obviamente, os valores dos atributos para tuplas inseridas precisam ser
membros do domínio do atributo. Da mesma forma, as tuplas inseridas
precisam ser do mesmo tipo.
INSERT [INTO] nome_tabela
VALUES (lista de valores)
Quadro 13 – Sintaxe do comando Insert em toda a tabela (DML – SQL)

No formato do quadro 13 os atributos devem ser informados na mesma


ordem em que a tabela foi criada e devem existir valores para todos os
atributos.
Para inserir dados em apenas algumas colunas deve se especificar as
colunas que serão inseridos os dados, como exemplifica o quadro 14.

INSERT [INTO] nome_tabela (lista de atributos)


VALUES (lista de valores)
Quadro 14 – Sintaxe do comando Insert atributos definidos (DML – SQL)

A lista de atributos pode ser descrita em qualquer ordem, os itens de


dados na cláusula VALUES devem seguir a mesma ordem da lista de
atributos.
As colunas não especificadas serão preenchidas com seus valores
default (caso algum valor default tenha sido definido), ou serão preenchidas
com nulo (se um valor default não foi definido e a coluna permite nulo).
As colunas que não admitem nulo, não possuem um valor default,
devem obrigatoriamente constar da lista de atributos.
É possivel fazer a inserção dos dados em uma tabela a partir de uma
instrução SELECT, como mostra o quadro 15.

INSERT nome_tabela
SELECT lista_de_atributos
FROM lista _de_tabelas
WHERE condições
Quadro 15 – Sintaxe do comando Insert a partir do Select (DML – SQL)

Usando uma cláusula SELECT diversas linhas de uma ou mais tabelas


são inseridas na tabela especificada na cláusula INSERT.
A tabela usada no INSERT e o resultado do SELECT devem ser
compatíveis em número de colunas, ordem das colunas e tipos de dados.
Se um atributo é omitido na cláusula INSERT ele deve possuir um valor
default ou permitir nulo.
Para remover linhas de uma tabela, a remoção requisitada é expressa
da mesma forma que uma consulta (usando as cláusulas FROM e WHERE)
precedida do comando DELETE, como pode ser observado no quadro16. É
possível remover apenas tuplas inteiras, não se pode remover valores apenas
em atributos particulares.

DELETE [FROM] nome_tabela


WHERE condições

Quadro 16 – Sintaxe do comando Delete (DML – SQL)

Um comando DELETE opera em apenas uma relação. Para remover


tuplas de diversas relações, deve se usar um comando DELETE para cada
relação. O predicado na cláusula WHERE pode ser tão complexo quanto uma
cláusula WHERE do comando SELECT. Se pode da mesma forma, ter uma
cláusula WHERE vazia, neste caso serão eliminadas todas as tuplas de uma
tabela.
Em certas situações, é desejado mudar um valor em uma tupla sem
mudar todos os valores na tupla. Para isto, a instrução UPDATE pode ser
usada, como pode ser observado no quadro 17. Como era o caso para
INSERT e DELETE pode se escolher as tuplas a serem atualizadas usando
uma consulta.

UPDATE nome_tabela
SET {nome_atributo1=expressão[, nome_atributo2 = expressão]...}
WHERE condição

Quadro 17 – Sintaxe do comando Update (DML – SQL)

O comando UPDATE opera somente em uma tabela. A cláusula SET


especifica as colunas a serem alteradas e os valores novos, a cláusula
WHERE especifica quais as linhas que serão atualizadas.
Se os novos valores violarem as restrições de integridade o comando
UPDATE não é efetivado.
É possivel fazer a atualização de colunas baseado em dados de outras
tabelas, como mostra o quadro 18.

UPDATE nome_tabela
SET { nome_atributo= ( cláusula SELECT)
WHERE condição

Quadro 18 – Sintaxe Update buscando dados de outra tabela (DML – SQL)

A cláusula SELECT de atualização deverá retornar um único valor. É


executada uma vez para cada linha. O valor calculado pelo SELECT atualizará
a linha especificada. Somente linhas que satisfaçam a cláusula WHERE mais
externa serão atualizadas.
Uma visão é uma tabela virtual criada a partir de uma ou mais tabelas
do banco de dados. Uma visão pode selecionar apenas algumas colunas ou,
apenas algumas linhas da tabela original e pode também possuir campos que
são calculados ou derivados de outras informações.
Visões podem ser utilizadas como um dispositivo de segurança do
banco de dados (o usuário enxerga apenas as informações que lhe são
permitidas). Podem também ser utilizadas com a finalidade de simplificar a
visualização dos dados ou para simplificar a definição das consultas.
Depois de criada a visão será utilizada como se fosse uma tabela, nos
comandos SELECT, INSERT, UPDATE ou DELETE.
Uma visão é definida na SQL usando o comando CREATE VIEW. Para
definir uma visão, é necessário dar à visão um nome e definir a consulta que a
processa. Uma visão pode também ser definida a partir de outra visão. A
sintaxe do comando Create View está no quaro 19.

CREATE VIEW [PROPRIETARIO.]nome_visão


[(nome_atributo1 [, nome_atributo2]...)
AS comando_select

Quadro 19 – Sintaxe do comando Create View (DML – SQL)

Visões não podem ser alteradas, devem ser apagadas (DROP VIEW) e
recriadas.
Uma atualização em uma visão pode afetar somente um objeto
subjacente, ou seja, se a visão é resultado da junção de duas tabelas devem–
se alterar os campos de cada tabela em comandos de atualização separados.
Colunas que contém valores calculados, funções do sistema ou,
funções de agregação não podem ser modificadas.
Uma linha não pode ser inserida através de uma visão a menos que as
colunas que não aceitem nulos, no objeto subjacente tenham valores defaults.
Esta regra é relevante para as colunas que não fazem parte da definição da
visão.
REFERÊNCIAS

CUNHA, J. R. C. A Escolha de um Banco de Dados Relacional. In Publicação


Tematec, Tema 104 – ANO I – Nº 03 – 1991. Brasília. Disponível em:
<http://www.serpro.gov.br/imprensa/publicacoes/tematec/1991/ttec03/?
searchterm=codd>. Acessado em: 09 nov. 2007.

DATE, C.J.: Introdução a Sistemas de Bancos de Dados; traduzido por


Vandenberg D. de Souza: 7° Edição; Rio de Janeiro, Editora Campus, 2000.

KROENKE, David M.; Banco de Dados – Fundamentos, Projetos e


Implementação; traduzido por Luiz Carlos Gabriel Soares e Amir Kurban: 6°
Edição: Rio de Janeiro, LTC – Livros Técnicos e Científicos Editora S.A., 1999.

MACHADO, Felipe Nery Rodrigues: Banco de Dados – Projeto e


Implementação. São Paulo, Érica, 2004.

SALEMI, Joe. Guia para Banco de Dados Cliente/servidor; traduzido por


Cláudio Costa: 2º edição; Rio de Janeiro; Infobook, 1995.

SILBERSHARTZ, Abraham; KORTH, Henry F., SUDARSHAN, S.: Sistema de


Banco de Dados: São Paulo; MAKRON Books, 1999.

Вам также может понравиться