Você está na página 1de 16

Prof.

Omero Francisco Bertol


(omero@pb.cefetpr.br)

Sinnimos
MODELO ENTIDADE-RELACIONAMENTO ATRIBUTO ENTIDADE RELACIONAMENTO PROJETO CONCEITUAL CONJUNTO DE ENTIDADES CONJUNTO DE RELACIONAMENTOS

SQL- Structured Query Language (Linguagem de Consulta Estruturada)

MODELO RELACIONAL COLUNA TUPLA, OU LINHA

PROJETO LGICO RELAO

NA PRTICA

http://pessoal.pb.cefetpr.br/omero/index.htm

CAMPO

REGISTRO

TABELA

SQL - Introduo
A lgebra relacional e o clculo relacional so linguagens formais que proporcionam uma notao concisa para a representao de consultas. Entretranto, sistemas de banco de dados comerciais precisam de uma linguagem de consulta mais fcil para o usurio. Embora seja definida como uma linguagem de consulta a linguagem SQL possui muitos outros recursos alm de consulta ao banco de dados, como meios para a definio da estrutura de dados (esquema), para modificao de dados no banco de dados e para a especificao de restries de segurana.

SQL - Histrico
Certamente a SQL tem representado o padro para linguagens de banco de dados relacionais. Existem diversas verses de SQL. A verso original foi desenvolvida pela IBM no incio dos anos 70. Em 1986, o American National Standards Institute (ANSI) e a International Standards Organization (ISO) publicaram os padres para a SQL, chamada de SQL-86. A IBM publicou seus prprios padres para a SQL, a Systems Application Architecture Database Interface (SAA-SQL) em 1987. Uma extenso para o padro SQL, a SQL-89, foi publicada em 1989. A verso em uso do padro ANSI/ISO SQL o padro SQL-92. importante lembrar que algumas implementaes da SQL podem dar suporte somente SQL-89 e assim no aceitar a SQL-92.

As Partes da Linguagem SQL (1/2)


Linguagem de definio de dados (DDL- Data Definition Language): comandos para a definio de esquemas de relaes, excluso de relaes, modifio nos esquemas de relaes e criao de domnios.
create table, alter table, drop table e create domain

As Partes da Linguagem SQL (2/2)


Incorporao DML (Embedded DML): comandos SQL incorporados foi projetada para aplicao em linguagens de programao de uso geral, como PL/I, Cobol, Pascal, Fortran e C. Definio de vises: a SQL DDL possui comandos para definio de vises (relao virtual). Autorizao: a SQL DDL emgloba comandos para especificao de direitos de acesso a relaes e vises. Integridade: a SQL DDL possui comandos para especificao de regras de integridade que os dados armazenados no banco de dados devem satisfazer. Atualizaes que violarem as regras de integridade sero desprezadas. Controle de transaes: a SQL inclui comandos para a especificaes de incio e fim de transaes. Algumas implementaes tambm permitem explicitar bloqueios de dados para controle de concorrncia.

Linguagem interativa de manipulao de dados (DMLData Manipulation Language): abrange uma linguagem de consulta baseada tanto na lgebra relacional quanto no clculo relacional de tuplas. Engloba tambm comandos para insero, excluso e modificao de tuplas no banco de dados.
select, insert, delete e update

DML- Data Manipulation Language


A Linguagem interativa de manipulao de dados abrange: Select, From e Where:
uma linguagem de consulta baseada tanto na lgebra relacional quanto no clculo relacional de tuplas.

Insert, Delete e Update:


engloba tambm comandos para insero, excluso e modificao de tuplas no banco de dados.
Os exemplos do uso da linguagem SQL a seguir sero demonstrados, usando o banco de dados Firebird Employee.gdb, atravs do recurso SQL Editor disponvel na ferramenta administrativa IBExpert. O Firebird um Sistema Gerenciador de Banco de Dados Cliente/Servidor Relacional que est baseado no padro SQL ANSI-92.

Consulta SQL Bsica


A estrutura bsica de uma consulta em SQL consiste em trs clusulas: select, from e where. A clusula select corresponde operao de projeo () da lgebra relacional. Ela usada para relacionar os atributos desejados no resultado de uma consulta. A clusula from corresponde operao de produto cartesiano () da lgebra relacional. Ela associa as relaes que sero pesquisadas durante a evoluo de uma expresso. A clusula where corresponde seleo () do predicado da lgebra relacional. Ela consiste em um predicado envolvendo atributos da relao que aparece na clusula from.

