Está en la página 1de 53

Aula 02

O nome SQL significa Structured Query Language


Linguagem Estruturada de Pesquisa.
Essa linguagem, de grande utilizao, teve seus
fundamentos no modelo relacional de Codd(1970).
Sua
primeira
verso
recebeu
o
nome
SEQUEL(Structured English Query Language), sendo
definida por D. D. CHAMBERLIN, entre outros, em
1974, nos laboratorios de pesquisa da IBM.
Entre 1976 e 1977, o SEQUEL foi revisado e ampliado,
e teve seu nome alterado para SQL por razes
juridicas.

Com esta reviso foi posto em prtica um projeto ambicioso


da IBM chamado System R.
Novas alteraes foram introduzidas na SQL, graas as ideias
apresentadas pelos diversos usurios do ambiente.
Devido ao sucesso dessa nova forma de consulta e
manipulao de dados, dentro de um ambiente de banco de
dados, a utilizao da SQL foi se tornando cada vez maior.
Com isso grande quantidade de SGBDs foi tendo como
linguagem basica a SQL :
SQL/DS e DB2 da IBM, Oracle da Oracle Corporation, RDB da
Digital, SYBASE da Sybase INC, SQLSERVER da Microsoft, entre
outros.

A SQL se tornou um padro de fato, no mundo dos


ambientes de banco de dados relacionados. Bastava
agora se tornar de direito.
Ento em 1982, o ANSI( American National Standard
Institute) tornou SQL padro oficial de linguagem em
ambiente relacional.
Infelizmente, como todo padro que se preze, existem
vrios dialetos SQL, cada um, evidentemente, tentando
ser mais padronizado que o outro.
Nessa disciplina vamos aprender o padro ANSI da SQL.

Como vimos antes, o modelo relacional constitudo


basicamente de tabelas, cada qual contendo linhas
(registros, tuplas) e colunas.
Os registros na tabela no so ordenados e sua
localizao se faz por meio de um campo chave, ou seja,
um campo que assume o papel de chave primria da
tabela.
por intermdio dessa chave que identifica uma, e
somente uma, ocorrncia do valor contido no campo.
A linguagem SQL foi desenvolvida especialmente para o
ambiente relacional, podendo ser adaptada a qualquer
ambiente no relacional.

A ideia original da SQL s previa seu uso de forma


interativa. Aps sofrer alguns acrscimos, ela passou
tambm a ter capacidade de ser utilizada em linguagens
hospedeiras, tais como: PHQ, JAVA, C etc.
Atualmente, a linguagem SQL assume um papel muito
importante nos sistemas de gerenciamento de banco de
dados, podendo ter muitos enfoques:
Linguagem interativa de consulta (query ADHOC) por meio
de comando SQL, os usurios podem montar consultas
poderosas sem a necessidade da criao de um programa,
podendo utilizar ferramentas de montagem de relatrios;

Linguagem de programao para acesso a banco de dados comandos SQL embutidos em programas de aplicao que
acessam os dados armazenados;

Linguagem de administrao de banco de dados - o


responsvel pela administrao do banco de dados (DBA) pode
utilizar comandos SQL para realizar suas tarefas;
Linguagem cliente/servidor - os programas (cliente) dos
computadores pessoais usam comandos SQL para se
comunicarem por meio de uma rede local, compartilhando os
dados armazenados em um nico local (servidor). A arquitetura
cliente/servidor minimiza o trfego de dados pela rede;

Linguagem para banco de dados distribudos - a SQL auxilia


na distribuio dos dados por meio de vrios ns conectados ao
sistema de computao. Auxilia tambm na comunicao de
dados com outros sistemas;
Caminho de acesso a outros bancos de dados em diferentes
mquinas a SQL auxilia na converso entre diferentes produtos
de banco de dados colocados em diferentes mquinas ( de micro
at mainframe).

Por ser uma linguagem de numerosas aplicaes, a SQL


pode manipular objetos de diferentes classes entre as
funes de um SGBD:

Implementao
Ambiente

DDL
Criar(CREATE)
Destruir (DROP)
Modificar (ALTER)

SQL
Segurana
Controle
Administrao

DML
Consultar
(SELECT)
Inserir (INSERT)
Apagar (DELETE)
Atualizar
(UPDATE)

Definio de dados (DDL) permite ao usurio a definio


da estrutura e organizao dos dados armazenados, e as
relaes que existem entre eles;
Manipulao de dados (DML) permite ao usurio ou a um
programa de aplicao, a incluso, remoo, seleo ou
atualizao de dados previamente armazenados no banco;
Controle de acesso protege os dados de manipulaes
no autorizadas;
Compartilhamento
de
dados

