Buscar

Introdução ao SQL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PDF gerado usando o pacote de ferramentas em código aberto mwlib. Veja http://code.pediapress.com/ para mais informações.
PDF generated at: Fri, 06 Dec 2013 10:38:38 UTC
SQL
Conteúdo
Páginas
Introdução ao SQL 1
Banco de dados Relacional 3
Linguagem de definição de dados 6
Criando tabelas 7
Alterando tabelas 10
Removendo tabelas 11
Linguagem de manipulação de dados 12
Inserindo dados 12
Alterando dados 12
Removendo dados 13
Linguagem de consulta de dados 13
Ordenação 14
Agrupamento 15
Funções de agregação 16
Junções 17
Referências
Fontes e Editores da Página 21
Fontes, Licenças e Editores da Imagem 22
Licenças das páginas
Licença 23
Introdução ao SQL 1
Introdução ao SQL
SQL (do inglês Structured Query Language, ou Linguagem de Consulta Estruturada), é uma linguagem de pesquisa
declarativa para Bancos de Dados Relacionais (base de dados relacional).
Ela é uma linguagem para consultar, adicionar, atualizar, ou remover informações de um banco de dados. Pode ser
usada também para manipular metadados de um banco de dados. SQL é uma linguagem declarativa onde os
resultados ou operações são dadas sem muita especificação detalhada sobre como completar as tarefas. Os passos
requeridos para executar demonstrações SQL são manuseados de forma transparente pelo banco de dados SQL.
Algumas vezes essa linguagem é caracterizada como não-procedural porque linguagens procedurais geralmente
precisam que detalhes das operações sejam especificados, tal como abertura e fechamento de tabelas, carregamento e
busca, ou flushing buffers e escrição de dados para sistemas de arquivo. Contudo, SQL é considerada uma
linguagem de alto nível, que abstrai o nível das operações realizadas e a maneira como estas são realizadas.
Instruções são dadas na forma de declarações, consistindo de declarações específicas do SQL, parâmetros adicionais
e operandos que aplicam esses comandos. As declarações SQL e seus modificadores são baseados no oficial SQL
standart e certas extensões que cada fornecedor de banco de dados implementa. As declarações mais comuns estão
agrupadas nas categorias que citaremos abaixo.
História do SQL
O SQL foi desenvolvido originalmente no início dos anos 70 nos laboratórios da IBM em San Jose, dentro do projeto
w:System R, que tinha por objetivo demonstrar a viabilidade da implementação do modelo relacional proposto por
E. F. Codd. O nome original da linguagem era SEQUEL, acrônimo para "Structured English Query Language"
(Linguagem de Consulta Estruturada em Inglês), vindo daí o fato de, até hoje, a sigla, em inglês, ser comumente
pronunciada "síquel" ao invés de "és-kiú-él", letra a letra. No entanto, em português, a pronúncia mais corrente é a
letra a letra: "ésse-quê-éle".
SQL como linguagem padrão
A linguagem SQL é um grande padrão de banco de dados. Isto decorre da sua simplicidade e facilidade de uso. Ela
se diferencia de outras linguagens de consulta a banco de dados no sentido em que uma consulta SQL especifica a
forma do resultado e não o caminho para chegar a ele. Ela é uma linguagem declarativa em oposição a outras
linguagens procedurais. Isto reduz o ciclo de aprendizado daqueles que se iniciam na linguagem.
Embora o SQL tenha sido originalmente criado pela IBM, rapidamente surgiram vários "dialetos" desenvolvidos por
outros produtores. Essa expansão levou à necessidade de ser criado e adaptado um padrão para a linguagem. Esta
tarefa foi realizada pela w:American National Standards Institute (ANSI) em 1986 e ISO em 1987.
SQL foi revisto em 1992 e a esta versão foi dado o nome de SQL-92. Foi revisto novamente em 1999 e 2003 para se
tornar SQL-99 (SQL3) e SQL:2003, respectivamente.
No entanto embora o SQL, seja padronizado pela ANSI e ISO, possui muitas variações e extensões produzidos pelos
diferentes fabricantes de sistemas gerenciadores de bases de dados. Tipicamente a linguagem pode ser migrada de
plataforma para plataforma, sem mudanças estruturais principais.
Introdução ao SQL 2
Subconjuntos
A linguagem SQL é dividida em subconjuntos de acordo com as operações que queremos efetuar sobre um banco de
dados.
DDL - Linguagem de Definição de Dados
Linguagem de definição de dados (ou DDL, de Data Definition Language) é um conjunto de comandos dentro da
SQL usada para a definição das estruturas de dados, fornecendo as instruções que permitem a criação, modificação e
remoção das tabelas, assim como criação de índices. Estas instruções SQL permitem definir a estrutura de uma base
de dados, incluindo as linhas, colunas, tabelas, índices, e outros metadados.
Entre os principais comandos DDL estão:
•• CREATE - Usado para criar uma nova tabela, uma visão de uma tabela, ou outro objeto em um banco de dados.
•• ALTER - Usado para modificar um objeto existente de um banco de dados, como uma tabela.
•• DROP - Usado para apagar toda uma tabela, uma visão de uma tabela ou outro objeto em um banco de dados.
DML - Linguagem de Manipulação de Dados
Linguagem de manipulação de dados (ou DML, de Data Manipulation Language) é o grupo de comandos dentro
da linguagem SQL utilizado para a recuperação, inclusão, remoção e modificação de informações em bancos de
dados.
Os principais comandos DML são INSERT (Inserção de Dados), UPDATE (Atualização de Dados) e DELETE
(Exclusão de Dados).
Data Query Language (DQL)
É linguagem de consulta de dados, que é um subconjunto de linguagem de manipulação. O comando é SELECT,
usado para obter certos dados ou registros a partir de uma mais tabelas.
DCL - Linguagem de Controle de Dados
Linguagem de controle de dados (ou DCL, de Data Control Language) é o grupo de comandos que permitem ao
administrador de banco de dados controlar o acesso aos dados deste banco. Alguns exemplos de comandos DCL são:
•• GRANT: Permite dar permissões a um ou mais usuários e determinar as regras para tarefas determinadas;
•• REVOKE: Revoga permissões dadas por um GRANT.
As tarefas básicas que podemos conceder ou barrar permissões são:
•• CONNECT
•• SELECT
•• INSERT
•• UPDATE
•• DELETE
•• USAGE
Banco de dados Relacional 3
Banco de dados Relacional
Antes de aprender SQL, bancos de dados relacional possuem diversos conceitos que devem ser aprendidos e
compreendidos primeiro.
Motivação
A unidade principal por trás de um banco de dados relacional tem como função aumentar a precisão, aumentando a
eficiência com que os dados são armazenados. Por exemplo, os nomes de cada uma das milhões de pessoas que
imigraram para os Estados Unidos através das Ilhas Ellis durante o século XX foram escritos à mão e guardados em
um grande quantidade de folhas de papel; pessoas da cidade de Londres tiveram seu país de origem definido como
Inglaterra, ou Grã-Bretanha, ou Reino Unido ou ainda de alguma dessas formas abreviadas. Múltiplas maneiras de
guardar a mesma informação geram confusão quando houver necessidade de saber algo simples como quantas
pessoas vieram do país hoje conhecido como Reino.
A soluções moderna para esse problema é o banco de dados. Um único registro é dado para cada país, por exemplo,
em uma lista de referência que deve ser chamada de tabela de país. Quando alguém precisar indicar o Reino Unido,
será necessário apenas ter uma escolha disponível para ela a partir da lista: uma simples lista de letras (ou string),
"Reino Unido" como única representação do país, e qualquer outra informação que precisar desse país pode usar o
mesmo termo a partir da lista para se referir ao mesmo país. Por exemplo, uma lista com os códigos de telefone do
país e uma lista dos castelos europeus, ambos precisam se referir ao país; pelo uso da mesma lista de países para
prover informações idênticas para as duas novas listas. Nós estabelecemos um novo relacionamento entre listas
diferentes, com apenas um ítem em comum: país. Um banco de dados relacional, assim, é simplesmente uma coleção
de listas que distribuem alguma parte da informação.
Bancos de dadosrelacionais
Bancos de dados armazenam dados de um sistema de informação. Nós reagrupamos dados através de grupos de
dados comparáveis (todos os empregados, todos os projetos, todos os escritórios, por exemplo). Para cada grupo de
dados comparáveis, é criada uma tabela. Essa tabela é especialmente desenhada para atender esses tipos de dados
(seus atributos). Por exemplo, uma tabela nomeada empregados que guarda todos os empregados seria feita
assim:
empregados a tabela
id_empregado a chave primária um número inteiro
primeiro nome uma coluna uma string de caracteres uma coluna tipo
último nome uma string de caracteres
telefone 10 numeros
endereço uma string de caracteres
E os funcionários da empresa seriam armazenados assim:
Banco de dados Relacional 4
empregado
id_empregado primeiro-nome último-nome telefone endereço
1 um valor de coluna Big BOSS 936854270 big.boss@company.com
2 Jonas Xavier 936854271 jonas.xavier@company.com
3 Linus TORVALDS 936854272 linus.torvalds@company.com
4 Jimmy WALES 936854273 jimmy.wales@company.com
5 Larry PAGE 936854274 larry.page@company.com
Os dados guardados em uma tabela são chamados entidades. Como uma tabela é usualmente representada como uma
matriz, os atributos do dados (primeiro nome, último nome, ...) são chamados colunas e os registros (cada um dos
empregados) são chamadas linhas. Uma chave primária é normalmente sublinhada. Qualquer atributo único (por
exemplo, o endereço) ou grupo de atributos (como o primeiro nome e o último nome) podem ser a chave primária de
uma tabela, mas isso é recomendado para a técnica do id, como no exemplo id_empregado como chave primária. A
função da chave primária é 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
id_empregado um inteiro
primeiro-nome uma string de caracteres
último-nome uma string de caracteres
phone 10 números
endereço uma string de caracteres
projeto
id_projeto um inteiro
nome uma string de caracteres
data-da-criação uma data
data-término uma data
# gerente um inteiro
E os projetos da companhia seriam armazenados no banco da seguinte forma:
empregado
id_empregado primeiro-nome último-nome telefone endereço
1 Big BOSS 936854270 big.boss@company.com
2 John DOE 936854271 john.doe@company.com
3 Linus TORVALDS 936854272 linus.torvalds@company.com
4 Jimmy WALES 936854273 jimmy.wales@company.com
5 Larry PAGE 936854274 larry.page@company.com
projetos
id_project nome data-criação data-término #
gerente
1 Google 1998-09-08 NULL 5
2 Linux 1991-01-01 NULL 3
3 Wikipedia 2001-01-01 NULL 4
id_project é a chave primária da tabela projeto e manager é a chave estrangeira. Uma chave estrangeira é
uma chave primária de uma tabela, fazendo referência ou ligação com algum valor de outra tabela. Fazendo isso, o
projeto Google está conectado ao empregado Larry PAGE. Essa ligação, ou conexão, se chama relacionamento.
Uma chave estrangeira é usualmente precedida por um símbolo sharp, ou jogo-da-velha (#). Note que diversos
projetos podem apontar para o mesmo gerente, então um mesmo empregado pode ser gerente de vários projetos.
Agora, nós queremos criar, não apenas uma única ligação, mas múltiplas. Então criamos uma tabela de junção. Uma 
tabela de junção é uma tabela que não é usada para guardar dados, mas as ligações entre entidades de outras tabelas. 
É a tabela onde as ligações, ou relacionamentos, entre as tabelas são guardadas. Vamos criar uma tabela chamada
Banco de dados Relacional 5
membros que liga empregados com projeto:
empregado
id_empregado um inteiro
primeiro-nome uma string de caracteres
último-nome uma string de caracteres
telefone 10 numeros
endereço uma string de caracteres
membros
# id_empregado um inteiro
# id_projeto um inteiro
projeto
id_projeto um inteiro
nome uma string de caracteres
data-criação uma data
data-término uma data
# gerente um inteiro
E os empregados e os projetos podem ser ligados assim:
empregado
id_employee primeiro-nome último-nome telefone endereço
1 Big BOSS 936854270 big.boss@company.com
2 Augusto XAVIER 936854271 augusto.xavier@company.com
3 Linus TORVALDS 936854272 linus.torvalds@company.com
4 Jimmy WALES 936854273 jimmy.wales@company.com
5 Larry PAGE 936854274 larry.page@company.com
6 Max THE
GOOGLER
936854275 max.the-googler@company.com
7 Jenny THE
WIKIPEDIAN
936854276 jenny.the-wikipedian@company.com
projeto
id_project nome data-criação data-término #
gerente
1 Google 1998-09-08 NULL 5
2 Linux 1991-01-01 NULL 3
3 Wikipedia 2001-01-01 NULL 4
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 vários projetos e um projeto pode ser associado a vários empregados, o que é
impossível com apenas uma chave estrangeira. Uma tabela de junção não tem chave primária próprias. Sua chave
primária é o par de chaves estrangeiras, pois esse casal é único. Uma tabela de junção pode ligar mais de duas tabelas
contendo entidade por mais colunas.
Banco de dados Relacional 6
Relacionamentos
Então 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).
Linguagem de definição de dados
Linguagem de definição de dados (ou DDL, de Data Definition Language) é um conjunto de comandos dentro da
SQL usada para a definição das estruturas de dados, fornecendo as instruções que permitem a criação, modificação e
remoção das tabelas, assim como criação de índices.
Uma vez compilados, os parâmetros DDL são armazenados num conjunto de arquivos denominado dicionário de
dados (ou catálogo). O dicionário de dados contém os metadados (dados a respeito das estruturas de
armazenamento). O SGBD sempre consulta os metadados a cada operação sobre o banco de dados.
Estas instruções SQL permitem definir a estrutura de uma base de dados, incluindo as linhas, colunas, tabelas,
índices, e outros metadados.
DDL instruções SQL são mais parte do SGBD e têm grandes diferenças entre as variações SQL. DDL comandos
SQL incluem o seguinte:
CREATE
Uma declaração CREATE permite a criação 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 estão 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 definição de dados 7
DROP
Uma declaração 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 estão DROP DATABASE (elimina um banco de dados inteiro) , DROP TABLE (excluir tabela)
e outros.
ALTER
Uma declaração 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 estão 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 básica para criarmos é:
CREATE TABLE nome_tabela 
(
nome_campo_1 tipo_1,
nome_campo_2 tipo_2, 
...
nome_campo_ntipo_n, 
PRIMARY KEY ( campo_x,...));
CREATE TABLE é o comando para criação da tabela e deve ser seguida pelo nome que daremos à tabela. Dentro do
comando, devemos definir os nomes dos campos de acordo com a conveniência do banco de dados, e determinar o
tipo de dado que poderá ser incluído neste campo. Na seção abaixo Tipo de Dados estão especificados os tipos mais
comuns encontrados nos SGBDs. PRIMARY KEY define a chave primária da tabela, isto é, o campo que serve
como chave da tabela e que não pode ser repetido.
Se desejamos que um campo seja de preenchimento obrigatório, devemos inserir NOT NULL na frente do campo
determinado.
CREATE TABLE nome_tabela 
(
nome_campo_1 tipo_1 NOT NULL,
nome_campo_2 tipo_2, 
...
nome_campo_n tipo_n, 
PRIMARY KEY(campo_x,...));
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 código que sirva de chave primária de uma
tabela:
CREATE TABLE nome_tabela 
(
nome_campo_1 tipo_1 NOT NULL AUTO_INCREMENT,
nome_campo_2 tipo_2, 
...
Criando tabelas 8
nome_campo_n tipo_n, 
PRIMARY KEY (campo_x,...));
Tipos de Dados
Tipos de dados definem os tipos de informação que podem ser inseridos em um campo. Somente dados do mesmo
tipo do campo poderão 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:
! Tipo Explicação Valores permitidos Exemplo
BOOLEAN Armazena um bit de informação, utilizado
para verdadeiro ou falso.
false] true
VARCHAR(n) Uma string com tamanho máximo n [0-9a-zA-Z]+{n} "foo"
CHAR(n) Uma string com tamanho fixo n [0-9a-zA-Z]{n} "foo"
SMALLINT Número inteiro com 16 bits de precisão \-?[0-9]+ 584
INTEGER Número inteiro com 32 bits de precisão \-?[0-9]+ -8748
FLOAT Número decimal \-?[0-9]+[\.[0-9]+]? 48.96
NUMBER(n,[d]) Um número com n dígitos (e d dígitos
decimais se mencionado)
\-?[0-9]+[\.[0-9]+]? 484.65
DATE Uma data [0-9][0-9][0-9][0-9]\-[0-1][0-9]\-[0-3][0-9] 2009-03-24
TIME Um período de sessenta minutos; 1/24 de
um dia
[0-2][0-9]\:[0-5][0-9]\:[0-5][0-9] 11:24:56
TIMESTAMP Data e hora [0-9]+ 18648689595962
BLOB Qualquer dado Qualquer
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.
CREATE TABLE Cliente
(
Codigo INT NOT NULL AUTO_INCREMENT,
Nome VARCHAR (60) NOT NULL,
Data_Nascimento DATE,
Telefone CHAR (8),
PRIMARY KEY (Codigo) );
Neste comando, criaremos uma tabela chamada Cliente. Esta tabela contém quatro campos: o primeiro campo é o
Código do cliente. Este campo será utilizado como chave primária de forma que não poderá se repetir nunca. Desta
forma o campo deve ser sempre preenchido (NOT NULL), é numérico do tipo inteiro (INT) e deve auto-incrementar
de acordo com o número de clientes que for incluído. O campo Nome é do tipo VARCHAR (60), ou seja aceita
dados alfa-numéricos com até 60 caracteres. No entanto se um nome for inserido com menos de 60 caracteres, o
número 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 não de preenchimento obrigatório (por isto não foi declarado o NOT
NULL). O campo Telefone foi determinado como sendo alfa-numérico com oito caracteres definidos, e mesmo que
sejam utilizados menos caracteres, o número de bytes consumidos serão sempre os mesmos independente dos dados.
Criando tabelas 9
Isto é útil para dados alfanuméricos que não variam de tamanho, como o caso de UF no Brasil, cuja abreviação
sempre são de dois caracteres. A instrução PRIMARY KEY define qual dos campos será a chave primária e não
pode ser repetido, sendo o diferenciador entre os diversos clientes que sejam inseridos nesta tabela.
Describe
Após 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 consistência, integridade e não redundância dos
dados. Entre estas regras podemos englobar as chaves primárias, checagem e chave estrangeira.
Chave primária
No exemplo acima vimos a seguinte declaração na criação da tabela:
PRIMARY KEY ( campo_x,...);
Esta declaração diz que os campos inseridos entre os parênteses formam a chave primária da tabela. A chave
primária funcionam como os campos que diferenciam os dados uns dos outros, e que não podem ser repetidos de
nenhuma forma. Por exemplo, em nossa tabela Cliente, o código do Cliente funciona como a chave-primária, ou
seja, os clientes podem até ter o mesmo nome, endereço ou telefone, mas terão códigos diferentes uns dos outros. Se
dois códigos iguais forem inseridos o SGBD retornará erro.
Checagem
Podemos inserir em uma tabela depois do campo chave primária e antes do último parêntese a cláusula:
CHECK Nome _Campo IN (valor1 , valor2, valor n);
Esta cláusula força a um campo a aceitar apenas os valores especificados entre os parênteses. Isto pode ser útil para
definir, por exemplo, campos como sexo. Desta forma forçamos as opções através de:
CHECK Sexo IN ('M','F');
Onde o campo Sexo só podem assumir a forma M (Masculino) ou F (Feminino).
Criando tabelas 10
Chave estrangeira
A chave estrangeira é uma cláusula que deve ser incluída quando possuímos mais de duas tabelas em um banco de
dados. Através da chave estrangeira estabelecemos as relações entre duas ou mais tabelas. A chave estrangeira desta
forma referencia o campo que é chave primária de outra tabela. Tabela.
FOREIGN KEY (Campo1, Campo2, Campo3 ..) REFERENCES Nome_Tabela2 
(Nome_Chave);
Alterando tabelas
Após criarmos uma tabela em um banco de dados, podemos alterar sua estrutura com o uso da cláusula ALTER
TABLE. Deve-se notar que esta alteração é sempre sobre a estrutura da tabela, e não sobre os dados da tabela (este
tipo de alteração será vista mais adiante).
Esta alteração 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:
ALTER TABLE Nome_Tabela
ADD Nome_Campo Nova_Regra
MODIFY Nome_Campo Nova_Regra;
ADD
Podemos utilizar a cláusula 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:
ALTER TABLE Cliente
ADD Tel_Comercial INT;
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 Mãe em nossa tabela Cliente fazemos:
ALTER TABLE Cliente
ADD Nome_Mae VARCHAR(60);
Caso desejemos que um campo seja inserido antes ou depois de um determinado campo de nossa tabela, utilizamos a
seguinte sintaxe:
ALTER TABLE Nome_Tabela
ADD Nome_Campo Nova_Regra [FIRST|AFTER] Campo_Determinado;
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_Mãe imediatamente depois do Nome do Cliente,
digitamos:
ALTER TABLE Cliente
ADD Nome_Mae VARCHAR(60)AFTER Nome;
Alguns gerenciadores também utilizam a cláusula ADD COLUMN ao invés de somente ADD. Podemos também
utilizar ADD para adicionarpor exemplo uma chave primária em uma tabela. Em nossa tabela, se quisermos que
Alterando tabelas 11
nome seja uma chave primária também, podemos fazer:
ALTER TABLE Cliente
ADD PRIMARY KEY(Nome);
Se desejarmos eliminar uma coluna de nossa tabela, utilizamos a seguinte sintaxe:
ALTER TABLE Nome_Tabela
DROP nome_campo;
Alguns gerenciadores também utilizam a cláusula DROP COLUMN ao invés de somente DROP.
MODIFY
Podemos utilizar a cláusula 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. Então
podemos escrever:
ALTER TABLE Cliente
MODIFY Nome(100);
Com a cláusula MODIFY, também podemos alterar o tipo de um campo. Imaginemos que por um motivo qualquer
desejemos alterar o tipo do campo Nome de VarChar para Char:
ALTER TABLE Cliente
MODIFY Nome CHAR (100);
Removendo tabelas
Podemos excluir uma tabela qualquer dentro de um banco de dados. A sintaxe básica para criarmos é:
DROP TABLE nome_tabela;
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 necessário excluir uma tabela, deve-se fazer as alterações necessárias em
todas as tabelas relacionadas.
Constraints
Esta página é somente um esboço.
Ampliando-a você ajudará a melhorar o Wikilivros.
Linguagem de manipulação de dados 12
Linguagem de manipulação de dados
Uma linguagem de manipulação de dados é usada para modificar registros em um banco de dados. O ideal é que isso
aconteça sem modificar o esquema do banco de dados (como por exemplo: recursos de tabela, relacionamentos, ...).
As declarações podem ser de 3 tipos: INSERT, UPDATE, DELETE.
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 inserção de dados deve seguir as regras de
integridade da tabela, assim como respeitar as regras de chave primária estabelecidas na tabela.
Na linguagem SQL, para inserirmos dados em uma tabela, utilizamos o seguinte comando:
INSERT INTO Nome_Tabela VALUES (valor 1, valor2, valor3,...);
Os valores valor1 , valor2, etc..., seguem a ordem dos campos da tabela, sendo utilizado valor vazio (' ') para campos
que não necessitem de preenchimento. Dados de tipo numérico podem ser escritos sem a necessidade de aspas
simples. Dados do tipo caracter (como char e varchar), devem ser escritos entre aspas simples.
Exemplo:
INSERT INTO Clientes VALUES (1, 'José Pereira', '1111-1111,...);
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''' ''condição''];
O comando Update pode ser realizado sem o WHERE. Neste caso todas as linhas da tabela serão atualizadas com o
valor determinado no comando. Para os casos onde se necessite atualizar apenas linhas que cumpram determinada
condição, esta condição é estabelecida com a inclusão do comando WHERE.
Exemplo:
UPDATE Clientes 
SET nome= 'Antônio 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 instrução DELETE.
Na linguagem SQL, para apagar dados em uma determinada tabela, utilizamos a seguinte sintaxe:
DELETE FROM Nome_Tabela 
[WHERE condição ];
O comando Delete pode ser realizado sem o WHERE. Neste caso todas as linhas da tabela determinada serão
excluídas. Utilizamos WHERE quando desejamos eliminar os registros que obedeçam certa condição. Exemplo:
 
DELETE FROM Clientes;
Neste caso são eliminados todos os registros da tabela Clientes.
Ou:
 
DELETE FROM Clientes 
WHERE nome='José Pereira';
Neste caso só serão eliminados os registros cujo campo nome seja igual a José Pereira. Os registros com nomes
diferentes permanecerão intactos.
Linguagem de consulta de dados
Linguagem de consulta de dados é usada para, fazer o que o nome diz, consultas, extrair informações de um banco
de dados. É importante que essas consultas aconteçam sem causar mudanças no banco de dados, caso contrário
dados valiosos poderiam ser prejudicados. O comando de consulta é SELECT.
Em um banco de dados, selecionar dados significa efetuar uma consulta enviando o comando que retornará com as
informações solicitadas se existirem. Para efetuar estas consultas utilizamos o comando SELECT.
Na linguagem SQL, para efetuar consultas , utilizamos a seguinte sintaxe:
SELECT Nome_ campo 
FROM Nome_Tabela 
[WHERE condição];
O comando Select deve conter o nome do campo que deve ser retornado, de qual tabela e quando contêm a claúsula
WHERE, as condições que o registro deve obedecer para retornar os valores. Quando desejamos trazer todos os
campos utilizamos o asterisco (*).
Exemplo:
SELECT * FROM Clientes;
Neste caso são trazidos todos os registros da tabela Clientes.
Mas se, por exemplo, só quisermos trazer o nome e o telefone da tabela Clientes, utilizamos :
SELECT nome, telefone FROM Clientes;
Linguagem de consulta de dados 14
Com o uso da cláusula WHERE, podemos filtrar os registros que são retornados. Neste caso podemos por exemplo
trazer apenas os registros cujo nome seja José da Silva:
SELECT nome, telefone 
FROM Clientes 
WHERE nome='José da Silva';
Distinct
A função Distinct não permite que valores iguais de uma mesma coluna sejam retornados. Sua sintaxe é:
SELECT DISTINCT(Nome_Campo)
FROM Nome_tabela;
Ordenação
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 ordenação:
SELECT Nome_ campo 
FROM Nome_Tabela
[WHERE condição
ORDER BY Nome_campo [ASC|DESC]];
Exemplo:
SELECT * 
FROM Clientes 
WHERE Salario>1000 
ORDER BY Nome;
Neste caso são 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 ordenação em ordem crescente (isto é, ascendente). No
entanto podemos especificar se queremos que a ordenação seja em ordem crescente ou decrescente:
SELECT * 
FROM Clientes 
WHERE Salario>1000 
ORDER BY Nome ASC;
Neste caso os registros serão ordenados de forma ascendente por nome.
SELECT * 
FROM Clientes 
WHERE Salario>1000 
ORDER BY Nome DESC;
Neste caso os registros serão ordenados de forma descendente por nome.
Agrupamento 15
Agrupamento
group by
Podemos agrupar dados utilizando a cláusula GROUP BY que permite unir em uma única linha todas as linhas
selecionadas que possuam os mesmos valores. Sua sintaxe é:
SELECT coluna1, coluna3
FROM Tabela
GROUP BY coluna1, coluna3
Exemplo:
SELECT departamento, MAX(idade)
FROM Funcionarios
GROUP BY departamento
having
Conforme aprendemos anteriormente utilizamos a cláusula WHERE quando queremos definir uma condição de
retorno de um comando SELECT. No entanto a cláusula WHERE determina os dados que serão agregados, e não
podem definir as condições de retorno de uma agregação. Neste caso, utilizamos a cláusula Having que seleciona
grupos de linhas após as agregações e agrupamentos serem efetuados. Exemplo:
SELECT Codigo,Max(Idade)
FROM Cliente
HAVING Max(Idade)<60;
SELECT DepartmentName, COUNT(*) 
FROM Employee, Department 
WHERE Employee.DepartmentID = Department.DepartmentID 
GROUP BY DepartmentNameHAVING COUNT(*)>1;
Funções de agregação 16
Funções de agregação
Sum
A função Sum permite a soma de um campo numérico. Sua sintaxe é:
SELECT SUM(Nome_Campo)
FROM Nome_tabela;
Avg
A função Avg retorna o valor médio entre os conjuntos de valores de um campo numérico. Sua sintaxe é:
SELECT AVG(Nome_Campo)
FROM Nome_tabela;
Count
A função Count conta a quantidade de dados de um campo dado. Sua sintaxe é :
SELECT COUNT(Nome_Campo)
FROM Nome_tabela;
Max
A função Max retorna o maior valor encontrado entre os dados de um campo dado. Sua sintaxe é:
SELECT MAX(Nome_Campo)
FROM Nome_tabela;
Min
A função Min retorna o menor valor encontrado entre os dados de um campo dado. Sua sintaxe é:
SELECT MIN(Nome_Campo)
FROM Nome_tabela;
Junções 17
Junções
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 seleção devemos definir os critérios de
agrupamento para trazer estes dados. Estes critérios são chamados de Junções. Uma junção de tabelas criar uma
pseudo-tabela derivada de duas ou mais tabelas de acordo com as regras especificadas, e que são parecidas com as
regras da teoria dos conjuntos.
Junção de produto cartesiano
Uma junção de produto cartesiano é uma junção entre duas tabelas que origina uma terceira tabela constituída por
todos os elementos da primeira combinadas com todos os elementos da segunda. Para trazer apenas os campos
necessários da consulta:
• No SELECT utilizamos em vez do nome do campo simples, o nome_tabela_campo.nome_campo;
•• Em FROM utilizamos os nomes das tabelas que possuem os campos que queremos trazer;
•• Em WHERE determinamos a dependência das tabelas, lembrando que a relação entre as tabelas é efetuada pela
chave estrangeira.Desta forma o WHERE sempre especifica as chaves estrangeiras que ligam as tabelas.
Como exemplo, vamos imaginar que possuímos duas tabelas relacionadas: Cliente e Profissao. A tabela Profissão
contém o código e profissão armazenado:
CREATE TABLE Profissao
(
Codigo INT NOT NULL AUTO_INCREMENT,
Cargo VARCHAR (60) NOT NULL,
PRIMARY KEY (Codigo) );
A tabela Cliente armazena os dados pessoais do Cliente:
CREATE TABLE Cliente
(
Codigo INT NOT NULL AUTO_INCREMENT,
Nome VARCHAR (60) NOT NULL,
Data_Nascimento DATE,
Telefone CHAR (8),
Profissao INT,
PRIMARY KEY (Codigo) ),
FOREIGN KEY (Profissao) REFERENCES Profissao(Codigo);
Agora inserimos dados nestas tabelas. Em Profissao vamos inserir três profissões básicas:
INSERT INTO Profissao VALUES (1,'Programador')
INSERT INTO Profissao VALUES (2,'Analista de BD')
INSERT INTO Profissao VALUES (3,'Suporte')
Possuímos agora três profissões com respectivos códigos. Agora vamos inserir dados na tabela Cliente:
INSERT INTO Cliente VALUES (1,'João Pereira',19820606,'12345678',1)
INSERT INTO Cliente VALUES (2,'José Manuel',19750801,'21358271',2)
INSERT INTO Cliente VALUES (3,'Maria Mercedes',19851001,'85412587',3)
Para visualizarmos todos os dados contidos nas duas tabelas após a inserção dos dados, podemos utilizar:
Junções 18
SELECT * FROM Cliente,Profissao;
Porém, se quisermos trazer apenas o Nome do Cliente e o seu Cargo, podemos fazer uma junção de produto
cartesiano:
SELECT Cliente.Nome,Profissao.Cargo
FROM Cliente,Profissao
WHERE Cliente.Profissao=Profissao.Codigo;
Nesta seleção, trazemos um campo de cada tabela após o SELECT, mencionamos as tabelas de quais elas se
originam no FROM, e no WHERE especificamos a ligação entre as tabelas. Note que Cliente.Profissao é a chave
estrangeira da tabela Cliente, que referencia diretamente a chave primária da tabela Profissao.
Junção Interna (Inner Join)
Uma Junção Interna é caracterizada por uma seleção que retorna apenas os dados que atendem às condições de
junção, isto é, quais linhas de uma tabela se relacionam com as linhas de outras tabelas. Para isto utilizamos a
cláusula ON, que é semelhante à cláusula WHERE.
Podemos especificar duas formas diferentes de expressar esta junção: a explícita utiliza a palavra JOIN, enquanto a
implícita utiliza ',' para separar as tabelas a combinar na cláusula FROM do SELECT. Então sempre é gerado o
produto cruzado do qual são selecionadas as combinações que cumpram a cláusula WHERE.
É necessário ter algum cuidado quando se combinam colunas com valores nulos (NULL), já que o valor nulo não se
combina com outro valor, ou outro valor nulo, exceto quando se agregam predicados como IS NULL ou IS NOT
NULL.
Como exemplo, a consulta seguinte traz todos os registros da tabela Cliente e encontra todas as combinações com a
tabela Profissao. A cláusula JOIN compara os valores da coluna Profissao de Cliente com a coluna Codigo da
Profissao. Quando não existe aos dados não atendem as condições especificadas, eles não são retornados.
SELECT Cliente.nome,Pedido.cod_cliente,Pedido.num_pedido
FROM Cliente INNER JOIN Pedido 
ON Cliente.Cod_cliente = Pedido.Cod_cliente
Junção Externa (Outer Join)
Uma Junção Externa é uma seleção que não requer que os registros de uma tabela possuam registros equivalentes
em outra. O registro é mantido na pseudo-tabela se não existe outro registro que lhe corresponda. Este tipo de junção
se subdivide dependendo da tabela do qual admitiremos os registros que não possuem correspondência: a tabela
esquerda, a direita ou ambas.
Left Outer Join
O resultado desta seleção sempre contém todos os registros da tabela esquerda (isto é, a primeira tabela mencionada
na consulta), mesmo quando não exista registros correspondentes na tabela direita. Desta forma, esta seleção retorna
todos os valores da tabela esquerda com os valores da tabela direita correspondente, ou quando não há
correspondência retorna um valor NULL.
Se por exemplo inserimos na tabela Cliente um Cliente que não possua valor em seu campo Profissao, ou possua um
valor que não tem correspondente no Codigo na tabela Profissão, e efetuarmos a seleção com LEFT OUTER JOIN a
seleção será efetuada trazendo todos os dados da tabela Cliente, e os correspondentes na tabela Profissao, e quando
não houver estes correspondentes, trará o valor NULL.
Junções 19
 SELECT distinct *
 FROM Cliente
 LEFT OUTER JOIN Profissao
 ON Cliente.Profissao=Profissao.Codigo;
Right Outer Join
Esta operação é inversa à anterior e retorna sempre todos os registros da tabela à direita (a segunda tabela
mencionada na consulta), mesmo se não existir registro correspondente na tabela à esquerda. Nestes casos, o valor
NULL é retornado quando não há correspondência.
Como exemplo, imaginemos que possuímos diversas Profissões com respectivos códigos que não possuem
correspondentes na tabela Clientes. Esta consulta traz todas estas Profissões mesmo que não haja esta
correspondência:
SELECT *
FROM Cliente
RIGHT OUTER JOIN Profissao
ON Cliente.Profissao = Profissao.Codigo;
Full Outer Join
Esta operação apresenta todos os dados das tabelas à esquerda e à direita, mesmo que não possuam correspondência
em outra tabela. A tabela combinada possuirá assim todos os registros de ambas as tabelas e apresentará valores
nulos para os registros sem correspondência.
 
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;
Junções 20
Resumo
Junção de produto cartesiano é uma junção entre duas tabelas que origina uma terceira tabela constituída por todos
os elementos da primeira combinadas com todos os elementos da segunda.
Junção Interna todas linhas de uma tabela se relacionam com todas as linhas de outras tabelas se elas tiveremao
menos 1 campo em comum
Junção Externa é uma seleção que não requer que os registros de uma tabela possuam registros equivalentes em
outras
• Left Outer Join todos os registros da tabela esquerda mesmo quando não exista registros correspondentes na
tabela direita.
• Right Outer Join todos os registros da tabela direita mesmo quando não exista registros correspondentes na
tabela esquerda.
• Full Outer Join Esta operação apresenta todos os dados das tabelas à esquerda e à direita, mesmo que não
possuam correspondência em outra tabela
Fontes e Editores da Página 21
Fontes e Editores da Página
Introdução ao SQL  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244162  Contribuidores: Abacaxi, Jonas AGX
Banco de dados Relacional  Fonte: http://pt.wikibooks.org/w/index.php?oldid=258283  Contribuidores: Abacaxi, Jonas AGX, 2 edições anónimas
Linguagem de definição de dados  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244147  Contribuidores: Abacaxi
Criando tabelas  Fonte: http://pt.wikibooks.org/w/index.php?oldid=255459  Contribuidores: Abacaxi, Jonas AGX
Alterando tabelas  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244145  Contribuidores: Abacaxi
Removendo tabelas  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244146  Contribuidores: Abacaxi
Linguagem de manipulação de dados  Fonte: http://pt.wikibooks.org/w/index.php?oldid=207877  Contribuidores: Jonas AGX
Inserindo dados  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244150  Contribuidores: Abacaxi
Alterando dados  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244149  Contribuidores: Abacaxi
Removendo dados  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244148  Contribuidores: Abacaxi
Linguagem de consulta de dados  Fonte: http://pt.wikibooks.org/w/index.php?oldid=247511  Contribuidores: Abacaxi, Jonas AGX
Ordenação  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244154  Contribuidores: Abacaxi
Agrupamento  Fonte: http://pt.wikibooks.org/w/index.php?oldid=248702  Contribuidores: Abacaxi
Funções de agregação  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244160  Contribuidores: Abacaxi
Junções  Fonte: http://pt.wikibooks.org/w/index.php?oldid=244153  Contribuidores: Abacaxi
Fontes, Licenças e Editores da Imagem 22
Fontes, Licenças e Editores da Imagem
Imagem:Rekopis chopin.jpg  Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Rekopis_chopin.jpg  Licença: Public Domain  Contribuidores: Andreagrossmann, Kevyn, Maire, Man
vyi, Niki K, Subitosera, Tsca
Licença 23
Licença
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/

Continue navegando