SELECT versus (projeo)


select A1, A2, ..., An from r1, r2, ..., rm where P

(1/2)

Onde, cada Ai representa um atributo e cada ri, uma relao. P um predicado. A consulta acima equivalente seguinte expresso em lgebra relacional: A , A , ..., A (P (r1 r2 ... rm))
1 2 n

SELECT versus (projeo)

(2/2)

A Clusula SELECT

(1/6)

Se a clusula where for omitida, o predicado P verdadeiro. Entretanto, de modo diferente das expresses em lgebra relacional, o resultado de uma consulta em SQL pode conter cpias mltiplas de algumas tuplas. Semntica de uma consulta SQL: A SQL forma um produto cartesiano das relaes indicadas na clusula from, executa uma seleo em lgebra relacional usando o predicado da clusula where e, ento, projeta o resultado sobre os atributos da clusula select.

Encontre todas as tuplas da relao employee, ordenando o resultado pelo atributo first_name. select * from employee order by first_name

O asterisco * pode ser usado para denotar todos os atributos da relao selecionada. O resultado de uma consulta SQL , naturalmente, uma relao.

A Clusula SELECT

(2/6)

A Clusula SELECT

(3/6)

Encontre todas as tuplas da relao employee, com dupla ordenao: primeiro pelo atributo dept_no e as tuplas com valor igual para o atributo dept_no ficam ordenadas pelo atributo first_name. select * from employee order by dept_no, first_name

Encontre todas as tuplas da relao employee, ordenando o resultado pelo atributo first_name e apresentando (ou projetando) somente os atributos: first_name, last_name, dept_no. select first_name, last_name, dept_no from employee order by first_name

first_name,

last_name, dept_no

(employee)

A Clusula SELECT
select dept_no from employee order by dept_no

(4/6)

A Clusula SELECT

(5/6)

Encontre todas as tuplas da relao employee, ordenando o resultado pelo atributo dept_no e apresentando (ou projetando) somente o atributo dept_no.

select distinct dept_no from employee order by dept_no

Encontre todas as tuplas da relao employee, ordenando o resultado pelo atributo dept_no e apresentando (ou projetando) somente o atributo dept_no. select all dept_no from employee order by dept_no

dept_no

(employee)

Linguagens formais de consulta apiam-se na noo matemtica de uma relao ser um conjunto. Assim, tuplas duplicadas nunca aparecem nas relaes. Na prtica, a eliminao da duplicidade consome um tempo relativo. Portanto, a SQL (como a maioria das linguagens comerciais de consulta) permite duplicidade nas relaes. Para eliminar as duplicidades deve-se inserir a palavra chave distinct depois da clusula select.

A SQL permite o uso da palavra-chave all para especificar explicitamente que as duplicidades no sero elimindas.

A Clusula SELECT

(6/6)

A Clusula WHERE

(1/5)

Encontre todas as tuplas da relao employee, ordenando o resultado pelo atributo first_name e apresentando (ou projetando) somente os atributos: first_name, last_name, salary e salary / 12. select first_name, last_name, salary, salary / 12 from employee order by first_name

Encontre todas as tuplas da relao employee para as quais o valor do atributo dept_no seja igual a 120. select * from employee where dept_no = 120 dept_no = (employee)

120

A clusula select pode conter expresses aritmticas envolvendo os operados +, -, * e /, e operandos constantes ou atributos das tuplas.

first_name, last_name, salary, salary / 12

(employee)

A SQL usa conectores lgicos and, or e not, em vez dos smbolos matemticos , e , na clusula where. Os operandos dos conectivos lgicos podem ser expresses envolvendo operadores de comparao <, <=, >, >=, = e <> (diferente de).

A Clusula WHERE

(2/5)

A Clusula WHERE

(3/5)

Encontre todas as tuplas da relao employee para as quais o valor do atributo salary esteja no intervalo fechado de 80000.00 at 90000.00. select * from employee where (salary >= 80000.00) and (salary <= 90000.00)

Encontre todas as tuplas da relao employee para as quais o valor do atributo salary esteja no intervalo fechado de 80000.00 at 90000.00. select * from employee where salary between 80000.00 and 90000.00

