Você está na página 1de 73

Linguagem SQL

Apresentao
A lgebra relacional descrita no Captulo 2 fornece uma notao formal e concisa para representar consultas. Entretanto, os sistemas de banco de dados comerciais exigem uma linguagem de consulta que seja mais amigvel.
Neste captulo, bem como no Captulo 4, estudaremos a SQL, a linguagem de consulta mais comercialmente influente. A SQL usa uma combinao de construes de lgebra relacional (Captulo 2) e clculo relacional (Captulo 5). Embora nos referimos SQL como uma "linguagem de consulta", ela pode fazer muito mais do que simplesmente consultar um banco de dados. Ela pode definir a estrutura dos dados, modificar dados no banco de dados e especificar restries de segurana.

Histria da SQL
A IBM desenvolveu a verso original da SQL, originalmente chamada Sequel, como parte do projeto R no incio da dcada de 1970. A linguagem Sequel evoluiu desde ento, e seu nome mudou para SQL (Structured Query Language). Muitos produtos agora aceitam a linguagem SQL. A SQL se estabeleceu claramente como a linguagem padro de banco de dados relacional.
Em 1986, o American National Standards Institute (ANSI) e a International Organization for Standardization (ISO) publicaram um padro SQL, chamado SQL-86. Em 1989, o ANSI publicou um padro estendido para a linguagem: a SQL-89. A prxima verso do padro foi a SQL-92, seguida da SQL: 1999; a verso mais recente a SQL:2003. As notas bibliogrficas fornecem referncias para esses padres.

Partes da linguagem SQL


Linguagem de definio de dados (DDL). A DDL da SQL fornece comandos para definir esquemas de relao, excluir relaes e modificar esquemas.
conta (nmero_conta, nome_agncia, saldo) create table conta
(nmero_conta char(10), nome_agncia char(15), saldo nuneric(12,2), primary key (nmero_conta))

Linguagem de manipulao de dados interativa (DML). A DML da SQL inclui uma linguagem de consulta baseada na lgebra relacional (2) e no clculo relacional de tupla (5). Ela tambm inclui comandos para inserir, excluir e modificar tuplas no banco de dados.

Partes da linguagem SQL


Integridade. A DDL SQL inclui comandos para especificar restries de integridade s quais os dados armazenados no banco de dados precisam satisfazer. As atualizaes que violam as restries de integridade so proibidas.
Definio de view. A DDL SQL inclui comandos para definir views.

Controle de transao. A SQL inclui comandos para especificar o incio e o fim das transaes.
SQL embutida e SQL dinmica. A SQL embutida e a dinmica definem como as instrues SQL podem ser incorporadas dentro das linguagens de programao de finalidade geral, como C, C++, Java, PL7I, Cobol, Pascal e Fortran. Autorizao. A DDL SQL inclui comandos para especificar direitos de acesso para relaes e views.

Definio de dados
O conjunto de relaes em um banco de dados precisa ser especificado para o sistema por meio de uma linguagem de definio de dados (DDL). A DDL SQL permite a especificao no s de um conjunto de relaes, mas tambm de informaes sobre cada relao, incluindo O esquema para cada relao
O domnio dos valores associados a cada atributo As restries de integridade O conjunto dos ndices a serem mantidos para cada relao As informaes de segurana e autorizao para cada relao A estrutura de armazenamento fsico de cada relao no disco

SQL : DDL e DML


DDL (Data Definition Language) Linguagem para definio de dados DML (Data Manipulation Language) Linguagem para manipulao de dados

DDL (Estruturas)

DML (Dados)

Linguagem para Definio de Dados (DDL)


Comandos usados para definir e descrever os dados e as relaes dos dados em um banco de dados:

Criao Excluso Alterao

DDL - Exemplos
Criao

Create
database domain table, ...
Alterao

Drop

Excluso

database domain table

Alter
domain table, ...

DDL - Criao

CREATEDB
CREATEDB BD01;