coordena
o
compartilhamento dos dados por usurios concorrentes, sem
contudo interferir na ao de cada um deles;
Integridade dos dados auxilia no processo de definio da
integridade dos dados, protegendo contra corrupes,
inconsistncias e falhas do sistema de computao.

Com o uso e a padronizao da SQL, algumas


vantagens so diretas:
Independncia de fabricante A SQL oferecido em
praticamente todos os SGBDs, e os que ainda no tm esto se
encaminhando para l. Com isso posso mudar de SGBD sem me
preocupar com o novo que vai chegar;
Portabilidade entre computadores A SQL pode ser utilizada
desde um computador pessoal, passando por uma estao de
trabalho, at um computador de grande porte;
Reduo dos custos com treinamento Baseado no item
anterior, as aplicaes podem se movimentar de um ambiente
para outro sem que seja necessria uma reciclagem da equipe
de desenvolvimento;

Ingls estruturado de alto nvel A SQL formada por um


conjunto bem simples de sentenas em ingls, oferecendo um
rpido e fcil entendimento;
Consulta interativa A SQL prov um acesso rpido aos dados,
fornecendo respostas ao usurio, a questes complexas, em
minutos ou segundos;
Mltiplas vises dos dados A SQL permite ao criador do
banco de dados levar diferentes vises dos dados a diferentes
usurios;
Definio dinmica dos dados Por meio da SQL, podem-se
alterar, expandir ou incluir, dinamicamente, as estruturas dos
dados armazenados com a mxima flexibilidade.

Apesar de todas essas vantagens, algumas crticas so


dirigidas SQL:
A padronizao leva a uma, natural, inibio da criatividade, pois
quem desenvolve aplicaes fica preso a solues padronizadas,
no podendo sofrer melhorias ou alteraes;
A SQL est longe de ser uma linguagem relacional ideal
Segundo C. J. Date.

Todo nosso percurso pela linguagem SQL ser efetuado


com base no exemplo a seguir.

0:N

PEDIDO

0:N

1:1

POSSUI

1:N

ITEM DO
PEDIDO

1:N

PARTICIPA
FAZ

TIRA

1:1

1:1
CLIENTE

1:1
VENDEDOR

PRODUTO

Cd. do
Cliente

Nome do
Cliente

Endereo

Cidade

CEP

UF

CPF

720

Ana

Rua 17 n. 19

Niteri

24358310

RJ

87623409412

870

Flvio

Av. Pres.
Vargas 10

So Paulo

22763931

SP

76589032415

110

Jorge

Rua Caiapo 13

Curitiba

30078500

PR

16745832494

222

Lcia

Rua Itabira 123


Loja 9

Belo
Horizonte

22124391

M
G

05628394725

Cod. Vendedor

Nome Vendedor

Salario Fixo

Faixa de
Comisso

209

Jos

1.800

111

Carlos

2.490

11

Joo

2.780

240

Antnio

9.500

Nmero do
Pedido

Prazo Entrega

Cdigo Cliente

Cdigo
vendedor

121

20

720

111

97

20

870

240

101

15

110

11

137

20

222

111

148

20

870

209

Nmero do
Pedido

Cdigo do
Produto

Quantidade

121

25

10

121

31

35

97

77

20

101

22

Cdigo do
Produto

Unidade do
Produto

Descrio do
Produto

Valor Unitrio

25

Kg

Queijo

0,97

31

BAR

Chocolate

0,87

77

Vinho

2,00

22

Linho

0,11

CLIENTE
Cdigo do Cliente
Nome do Cliente
Endereo
Cidade
CEP
UF
CPF

PEDIDO

ITEM DO PEDIDO

Nmedo_do_pedido
Prazo_de_entrega
Cdigo_do_Cliente
Cdigo_do_vendedor

Nmero_do_pedido
Cdigo_do_Produto
Quantidade

VENDEDOR

PRODUTO

Cdigo do Vendedor
Nome do Vendedor
Faixa de comisso
Salrio fixo

Cdigo do produto
Descrio
Unidade
Val. Unit.

Para podermos criar e inserir as tabelas de uma


aplicao em Banco de Dados, dependendo do ambiente
de SGBD que estivermos utilizando, criar o DATABASE,
ou seja criar um banco de dados no qual estaro
residentes as tabelas de nosso sistema.

O processo bsico consiste em simplesmente atribuir tipos de


