Sie sind auf Seite 1von 31

CURSO: Cincia da Computao e Sistemas de Informao DISCIPLINA: Linguagem de Programao de Banco de Dados - Mdulo 1 SGBD Relacionais SQL DDL

L Data Definition Language Componentes de um Banco de Dados


Um Sistema Gerenciador de Banco de Dados SGBD possui os seguintes componentes: Gerenciador de Acesso ao Disco: O SGBD utiliza o Sistema Operacional para acessar os dados armazenados em disco, controlando o acesso concorrente s tabelas do Banco de Dados. O Gerenciador controla todas as pesquisas (queries) solicitadas pelos usurios no modo interativo, os acessos do compilador DML, os acessos feitos pelo Processador do Banco de Dados ao Dicionrio de Dados e tambm aos prprios dados. O Compilador DDL (Data Definition Language) processa as definies do esquema do Banco de Dados, acessando quando necessrio o Dicionrio de Dados do Banco de Dados. O Dicionrio de Dados contm o esquema do Banco de Dados, suas tabelas, ndices, forma de acesso e relacionamentos existentes. O Processador do Banco de Dados manipula requisies prpria Base de Dados em tempo de execuo. o responsvel pelas atualizaes e integridade da Base de Dados. O Processador de Pesquisas (queries) dos usurios, analisa as solicitaes, e se estas forem consistentes, aciona o Processador do Banco de Dados para acesso efetivo aos dados. As aplicaes fazem seus acessos ao pr-compilador DML da linguagem hospedeira, que os envia ao Compilador DML (Data Manipulation Language) onde so gerados os cdigos de acesso ao Banco de Dados.

Modelo Relacional
Nos SGBD que implementam o modelo Relacional os dados so organizados em tabelas do tipo linha x coluna. Cada coluna contm dados de um nico tipo, correspondendo a um tipo de informao armazenada no banco de dados. Cada linha corresponde a uma unidade de informao. Por exemplo, a tabela abaixo apresenta dados de pessoas. Cada coluna contm dados especficos de pessoas, como nome, endereo, e cada linha contm dados de uma pessoa.

Cada tabela possui as seguintes caractersticas: as posies da tabela so mono-valoradas; as linhas da tabela so distintas; possui uma Chave Primria, que uma coluna ou conjunto de colunas que identifica de forma nica cada linha e mnima nesta condio.

Linguagem SQL

A linguagem padro de acesso aos bancos de dados relacionais a SQL Structured Query Language, que uma linguagem declarativa, no procedural. A linguagem SQL foi definida no incio do anos 70 no laboratrio de pesquisa da IBM em San Jose. A SQL possui um ncleo comum, definido pelo American National Standard Institute (ANSI) que respeitado pelas diferentes implementaes. Cada SGBD implementa sua verso especfica da SQL, porm preservando o ncleo comum do SQL-ANSI. A SQL pode ser dividida nos seguintes mdulos: Data definition language (DDL)(Linguagem de definio de dados): ASQL fornece comandos para definio, modificao e remoo de tabelas, criao de ndices, definio de vises e definies de regras de integridade como chave primria e chave estrangeira. Inclui tambm comandos para especificao de direitos de acessos a tabelas e vises. Data manipulation language (DML)(Linguagem de manipulao de dados): ASQL DML inclui uma linguagem de consulta baseada na lgebra relacional e no clculo relacional de tuplas (linhas). Possui tambm comandos para inserir, remover e modificar linhas num banco de dados. Data control language (DCL)(Linguagem de Controle): A SQL inclui comandos para especificao de incio e fim de transaes, visando a integridade dos dados no momento em que ocorrem atualizaes. A linguagem SQL pode ser utilizada de duas maneiras diferentes:

Interativamente atravs de um programa que faz a interface com o banco de dados. Por exemplo, utilizando o SQLPlus do Oracle. Ele se encarrega de manter a conexo com o banco e o usurio entra com as instrues SQL, recebendo as respostas imediatamente; ou Embutida numa aplicao utilizando uma linguagem de programao comum, como Java, C#, C, Delphi, .Net, etc.

Nos SGBD que implementam o modelo Relacional os dados so organizados em tabelas do tipo linha x coluna. Cada coluna contm dados de um nico tipo, correspondendo a um tipo de informao armazenada no banco de dados. Cada linha corresponde a uma unidade de informao.

DDL Data Definition Language - Comandos de Criao de Objetos do Banco de Dados


Comando Create Este comando permite a criao de objetos do banco de dados (o prprio banco de dados, tabelas, vises, ndices). Criao de Banco de Dados Sintaxe: CREATE DATABASE < nome_db >; onde: nome_db - indica o nome do Banco de Dados a ser criado. Nome nico