A SQL possui o operador de comparao between para simplificar a clusula where que especifica que um atributo possa ter um valor maior ou igual a algum valor e menor ou igual a algum outro valor. salary
80000.00 salary 90000.00

(employee)

A Clusula WHERE

(4/5)

A Clusula WHERE

(5/5)

Encontre todas as tuplas da relao employee para as quais o valor do atributo job_country seja igual a Canada ou igual a England e apresentando (ou projetando) somente os atributos: last_name, first_name, job_country.

select last_name, first_name, job_country from employee where job_country in ('Canada', 'England')

Encontre todas as tuplas da relao employee para as quais o valor do atributo hire_date seja um valor de data pertencente ao ano de 1991, ou seja, de 01/01/1991 at 31/12/1991, ordenando o resultado pelo atributo hire_date e apresentando (ou projetando) somente os atributos: full_name, salary, hire_date. select first_name, salary, hire_date from employee where hire_date between '01/01/1991' and '12/31/1991' order by hire_date

A SQL possui o operador de teste de pertinncia in que verifica se um dado valor membro (ou pertence) a um conjunto de valores. No exemplo acima as tuplas que aparecero no resultado da consulta so aquelas cujo valor do atributo job_country pertena ao conjunto (Canada, England).

A hire_date

01/01/1991 hire_date 31/12/1991(employee)

full_name, salary, hire_date

(A)

A Clusula FROM
A clusula from por si s define um produto cartesiano das relaes na clusula. Encontre todas as tuplas da relao customer relacionadas (ou juntadas) com todas as tuplas correspondentes na relao sales ordenando pelo atributo cust_no. select customer.cust_no, customer, po_number, sales.cust_no, total_value from customer, sales where customer.cust_no = sales.cust_no order by cust_no A SQL usa a notao: NomeDaRelao.NomeDoAtributo, como na lgebra relacional, para evitar ambigidades nos casos em que um atributo aparece no esquema de mais de uma relao.

A Operao Rename (as)


A SQL proporciona um mecanismo para rebatizar tanto relaes (variveis tuplas) quanto atributos, usando a clusula as da seguinte forma: nome_antigo as nome_novo
select salary from employee where dept_no = 120 select sum(salary) as tot_salary from employee where dept_no = 120

A mesma consulta em lgebra relacional: customer.cust_no, customer, po_number, sales.cust_no,

total_value

(customer

sales)

tot_salary(sum(salary))

(dept_no

= 120(employee))

Variveis Tuplas
A clsula as particularmente til na definio do conceito de varivel tupla. Uma varivel tupla em SQL precisa estar associada a uma relao da clusula from em particular. Encontre todas as tuplas da relao customer relacionadas (ou juntadas) com todas as tuplas correspondentes na relao sales ordenando pelo atributo cust_no. select c.cust_no, customer, po_number, s.cust_no, total_value from customer c, sales s where c.cust_no = s.cust_no order by cust_no
Define-se a varivel tupla, neste caso, as variveis c e s, na clusula from colocando-a depois do nome da relao qual est associada. Ateno: o uso da palavra-chave as opcional.

Operaes em Strings

(1/3)

As operaes em strings mais usadas so as checagens para verificao de coincidncias de pares, usando o operador like combinado com os caracteres especiais: porcentagem (%) e sublinhado (_).
Expresso LIKE A% LIKE %A LIKE %A% LIKE A_ LIKE _A LIKE _A_ LIKE %A_ LIKE _A% Resultado Qualquer string que iniciem com a letra A. Qualquer string que terminem com a letra A. Qualquer string que tenha a letra A em qualquer posio. String de dois caracteres que tenham a primeira letra A e o segundo caractere seja qualquer outro. String de dois caracteres cujo primeiro caractere seja qualquer um e a ltima letra seja a letra A. String de trs caracteres cuja segunda letra seja A, independentemente do primeiro ou do ltimo caractere. Qualquer string que tenha a letra A na penltima posio e a ltima seja qualquer outro caractere. Qualquer string que tenha a letra A na segunda posio e o primeiro caractere seja qualquer outro caractere.

Operaes em Strings
Expresso LIKE ___ LIKE ___% Resultado Qualquer string com exatamente trs caracteres. Qualquer string com pelo menos trs caracteres.

(2/3)