dado e tamanho para cada um dos atributos que foram
identificados.
Observaes:
1.

2.

Cada banco de dados utiliza um terminador de comando especfico.


Normalmente utilizado o ponto e vrgula (;) no Oracle e DB2, mas
encontra-se ponto (.) no Progress e o comando go no SQL Server.
Voc dever encerrar todos os comandos mostrados daqui para
frente com o padro do seu banco de dados, para que eles sejam
executados corretamente. Alguns bancos de dados permitem
inclusive trocar o terminador-padro.
Quanto aos comandos SQL apresentados, os bancos de dados no
so sensveis a letras maisculas ou minsculas. Contudo, o
contedo das colunas normalmente sensvel, portanto deve-se
tomar cuidado ao realizar comparaes entre valores
alfanumricos.

Antes de criar as tabelas no nosso banco de dados,


temos que definir quais so as caractersticas de cada
um dos campos. As caractersticas que o SQL exige so
o tipo de dado e o tamanho de cada campo.
Apresentaremos o padro utilizado pela maioria dos
bancos de dados SQL e voc dever consultar as
eventuais mudanas do banco de dados em que estiver
trabalhando.

Tipo de Dado

Descrio

INTEGER OU INT

Nmero positivo ou negativo inteiro. O nmero varia


em funo do banco de dados utilizado.

NUMERIC

Nmero positivo ou negativo de ponto flutuante.


Normalmente deve-se informar o tamanho total do
campo e definir quantas casas decimais devem ser
armazenadas aps a vrgula.

REAL

Nmero de ponto flutuante de simples preciso. A


diferena bsica que os valores sero
armazenados em representao exponencial,
portanto sero arredondados para o nvel mais
prximo de preciso.

FLOAT

Nmero de ponto flutuante em que voc define o


nvel de preciso (nmero de dgitos significativos).

BIT

Armazenamento de um nmero fixo de bits. O


nmero de bits deve ser indicado, do contrrio o
padro ser 1.

Tipo de Dado

Descrio

DATE

Permite armazenar datas.

TIME

Permite armazenar horrios.

TIMESTAMP

Permite armazenar uma combinao de data e hora.

CHAR

Permite armazenar cadeias de caracteres (letras,


smbolos e nmeros). O tamanho deve ser
informado e ser fixo, ou seja, mesmo que no
utilizado totalmente, ser ocupado o espao
fisicamente. O valor definido ser o tamanho
mximo de cadeia armazenada.

VARCHAR

Permite armazenar cadeias de caracteres, mas com


tamanho varivel. Nesse caso, especifica-se o
tamanho mximo da coluna. Se for utilizado menos
espao que o mximo definido, o espao restante
no ser ocupado.

CREATE DATABASE database_name;


Exemplo:
CREATE DATABASE vendas;

GRAVADORA

CD

Codigo_Gravadora: INTEGER

Cdigo_CD: INTEGER

Nome_Gravadora:
VARCHAR(60)
Endereo: VARCHAR(60)
Telefone: VARCHAR(20)
Contato: VARCHAR(20)
URL: VARCHAR(80)

Codigo_Gravadora: INTEGER
Nome: VARCHAR(60)
Preco_Venda: DECIMAL(14,2)
Data_Lancamento: DATE
CD_Indicado: INTEGER
CD_CATEGORIA
Codigo_Categoria: INTEGER

FAIXA

Menor_Preco: DECIMAL(14,2)
Maior_Preco: DECIMAL(14,2)

Codigo_CD: INTEGER
Codigo_Musica: INTEGER
Numero_Faixa: INTEGER

AUTOR
Codigo_Autor: INTEGER
Nome_Autor: VARCHAR(60)
MUSICA
Codigo_Musica: INTEGER

MUSICA_AUTOR

Nome_Musica: VARCHAR(60)
Duracao: DECIMAL(6,2)

Codigo_Musica: INTEGER
Codigo_Autor: INTEGER

Tabelas so as estruturas mais importantes de um banco de


dados.
Nas tabelas estar o contedo que representa cada objeto do
mundo real, cuja importncia para o funcionamento do
sistema justifica a sua criao.
As prprias tabelas criadas no banco de dados ficam
armazenadas em tabelas internas do gerenciador de banco
de dados. o chamado Dicionrio de Dados.
Com a utilizao do dicionrio de dados, as informaes das
tabelas ficam sempre disposio do usurio e permitem um
controle maior do que est sendo armazenado.
As tabelas que criaremos para armazenar as informaes do
nosso sistema sero tabelas permanentes. Para cri-las,
utilizaremos o comando CREATE TABLE.

