Você está na página 1de 25

SQL

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

Licenas das pginas


Licena 23
Introduo ao SQL 1

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".

SQL como linguagem padro


A linguagem SQL um grande padro 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 no o caminho para chegar a ele. Ela uma linguagem declarativa em oposio 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 vrios "dialetos" desenvolvidos por
outros produtores. Essa expanso levou necessidade de ser criado e adaptado um padro 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 verso 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 variaes e extenses produzidos pelos
diferentes fabricantes de sistemas gerenciadores de bases de dados. Tipicamente a linguagem pode ser migrada de
plataforma para plataforma, sem mudanas estruturais principais.
Introduo ao SQL 2

Subconjuntos
A linguagem SQL dividida em subconjuntos de acordo com as operaes que queremos efetuar sobre um banco de
dados.

DDL - Linguagem de Definio de Dados


Linguagem de definio de dados (ou DDL, de Data Definition Language) um conjunto de comandos dentro da
SQL usada para a definio das estruturas de dados, fornecendo as instrues que permitem a criao, modificao e
remoo das tabelas, assim como criao de ndices. Estas instrues SQL permitem definir a estrutura de uma base
de dados, incluindo as linhas, colunas, tabelas, ndices, e outros metadados.
Entre os principais comandos DDL esto:
CREATE - Usado para criar uma nova tabela, uma viso 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 viso de uma tabela ou outro objeto em um banco de dados.

DML - Linguagem de Manipulao de Dados


Linguagem de manipulao de dados (ou DML, de Data Manipulation Language) o grupo de comandos dentro
da linguagem SQL utilizado para a recuperao, incluso, remoo e modificao de informaes em bancos de
dados.
Os principais comandos DML so INSERT (Insero de Dados), UPDATE (Atualizao de Dados) e DELETE
(Excluso de Dados).
Data Query Language (DQL)
linguagem de consulta de dados, que um subconjunto de linguagem de manipulao. 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 so:
GRANT: Permite dar permisses a um ou mais usurios e determinar as regras para tarefas determinadas;
REVOKE: Revoga permisses dadas por um GRANT.
As tarefas bsicas que podemos conceder ou barrar permisses so:
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.

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.

Bancos de dados relacionais


Bancos de dados armazenam dados de um sistema de informao. Ns reagrupamos dados atravs de grupos de
dados comparveis (todos os empregados, todos os projetos, todos os escritrios, por exemplo). Para cada grupo de
dados comparveis, 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

um nmero inteiro
id_empregado a chave primria

primeiro nome uma coluna uma string de caracteres uma coluna tipo

ltimo nome uma string de caracteres

telefone 10 numeros

endereo uma string de caracteres

E os funcionrios da empresa seriam armazenados assim:


Banco de dados Relacional 4

empregado

id_empregado primeiro-nome ltimo-nome telefone endereo

Big BOSS 936854270 big.boss@company.com


1 um valor de coluna

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 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

id_empregado um inteiro id_projeto um inteiro

primeiro-nome uma string de caracteres nome uma string de caracteres

ltimo-nome uma string de caracteres data-da-criao uma data

phone 10 nmeros data-trmino uma data

endereo uma string de caracteres # gerente um inteiro

E os projetos da companhia seriam armazenados no banco da seguinte forma:

empregado projetos

id_empregado primeiro-nome ltimo-nome telefone endereo id_project nome data-criao data-trmino #


gerente
1 Big BOSS 936854270 big.boss@company.com
1 Google 1998-09-08 NULL 5
2 John DOE 936854271 john.doe@company.com
2 Linux 1991-01-01 NULL 3
3 Linus TORVALDS 936854272 linus.torvalds@company.com
3 Wikipedia 2001-01-01 NULL 4
4 Jimmy WALES 936854273 jimmy.wales@company.com

5 Larry PAGE 936854274 larry.page@company.com

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

membros que liga empregados com projeto:

empregado membros projeto

id_empregado um inteiro # id_empregado um inteiro id_projeto um inteiro

primeiro-nome uma string de caracteres # id_projeto um inteiro nome uma string de caracteres

ltimo-nome uma string de caracteres data-criao uma data

telefone 10 numeros data-trmino uma data

endereo uma string de caracteres # gerente um inteiro

E os empregados e os projetos podem ser ligados assim:

empregado projeto

id_employee primeiro-nome ltimo-nome telefone endereo id_project nome data-criao data-trmino #


gerente
1 Big BOSS 936854270 big.boss@company.com
1 Google 1998-09-08 NULL 5
2 Augusto XAVIER 936854271 augusto.xavier@company.com
2 Linux 1991-01-01 NULL 3
3 Linus TORVALDS 936854272 linus.torvalds@company.com
3 Wikipedia 2001-01-01 NULL 4
4 Jimmy WALES 936854273 jimmy.wales@company.com

5 Larry PAGE 936854274 larry.page@company.com

6 Max THE 936854275 max.the-googler@company.com


GOOGLER