Operaes em Strings
Expresso LIKE ab\%cd LIKE ab\\cd LIKE %% Resultado Qualquer string que comece por ab%cd. Qualquer string que comece por ab\cd.

(3/3)

Para comparaes que envolvam caracteres especiais (isto , % e _), a SQL permite o uso de um caractere de escape (\). Esse caractere usado imediatamente antes do caractere especial que dever ser tratado como um caractere normal.

Comparaes com strings so sensveis ao tamanho da letra; isto , minsculas no so iguais a maisculas, e vice-versa. select full_name from employee where full_name like 'Johnson%'

Qualquer string que tenha o caractere em qualquer posio.

A SQL permite pesquisar diferenas em vez de coincidncias, por meio do uso do operador de comparao not like. A SQL tambm permite uma variedade de funes com strings de caracteres, como concatenao (usando ||), extrao de substrings, indicao de tamanhos de strings, converso de minsculas para maisculas (upper) e assim por diante. select full_name from employee where upper(full_name) like '%LE%'

select full_name from employee where full_name like '%Le%'

Operaes em Datas

(1/2)

Operaes em Datas

(2/2)

Utiliza-se a funo extract com as palavras-chave: day, month e year. Encontre todas as tuplas da relao employee para as quais o valor do atributo hire_date seja um valor de data pertencente ao ms de agosto de qualquer ano e apresentando (ou projetando) somente os atributos: full_name, salary, hire_date. select full_name, salary, hire_date from employee where extract(month from hire_date) = 8

Encontre todas as tuplas da relao employee para as quais o valor do atributo hire_date seja um valor de data pertencente ao ano de 1991, ordenando o resultado pelo atributo full_name e apresentando (ou projetando) somente os atributos: full_name, salary, hire_date. select full_name, salary, hire_date from employee where extract(year from hire_date) = 1991 order by full_name Ateno: No banco de dados MS Access day, month e year so funes. E devero ser usadas como no exemplo a seguir: select * from employee where year(hire_date) = 1991

Ordenao de Tuplas
A SQL oferece ao usurio algum controle sobre a ordenao por meio da qual as tuplas de uma relao sero apresentadas. A clusula order by faz com que as tuplas do resultado de uma consulta apaream em uma determinada ordem. Por padro, a relao ordenada apresentada em ordem ascendente. Para especificao da forma de ordenao, deve-se indicar desc para ordem descendente e asc para ordem ascendente. Alm disso, a ordenao pode ser realizada por diversos atributos. select full_name, salary from employee order by salary asc

Funes Agregadas
Mdia (average): avg select avg(salary) as salario_avg from employee Mnimo valor: min select min(salary) as salario_min from employee Mximo valor: max select max(salary) as salario_max from employee

(1/3)

As funes agregadas so funes que tomam uma coleo (um conjunto ou um subconjunto) de valores como entrada, retornando um valor simples.

select full_name, salary from employee order by salary desc

Funes Agregadas
Soma Total: sum select sum(salary) as salario_total from employee select c.cust_no, sum(total_value) as tot from customer c, sales s where c.cust_no = s.cust_no group by c.cust_no order by c.cust_no

(2/3)

Funes Agregadas
Contagem: count select count(*) as ct from employee select c.cust_no, sum(total_value) as tot, count(*) as ct from customer c, sales s where c.cust_no = s.cust_no group by c.cust_no order by c.cust_no

(3/3)

select count(distinct cust_no) as ct from sales

A Clusula Group By

(1/2)

A Clusula Group By

(2/2)

Existem circunstncias em que seria necessrio aplicar uma funo agregada (count, sum, avg, ...) no somente a um conjunto de tuplas, mas tambm a um grupo de conjunto de tuplas o que possvel usando a clusula SQL group by. O atributo ou atributos fornecidos na clusula group by so usados para formar grupos. Tuplas com os mesmos valores em todos os atributos da clusula group by so colocadas em um grupo.
\* aplicando a funo agregada a um conjunto de tuplas *\ select avg(salary) as salario_avg from employee \* aplicando a funo agregada a um grupo de conjunto de tuplas *\ select dept_no, avg(salary) as salario_avg from employee group by dept_no