Constraints so regras agregadas a colunas ou tabelas.


Assim, pode-se definir como obrigatrio o preenchimento
de uma coluna que tenha um valor-padro quando uma
linha for includa na tabela ou quando aceitar apenas
alguns valores predefinidos.
No caso de regras aplicadas a tabelas, tem-se a
definio de chaves primrias e estrangeiras.

CREATE TABLE nome-tabela (


nome-coluna1 tipo-de-dado-coluna1 coluna1-constraint,
nome-coluna2 tipo-de-dado-coluna2 coluna2-constraint,
nome-colunan tipo-de-dado-colunan colunan-constraint,
constraint-de-tabela);

CREATE TABLE cliente (


codigo_cliente
INT NOT NULL UNIQUE,
nome_cliente
VARCHAR (20),
endereco
VARCHAR(30),
cidade
VARCHAR(20),
CEP
VARCHAR(10),
UF
CHAR(2),
CPF
VARCHAR(11)
);

Sero analisados alguns tipos de CONSTRAINT


encontrados com mais frequencia nos banco de dados.
As CONSTRAINTS variam muito de um banco de dados
para outro
Pode ser que alguma delas no esteja presente no
banco de dados que voc estiver utilizando.

a coluna, ou grupo de colunas, que permite identificar


um nico registro na tabela.
Para especificar que uma coluna ou grupo de colunas
representa a chave primria de uma tabela, deve-se
acrescentar a palavra-chave PRIMARY KEY seguida do
nome da(s) coluna(s).
Digamos que haja uma tabela de cliente cuja chave
primria seja o campo CDCLIENTE. A criao da chave
primria ficaria assim:
......
PRIMARY KEY (cdcliente),
....

o campo que estabelece o relacionamento entre duas tabelas.


Ao determinar esse tipo de relacionamento, fica garantida a
integridade das informaes.
Os valores presentes na(s) coluna(s) definida(s) como chave
estrangeira devem ter um correspondente na outra tabela, caso
contrrio o banco de dados deve retornar uma mensagem de erro.
normal que ao tentar excluir um registro de uma tabela, o banco
de dados verifique se h chaves estrangeiras relacionadas a esse
registro. Se houver, tambm ser retornado um erro impedindo essa
operao.
Para especificar uma chave estrangeira, utilize a seguinte sintaxe:
FOREIGN KEY nome-chave-estrangeira (lista-de-colunas)
REFERENCES nome-tabela (lista-de-colunas)

Como exemplo, vamos fazer referencia tabela cliente


quando estamos criando a tabela pedidos:
......
FOREIGN KEY pedido_cliente_fk (cdcliente)
REFERENCES cliente,
......

Veja que no houve a necessidade de incluir a lista de


colunas aps o nome da tabela que contm a chave
primria, pois esta foi definida na criao da tabela
Cliente.

Serve para atribuir um contedo padro a uma coluna da


tabela, sempre que for includa uma nova linha na tabela.
Deve-se especificar a palavra-chave DEFAULT, seguida
do contedo padro.
Imaginando uma coluna QUANTIDADE que deve ter o
contedo padro 1, deveramos cria-la desta forma:
......
QUANTIDADE INTEGER DEFAULT 1,
......

Indica que o contedo de um coluna no poder ser


Nulo.
Se cada coluna no tiver valor atribudo durante a
criao, ter valor nulo.
Alguns banco de dados no SQL atribuam contedo em
funo ao tipo de dado:
Campos numricos tinham valores zero;
Cadeia de caracteres contedo branco e assim por diante.

Lembre-se: em banco de dados SQL, colunas sem valor


atribudo possuem valor nulo.

Ao tentar incluir uma coluna com essa restrio, que no


apresenta valor, o banco de dados retornar uma
mensagem de erro e no incluir a linha.
Imagine um caso que no se possa incluir um cliente
sem que seja preenchido o nome. Essa coluna seria
criada desta forma:
.....
NOME_CLIENTE VARCHAR(50) NOT NULL,
.....

Indica que no pode haver repetio no contedo da


coluna.
Isso diferente do conceito de chave primria. A chave
primria, alm de no permitir repetio, no pode haver
valores nulos.
Ao especificarmos que uma coluna deve conter valores
nicos, indicamos que todos os valores no nulos devem
ser exclusivos.

Devemos acrescentar a clusula UNIQUE, aps a


definio da coluna.
....
CPF NUMERIC(11) UNIQUE
.....

