Escolar Documentos
Profissional Documentos
Cultura Documentos
Sinnimos
MODELO ENTIDADE-RELACIONAMENTO ATRIBUTO ENTIDADE RELACIONAMENTO PROJETO CONCEITUAL CONJUNTO DE ENTIDADES CONJUNTO DE RELACIONAMENTOS
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.
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
(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
(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.
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.
(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
(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.
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%'
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%'
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.
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)
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
(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
10
Juno Interna Os empregados Alzemiro e Tadeu na participam da relao resultado porque no possuem valores nas duas relaes envolvidas.
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 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
Sexo
CdCargo CdDepto
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
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)
Create domain:
criao de domnio dos valores associados a atributos.
13
(1/3)
(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
(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
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)
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