s vezes, mais interessante definir condies e aplic-las a grupos de que aplic-las a tuplas. Por exemplo, encontrar quais dept_no possuem mdia (avg) do atributo salary maior que a mdia de todas as tuplas da relao employee. Essa condio no se aplica a uma nica tupla, mas em cada grupo determinado pela clusula group by. Para exprimir tal consulta, deve-se usar a clusula having da SQL. Os predicados da clusula having so aplicados depois da formao dos grupos, assim podero ser usadas funes agregadas.
select dept_no, avg(salary) as salario_avg from employee group by dept_no having avg(salary) > (select avg(salary) from employee)

Operaes de Conjuntos
Os operadores SQL-92 union, intersect e except operam relaes e correspondem s operaes de unio (), interseo () e diferena () da lgebra relacional, e portanto, as relaes participantes devem ser compatveis, ou seja, apresentar o mesmo conjunto de atributos (ou esquema). A SQL-89 possui diversas restries para o uso de union, intersect e except. Certos produtos no oferecem suporte para essas operaes.

A Operao de Unio ()
Una todas as tuplas da relao employee para as quais o valor do atributo dept_no seja igual a 120 com as tuplas da relao employee cujo o valor do atributo dept_no seja igual a 600.
select full_name, salary, dept_no from employee where dept_no = 120 union select full_name, salary, dept_no from employee where dept_no = 600

A B A B

full_name, salary, hire_date full_name, salary, hire_date

(dept_no (dept_no

= 120(employee)) = 600(employee))

Valores Nulos
O valor null indica a ausncia de informao sobre o valor de um atributo. Sendo assim, pode-se usar a palavra-chave null como predicado para testar a existncia de valores nulos.
select * from customer inner join sales on customer.cust_no = sales.cust_no where phone_no is null

Composio de Relaes
Alm de fornecer o mecanismo bsico do produto cartesiano para a composio das tuplas de uma relao disponvel nas primeiras verses da SQL, a SQL-92 tambm oferece diversos outros mecanismos para composio de relaes como as junes condicionais e as junes naturais, assim como vrias formas de junes externas. juno interna (ou juno condicional): inner join juno externa esquerda: left outer join juno externa direita: right outer join juno externa total: full outer join

O predicado not null testa a ausncia de valores nulos.

10

Juno Interna (inner join)


Relaciona (ou junta) atravs do atributo cust_no cada tupla da relao customer com as suas tuplas correspondentes na relao sales. Cada tupla resultante dessa primeira relao juntada com a tupla correspondente na relao employee atravs do predicado on s.sales_rep = e.emp_no.
select c.cust_no, customer, po_number, ship_date, total_value, sales_rep, full_name from customer c inner join sales s on c.cust_no = s.cust_no inner join employee e on s.sales_rep = e.emp_no

Juno Externa Esquerda (left outer join)


As operaes de juno externa so uma extenso da operao de juno interna (inner join) para tratar informaes omitidas.
empregado empregado_depto

select * from empregado e inner join empregado_depto d on e.nome_emp = d.nome_emp

Juno Interna Os empregados Alzemiro e Tadeu na participam da relao resultado porque no possuem valores nas duas relaes envolvidas.

select * from empregado e left outer join empregado_depto d on e.nome_emp = d.nome_emp

Juno Externa Esquerda Acrescenta a relao resultado todas as tuplas da relao esquerda que no encontram par entre as tuplas da relao direita, preenchendo com valores nulo todos os outros atributos da relao a direita.

Juno Externa Direita (right outer join)


A juno externa direita acrescenta a relao resultado todas as tuplas da relao direita que no encontram par entre as tuplas da relao esquerda, preenchendo com valores nulo todos os outros atributos da relao a direita.
empregado empregado_depto

Juno Externa Total (full outer join)


A juno externa total acrescenta a relao resultado as tuplas da relao esquerda que no encontram par entre as tuplas da relao direita, assim como as tuplas da relao direita que no encontram par entre as tuplas da relao esquerda.
empregado empregado_depto

select * from empregado e inner join empregado_depto d on e.nome_emp = d.nome_emp

select * from empregado e right outer join empregado_depto d on e.nome_emp = d.nome_emp

select * from empregado e inner join empregado_depto d on e.nome_emp = d.nome_emp

select * from empregado e full outer join empregado_depto d on e.nome_emp = d.nome_emp

Juno Interna Os empregados Alzemiro e Tadeu na participam da relao resultado porque no possuem valores nas duas relaes envolvidas.