Para alterar a estrutura de uma tabela, utilizaremos o


comando ALTER TABLE.
Dependendo do bando de dados podemos:

O comando utilizado para acrescentar novas colunas


muito semelhante ao de criao de colunas em uma
tabela:
ALTER TABLE tabela
ADD nome-coluna tipo-de-dado constraints [, nome-coluna
tipo-de-dado constraints, .... ]

Exemplo:
ALTER TABLE cliente
ADD email VARCHAR(80) UNIQUE

O comando utilizado para acrescentar novas constraints


muito semelhante ao da criao de constraints em uma
tabela:
ALTER TABLE tabela
ADD (constraint)

Exemplo:
ALTER TABLE cliente
ADD PRIMARY KEY (cdcliente);
ou
ALTER TABLE cliente
ADD CONSTRAINT cliente_pk PRIMARY KEY (cdcliente);

Adicionando FOREIGN KEY


ALTER TABLE tabela ADD CONSTRAINT nome-foreign
FOREIGN KEY (coluna-tabela-atual) REFERENCES tabelaorigem(coluna-tabela-origem);
ALTER TABLE gravadora ADD CONSTRAINT cd_fk FOREIGN
KEY (cod_cd) REFERENCES cd(cod_cd);

Nesse caso, estamos alterando uma constraint de


tabela.
Note que a colocao do parnteses aps a clausula
ADD opcional.

Podemos modificar qualquer caractersticas de uma


coluna, seja:
TIPO DE DADO (alguns bancos de dados requerem ausncia de
contedo na coluna para fazer essa alterao);
TAMANHO (alguns s aceitam alteraes para valores maiores
que o definido);
E as CONSTRAINTS.
ALTER TABLE tabela
MODIFY (nome-coluna tipo-de-dado constraints)
Exemplo:
ALTER TABLE cliente
MODIFY email VARCHAR(100) NOT NULL

Podemos especificar apenas o que estamos


modificando;
No necessrio repetir o que no ser alterado;
Assim, se quisermos apenas modificar o tipo de dado e
seu tamanho, no necessrio especificar a constraint e
vice-versa.
De qualquer forma, devemos sempre especificar qual
coluna est sofrendo a modificao.

Pelo padro SQL, deveria ser possivel excluir colunas ou


constraints de uma tabela.
Alguns bancos de dados no permitem a excluso de
colunas. No Oracle, a clausula de excluso o DROP e
no DELETE;
......
ALTER TABLE tabela
DELETE elemento

Exemplo 1 Excluso de coluna:


ALTER TABLE cliente
DELETE email;

Exemplo 2 Excluso de constraint de tabela:


ALTER TABLE cliente
DELETE PRIMARY KEY;

Exemplo 3 Excluso de constraint de tabela:


ALTER TABLE cliente
DELETE FOREIGN KEY pedido_cliente_fk;

Podemos trocar o nome de tabelas ou colunas (alguns


bancos de dados no permitem essa operao):
a) Alterao de nome de tabela
ALTER TABLE tabela
RENAME nome-tabela
Exemplo:
ALTER TABLE cliente
RENAME cli;

b) Alterao de nome de coluna


ALTER TABLE tabela
RENAME coluna-velha TO coluna-nova
Exemplo:
ALTER TABLE cliente
RENAME nome-cliente TO nmcliente;

GRAVADORA

CD

Codigo_Gravadora: INTEGER

Cdigo_CD: INTEGER

Nome_Gravadora:
VARCHAR(60)
Endereo: VARCHAR(60)
Telefone: VARCHAR(20)
Contato: VARCHAR(20)
URL: VARCHAR(80)

Codigo_Gravadora: INTEGER
Nome: VARCHAR(60)
Preco_Venda: DECIMAL(14,2)
Data_Lancamento: DATE
CD_Indicado: INTEGER
CD_CATEGORIA
Codigo_Categoria: INTEGER

FAIXA

Menor_Preco: DECIMAL(14,2)
Maior_Preco: DECIMAL(14,2)

Codigo_CD: INTEGER
Codigo_Musica: INTEGER
Numero_Faixa: INTEGER

AUTOR
Codigo_Autor: INTEGER
Nome_Autor: VARCHAR(60)
MUSICA
Codigo_Musica: INTEGER

MUSICA_AUTOR

Nome_Musica: VARCHAR(60)
Duracao: DECIMAL(6,2)

Codigo_Musica: INTEGER
Codigo_Autor: INTEGER

También podría gustarte