7 Jenny THE 936854276 jenny.the-wikipedian@company.com


WIKIPEDIAN

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).

Linguagem de definio de dados


Linguagem de definio de dados (ou DDL, de Data Definition Language) um conjunto de comandos dentro da
SQL usada para a definio das estruturas de dados, fornecendo as instrues que permitem a criao, modificao e
remoo das tabelas, assim como criao de ndices.
Uma vez compilados, os parmetros DDL so armazenados num conjunto de arquivos denominado dicionrio de
dados (ou catlogo). O dicionrio de dados contm os metadados (dados a respeito das estruturas de
armazenamento). O SGBD sempre consulta os metadados a cada operao sobre o banco de dados.
Estas instrues SQL permitem definir a estrutura de uma base de dados, incluindo as linhas, colunas, tabelas,
ndices, e outros metadados.
DDL instrues SQL so mais parte do SGBD e tm grandes diferenas entre as variaes SQL. DDL comandos
SQL incluem o seguinte:

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 nome_tabela


(
nome_campo_1 tipo_1,
nome_campo_2 tipo_2,
...
nome_campo_n tipo_n,
PRIMARY KEY ( campo_x,...));

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.

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 cdigo que sirva de chave primria 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 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:

! Tipo Explicao Valores permitidos Exemplo

BOOLEAN Armazena um bit de informao, utilizado false] true


para verdadeiro ou falso.

VARCHAR(n) Uma string com tamanho mximo n [0-9a-zA-Z]+{n} "foo"

CHAR(n) Uma string com tamanho fixo n [0-9a-zA-Z]{n} "foo"

SMALLINT Nmero inteiro com 16 bits de preciso \-?[0-9]+ 584

INTEGER Nmero inteiro com 32 bits de preciso \-?[0-9]+ -8748

FLOAT Nmero decimal \-?[0-9]+[\.[0-9]+]? 48.96

NUMBER(n,[d]) Um nmero com n dgitos (e d dgitos \-?[0-9]+[\.[0-9]+]? 484.65


decimais se mencionado)

DATE Uma data [0-9][0-9][0-9][0-9]\-[0-1][0-9]\-[0-3][0-9] 2009-03-24

TIME Um perodo de sessenta minutos; 1/24 de [0-2][0-9]\:[0-5][0-9]\:[0-5][0-9] 11:24:56


um dia

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 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:

PRIMARY KEY ( campo_x,...);

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:

CHECK Nome _Campo IN (valor1 , valor2, valor n);

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:

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 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.

FOREIGN KEY (Campo1, Campo2, Campo3 ..) REFERENCES Nome_Tabela2


(Nome_Chave);

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:

ALTER TABLE Nome_Tabela


ADD Nome_Campo Nova_Regra
MODIFY Nome_Campo Nova_Regra;

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:

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 Me 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_Me imediatamente depois do Nome do Cliente,
digitamos:

ALTER TABLE Cliente


ADD Nome_Mae VARCHAR(60)AFTER Nome;

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

nome seja uma chave primria tambm, 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 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:

ALTER TABLE Cliente


MODIFY Nome(100);

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:

ALTER TABLE Cliente


MODIFY Nome CHAR (100);

Removendo tabelas
Podemos excluir uma tabela qualquer dentro de um banco de dados. A sintaxe bsica 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 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

Linguagem de manipulao de dados