ALGUNS TIPOS DE DADOS Categoria Tipo de dado Descrio Caracter/String Text Permite armazenar nmero ilimitado de caracteres. Varchar(T) T refere-se quantidade mxima de caracteres a serem armazenados. Tanto text, como varchar ocupam para armazenamento somente a quantidade de caracteres efetivamente utilizada. Char(T) T refere-se quantidade mxima de caracteres a serem armazenados. Diferente de text e varchar, ocupa o espao total de armazenamento referido em T. Numricos Integer Nmero inteiro na faixa de 2 bilhes. Int2 Nmero inteiro na faixa de 32 mil. Int8 Nmero inteiro na faixa de 4 x 10 18 Numeric(P,D) Nmero real com preciso definida. Ex.: numeric(8,2) define um nmero com at 6 dgitos antes da vrgula e 2 aps a vrgula. Float Nmero de ponto flutuante, com 15 dgitos de preciso. Float4 Nmero de ponto flutuante, com 6 dgitos de preciso. Temporais Date Data no formato yy-mm-dd. Time Hora no formato hh:mm:ss. Timestamp Data e hora no formato yy-mm-dd hh:mm:ss. Interval Intervalo de tempo, gerado pela subtrao de 2 dados do tipo timestamp. Ex.: 5 horas e 7 dias. Lgicos Bool Dado booleano, pode ser entrado como true, t, yes, y ou 1 e tambm false, f, no, n ou 0. Mas armazena o dado como t ou f.

Restries de dados:
NOT NULL torna a entrada de valores obrigatria na coluna.

CHECK verifica em cada operao de incluso e alterao se a condio especificada para o campo est sendo cumprida.
DEFAULT especifica um valor padro a ser atribudo ao campo quando nenhuma entrada for especificada. UNIQUE no permite que valores duplicados apaream na coluna. Todos os campos designados como chave candidata (entrada no repetida), devem ser especificados como UNIQUE. PRIMARY KEY especifica uma chave primria, ou seja, identifica unicamente cada linha.

REFERENCES especifica uma chave estrangeira, ou seja, o valor do campo baseado nos valores de chave primria de outra tabela. Quando estamos declarando um campo como chave estrangeira em uma tabela, podemos especificar quais aes devem ser tomadas no caso de excluso ou alterao da chave estrangeira:
ON DELETE SET NULL Quando a tupla correspondente a FK excluda seu valor marcado como nulo. CASCADE Quando a tupla correspondente a FK excludo todas as tuplas que a tinham como FK so excludas tambm. Quando a tupla Quando a tupla correspondente a FK correspondente a FK alterada seu valor alterada todas as tuplas marcado como nulo. que a tinham como FK so alteradas tambm. SET DEFAULT Quando a tupla correspondente a FK excluda seu valor marcado com o valor default especificado. Quando a tupla correspondente a FK alterada seu valor marcado com o valor default especificado.

ON UPDATE

A opo NO ACTION o default do Postgresql, e especifica que no podem ser feitas alteraes e excluses em campos que so referenciados como chave estrangeira.

Ex. de restries
CREATE TABLE vendedor( cod_vendedor INT2 PRIMARY KEY, nome varchar(30) NOT NULL, endereco varchar(80), cep char(8), datanascimento date, telefone varchar(18), funcao varchar(50), datacontratacao date, cod_departamento INT2 REFERENCES departamento ON UPDATE CASCADE ON DELETE SET NULL, cod_cidade INT2 DEFAULT 1 REFERENCES cidade ON UPDATE SET NULL ON DELETE SET DEFAULT);

O que um Domnio?
um apelido (alis) para um determinado tipo de dado

Domnios SIMPLES
CREATE DOMAIN ENDER AS VARCHAR (30)

CREATE DOMAIN FONE AS VARCHAR (20)

Crie um domnio Inteiro do tipo Int2


CREATE DOMAIN INTEIRO AS INT2

Domnios COMPLEXOS
CREATE DOMAIN SALARIO AS NUMERIC (9,2) DEFAULT 0 CHECK (VALUE>0) CREATE DOMAIN DEPTO AS INT2 CHECK (VALUE BETWEEN 0 AND 6)

DDL - Criao

CREATE TABLE
Fornecedor
nome cnpj

Fornecedor cnpj nome

CREATE TABLE FORNECEDOR ( CNPJ INT2 NOT NULL, NOME VARCHAR(30) )

CREATE TABLE e Domnios


Cliente
endereo nome salario

Cliente nome endereo salario