Criao de Tabelas Sintaxe: CREATE TABLE < nome_tabela > ( nome_atributo1 < tipo > <valor default> <restrio>,

nome_atributo2 < tipo > <valor default> <restrio>, ...... nome_atributoN < tipo > <valor default> <restrio> ) ; onde: nome_table indica o nome da tabela a ser criada. nico no banco de dados Ate 64 caracteres ( letras, dgitos numricos, _, $, # ), comeando com letra

nome_atributo - indica o nome do campo a ser criado na tabela. nico dentro da Tabela. Pode ser repetido em outras tabelas Ate 64 caracteres (letras, dgitos numricos, _, $, #), comeando com letra tipo indica a definio do tipo de atributo (de acordo com o SGBD utilizado)

valor default opcional define o valor padro do campo no caso de no ser informado valor em uma incluso de linha na tabela restrio opcional - restrio a ser aplicada ao campo da tabela

Principais Tipos de Dados VARCHAR (n) - valor formado por caracteres ate o tamanho N. Campo de tamanho varivel. CHAR (n) - valor formado por caracteres ate o tamanho N. Campo de tamanho fixo. NUMBER - numrico em ponto flutuante (real) (outras formas: NUMERIC, FLOAT) NUMBER (p) numrico inteiro com ate P dgitos (outras formas: NUMERIC (p), INTEGER) NUMBER (p,d) numrico com P dgitos e D casas decimais (outra forma: NUMERIC(p,d)) DATE data - formato padro da instalao do SGBD TIME hora - formato padro da instalao do SGBD

Valor Default DEFAULT <expresso> <expresso> pode ser um valor fixo, uma expresso aritmtica, um valor de uma varivel do sistema Exemplos: data_inicio DATE DEFAULT sysdate Sysdate = varivel do sistema que contm a data corrente Pais_origem VARCHAR(15) DEFAULT BRASIL

Restries de valor nulo NULL coluna pode estar nula em alguma linha. Regra default, no precisa ser informada NOT NULL coluna no pode estar nula em nenhuma linha da tabela Restries de domnio Restries especficas de domnio de uma coluna podem ser implementadas atravs da restrio CHECK

CHECK - especifica condio a ser verificada em cada incluso ou alterao da tabela Exemplos: sexo CHAR (1) CHECK (sexo = M or sexo = F) data_termino DATE CHECK (data_termino > data_inicio)

Chave Primria PRIMARY KEY coluna ou conjunto de colunas a chave primaria da tabela ( nica e no nula). Pode ser uma restrio aplicada a uma coluna ou Tabela. Sintaxe da restrio aplicada Tabela: [ CONSTRAINT <nome_constraint> ] PRIMARY KEY (<lista de colunas que formam a chave primaria>) Exemplo: RA_Aluno CHAR (7) primary key

Outras Chaves Candidatas Coluna ou conjunto de colunas que formam uma chave candidata da tabela, que ser definida como nica. Pode ser restrio aplicada a uma coluna ou Tabela. UNIQUE valor em cada linha nico na tabela. Pode ser aplicado a um conjunto de colunas. Sintaxe da restrio aplicada Tabela: [ CONSTRAINT <nome_constraint> ] UNIQUE (<lista de colunas que formam a chave secundria>) Exemplo: CPF_Aluno NUMBER (11) not null unique Chave Estrangeira Coluna ou conjunto de colunas que tem como domnio os valores da chave primria de outra tabela (Tabela Me). FOREIGN KEY coluna chave estrangeira da tabela, que referencia a chave primaria da tabela Me num relacionamento 1:N (Me Filho). Pode ser uma restrio aplicada Tabela, incluindo uma ou mais colunas. Sintaxe: REFERENCES uma coluna <nome tabela Me > ( <chave primaria> ). aplicado diretamente a

Sintaxe da restrio aplicada Tabela: [ CONSTRAINT <nome_constraint> ] FOREIGN KEY (<lista de colunas que formam a chave estrangeira>) REFERENCES <nome tabela Me > ( <lista de colunas que formam a chave primaria da Tabela Me> )

Restries de Integridade Referencial


No modelo Relacional os relacionamentos e em decorrncia as restries de integridade referencial entre tabelas so estabelecidas por chaves estrangeiras.

Para ilustrar, consideremos as tabelas Tabela_Mae e Tabela_Filho, onde a Tabela_Filho possui uma chave estrangeira (foreign key) referenciando a chave primria da Tabela_Mae. Tabela_Mae ( Chave_Primaria char(5) primary key, .....) Tabela_Filho ( ....., Chave_Estrangeira char (5) references Tabela_Mae (Chave_Primaria), .... As restries de integridade padro so: Tabela_Filho: - Insert: o valor da chave estrangeira tem que existir na chave primria da Tabela_Mae - Update: se o valor da chave estrangeira for alterado, o novo valor tem que existir na chave primria da Tabela_Mae - Delete: no h restrio Tabela_Mae: - Insert: no h restrio - Update: se o valor da chave primria for alterado e ele est referenciado pela chave estrangeira em alguma linha da Tabela_Filho, a linha da Tabela_Mae no pode ser modificada - Delete: se o valor da chave primria est referenciado pela chave estrangeira em alguma linha da Tabela_Filho, a linha da Tabela_Mae no pode ser deletada

Criando uma tabela como copia de outra ( colunas e linhas) Sintaxe: CREATE TABLE < nome_tabela > AS <sub-select> - nova tabela criada com colunas e linhas selecionadas no sub-select restries existentes tais como chave primria, chave estrangeira, etc., no so copiadas

DDL Data Definition Language - Comandos de Alterao e de Excluso de Objetos do Banco de Dados
Comando Alter Este comando permite modificar a definio de tabelas no banco de dados. Adicionando novos campos ou novos constraints a uma tabela Sintaxe: ALTER TABLE < nome_tabela > ADD ( <nome_novo_atributo1> < tipo > <valor default> <restrio>, <nome_novo_atributo2> < tipo > <valor default> <restrio>, ...... <nome_novo_atributoN> < tipo > <valor default> <restrio>, [ CONSTRAINT <nome_nova_restricao> ] <tipo restrio> <especificao da restrio> ) ; onde: - novos campos sero includos ao final da tabela - restries em novos campos tero que ser respeitadas em todas as linhas j gravadas da tabela. Por exemplo, no pode ser includa uma coluna com restrio NOT NULL em uma tabela que j tenha linhas gravadas, exceto de houver um valor default. - novas restries tero que ser respeitadas em todas as linhas j gravadas da tabela.

- Restries que podem ser adicionadas: PRIMARY KEY FOREIGN KEY UNIQUE CHECK

Alterando atributos de campos de uma tabela Sintaxe: ALTER TABLE < nome_tabela > MODIFY ( <nome_atributo1> < tipo > <valor default> <restrio>, <nome_atributo2> < tipo > <valor default> <restrio>, ...... <nome_atributoN> < tipo > <valor default> <restrio>) Mudanas possveis: - modificar o tipo do campo, desde que no tenha nenhum valor gravado - modificar de CHAR para VARCHAR ou vice-versa, mesmo com valores gravados- aumentar o tamanho do campo - aumentar as casas decimais, de forma compatvel com os valores gravados - diminuir o tamanho do campo. Se houver valor gravado no campo, o valor no poder ser truncado- modificar o valor default de um campo, valido para as novas incluses - definir um campo que pode estar nulo como NOT NULL, desde que a tabela no tenha nenhuma linha gravada ou todas as linhas tenham valor no campo - definir um campo que esta com opo NOT NULL como NULL, ou seja, poder estar nulo

Eliminando um campo de uma tabela Sintaxe: ALTER TABLE < nome_tabela > DROP ( <nome do campo> ) - coluna eliminada da tabela, mesmo tendo valores - coluna chave primaria tambm pode ser eliminada, desde que no seja referenciada por nenhuma chave estrangeira Eliminando restries de uma tabela Eliminando Chave Primaria Sintaxe: ALTER TABLE < nome_tabela > DROP PRIMARY KEY Eliminando condio de nico de um campo Sintaxe: ALTER TABLE < nome_tabela > DROP UNIQUE ( <nome_atributo> ) Eliminando outras restries, inclusive chave estrangeira Sintaxe: ALTER TABLE < nome_tabela > DROP CONSTRAINT <nome_da_restricao> (da a importncia de atribuir nomes aos constraints)

Comando Drop Este comando permite eliminar completamente um objeto criado no Banco de Dados (definio e dados). Eliminando uma Tabela Sintaxe: DROP TABLE < nome_tabela >;

Comando Rename Este comando permite renomear um objeto criado no Banco de Dados. Sintaxe: RENAME < nome_tabela > TO <novo_nome_tabela>;

Comando Truncate Este comando permite eliminar todos os dados da uma tabela, mantendo integralmente a sua definio e liberando o espao no Banco de Dados que era ocupado pelos dados da tabela Sintaxe: TRUNCATE TABLE < nome_tabela >; No pode ser aplicado a tabela que seja referenciada por uma chave estrangeira. Bibliografia Cap 4, HEUSER, C. A. Projeto de bancos de dados. Porto Alegre: Sagra-Luzzatto, 2000. Cap 1, 2 e 3 SILBERSCHATZ, A.; KORTH, H.; SUDARSHAN, S. Sistemas de bancos de dados. So Paulo: Makron Books, 1999.

- As restries de integidade de dados tem estar vlidas entre os valores j existentes nas tabelas:

Se uma coluna de uma tabela possui valores nulos ou repetidos no pode ser definida como Primary Key Se uma coluna possui valores repetidos no pode ser definida como Unique Se uma coluna possui valores no existentes na chave primria de uma tabela, ela no pode ser definida como foreign key referenciando tal tabela Se uma coluna possui valores que no atendem uma condio a ser imposta pela clusula Check, a condio Check no poder ser adicionada tabela

CURSO: Cincia da Computao e Sistemas de Informao DISCIPLINA: Linguagem de Programao de Banco de Dados - Mdulo 2

SQL DML Data Manipulation Language - Comandos de Consulta ao Banco de Dados

Comando Select Este comando permite consultar os dados no banco de dados.

A estrutura bsica da instruo de consulta select consiste em trs clusulas: select: usada para listar os atributos desejados no resultado da consulta, ou seja, as colunas requisitadas como respostas.Esta lista, alm de nomes de colunas, pode conter: um asterisco (*), indicando que todas as colunas devem ser retornadas; expresses; constantes; funes;

qualquer combinao destes, conectadas por operadores aritmticos e parnteses. from: Lista as tabelas a serem examinadas na avaliao da expresso. As colunas referenciadas na clusula select ou na clusula where, abaixo, devem constar nas tabelas listadas nesta clusula. where: Consiste de uma condio de procura envolvendo atributos das tabelas que aparecem na clusula from. o lugar onde se restringe ou seleciona quais linhas devero ser retornadas. A clusula where pode ser omitida; neste caso, o predicado tido como sempre verdadeiro e todas as linhas sero retornadas. A lista de colunas na clusula select (A1, .., An) pode ser substituda por um asterisco (*) para selecionar todos os atributos de todas as tabelas presentes na clusula from. Esquema de banco de dados para exemplos: Cargo (Codigo, Nome) Departamento (Codigo, Nome) Empregado (CodEmpregado, Nome, CodCargo, CodDepto, Salario, Comissao) onde os nomes sublinhados so as chaves primrias da tabela e CodCargo e CodDepto so chaves estrangeiras. Considerando uma simples consulta ao banco de dados exemplo: Quais os cdigos e nomes de todos os funcionrios que trabalham no departamento CONT?; a instruo correspondente ser:

select CodEmpregado, Nome from Empregado where CodCargo = 'CONT'

Eliminao de linhas duplicadas O resultado de um select pode conter linhas duplicadas, que podem ser eliminadas utilizando a palavra chavedistinct junto ao select. Na consulta: Quais os cdigos dos cargos dos empregados do departamento CONT?, podem resultar vrios cdigos repetidos: select CodCargo from Empregado where CodCargo = 'CONT'

Para eliminar linhas repetidas e apresentar somente uma vez cada cdigo de cargo:
select distinct CodCargo from Empregado where CodCargo = 'CONT' Constantes e Expresses Como citado anteriormente, a lista da clusula selecttambm pode conter constantes e expresses. select CodEmpregado, Nome, Salario + Comissao as Remuneracao from Empregado

Resulta 3 colunas: Cdigo, Nome e Remuneracao, esta calculada como a soma de salario com comisso. Uma expresso pode conter uma combinao de parnteses e das quatro operaes aritmticas bsicas: adio (+) subtrao (-) multiplicao (*) diviso (/)

No clculo de uma expresso, se um dos operandos estiver nulo o resultado da expresso ser nulo. Condies de Procura Uma condio de procura na clusula where qualifica o escopo de um consulta, pois especifica as condies particulares que devem ser encontradas. A clusula wherepode ser usada nas instrues select, delete, update. Cada condio de procura contm um ou mais predicados conectados por operadores lgicos or, and, e not. Os predicados relacionais so da forma <expresso> <operador> <expresso>. Operadores que podem ser utilizados: Operador = != <> > !> ) < Significado Igual Diferente Diferente Maior No maior (menor ou igual Menor

!< ) >= <=

No menor (maior ou igual Maior ou igual Menor ou igual

Exemplo: Select * from Empregado where (CodDepto = 'CONT' and CodCargo = 'ANALISTA') or CodCargo = 'GERENTE' A seguinte ordem de precedncia utilizada ao avaliar uma expresso numa condio: 1. Primeiro so analisados as expresses dentro de parnteses; 2. O operador not analisado antes doand; 3. And antes do or; 4. Operadores do mesmo nvel de precedncia so analisados da esquerda para a direita. Outros tipos de predicados: BETWEEN NULL LIKE

Predicado Between O predicado between compara um valor com uma faixa de valores. Os limites da faixa esto inclusos. Ele possui a seguinte sintaxe:
| between <expresso> and <expresso> <expresso> | not

O exemplo seguinte mostra uma instruo usando between: select * Empregado salario between 1000 and

from where 3000 equivalente a

from where <= 3000

select * Empregado salario >= 1000 and salario

Predicado NULL O predicado NULL testa valores nulos. Verifica, por exemplo, se colunas no contm nenhum valor armazenado. Ele possui a seguinte sintaxe: <nome da coluna> is | not | NULL select * from where Empregados para os quais a comissao no foi informada. Empregado comissao is null

Predicado LIKE O predicado LIKE procura por determinado padro dentro do contedo da coluna. O predicado LIKE s pode ser usado com colunas do tipo CHAR ou VARCHAR. A sintaxe para o predicado seguinte: <nome da coluna> | not | like < padro de pesquisa > O padro de pesquisa trata-se de uma string a ser comparada com a coluna especificada. Este padro pode ser formatado com a utilizao de coringas, permitindo a procura de substrings. Os dois caracteres coringas existentes so o smbolo porcentagem % e o undescore _. % = qualquer quantidade de caracteres, inclusive zero _ = um caracter qualquer. select from where Empregados com nome contendo Silva: Nomes que seriam selecionados: Jose Silva Silvano de Oliveira Antonio Silva Nunes * Empregado Nome like '%Silva%'

Exibindo Resultados Ordenados


SQL oferece controle sobre a ordem na qual as linhas do resultado de uma consulta esto dispostas. A clusulaorder by ocasiona o aparecimento das linhas de resultado de uma consulta em uma ordem determinada. Por exemplo para listar em ordem alfabtica todos os funcionrios do setor 100, escrevemos:

select , COD_FUNCIONARIO, COD_SETOR from IONARIO where SETOR = 100 order by

NOME FUNC COD_ NOME

Como padro, SQL lista itens na ordem ascendente. Para especificar a ordem de classificao, podemos especificardesc para descendente ou asc para ascendente. Alm do mais, a ordenao pode ser feita por mltiplos atributos, bastando, para isto list-los na clusula order by. Suponha que fosse necessrio gerar uma lista contendo as requisies realizadas em ordem descendente, ou seja, primeiro pelos mais recentes. Para as requisies realizadas no mesmo momento, ordenamos em ordem ascendente pelo nmero da requisio. Neste caso o comando SQL seria:

select from ISICAO order by data desc, COD_REQUISICAO asc

* REQU

Para atender a clusula order by, SQL precisa executar uma classificao. Uma vez que uma classificao de um grande nmero de linhas pode ser custoso, deve-se utiliz-la apenas quando necessrio.

Funes de agregao

SQL oferece a possibilidade de computar funes em grupos de linhas usando a clusula group by. Os atributos, dados na clusula group by, so usados para formar grupos. Linhas com o mesmo valor em todos os atributos na clusula group by so colocados em um grupo. SQL inclui funes de agregao para computar:

mdia: avg mnimo: min mximo: max total: sum contar: count
As operaes, como a avg, so chamadas funes de agregao, porque operam em agregaes de linhas. O resultado de uma funo de agregao um valor nico. Para ilustrar, considere a consulta Selecione o salrio mdio em cada setor da empresa. A instruo ficaria assim:

select SETOR, (SALARIO) from IONARIO group by COD_SETOR

COD_ avg FUNC

Funes de Agregao e seus resultados


Deve-se notar que as funes SUM e AVG somente aceitam expresses numricas como argumentos, uma vez que elas calculam a soma e a mdia de valores, respectivamente. As demais (COUNT, MAX e MIN) aceitam qualquer tipo de dado na expresso como parmetro. A principal particularidade a ser ressaltada com relao funo COUNT. COUNT(expresso) e COUNT(*) so sutilmente diferentes, uma vez que COUNT(expresso) no conta as linhas nulas e COUNT(*) realiza a contagem de todas as linhas, sejam elas nulas ou no. Outra questo a ser ressaltada com relao utilizao da clusula group by que a lista de valores da clusula selectsomente aceita funes de agregao, constantes e expresses combinando-as, alm dos campos listados na clusula group by. Tal restrio evidente, uma vez que a incluso de outros campos na lista do select seria totalmente sem sentido e impossvel de ser retornada. Porm, podemos tambm usar as funes de agregao sem a clusula group by. Neste caso a tabela inteira tratada como um nico grupo. Uma consulta, para contar o nmero de funcionrios da sua empresa, pode ser expressa da seguinte maneira:

) O A Clusula HAVING

select

count (*

from FUNCIONARI

Em certas situaes, necessrio definir uma condio que se aplique a grupos, ao invs de linhas. Imagine se estivssemos interessados em saber o salrio mdio apenas daqueles setores, cujo salrio mdio seja maior que R$ 1100,00. Esta condio no se aplica a linhas simples, mas sim a cada grupo construdo com a clusula group by. Deste modo, no podemos utilizar funes de agregao na clusula where e para expressar tal condio utilizamos a clusula having. Os predicados na

clusula having so aplicados depois da formao dos grupos, para que funes de agregao possam ser usadas. Expressamos esta consulta SQL assim:

select SETOR, (SALARIO) from IONARIO by COD_SETOR group having SALARIO) > 1100

COD_ avg FUNC

avg (

Se uma clusula where e uma clusula having aparecerem numa mesma consulta, o predicado na clusula where aplicado primeiro. As linhas que satisfazem a condio da clusula where so ento agrupadas pela clusula group by. Em seguida, o predicado da clusula having aplicado a cada grupo. Ilustrando a utilizao de where e having na mesma instruo, faremos a seguinte consulta: cdigo do produto e quantidade total requisitada, para os produtos que possuem quantidade total requisitada maior que 10.

select PRODUTO, (QTDE ) from _REQUISICAO group by COD_PRODUTO having QTDE) > 100

COD_ sum ITENS

sum (

Bibliografia

Cap 3 SILBERSCHATZ, A.; KORTH, H.; SUDARSHAN, S.Sistemas de bancos de dados. So Paulo: Makron Books, 1999.

CURSO: Cincia da Computao e Sistemas de Informao

DISCIPLINA: Linguagem de Programao de Banco de Dados - Mdulo 3

SQL DML Comandos Avanados de Consulta ao Banco de Dados - Vises

Comando Select Este comando permite consultar os dados no banco de dados.

A estrutura bsica da instruo de consulta selectconsiste em trs clusulas: select: usada para listar os atributos desejados no resultado da consulta, ou seja, as

colunas requisitadas como respostas. Esta lista, alm de nomes de colunas, pode conter:
um asterisco (*), indicando que todas as colunas devem ser retornadas; expresses; constantes; funes; qualquer combinao destes, conectadas por operadores aritmticos e parnteses; Um select que resulte um valor nico, que pode ter critrio de seleo baseado

em valor de linha selecionada.


from: Lista as tabelas a serem examinadas na avaliao da expresso. As colunas

referenciadas na clusula select ou na clusula where, abaixo, devem constar nas tabelas listadas nesta clusula.
where: Consiste de uma condio de procura envolvendo atributos das tabelas que

aparecem na clusula from. o lugar onde se restringe ou seleciona quais linhas devero ser retornadas. Pode conter um select que resulte em valores que podem ser utilizados no critrio de seleo.

Uso de sub-queries
Um comando select pode conter outros comandos select, conforme descrito acima.

Sub-select na projeo de colunas selecionadas


Na lista de colunas selecionadas pode-se utilizar um select, que ser executado uma vez para cada linha resultante do select principal.

Select CodEmpregado, Nome, (select Nome from Departamento where Codigo = Depto_Empregado) as Nome_Depto from Empregado

Resulta 3 colunas: Cdigo e Nome de cada empregado e Nome do Departamento onde trabalha cada empregado.

Sub-select na clusula where


O resultado de um select, desde que compatvel com o contexto, pode ser utilizado na condio do where de um select.

Select CodEmpregado, Nome from Empregado where Salario > (Select avg(salario) from Empregado)

Resulta os empregados com salario maior do que a media dos salrios de todos os empregados. Outros tipos de predicados que permitem o uso de sub-select: EXISTS IN

Predicado Exists
utilizado para testar se o conjunto de linhas resultantes de uma consulta vazio. Sintaxe:

| not | exists < subselect >

select * from Cargo

where exists ( select * from Empregado where Empregado.CodCargo = Cargo.Codigo and salario > 1000 )

O sub-select resulta verdadeiro (existe) ou falso (no existe). Para cada valor de Cargo.Codigo que resulta verdadeiro, os dados do cargo retornam no resultado do select.

Predicado IN
O predicado in compara um valor com um conjunto de valores. Este conjunto de valores pode ser uma lista ou o resultado de um subselect.

<expresso> | not | in < subselect >


ou

<expresso> | not | in < lista de valores >

select * from Empregado

where CodEmpregado in ( 100, 101, 102, 103 )

Empregados com um dos 4 cdigos especificados.

select * from Departamento

where Codigo in ( select CodDepto from Empregado where salario > 1000 )

Departamentos que possuem empregados com salario > 1000.

Juno de tabelas
Tabelas relacionadas por chave estrangeira podem ser acessadas juntas (joined) em um mesmo select. Todas as colunas de cada uma das tabelas podem ser apresentadas no Select e podem ser utilizadas nas condies do where.

No where precisa estar a seguinte igualdade, para cada duas tabelas: tabela1.chave_primaria = tabela2.chave_estrangeira select Empregado.Nome, Cargo.Nome, Departamento.Nome from Empregado, Cargo, Departamento

where Cargo.Codigo = Empregado.CodCargo and Departamento.Codigo = Empregado.Cod.Depto

Todos os Empregados com os dados (codigo e nome) do seu cargo e do seu departamento.

Todas os tipos de predicados podem ser acrescentados a clusula where.

select Empregado.Nome, Cargo.Nome, Departamento.Nome from Empregado, Cargo, Departamento

where Cargo.Codigo = Empregado.CodCargo and Departamento.Codigo = Empregado.Cod.Depto and Empregado.Nome like '%Silva%' and Departamento.Codigo in ('Contab', 'RH', 'Compras')

Todos os Empregados com Silva no nome e cdigo do departamento na lista especificada.

Renomeao das Tabelas no Select


No select os nomes da tabelas podem ser substitudos por apelidos select E.Nome, C.Nome, D.Nome from Empregado E, Cargo C, Departamento D

where C.Codigo = E.CodCargo and D.Codigo = E.Cod.Depto

Inner join
A juno de tabelas baseada na igualdade chave_primaria = chave_estrangeira denominada inner join (juno interna) e pode ser escrita da forma select E.Nome, C.Nome, D.Nome from Empregado E inner join Cargo C onC.Codigo = E.CodCargo inner join Departamento D on D.Codigo = E.CodDepto A clusula where somente ser utilizada para filtrar linhas resultantes. A igualdade entre chave primria e chave estrangeira est estabelecida na clusula inner join - on. O resultado de um inner join sero as linhas que atendam a condio de igualdade entre chave_primria e chave_estrangeira. No exemplo, Empregados que tenham CodCargo ou CodDepto nulos no aparecero no resultado.

Outer join
Para que linhas de uma tabela que no se relacionam com nenhuma linha das demais tabelas participantes da juno apaream no resultado, utiliza-se o outer join (juno externa). select Empregado.Nome, Cargo.Nome, Departamento.Nome from Empregado, Cargo, Departamento

where Cargo.Codigo = Empregado.CodCargo(+) and Departamento.Codigo = Empregado.CodDepto (+)


O (+) indica que nome dos empregados que na Empregado tenham CodCargo e/ou CodDepto nulos aparecero na lista resultante, sem nome de cargo ou nome de departamento. Esse mesmo select pode ser escrito da forma: select E.Nome, C.Nome, D.Nome from Empregado E right outer join Cargo C onC.Codigo = E.CodCargo right outer join Departamento D on D.Codigo = E.CodDepto

Operaes de Conjuntos
A lgebra relacional, na qual a SQL se baseia, inclui as operaes union, intersect e minus, para junes de conjuntos. Entretanto, apenas a instruo union foi includa no

padro ANSI da linguagem SQL. Isto no chega a ser um problema, pois a instruo intersect pode ser realizada com a construo in, e a minus com anot in. Para demonstrarmos a utilidade da instruo union, vamos considerar que a seguinte consulta seja requisitada: fornea todos os cdigos dos funcionrios que provocaram qualquer movimentao no estoque, ou seja, uma requisio ou uma devoluo. Para recuperarmos os funcionrios que requisitaram produtos, utilizaramos a seguinte instruo:

select COD_FUNCIONARIO from REQUISICAO


Para aqueles que devolveram algum produto:

select COD_FUNCIONARIO from DEVOLUCAO


Agora para fazermos a unio destes dois conjuntos de valores, utilizamos o operador union. Assim a instruo resultante :

select COD_FUNCIONARIO from REQUISICAO union select COD_FUNCIONARIO from DEVOLUCAO


Se a consulta fosse os cdigos dos funcionrios que participaram de uma requisio e de uma devoluo, teramos:

select COD_FUNCIONARIO from REQUISICAO intersect select COD_FUNCIONARIO from DEVOLUCAO


O mesmo resultado obteramos com a seguinte sentena:

select COD_FUNCIONARIO from REQUISICAO where COD_FUNCIONARIO in (selectCOD_FUNCIONARIO from DEVOLUCAO)


Se a consulta fosse para obter os cdigos dos funcionrios que participaram de alguma requisio, mas no participaram de nenhuma devoluo, teramos:

select COD_FUNCIONARIO from REQUISICAO minus select COD_FUNCIONARIO from DEVOLUCAO


O mesmo resultado obteramos com a seguinte sentena:

select COD_FUNCIONARIO from REQUISICAO where COD_FUNCIONARIO not in (selectCOD_FUNCIONARIO from DEVOLUCAO)
Portanto pudemos comprovar que tanto a operao intersect como a operao minuspodem ser realizadas em construes anlogas utilizando in e not in, respectivamente. importante ressaltar que o operador union trata as tabelas como conjuntos, e pela regra de unio de conjuntos, valores duplicados so descartados. Assim, se um funcionrio requisitou e devolveu algum produto, ele aparecer apenas uma vez na lista resultante. Caso seja necessrio manter as duplicaes, deve-se utilizar o operador union all ao invs de union. O unio de selects pode ser particularmente til na classificao de informao: Select Cod_Empregado, Nome, 'Precisa Muito Aumento' as Situacao from Empregado where salario < 1000 union Select Cod_Empregado, Nome, 'Precisa Pouco Aumento' as Situacao from Empregado where salario between 1000 and 3000 union Select Cod_Empregado, Nome, 'No Precisa Aumento' as Situacao from Empregado where salario > 3000;

Vises

Uma viso (VIEW) consiste basicamente de uma tabela lgica derivada de outras tabelas. A base para a construo de uma view o comando SELECT.

A view no existe fisicamente como tabela, porm pode ser acessada como se fosse uma tabela real.

Sintaxe:

CREATE VIEW <nome da viso> AS <sub-select>

O sub-select pode acessar mais de uma tabela e, com exceo de ORDER BY, todas as estruturas e clusulas de um select podem ser utilizadas.

Devemos observar que:

1- Uma viso definida sobre uma nica tabela somente ser atualizvel se os atributos da tal viso contiverem a chave primria de tal tabela. 2- Vises que juntam (join) vrias tabelas no so passveis de atualizaes. 3- Vises que se utilizam de funes de agrupamentos, tambm no podero ser atualizadas.

Restries sobre uma view:

View somente para consulta:

CREATE VIEW <nome da viso> AS <sub-select> WITH READ ONLY

Limitao de inseres ou modificaes: Aplicvel a views sobre uma nica tabela, que podem ter linhas includas ou alteradas, garantindo que novas linhas ou linhas alteradas continuem dentro das condies da view

CREATE VIEW <nome da viso> AS <sub-select> WITH CHECK OPTION

Exemplos: Tabelas base:

Departamento ( Codigo number(2) primary key, Nome char(15), Gerente number(5), Divisao char(10), Local char(15)); Empregado ( ID NUMBER(5), Nome varchar2(20), Depto number(2), Cargo char(6), Tempo_emp number(2), Salario number(8,2), Comissao number (7,2));

1. Viso de Empregado, mostrando seu nome e nome do departamento

CREATE VIEW visao_ex01 AS SELECT E.nome Nome_Emp, D.Nome Nome_Depto FROM Empregado E, Departamento D WHERE E.depto = D.codigo

Uso da view: Listar os nomes dos empregados que trabalham no departamento com nome COMPRAS

SELECT Nome_Emp FROM VISAO_EX01 WHERE nome_depto = compras 2. Viso de Empregado, somente para consultas, mostrando todos os seus dados menos o salrio e comisso CREATE VIEW visao_ex02 AS SELECT ID, Nome, Depto, Cargo, Tempo_emp FROM Empregado WITH READ ONLY

3. Viso de Empregado, mostrando todos os seus dados, dos empregados com salrio abaixo de 15000 CREATE VIEW visao_ex03 AS SELECT * FROM Empregado WHERE salario < 15000 WITH CHECK OPTION

A incluso de uma nova linha na tabela EMPREGADO atravs da incluso na view VISAO_EX03 possvel, desde que a condio SALARIO < 15000 seja respeitada.

A excluso de linhas na tabela EMPREGADO pode ser feita atravs da excluso na view VISAO_EX03.

A alterao de linhas na tabela EMPREGADO atravs da alterao de linhas da view VISAO_EX03 possvel, desde que a condio SALARIO < 15000 seja respeitada.

Alterao de uma view:

Para alterar a definio de uma View ela precisa ser recriada:

CREATE OR REPLACE VIEW <nome da viso existente> AS <sub-select> [WITH READ ONLY] [ WITH CHECK OPTION]

Eliminao de uma view:

DROP VIEW <nome da viso existente>

Bibliografia

Cap 3,4 SILBERSCHATZ, A.; KORTH, H.; SUDARSHAN, S. Sistemas de bancos de dados. So Paulo: Makron Books, 1999. Cap 6 GUIMARES, C. A., Fundamentos de Bancos de Dados Modelagem, Projeto e linguagem SQL, Campinas, Editora da Unicamp, 2008

CURSO: Cincia da Computao e Sistemas de Informao DISCIPLINA: Linguagem de Programao de Banco de Dados - Mdulo 4 DML Data Manipulation Language - Comandos de Modificao de Dados Modificao de dados em tabelas
As possveis modificaes de dados em tabelas so: - incluso de novas linhas - excluso de linhas existentes - modificao de dados em linhas existentes Incluso de uma nova linha na tabela Sintaxe: INSERT INTO <nome da tabela> [ ( <lista de campos da tabela que recebero valor> ) ] VALUES ( <lista de valores a serem gravados> ) - um comando INSERT insere uma linha em uma tabela - se a lista de campos que recebero valores no for informada, assume que so todos os campos da tabela, na ordem em que esto definidos - a lista de valores tem que coincidir com a lista de campos, um valor para cada campo - um campo no informado na lista de campos no recebera valor, ou seja, ficar nulo - para deixar nulo um campo que esta na lista de campos, colocar como valor para o mesmo a palavra reservada NULL - todas as restries de campos (tipo, tamanho, NULL ou NOT NULL) tem que ser respeitadas - todas as restries da tabela (primary key, unique, check, foreign key) tem que ser respeitadas

Incluso de novas linhas baseadas em dados existentes no Banco de Dados Sintaxe: INSERT INTO <nome da tabela> [ ( <lista de campos da tabela que recebero valor> ) ] <sub-select> - um comando insere tantas linhas quanto as que resultaro do sub-select - o sub-select precisa conter lista de campos selecionados compatvel com a lista de campos que recebero valor - cada linha resultante do sub-select se torna uma lista de valores a serem gravados em uma linha da tabela - se ocorrer conflito com alguma restrio em alguma linha, nenhuma linha ser includa

Alterao de dados de uma tabela Os valores em uma tabela pode ser modificados. Sintaxe: UPDATE <nome da tabela> SET <campo> = <valor ou expresso> [<campo> = <valor ou expresso> . . . ] [ WHERE <condio para seleo das linhas a serem modificadas> ) ] - um comando UPDATE altera dados de somente uma tabela

- se a condio WHERE no for informada, todas as linhas da tabela sero modificadas - campos no referenciados na clausula SET no sofrero alterao - linhas no selecionadas pela clausula WHERE no sero modificadas - um campo no informado na lista de campos na clausula SET no sofrer mudana - para tornar nulo um campo deve ser informado a palavra reservada NULL em lugar de valor - todas as restries de campos (tipo, tamanho, NULL ou NOT NULL) tem que ser respeitadas - todas as restries da tabela (primary key, unique, check, foreign key) tem que ser respeitadas - se ocorrer quebra de restrio ao gravar uma linha, nenhuma linha ser alterada - a expresso que estabelece o valor para o campo pode conter o prprio campo (valor original). Por ex.: salario = salario * 1.2 - a expresso que estabelece o valor para o campo pode conter sub-select Por ex: salario = (select min(salario) from empregado where cargo = GER)

Excluso de linhas de uma tabela A excluso de linhas de uma tabela pode ser feita utilizando o comando delete. Sintaxe: DELETE FROM <nome da tabela> [ WHERE <condio para seleo das linhas a serem excludas> ) ] - um comando DELETE elimina linhas de somente uma tabela - se a condio WHERE no for informada, todas as linhas da tabela sero eliminadas - linhas no selecionadas pela clausula WHERE no sero modificadas - todas as restries da tabela (primary key, unique, check, foreign key) tem que ser respeitadas - se ocorrer quebra de restrio ao excluir uma linha, nenhuma linha ser excluda

Bibliografia Cap 3 SILBERSCHATZ, A.; KORTH, H.; SUDARSHAN, S. Sistemas de bancos de dados. So Paulo: Makron Books, 1999.

CURSO: Cincia da Computao e Sistemas de Informao DISCIPLINA: Linguagem de Programao de Banco de Dados - Mdulo 5 Transao Lgica de Atualizao
Os resultados de comandos de atualizao de dados (insert, update, delete) no so imediatamente confirmados no banco de dados. Eles ficam pendentes at que ocorra uma confirmao ou um cancelamento. Um conjunto de comandos de atualizao que sejam tratados como um bloco, confirmados ou cancelados em conjunto, constitui uma Transao Lgica. A transao tem incio com o primeiro comando de atualizao e encerrada com um comando de confirmao ou cancelamento. Enquanto um conjunto de atualizaes feitas por um usurio estiver pendente, somente o usurio que as realizou ter acesso aos dados modificados. Outros usurio tero acesso somente para leitura (select) e vero os dados originais, no modificados. Outros usurios que tentarem atualizar esses mesmos dados entraro em estado de espera, aguardando a confirmao ou o cancelamento das atualizaes pelo primeiro usurio.

Estado de Estabilidade: O Banco de Dados est em um Estado de Estabilidade se no existe nenhum comando de atualizao de dados em andamento ou pendente de confirmao. Em um Estado de Estabilidade todos os dados do banco de dados esto disponveis da mesma forma para todos os usurios.

Confirmao: Sintaxe: COMMIT - Encerra uma Transao Lgica de Atualizao, efetivando no banco de dados todas as atualizaes do usurio que esto pendentes, deixando o banco de dados em um estado de estabilidade. Cancelamento: Sintaxe: ROLLBACK - Encerra uma Transao Lgica de Atualizao, desfazendo todas as atualizaes pendentes e voltando o banco de dados ao estado de estabilidade em que estava antes do incio dos comandos de atualizao. Caractersticas de uma Transao Lgica de Atualizao Atomicidade O conjunto de comandos de atualizao tratado como um nico comando. Se a transao terminar com confirmao (commit) todos os comandos da transao so confirmados simultaneamente. Se a transao terminar com cancelamento ou no terminar por ocorrncia de problema no gerenciador de banco de dados, todos os comandos da transao so cancelados simultaneamente. Consistncia Cada transao se inicia com o banco de dados em um estado de estabilidade ou consistncia e se encerra no mesmo estado.

Isolamento As transaes de diferentes usurios so isoladas entre si. Cada usurio pode executar uma transao como se fosse o nico usurio do banco de dados, no precisando se preocupar com atualizaes concorrentes feitas por outros usurios. Antes que ocorra o trmino da transao as mudanas feitas nos dados somente so reconhecidas pelo prprio usurio. Outros usurios que consultem dados alterados mas ainda no confirmados, tero acesso aos valores originais dos dados. Outros usurios que tentem alterar dados que foram alterados, includos ou excludos por uma transao, entraro em estado de espera at que a transao seja encerrada. Durabilidade Uma vez que uma transao seja encerrada com confirmao (commit), seus efeitos tm garantia de serem refletidos no banco independente do que possa ocorrer.

Exemplos: Tabelas base:


DEPARTAMENTO ( CODIGO NUMBER(2) PRIMARY KEY, NOME CHAR(15), GERENTE NUMBER(5), DIVISAO CHAR(10), LOCAL CHAR(15)); EMPREGADO ( ID NUMBER(5), NOME VARCHAR2(20), DEPTO NUMBER(2), CARGO CHAR(6), TEMPO_EMP NUMBER(2), SALARIO NUMBER(8,2), COMISSAO NUMBER (7,2));

Transao que aumenta em 5% os salrios dos empregados que tem cargo GER e em 10% os demais empregados
UPDATE EMPREGADO SET SALARIO = SALARIO * 1.05 WHERE CARGO = GER; UPDATE EMPREGADO SET SALARIO = SALARIO * 1.10 WHERE CARGO <> GER; COMMIT;

Transao que cria um novo departamento de Relaes Internacionais, cdigo 61, Diviso CENTRO, em So Paulo, com gerente o empregado de nome ALMEIDA. O cargo do ALMEIDA tem que ser alterado para GE, o seu salrio para o menor salrio de gerente e no deve ter comisso:
INSERT INTO DEPARTAMENTO VALUES (61, RELACOES INTERNACIONAIS, (SELECT ID FROM EMPREGADO WHERE NOME = ALMEIDA), CENTRO, SAO PAULO) UPDATE EMPREGADO SET CARGO = GER, SALARIO = (SELECT MIN(SALARIO) FROM EMPREGADO WHERE CARGO = GER),

COMISSAO = NULL WHERE NOME = ALMEIDA; COMMIT;

Bibliografia Cap SILBERSCHATZ, A.; KORTH, H.; SUDARSHAN, S. Sistemas de bancos de dados. So Paulo: Makron Books, 1999.

Restries de Integridade Referencial

No modelo Relacional os relacionamentos e em decorrncia as restries de integridade referencial entre tabelas so estabelecidas por chaves estrangeiras. Para ilustrar, consideremos as tabelas Tabela_Mae e Tabela_Filho, onde a Tabela_Filho possui uma chave estrangeira (foreign key) referenciando a chave primria da Tabela_Mae. Tabela_Mae ( Chave_Primaria char(5) primary key, .....) Tabela_Filho ( ....., Chave_Estrangeira char (5) references Tabela_Mae (Chave_Primaria), .... As restries de integridade padro so: Tabela_Filho: - Insert: o valor da chave estrangeira tem que existir na chave primria da Tabela_Mae - Update: se o valor da chave estrangeira for alterado, o novo valor tem que existir na chave primria da Tabela_Mae - Delete: no h restrio Tabela_Mae: - Insert: no h restrio - Update: se o valor da chave primria for alterado e ele est referenciado pela chave estrangeira em alguma linha da Tabela_Filho, a linha da Tabela_Mae no pode ser modificada - Delete: se o valor da chave primria est referenciado pela chave estrangeira em alguma linha da Tabela_Filho, a linha da Tabela_Mae no pode ser deletada

Outras formas de definir Chave Estrangeiras On Delete Cascade Tabela_Filho ( ...., Chave_Estrangeira char(5) references Tabela_Mae (Chave_Primaria) ON DELETE CASCADE, ....) Ao deletar uma linha da Tabela_Mae, todas as linhas da Tabela_Filho que referenciam atravs da Chave_Estrangeira o valor da Chave_Primaria deletada, tambm sero deletadas.

On Delete Set Default Tabela_Filho ( ...., Chave_Estrangeira char(5) references Tabela_Mae (Chave_Primaria) ON DELETE SET DEFAULT, ....) Ao deletar uma linha da Tabela_Mae, todas as linhas da Tabela_Filho que referenciam atravs da Chave_Estrangeira o valor da Chave_Primaria deletada, sero atualizadas de modo que a Chave_Estrangeira fique com o seu valor DEFAULT, que precisa ter sido definido na criao da tabela. On Delete Set Null Tabela_Filho ( ...., Chave_Estrangeira char(5) references Tabela_Mae (Chave_Primaria) ON DELETE SET NULL, ....) Ao deletar uma linha da Tabela_Mae, todas as linhas da Tabela_Filho que referenciam atravs da Chave_Estrangeira o valor da Chave_Primaria deletada, sero atualizadas de modo que a Chave_Estrangeira fique nula.

On Update Cascade Tabela_Filho ( ...., Chave_Estrangeira char(5) references Tabela_Mae (Chave_Primaria) ON UPDATE CASCADE, ....) Ao alterar uma linha da Tabela_Mae alterando o valor da chave primria, todas as linhas da Tabela_Filho que referenciam atravs da Chave_Estrangeira o valor da Chave_Primaria alterada tambm sero alteradas. On Update Set Default Tabela_Filho ( ...., Chave_Estrangeira char(5) references Tabela_Mae (Chave_Primaria) ON UPDATE SET DEFAULT, ....) Ao alterar uma linha da Tabela_Mae alterando o valor da chave primria, todas as linhas da Tabela_Filho que referenciam atravs da Chave_Estrangeira o valor da Chave_Primaria alterada, sero atualizadas de modo que a Chave_Estrangeira fique com o seu valor DEFAULT, que precisa ter sido definido na criao da tabela. On Update Set Null Tabela_Filho ( ...., Chave_Estrangeira char(5) references Tabela_Mae (Chave_Primaria) ON UPDATE SET NULL, ....) Ao alterar uma linha da Tabela_Mae alterando o valor da chave primria, todas as linhas da Tabela_Filho que referenciam atravs da Chave_Estrangeira o valor da Chave_Primaria alterada, sero atualizadas de modo que a Chave_Estrangeira fique nula.