Escolar Documentos
Profissional Documentos
Cultura Documentos
PDF gerado usando o pacote de ferramentas em cdigo aberto mwlib. Veja http://code.pediapress.com/ para mais informaes.
PDF generated at: Fri, 06 Dec 2013 10:38:38 UTC
Contedo
Pginas
Introduo ao SQL 1
Banco de dados Relacional 3
Linguagem de definio de dados 6
Criando tabelas 7
Alterando tabelas 10
Removendo tabelas 11
Linguagem de manipulao de dados 12
Inserindo dados 12
Alterando dados 12
Removendo dados 13
Linguagem de consulta de dados 13
Ordenao 14
Agrupamento 15
Funes de agregao 16
Junes 17
Referncias
Fontes e Editores da Pgina 21
Fontes, Licenas e Editores da Imagem 22
Introduo ao SQL
SQL (do ingls 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 informaes de um banco de dados. Pode ser
usada tambm para manipular metadados de um banco de dados. SQL uma linguagem declarativa onde os
resultados ou operaes so dadas sem muita especificao detalhada sobre como completar as tarefas. Os passos
requeridos para executar demonstraes SQL so manuseados de forma transparente pelo banco de dados SQL.
Algumas vezes essa linguagem caracterizada como no-procedural porque linguagens procedurais geralmente
precisam que detalhes das operaes sejam especificados, tal como abertura e fechamento de tabelas, carregamento e
busca, ou flushing buffers e escrio de dados para sistemas de arquivo. Contudo, SQL considerada uma
linguagem de alto nvel, que abstrai o nvel das operaes realizadas e a maneira como estas so realizadas.
Instrues so dadas na forma de declaraes, consistindo de declaraes especficas do SQL, parmetros adicionais
e operandos que aplicam esses comandos. As declaraes SQL e seus modificadores so baseados no oficial SQL
standart e certas extenses que cada fornecedor de banco de dados implementa. As declaraes mais comuns esto
agrupadas nas categorias que citaremos abaixo.
Histria do SQL
O SQL foi desenvolvido originalmente no incio dos anos 70 nos laboratrios da IBM em San Jose, dentro do projeto
w:System R, que tinha por objetivo demonstrar a viabilidade da implementao do modelo relacional proposto por
E. F. Codd. O nome original da linguagem era SEQUEL, acrnimo para "Structured English Query Language"
(Linguagem de Consulta Estruturada em Ingls), vindo da o fato de, at hoje, a sigla, em ingls, ser comumente
pronunciada "squel" ao invs de "s-ki-l", letra a letra. No entanto, em portugus, a pronncia mais corrente a
letra a letra: "sse-qu-le".
Subconjuntos
A linguagem SQL dividida em subconjuntos de acordo com as operaes que queremos efetuar sobre um banco de
dados.
Motivao
A unidade principal por trs de um banco de dados relacional tem como funo aumentar a preciso, aumentando a
eficincia com que os dados so armazenados. Por exemplo, os nomes de cada uma das milhes de pessoas que
imigraram para os Estados Unidos atravs das Ilhas Ellis durante o sculo XX foram escritos mo e guardados em
um grande quantidade de folhas de papel; pessoas da cidade de Londres tiveram seu pas de origem definido como
Inglaterra, ou Gr-Bretanha, ou Reino Unido ou ainda de alguma dessas formas abreviadas. Mltiplas maneiras de
guardar a mesma informao geram confuso quando houver necessidade de saber algo simples como quantas
pessoas vieram do pas hoje conhecido como Reino.
A solues moderna para esse problema o banco de dados. Um nico registro dado para cada pas, por exemplo,
em uma lista de referncia que deve ser chamada de tabela de pas. Quando algum precisar indicar o Reino Unido,
ser necessrio apenas ter uma escolha disponvel para ela a partir da lista: uma simples lista de letras (ou string),
"Reino Unido" como nica representao do pas, e qualquer outra informao que precisar desse pas pode usar o
mesmo termo a partir da lista para se referir ao mesmo pas. Por exemplo, uma lista com os cdigos de telefone do
pas e uma lista dos castelos europeus, ambos precisam se referir ao pas; pelo uso da mesma lista de pases para
prover informaes idnticas para as duas novas listas. Ns estabelecemos um novo relacionamento entre listas
diferentes, com apenas um tem em comum: pas. Um banco de dados relacional, assim, simplesmente uma coleo
de listas que distribuem alguma parte da informao.
empregados a tabela
um nmero inteiro
id_empregado a chave primria
primeiro nome uma coluna uma string de caracteres uma coluna tipo
telefone 10 numeros
empregado
Os dados guardados em uma tabela so chamados entidades. Como uma tabela usualmente representada como uma
matriz, os atributos do dados (primeiro nome, ltimo nome, ...) so chamados colunas e os registros (cada um dos
empregados) so chamadas linhas. Uma chave primria normalmente sublinhada. Qualquer atributo nico (por
exemplo, o endereo) ou grupo de atributos (como o primeiro nome e o ltimo nome) podem ser a chave primria de
uma tabela, mas isso recomendado para a tcnica do id, como no exemplo id_empregado como chave primria. A
funo da chave primria simplesmente diferenciar uma das linhas, ou registros, que fazem parte de uma tabela.
Vamos criar um segunda tabela chamada projeto que guardar os projetos da empresa:
empregado projeto
empregado projetos
id_project a chave primria da tabela projeto e manager a chave estrangeira. Uma chave estrangeira
uma chave primria de uma tabela, fazendo referncia ou ligao com algum valor de outra tabela. Fazendo isso, o
projeto Google est conectado ao empregado Larry PAGE. Essa ligao, ou conexo, se chama relacionamento.
Uma chave estrangeira usualmente precedida por um smbolo sharp, ou jogo-da-velha (#). Note que diversos
projetos podem apontar para o mesmo gerente, ento um mesmo empregado pode ser gerente de vrios projetos.
Agora, ns queremos criar, no apenas uma nica ligao, mas mltiplas. Ento criamos uma tabela de juno. Uma
tabela de juno uma tabela que no usada para guardar dados, mas as ligaes entre entidades de outras tabelas.
a tabela onde as ligaes, ou relacionamentos, entre as tabelas so guardadas. Vamos criar uma tabela chamada
Banco de dados Relacional 5
primeiro-nome uma string de caracteres # id_projeto um inteiro nome uma string de caracteres
empregado projeto
membros
# id_empregado # id_projeto
3 2
2 1
4 3
5 1
2 3
6 1
7 3
Um empregado pode estar ligado com vrios projetos e um projeto pode ser associado a vrios empregados, o que
impossvel com apenas uma chave estrangeira. Uma tabela de juno no tem chave primria prprias. Sua chave
primria o par de chaves estrangeiras, pois esse casal nico. Uma tabela de juno pode ligar mais de duas tabelas
contendo entidade por mais colunas.
Banco de dados Relacional 6
Relacionamentos
Ento vamos listar os diferentes tipos de relacionamento:
Um para um,
Um para muitos (como exemplo, o gerente de um projeto),
Muitos para muitos (como exemplo, os membros de um projeto).
CREATE
Uma declarao CREATE permite a criao de uma nova base de dados, tabela, ndice, ou consulta armazenada,
sendo os tipos de objetos que podem ser criados definidos pelo SGBD que est sendo utilizado. Entre os principais
comandos inclusos esto CREATE DATABASE (criar banco de dados) , CREATE TABLE (criar tabela) e outros.
Exemplo:
Crie um banco de dados com o nome registro_de_alunos:
CREATE DATABASE registro_de_alunos;
Agora crie uma tabela alunos para este BD criado com as seguintes colunas: nome, matricula, curso.
USE registro_de_alunos;
CREATE TABLE alunos (
nome CHAR(50) NOT NULL,
matricula INT NOT NULL,
curso CHAR(50) NOT NULL,
PRIMARY KEY(matricula));
Linguagem de definio de dados 7
DROP
Uma declarao DROP permite remover (destruir) uma base de dados existente, tabela, ndice, ou view, sendo os
tipos de objetos que podem ser removidos definidos pelo SGBD que est sendo utilizado. Entre os principais
comandos inclusos esto DROP DATABASE (elimina um banco de dados inteiro) , DROP TABLE (excluir tabela)
e outros.
ALTER
Uma declarao ALTER permite alterar um objeto de um banco de dados, sendo os tipos de objetos que podem ser
alterados definidos pelo SGBD que est sendo utilizado. Entre os principais comandos esto ALTER TABLE ADD
(adicionar uma coluna na tabela), ALTER TABLE DROP (excluir uma coluna na tabela)
Criando tabelas
Podemos criar uma tabela qualquer dentro de um banco de dados. A sintaxe bsica para criarmos :
CREATE TABLE o comando para criao da tabela e deve ser seguida pelo nome que daremos tabela. Dentro do
comando, devemos definir os nomes dos campos de acordo com a convenincia do banco de dados, e determinar o
tipo de dado que poder ser includo neste campo. Na seo abaixo Tipo de Dados esto especificados os tipos mais
comuns encontrados nos SGBDs. PRIMARY KEY define a chave primria da tabela, isto , o campo que serve
como chave da tabela e que no pode ser repetido.
Se desejamos que um campo seja de preenchimento obrigatrio, devemos inserir NOT NULL na frente do campo
determinado.
Se desejamos que um campo seja de auto-incremento, devemos inserir AUTO_INCREMENT na frente do campo
determinado. Isto pode ser utilizado por exemplo, para automatizar um cdigo que sirva de chave primria de uma
tabela:
nome_campo_n tipo_n,
PRIMARY KEY (campo_x,...));
Tipos de Dados
Tipos de dados definem os tipos de informao que podem ser inseridos em um campo. Somente dados do mesmo
tipo do campo podero ser inseridos. Os tipos suportados por um banco de dados podem variar de SGBD para
SGBD, mas descrevemos a seguir os principais tipos encontrados na maior parte dos gerenciadores:
Exemplo
Como exemplo do uso do comando CREATE TABLE, imaginemos a necessidade de uma tabela que deva possuir os
dados dos clientes de uma loja.
Neste comando, criaremos uma tabela chamada Cliente. Esta tabela contm quatro campos: o primeiro campo o
Cdigo do cliente. Este campo ser utilizado como chave primria de forma que no poder se repetir nunca. Desta
forma o campo deve ser sempre preenchido (NOT NULL), numrico do tipo inteiro (INT) e deve auto-incrementar
de acordo com o nmero de clientes que for includo. O campo Nome do tipo VARCHAR (60), ou seja aceita
dados alfa-numricos com at 60 caracteres. No entanto se um nome for inserido com menos de 60 caracteres, o
nmero de bytes consumidos pelo campo ser de acordo com o nome inserido. O campo de Data_Nascimento do
tipo DATE, ou seja, uma data, que no entanto no de preenchimento obrigatrio (por isto no foi declarado o NOT
NULL). O campo Telefone foi determinado como sendo alfa-numrico com oito caracteres definidos, e mesmo que
sejam utilizados menos caracteres, o nmero de bytes consumidos sero sempre os mesmos independente dos dados.
Criando tabelas 9
Isto til para dados alfanumricos que no variam de tamanho, como o caso de UF no Brasil, cuja abreviao
sempre so de dois caracteres. A instruo PRIMARY KEY define qual dos campos ser a chave primria e no
pode ser repetido, sendo o diferenciador entre os diversos clientes que sejam inseridos nesta tabela.
Describe
Aps criarmos uma tabela, elas podem ser manipuladas de diversas formas, inserindo, alterando ou excluindo dados.
Podemos visualizar a estrutura e campos de uma tabela criada utilizando o comando DESCRIBE ou DESC:
DESCRIBE Nome_Tabela;
Ou:
DESC Nome_Tabela;
Regras de Integridade
Estudamos acima como criar uma tabela simples. No entanto, ao criarmos uma tabela dentro de um banco de dados
devemos ter em mente as Regras de Integridade, que garantam a consistncia, integridade e no redundncia dos
dados. Entre estas regras podemos englobar as chaves primrias, checagem e chave estrangeira.
Chave primria
No exemplo acima vimos a seguinte declarao na criao da tabela:
Esta declarao diz que os campos inseridos entre os parnteses formam a chave primria da tabela. A chave
primria funcionam como os campos que diferenciam os dados uns dos outros, e que no podem ser repetidos de
nenhuma forma. Por exemplo, em nossa tabela Cliente, o cdigo do Cliente funciona como a chave-primria, ou
seja, os clientes podem at ter o mesmo nome, endereo ou telefone, mas tero cdigos diferentes uns dos outros. Se
dois cdigos iguais forem inseridos o SGBD retornar erro.
Checagem
Podemos inserir em uma tabela depois do campo chave primria e antes do ltimo parntese a clusula:
Esta clusula fora a um campo a aceitar apenas os valores especificados entre os parnteses. Isto pode ser til para
definir, por exemplo, campos como sexo. Desta forma foramos as opes atravs de:
Chave estrangeira
A chave estrangeira uma clusula que deve ser includa quando possumos mais de duas tabelas em um banco de
dados. Atravs da chave estrangeira estabelecemos as relaes entre duas ou mais tabelas. A chave estrangeira desta
forma referencia o campo que chave primria de outra tabela. Tabela.
Alterando tabelas
Aps criarmos uma tabela em um banco de dados, podemos alterar sua estrutura com o uso da clusula ALTER
TABLE. Deve-se notar que esta alterao sempre sobre a estrutura da tabela, e no sobre os dados da tabela (este
tipo de alterao ser vista mais adiante).
Esta alterao da tabela efetuada de duas formas: ou acrescentando um novo campo (utilizando ADD) ou
alterando-se as propriedades de um campo j existente (utilizando-se MODIFY). O comando ALTER TABLE segue
a seguinte sintaxe:
ADD
Podemos utilizar a clusula ADD para adicionar um novo campo em uma tabela, onde devemos definir seu tipo da
mesma forma como fazemos ao criar um campo em uma nova tabela. Por exemplo, imaginemos que devemos inserir
mais um campo chamado Telefone Comercial no final da tabela Cliente:
Da mesma forma, campos com tamanhos definidos, devem ter seu tamanho especificado. Assim se desejamos inserir
mais um campo do tipo VarChar, chamado por exemplo de Nome da Me em nossa tabela Cliente fazemos:
Caso desejemos que um campo seja inserido antes ou depois de um determinado campo de nossa tabela, utilizamos a
seguinte sintaxe:
Assim, se inserirmos FIRST, o novo campo ser criado antes do campo escolhido da tabela. Se utilizarmos AFTER,
depois. Desta forma se quisermos incluir o campo Nome_Me imediatamente depois do Nome do Cliente,
digitamos:
Alguns gerenciadores tambm utilizam a clusula ADD COLUMN ao invs de somente ADD. Podemos tambm
utilizar ADD para adicionar por exemplo uma chave primria em uma tabela. Em nossa tabela, se quisermos que
Alterando tabelas 11
Alguns gerenciadores tambm utilizam a clusula DROP COLUMN ao invs de somente DROP.
MODIFY
Podemos utilizar a clusula MODIFY para modificar as propriedades de um campo em uma tabela. Por exemplo,
imaginemos que devemos modificar o tamanho de nosso campo Nome na tabela Cliente, que de 60 para 100. Ento
podemos escrever:
Com a clusula MODIFY, tambm podemos alterar o tipo de um campo. Imaginemos que por um motivo qualquer
desejemos alterar o tipo do campo Nome de VarChar para Char:
Removendo tabelas
Podemos excluir uma tabela qualquer dentro de um banco de dados. A sintaxe bsica para criarmos :
No entanto, devemos nos atentar que ao excluir uma tabela que possui relacionamento com outras tabelas, o SGBD
retornar erro. Neste caso se realmente for necessrio excluir uma tabela, deve-se fazer as alteraes necessrias em
todas as tabelas relacionadas.
Constraints
Esta pgina somente um esboo.
Ampliando-a voc ajudar a melhorar o Wikilivros.
Linguagem de manipulao de dados 12
Inserindo dados
Em um banco de dados, inserir dados em uma tabela, significa preencher uma linha de determinada tabela com
dados correspondentes aos tipos determinados naquela tabela. Esta insero de dados deve seguir as regras de
integridade da tabela, assim como respeitar as regras de chave primria estabelecidas na tabela.
Na linguagem SQL, para inserirmos dados em uma tabela, utilizamos o seguinte comando:
Os valores valor1 , valor2, etc..., seguem a ordem dos campos da tabela, sendo utilizado valor vazio (' ') para campos
que no necessitem de preenchimento. Dados de tipo numrico podem ser escritos sem a necessidade de aspas
simples. Dados do tipo caracter (como char e varchar), devem ser escritos entre aspas simples.
Exemplo:
Alterando dados
Em um banco de dados, alterar dados de uma tabela significa atualizar um dado de uma determinada tabela, por
outro dado de mesmo tipo daquele que atualizado.
Na linguagem SQL, para alterarmos dados em uma determinada tabela, utilizamos o seguinte comando:
UPDATE Nome_Tabela
SET coluna a ser atualizada= valor atualizado
['''WHERE''' ''condio''];
O comando Update pode ser realizado sem o WHERE. Neste caso todas as linhas da tabela sero atualizadas com o
valor determinado no comando. Para os casos onde se necessite atualizar apenas linhas que cumpram determinada
condio, esta condio estabelecida com a incluso do comando WHERE.
Exemplo:
UPDATE Clientes
SET nome= 'Antnio Pereira' ;
Ou:
UPDATE Clientes
SET telefone= '2222-2222'
WHERE nome='Jos Pereira';
Removendo dados 13
Removendo dados
Em um banco de dados, apagar dados de uma tabela significa eliminar um dado de uma determinada tabela. Para isto
utilizamos a instruo DELETE.
Na linguagem SQL, para apagar dados em uma determinada tabela, utilizamos a seguinte sintaxe:
O comando Delete pode ser realizado sem o WHERE. Neste caso todas as linhas da tabela determinada sero
excludas. Utilizamos WHERE quando desejamos eliminar os registros que obedeam certa condio. Exemplo:
Neste caso s sero eliminados os registros cujo campo nome seja igual a Jos Pereira. Os registros com nomes
diferentes permanecero intactos.
O comando Select deve conter o nome do campo que deve ser retornado, de qual tabela e quando contm a clasula
WHERE, as condies que o registro deve obedecer para retornar os valores. Quando desejamos trazer todos os
campos utilizamos o asterisco (*).
Exemplo:
Com o uso da clusula WHERE, podemos filtrar os registros que so retornados. Neste caso podemos por exemplo
trazer apenas os registros cujo nome seja Jos da Silva:
Distinct
A funo Distinct no permite que valores iguais de uma mesma coluna sejam retornados. Sua sintaxe :
SELECT DISTINCT(Nome_Campo)
FROM Nome_tabela;
Ordenao
Podemos ordenar os resultados de uma consulta por um ou diversos campos de uma tabela. Na linguagem SQL,
utilizamos o comando ORDER BY para efetuar esta ordenao:
Exemplo:
SELECT *
FROM Clientes
WHERE Salario>1000
ORDER BY Nome;
Neste caso so trazidos todos os registros da tabela Clientes cujo campo Salario seja maior do que 1000, sendo
ordenado por nome. O ORDER BY normalmente efetua a ordenao em ordem crescente (isto , ascendente). No
entanto podemos especificar se queremos que a ordenao seja em ordem crescente ou decrescente:
SELECT *
FROM Clientes
WHERE Salario>1000
ORDER BY Nome ASC;
SELECT *
FROM Clientes
WHERE Salario>1000
ORDER BY Nome DESC;
Agrupamento
group by
Podemos agrupar dados utilizando a clusula GROUP BY que permite unir em uma nica linha todas as linhas
selecionadas que possuam os mesmos valores. Sua sintaxe :
Exemplo:
having
Conforme aprendemos anteriormente utilizamos a clusula WHERE quando queremos definir uma condio de
retorno de um comando SELECT. No entanto a clusula WHERE determina os dados que sero agregados, e no
podem definir as condies de retorno de uma agregao. Neste caso, utilizamos a clusula Having que seleciona
grupos de linhas aps as agregaes e agrupamentos serem efetuados. Exemplo:
SELECT Codigo,Max(Idade)
FROM Cliente
HAVING Max(Idade)<60;
Funes de agregao
Sum
A funo Sum permite a soma de um campo numrico. Sua sintaxe :
SELECT SUM(Nome_Campo)
FROM Nome_tabela;
Avg
A funo Avg retorna o valor mdio entre os conjuntos de valores de um campo numrico. Sua sintaxe :
SELECT AVG(Nome_Campo)
FROM Nome_tabela;
Count
A funo Count conta a quantidade de dados de um campo dado. Sua sintaxe :
SELECT COUNT(Nome_Campo)
FROM Nome_tabela;
Max
A funo Max retorna o maior valor encontrado entre os dados de um campo dado. Sua sintaxe :
SELECT MAX(Nome_Campo)
FROM Nome_tabela;
Min
A funo Min retorna o menor valor encontrado entre os dados de um campo dado. Sua sintaxe :
SELECT MIN(Nome_Campo)
FROM Nome_tabela;
Junes 17
Junes
Em um banco de dados podemos ter duas ou mais tabelas relacionadas. comum ao elaborarmos uma consulta
termos a necessidade de trazer dados de diferentes tabelas. Para criarmos esta seleo devemos definir os critrios de
agrupamento para trazer estes dados. Estes critrios so chamados de Junes. Uma juno de tabelas criar uma
pseudo-tabela derivada de duas ou mais tabelas de acordo com as regras especificadas, e que so parecidas com as
regras da teoria dos conjuntos.
Agora inserimos dados nestas tabelas. Em Profissao vamos inserir trs profisses bsicas:
Possumos agora trs profisses com respectivos cdigos. Agora vamos inserir dados na tabela Cliente:
Para visualizarmos todos os dados contidos nas duas tabelas aps a insero dos dados, podemos utilizar:
Junes 18
Porm, se quisermos trazer apenas o Nome do Cliente e o seu Cargo, podemos fazer uma juno de produto
cartesiano:
SELECT Cliente.Nome,Profissao.Cargo
FROM Cliente,Profissao
WHERE Cliente.Profissao=Profissao.Codigo;
Nesta seleo, trazemos um campo de cada tabela aps o SELECT, mencionamos as tabelas de quais elas se
originam no FROM, e no WHERE especificamos a ligao entre as tabelas. Note que Cliente.Profissao a chave
estrangeira da tabela Cliente, que referencia diretamente a chave primria da tabela Profissao.
SELECT Cliente.nome,Pedido.cod_cliente,Pedido.num_pedido
FROM Cliente INNER JOIN Pedido
ON Cliente.Cod_cliente = Pedido.Cod_cliente
SELECT distinct *
FROM Cliente
LEFT OUTER JOIN Profissao
ON Cliente.Profissao=Profissao.Codigo;
SELECT *
FROM Cliente
RIGHT OUTER JOIN Profissao
ON Cliente.Profissao = Profissao.Codigo;
SELECT *
FROM Cliente
FULL OUTER JOIN Profissao
ON Cliente.Profissao=Profissao.Codigo;
Ou ainda:
SELECT *
FROM Cliente
LEFT JOIN Profissao
ON Cliente.Profissao=Profissao.Codigo
UNION
SELECT *
FROM Cliente
RIGHT JOIN Profissao
ON Cliente.Profissao=Profissao.Codigo
WHERE Cliente.Profissao IS NULL;
Junes 20
Resumo
Juno de produto cartesiano uma juno entre duas tabelas que origina uma terceira tabela constituda por todos
os elementos da primeira combinadas com todos os elementos da segunda.
Juno Interna todas linhas de uma tabela se relacionam com todas as linhas de outras tabelas se elas tiverem ao
menos 1 campo em comum
Juno Externa uma seleo que no requer que os registros de uma tabela possuam registros equivalentes em
outras
Left Outer Join todos os registros da tabela esquerda mesmo quando no exista registros correspondentes na
tabela direita.
Right Outer Join todos os registros da tabela direita mesmo quando no exista registros correspondentes na
tabela esquerda.
Full Outer Join Esta operao apresenta todos os dados das tabelas esquerda e direita, mesmo que no
possuam correspondncia em outra tabela
Fontes e Editores da Pgina 21
Banco de dados Relacional Fonte: http://pt.wikibooks.org/w/index.php?oldid=258283 Contribuidores: Abacaxi, Jonas AGX, 2 edies annimas
Licena
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/