CREATE TABLE CLIENTE ( Domnios NOME VARCHAR(30), ENDERECO ENDER, SALARIO SALARIO

CREATE TABLE e Chave Primria (PK) Funcionrio


Cdigo Nome Salario

Funcionrio Cdigo Nome Salario

CREATE TABLE FUNCIONARIO ( CODIGO INT, NOME VARCHAR(30), SALARIO FLOAT, PRIMARY KEY(CODIGO) );

CREATE TABLE e Chave Estrangeira (FK)

Nome Endereo

Cliente
Fone* Codigo Data_nasc ddd nmero

Cliente Codigo Nome Endereo Data_nasc

Fone Nmero DDD Cliente

CREATE TABLE CLIENTE ( CODIGO INT2, NOME VARCHAR(30), ENDERECO VARCHAR(30), DATA_NASC DATE, PRIMARY KEY (CODIGO) );

DICA: Crie sempre a tabela origem antes da tabela destino

Cliente Codigo Nome Endereo Data_nasc

Fone Nmero DDD Cliente

CREATE TABLE FONE ( DDD VARCHAR(10), NUMERO VARCHAR(20), CLIENTE INT2 NOT NULL, PRIMARY KEY (NUMERO,DDD,CLIENTE), FOREIGN KEY(CLIENTE)REFERENCES CLIENTE(CODIGO) );

CREATE TABLE e Relacionamento 1:1 1

Funcionrio

Gerencia

Deptart.

Funcionrio CodigoF NomeFun Salario

Departamento CodigoD Gerente NomeD

Funcionrio CodigoF NomeFun Salario

Departamento CodigoD Gerente NomeD

CREATE TABLE FUNCIONARIO ( CODIGOF INT2, NOMEFUN VARCHAR(30), SALARIO FLOAT, PRIMARY KEY(CODIGOF) );

Funcionrio CodigoF Nome Salario

Departamento CodigoD Gerente NomeD

CREATE TABLE DEPARTAMENTO ( CODIGOD INT2, GERENTE INT2, NOMED VARCHAR(30), PRIMARY KEY(CODIGOD), FOREIGN KEY(GERENTE)REFERENCES FUNCIONARIO(CODIGOF) );

CREATE TABLE e Relacionamento 1:N

Aluno

estuda

Curso

Aluno RA Nome Sexo Curso

Curso Codigo Nome

Aluno
RA Nome Sexo Curso
CREATE TABLE CURSO ( CODIGO INTEGER, NOMEC VARCHAR(30), PRIMARY KEY(CODIGO) );

Curso
Codigo NomeC

Aluno RA NomeAluno Sexo Curso

Curso Codigo Nome

CREATE TABLE ALUNO ( RA INT2, NOMEALUNO VARCHAR(30), SEXO CHAR(1), CURSO INTEGER, PRIMARY KEY(RA), FOREIGN KEY(CURSO)REFERENCES CURSO(CODIGO) );

CREATE TABLE e Relacionamento N:N


Atleta

Pratica

Modalidade

Atleta
CodigoA Nome Endereo Data_nasc

Pratica
CodigoA CodigoM

Modalidade
CodigoM Nome

Atleta
CodigoA NomeAtleta Endereo Data_nasc

Pratica
CodigoA CodigoM

Modalidade
CodigoM NomeMod

CREATE TABLE ATLETA CREATE TABLE MODALIDADE ( ( CODIGOA INTEGER, CODIGOM INTEGER, NOMEATLETA VARCHAR(30), NOMEMOD VARCHAR(30), ENDERECO VARCHAR(30), PRIMARY KEY(CODIGOM) DATA_NASC DATE, ); PRIMARY KEY(CODIGOA) );

Atleta
CodigoA NomeAtleta Endereo Data_nasc

Pratica
CodigoA CodigoM

Modalidade
CodigoM NomeMod

CREATE TABLE PRATICA ( CODIGOA INTEGER, CODIGOM INTEGER, PRIMARY KEY(CODIGOA,CODIGOM), FOREIGN KEY(CODIGOA)REFERENCES ATLETA(CODIGOA), FOREIGN KEY(CODIGOM)REFERENCES MODALIDADE(CODIGOM) );

Ou posso alterar os nomes das chaves do Pratica... Veja!

Atleta
CodigoA NomeAtleta Endereo Data_nasc

Pratica
CodAtleta CodModalidade

Modalidade
CodigoM NomeMod

CREATE TABLE PRATICA ( CODATLETA INTEGER, CODMODALIDADE INTEGER, PRIMARY KEY(CODATLETA,CODMODALIDADE), FOREIGN KEY(CODATLETA)REFERENCES ATLETA(CODIGOA), FOREIGN KEY(CODMODALIDADE)REFERENCES MODALIDADE(CODIGOM) );

Exerccios
Crie as tabelas do esquema da instituio bancria utilizando a DDL da linguagem SQL:
Agncia (cod_agencia, nome_agncia, cidade_agncia, ativo) Cliente (cod_cliente, nome_cliente, rua_cliente, cidade_cliente) Conta (cod_conta, nmero_conta, nome_agncia, saldo) Depositante (cod_depositante, nome_cliente, nmero_conta)

Agncia e Cliente
agncia (cod_agncia, nome_agncia, cidade_agncia, ativo)
CREATE TABLE agncia ( cod_agncia int2, nome_agncia char(15), cidade_agncia char(30), ativo numeric(16,2), primary key (cod_agncia) )

cliente (cod_cliente, nome_cliente, rua_cliente, cidade_cliente)


CREATE TABLE cliente ( cod_cliente int2, nome_cliente char(20), rua_cliente char(30), cidade_cliente char(30), primary key (cod_cliente) )

Conta e Depositante
conta (cod_conta, nmero_conta, nome_agncia, saldo)
CREATE TABLE conta ( cod_conta int2, nmero_conta char(10), nome_agncia char(15), saldo nuneric(12,2), primary key (cod_conta) )

depositante (cod_depositante, nome_cliente, nmero_conta)


CREATE TABLE depositante ( cod_depositante int2, nome_cliente char(20), nmero_conta char(10), primary key (cod_depositante) )

Crie as tabelas do esquema a seguir utilizando a DDL da linguagem SQL:

fornecedor (cod_fornecedor, nome_fornecedor) produto (cod_produto, nome_produto, cod_fornecedor, cod_categoria) categoria (cod_categoria, nome_categoria) pedido (cod_pedido, nome_pedido, cod_cliente) cliente (cod_cliente, nome_cliente) ped_prod (cod_produto, cod_pedido)

Fim 1 Aula

CREATE TABLE e Chave Candidata

Professor Codigo Nome Endereo RG

CREATE TABLE e Restrio de Coluna (Check)


Restrio: Aceitar somente produtos cujo peso maior que 50

Produto Codigo Descricao Peso Volume

CREATE TABLE e Valor Default


Aceitar somente produtos cujo peso maior que 50 Caso o volume no seja informado, atribuir o valor 0 de modo automtico

Produto Codigo Descricao Peso Volume

CREATE TABLE e Restrio de Tabela (Check)


Restrio: Aceitar somente produtos cujo volume menor que o peso

Produto Codigo Descricao Peso Volume

Operadores Relacionais
= > < <= >= <>, != igual a maior que menor que maior ou igual a menor ou igual a diferente de

Crie a tabela produto de maneira que no seja possvel inserir produtos cujo peso igual ao volume Produto Codigo Descricao Peso Volume

Operadores Lgicos
AND OR NOT IN BETWEEN LIKE e ou no dentro de entre como

Crie a tabela produto de maneira que seja possvel inserir somente produtos cujo peso igual a 50, 60, 70 ou 80.
Produto Codigo Descricao Peso Volume

Crie a tabela produto de maneira que seja possvel somente inserir produtos cujo volume esteja entre 20 e 80. Produto Codigo Descricao Peso Volume

DDL - Excluso

DROP DATABASE
Apaga o banco de dados atual e todos os dados que ele contm!!! DROP DATABASE
ATENCO

DDL - Excluso

DROP DOMAIN
Apaga um domnio do banco de dados

DROP DOMAIN SALARIO;

A excluso falha se houverem atributos (colunas) usando o domnio. Portanto, deve-se alterar o domnio dos atributos (colunas) que usam o domnio ou excluir estes atributos primeiro!

DDL - Excluso

DROP DOMAIN
Apaga um domnio do banco de dados

DROP DOMAIN SALARIO [CASCADE|RESTRICT];


CASCADE Remove automaticamente os objetos que dependem do domnio (como colunas de tabelas). RESTRICT Recusa remover o domnio se existirem objetos que dependem do mesmo. Este o padro.

DDL - Excluso

DROP TABLE
Apaga tabelas
Fornecedor cnpj nome

DROP TABLE Fornecedor;

Exemplo

Aluno RA Nome Sexo Curso

Curso Codigo Nome

DROP TABLE ALUNO; DROP TABLE CURSO; DICA: Apague sempre a tabela destino antes da tabela origem

Exemplo
Atleta Cdigo Nome Endereo Data_nasc.

Pratica Atleta Modalidade

Modalidade Cdigo Nome

DROP TABLE PRATICA; DROP TABLE ATLETA; DROP TABLE MODALIDADE;

Exemplo
Funcionrio Codigo Nome Salario
Departamento Codigo Gerente Nome

DROP TABLE DEPARTAMENTO; DROP TABLE FUNCIONARIO;

DDL - Alterao

ALTER DOMAIN
Altera a definio de um domnio, afetando as colunas nele baseadas
ALTER DOMAIN SALARIO TO NOVO_SALARIO; ALTER DOMAIN DEPTO TO DEPTO_1 TYPE INTEGER;

DDL - Alterao

ALTER TABLE
Adiciona ou elimina colunas a uma tabela. Adiciona ou elimina restries em uma tabela
Chave Primria Chave Estrangeira Chave Candidata Check

ALTER TABLE p/ Adicionar Colunas

Fornecedor
nome cnpj

descrio

ALTER TABLE FORNECEDOR ADD DESCRICAO CHAR(50);

ALTER TABLE p/ eliminar Colunas

Fornecedor
nome
cnpj

ALTER TABLE FORNECEDOR DROP DESCRICAO;

ALTER TABLE p/ adicionar Chave Primria (PK)


Fornecedor
nome cnpj

ALTER TABLE FORNECEDOR ADD CONSTRAINT PK_CNPJ PRIMARY KEY(CNPJ);

ALTER TABLE p/ eliminar Chave Primria (PK)


Fornecedor
nome
cnpj

ALTER TABLE FORNECEDOR DROP CONSTRAINT PK_CNPJ;

Exerccio
Escreva o comando para criar a tabela cidade conforme o modelo abaixo. Escreva o comando para alterar a tabela criada de maneira que a coluna Cdigo seja chave primria.

Cidade
Nome Codigo

Escreva o comando para apagar a restrio de chave primria da tabela Cidade.

ALTER TABLE p/ adicionar Chave Estrangeira (FK)


Fornecedor
nome cnpj

pertence

1
nome

Cidade
codigo

ALTER TABLE FORNECEDOR ADD CIDADE INT2 NOT NULL;

ALTER TABLE FORNECEDOR ADD CONSTRAINT FK_CODIGO FOREIGN KEY(CIDADE) REFERENCES CIDADE(CODIGO);

ALTER TABLE p/ eliminar Chave Estrangeira (FK)

Fornecedor Cidade Cnpj Codigo ESTRANG Nome Nome Cidade


ALTER TABLE FORNECEDOR DROP CONSTRAINT FK_CODIGO;

ALTER TABLE p/ adicionar Chave Candidata

Professor
cdigo nome rg endereo

ALTER TABLE PROFESSOR ADD CONSTRAINT CANDIDATA UNIQUE(RG);

ALTER TABLE p/ eliminar Chave Candidata

Professor
cdigo nome rg endereo

ALTER TABLE PROFESSOR DROP CONSTRAINT CANDIDATA;

ALTER TABLE p/ adicionar Restrio (CHECK)


Produto
volume cdigo descrio peso

RESTRIO: VOLUME < PESO

ALTER TABLE p/ eliminar Restrio (CHECK)

Produto
volume cdigo descrio peso

ALTER TABLE p/ alterar nomes de colunas


Fornecedor cnpj nome
ALTER TABLE FORNECEDOR ALTER COLUMN NOME TO RAZAO_SOCIAL;

ALTER TABLE p/ alterar tipos de dados


CREATE TABLE FORNECEDOR ( NOME CHAR(30), CNPJ INT NOT NULL ); ALTER TABLE FORNECEDOR ALTER COLUMN NOME TYPE VARCHAR(30);

TRUNCATE TABLE
Por vezes queremos remover todos os dados de uma tabela. Uma forma de o fazer atravs do comando DROP TABLE. Mas e se apenas quisermos remover todos os dados , mas no a prpria tabela? Para tal, podemos utilizar o comando TRUNCATE TABLE. A sintaxe para TRUNCATE TABLE :
TRUNCATE TABLE "nome_tabela"

Assim, se quisermos truncar a tabela denominada cliente", basta escrever:


TRUNCATE TABLE cliente

Você também pode gostar