Juno Interna Os empregados Alzemiro e Tadeu na participam da relao resultado porque no possuem valores nas duas relaes envolvidas.

11

Modificaes no Banco de Dados (1/7)


As instrues para modificar a instncia de banco de dados sero demonstradas, basicamente, sobre o seguinte esquema: Modelo Relacional (modelo lgico):
cargo CdCargo depto CdDepto NmCargo VrSalario NmDepto Ramal

Modificaes no Banco de Dados (2/7)


Insero (insert) Para inserir dados em uma relao podemos especificar uma tupla a ser inserida ou escrever uma consulta cujo resultado um conjunto de tuplas a inserir. Obviamente, os valores dos atributos para as tuplas a inserir devem pertencer ao domnio desses atributos. Similarmente, tuplas a inserir devem possuir a ordem correta (mesmo esquema).
insert into NomeDaRelao values (ValorDoAtributo1, ValorDoAtributo2, ..., ValorDoAtributoN)

funcionario NrMatric NmFunc DtAdm

Sexo

CdCargo CdDepto

Modificaes no Banco de Dados (3/7)


Insero (insert)
Inserindo uma tupla. insert into cargo values(1, 'Programador Analista', 2500.00) insert into cargo values(2, 'DBA', 4700.00) insert into cargo values(3, 'Suporte', 800.00) select * from cargo

Modificaes no Banco de Dados (4/7)


Insero (insert)
Inserindo uma tupla e usando apenas alguns atributos. insert into newcargo(cdcargo, nmcargo) values(1, 'Programador Analista') Seria equivalente a seguinte instruo. insert into newcargo values(1, 'Programador Analista', null)

Inserindo uma tupla e usando apenas alguns atributos. insert into newcargo(cdcargo, vrsalario) values(2, 5000.00) Seria equivalente a seguinte instruo. insert into newcargo values(2, null, 5000.00)

select * from newcargo Inserindo um conjunto de tuplas. insert into newcargo select * from cargo

12

Modificaes no Banco de Dados (5/7)


Remoo (delete) Um pedido de remoo de dados expresso muitas vezes do mesmo modo que uma consulta. Pode-se remover somente tuplas inteiras; no possivel, por exemplo, excluir valores de um atributo em particular.
delete from r where P

Modificaes no Banco de Dados (6/7)


Remoo (delet)
Remove todos os funcionrios com CdCargo = 1. delete from funcionario where CdCargo = 1 Remove todos os funcionrios com CdCargo = 1 e com CdDepto = 1. delete from funcionario where (CdCargo = 1) and (CdDepto = 1) Remove todos os funcionrios. delete from funcionario

em que P representa um predicado e r, uma relao. O comando delete encontra primeiro todas as tuplas t em r para as quais P(t) verdadeira e ento remove-as de r. A clusula where pode ser omitida nos casos de remoo de todas as tuplas de P.

O pedido delete por conter um select aninhado, como por exemplo, para remover todos os funcionrios com o valor do atributo Salary maior que a mdia do prprio atributo. delete from employee where salary > (select avg(salary) from employee)

Modificaes no Banco de Dados (7/7)


Atualizaes (update)
Aumenta 10% os salrio de todos os cargos. update cargo set vrSalario = vrSalario * 1.10 Aumenta em R$ 50,00 os salrio inferiores a R$ 1.000,00. update cargo set vrSalario = vrSalario + 50.00 where vrSalario < 1000.00 Modifica o nome e o salrio do CdCargo = 1. update cargo set nmCargo = 'Programador Analista Senior', vrSalario = 4500.00 where cdCargo = 1 Aumenta 5% os salrio dos cargos com salrio abaixo da mdia. update cargo set vrSalario = vrSalario * 1.05 where salary < (select avg(salary) from employee)

DDL- Data Definition Language


A Linguagem de definio de dados abrange comandos para: Create table, Alter table e Drop table:
comandos para a definio de esquemas de relaes (criao e modificao) e excluso de relaes.

Create domain:
criao de domnio dos valores associados a atributos.

13

Tipos de Domnios em SQL

(1/3)

Tipos de Domnios em SQL

(2/3)

char(n) uma cadeia de caracteres de tamanho fixo varchar(n) uma cadeia de caracteres e tamanho varivel integer um inteiro (4 bytes) smallint um inteiro pequeno (2 bytes) numeric(p, d) um nmero de ponto fixo cuja preciso definida. Onde, p indica a quantidade de digitos (incluindo o ponto decimal e o sinal) e d dos p dgitos esto direita do ponto decimal. Por exemplo, para representar o valor -3500,75 seria necessrio a seguinte definio: numeric(8,2)