Uma linguagem de manipulao de dados usada para modificar registros em um banco de dados. O ideal que isso
acontea sem modificar o esquema do banco de dados (como por exemplo: recursos de tabela, relacionamentos, ...).
As declaraes 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 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:

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 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:

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''' ''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:

DELETE FROM Nome_Tabela


[WHERE condio ];

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:

DELETE FROM Clientes;

Neste caso so eliminados todos os registros da tabela Clientes.


Ou:

DELETE FROM Clientes


WHERE nome='Jos Pereira';

Neste caso s sero eliminados os registros cujo campo nome seja igual a Jos Pereira. Os registros com nomes
diferentes permanecero intactos.

Linguagem de consulta de dados


Linguagem de consulta de dados usada para, fazer o que o nome diz, consultas, extrair informaes de um banco
de dados. importante que essas consultas aconteam sem causar mudanas no banco de dados, caso contrrio
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
informaes 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 condio];

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:

SELECT * FROM Clientes;

Neste caso so 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 clusula WHERE, podemos filtrar os registros que so 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 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:

SELECT Nome_ campo


FROM Nome_Tabela
[WHERE condio
ORDER BY Nome_campo [ASC|DESC]];

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;

Neste caso os registros sero ordenados de forma ascendente por nome.

SELECT *
FROM Clientes
WHERE Salario>1000
ORDER BY Nome DESC;

Neste caso os registros sero ordenados de forma descendente por nome.


Agrupamento 15

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 :

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 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;

SELECT DepartmentName, COUNT(*)


FROM Employee, Department
WHERE Employee.DepartmentID = Department.DepartmentID
GROUP BY DepartmentName
HAVING COUNT(*)>1;
Funes de agregao 16

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.

Juno de produto cartesiano


Uma 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. Para trazer apenas os campos
necessrios 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 dependncia das tabelas, lembrando que a relao 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 possumos duas tabelas relacionadas: Cliente e Profissao. A tabela Profisso
contm o cdigo e profisso 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 trs profisses bsicas:

INSERT INTO Profissao VALUES (1,'Programador')


INSERT INTO Profissao VALUES (2,'Analista de BD')
INSERT INTO Profissao VALUES (3,'Suporte')

Possumos agora trs profisses com respectivos cdigos. Agora vamos inserir dados na tabela Cliente:

INSERT INTO Cliente VALUES (1,'Joo 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 aps a insero dos dados, podemos utilizar:
Junes 18

SELECT * FROM Cliente,Profissao;

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.

Juno Interna (Inner Join)


Uma Juno Interna caracterizada por uma seleo que retorna apenas os dados que atendem s condies de
juno, isto , quais linhas de uma tabela se relacionam com as linhas de outras tabelas. Para isto utilizamos a
clusula ON, que semelhante clusula WHERE.
Podemos especificar duas formas diferentes de expressar esta juno: a explcita utiliza a palavra JOIN, enquanto a
implcita utiliza ',' para separar as tabelas a combinar na clusula FROM do SELECT. Ento sempre gerado o
produto cruzado do qual so selecionadas as combinaes que cumpram a clusula WHERE.
necessrio ter algum cuidado quando se combinam colunas com valores nulos (NULL), j que o valor nulo no 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 combinaes com a
tabela Profissao. A clusula JOIN compara os valores da coluna Profissao de Cliente com a coluna Codigo da
Profissao. Quando no existe aos dados no atendem as condies especificadas, eles no so retornados.

SELECT Cliente.nome,Pedido.cod_cliente,Pedido.num_pedido
FROM Cliente INNER JOIN Pedido
ON Cliente.Cod_cliente = Pedido.Cod_cliente

Juno Externa (Outer Join)


Uma Juno Externa uma seleo que no requer que os registros de uma tabela possuam registros equivalentes
em outra. O registro mantido na pseudo-tabela se no existe outro registro que lhe corresponda. Este tipo de juno
se subdivide dependendo da tabela do qual admitiremos os registros que no possuem correspondncia: a tabela
esquerda, a direita ou ambas.

Left Outer Join


O resultado desta seleo sempre contm todos os registros da tabela esquerda (isto , a primeira tabela mencionada
na consulta), mesmo quando no exista registros correspondentes na tabela direita. Desta forma, esta seleo retorna
todos os valores da tabela esquerda com os valores da tabela direita correspondente, ou quando no h
correspondncia retorna um valor NULL.
Se por exemplo inserimos na tabela Cliente um Cliente que no possua valor em seu campo Profissao, ou possua um
valor que no tem correspondente no Codigo na tabela Profisso, e efetuarmos a seleo com LEFT OUTER JOIN a
seleo ser efetuada trazendo todos os dados da tabela Cliente, e os correspondentes na tabela Profissao, e quando
no houver estes correspondentes, trar o valor NULL.
Junes 19

SELECT distinct *
FROM Cliente
LEFT OUTER JOIN Profissao
ON Cliente.Profissao=Profissao.Codigo;

Right Outer Join


Esta operao inversa anterior e retorna sempre todos os registros da tabela direita (a segunda tabela
mencionada na consulta), mesmo se no existir registro correspondente na tabela esquerda. Nestes casos, o valor
NULL retornado quando no h correspondncia.
Como exemplo, imaginemos que possumos diversas Profisses com respectivos cdigos que no possuem
correspondentes na tabela Clientes. Esta consulta traz todas estas Profisses mesmo que no haja esta
correspondncia:

SELECT *
FROM Cliente
RIGHT OUTER JOIN Profissao
ON Cliente.Profissao = Profissao.Codigo;

Full Outer Join


Esta operao apresenta todos os dados das tabelas esquerda e direita, mesmo que no possuam correspondncia
em outra tabela. A tabela combinada possuir assim todos os registros de ambas as tabelas e apresentar valores
nulos para os registros sem correspondncia.

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

Fontes e Editores da Pgina


Introduo 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 edies annimas

Linguagem de definio 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 manipulao 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

Ordenao 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

Funes de agregao Fonte: http://pt.wikibooks.org/w/index.php?oldid=244160 Contribuidores: Abacaxi

Junes Fonte: http://pt.wikibooks.org/w/index.php?oldid=244153 Contribuidores: Abacaxi


Fontes, Licenas e Editores da Imagem 22

Fontes, Licenas e Editores da Imagem


Imagem:Rekopis chopin.jpg Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Rekopis_chopin.jpg Licena: Public Domain Contribuidores: Andreagrossmann, Kevyn, Maire, Man
vyi, Niki K, Subitosera, Tsca
Licena 23

Licena
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/