real e double precision so nmeros de ponto flutuante e ponto flutuante de preciso dupla float(n) um nmero de ponto flutuante com a preciso definida pelo usurio em pelo menos n digitos date um calendrio contendo um ano (com 4 dgitos), ms e dia do ms. time representa horrio, em horas, minutos e segundos

Tipos de Domnios em SQL

(3/3)

Criando Domnios
A SQL-92 permite a definio de domnios usando a clusula create domain:
create domain nomeDoDomnio tipoDoDomnio
create domain mes as smallint check(value between 1 and 12) create domain boolean as char(1) check(value in('T', 'F')) create domain sal_emp as numeric(8, 2) default 350.00 check(value >= 350.00) onde: value default check para apagar um domnio criado: drop domain nomeDoDomnio

O valor nulo (null) um membro de todos os domnios. Para certos atributos, entretanto, valores nulos podem ser inadequados. Como por exemplo, no valor de chaves primrias ou de um atributo como o CPF. A SQL permite que a declarao de domnios de um atributo inclua a especificao de not null, proibindo, assim, a insero de valores nulos para esse tipo de atributo. Qualquer modificao que possa resultar na insero de um valor nulo em um domnio not null gera um diagnstico de erro.

representa o valor atribuido ao atributo define o valor padro para o atributo verifica se o valor informado para o atributo satisfaz a condio especificada

14

Criando Relaes
Definio de Esquema em SQL:
create table r (A1D1, A2D2, ..., AnDn, <regras de integridade1> ..., <regras de integridadek>)

(1/2)

Criando Relaes
create table nome_emp rua cidade ) create table codigo nome casado sal cdCargo cdDepto empregado ( varchar(20), varchar(20), varchar(20)

(2/2)
create table empregado_depto ( nome_emp varchar(20), depto char(1), salario sal_emp )

onde: r o nome da relao, cada Ai o nome de um atributo no esquema da relao r e Di o tipo de domnio dos valores no domnio dos atributos Ai. As regras de integridade (constraint) permitidas: primary key foreing key

empreg ( integer not null, varchar(35), boolean, sal_emp, integer, integer,

constraint pf_codigo primary key(codigo), constraint fk_cdCargo foreign key(cdCargo) references cargo(cdCargo), constraint fk_cdDepto foreign key(cdDepto) references depto(cdDepto) )

Removendo Relaes
Para remoo de uma relao deve-se usar o comando drop table. O comando: drop table r

Modificando Relaes
para adicionar atributos a uma relao existente: alter table r add A D

(1/2)

Para modificar uma relao deve-se usar o comando alter table.

uma ao mais drstica que: delete from r onde: delete from r mantm a relao r, mas remove todas as suas tuplas. drop table r no remove apenas todas as tuplas de r, mas tambm seu esquema.

onde r o nome de uma relao existente, A o nome do novo atributo que ser adicionado e D seu domnio. Ateno: todas as tuplas da relao recebem valores null para seu novo atributo. para remover atributos de uma relao existente: alter table r drop A onde r o nome de uma relao existente e A, o nome do atributo da relao que ser removido.

15

Modificando Relaes

(2/2)

Referncias
Sistema de Banco de Dados.
Abraham Silberschatz; Henry F. Korth; S. Sudarshan. Captulo 4: SQL So Paulo: Makron Books, 3 ed., 1999. Prof. Francisco Reverbel
http://www.ime.usp.br/~reverbel/

Acrescenta o atributo "nomeChefe" do tipo varchar(30) a relao "depto". alter table depto add nomeChefe char(35) Remove o atributo "sexo" da relao "funcionario". alter table funcionario drop sexo

Adicionando e Removendo restries (constraint): Remove a restrio "fk_cddepto" da relao "empreg". alter table empreg drop constraint fk_cddepto Acrescenta a relao "empreg" a restrio "fk_cddepto" de chave estrangeira (foreing key) usando o atributo "cddepto" fazendo a ligao com a relao "depto". alter table empreg add constraint fk_cddepto foreign key(cddepto) references depto(cddepto)

16

Você também pode gostar