Banco de Dados lgebra Relacional e SQL Profa. Dra.
Cristina Dutra de Aguiar Ciferri
lgebra Relacional e SQL Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional Maneira terica de se manipular o banco de dados relacional Linguagem de consulta procedural usurios especificam os dados necessrios e como obt-los Consiste de um conjunto de operaes entrada: uma ou duas relaes sada: uma nova relao resultado Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Operaes Fundamentais seleo projeo produto cartesiano renomear unio diferena de conjuntos Adicionais interseco de conjuntos juno natural diviso agregao Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL DML SELECT <lista de atributos e funes> FROM <lista de tabelas> [ WHERE predicado ] [ GROUP BY <atributos de agrupamento> ] [ HAVING <condio para agrupamento> ] [ ORDER BY <lista de atributos> ] ; Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Seleo Seleciona tuplas que satisfaam condio de seleo ! condio_seleo ( relao argumento ) relao resultado de alguma operao da lgebra relacional pode envolver operadores de comparao (=, >, ", <, #, $) pode combinar condies usando-se , , Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Seleo cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend) nro_cli nome_cli end_cli saldo cod_vend 1 Mrcia Rua X 100,00 1 2 Cristina Avenida 1 10,00 1 3 Manoel Avenida 3 234,00 1 4 Rodrigo Rua X 137,00 2 Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Projeo % lista_atributos ( relao argumento ) relao resultado de alguma operao da lgebra relacional lista de atributos os atributos so separados por vrgula Projeta as colunas solicitadas (i.e. produz um subconjunto vertical) Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Projeo cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend) nro_cli nome_cli end_cli saldo cod_vend 1 Mrcia Rua X 100,00 1 2 Cristina Avenida 1 10,00 1 3 Manoel Avenida 3 234,00 1 4 Rodrigo Rua X 137,00 2 Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Produto Cartesiano Combina tuplas de duas relaes relaes no precisam ter atributos comum Tuplas da relao resultante todas as combinaes de tuplas possveis entre as relaes participantes relao argumento 1 & relao argumento 2 relao resultado de alguma operao da lgebra relacional Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Relaes Cliente e Vendedor cliente (nro_cli, nome_cli, end_cli, saldo, cod_vend) nro_cli nome_cli end_cli saldo cod_vend 1 Mrcia Rua X 100,00 1 2 Cristina Avenida 1 10,00 1 3 Manoel Avenida 3 234,00 1 4 Rodrigo Rua X 137,00 2 vendedor (cod_vend, nome_vend) cod_vend nome_vend 1 Adriana 2 Roberto Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Cliente & Vendedor nro_cli nome_cli end_cli saldo cliente. cod_vend vendedor. cod_vend nome_vend 1 Mrcia Rua X 100,00 1 1 Adriana 1 Mrcia Rua X 100,00 1 2 Roberto 2 Cristina Avenida 1 10,00 1 1 Adriana 2 Cristina Avenida 1 10,00 1 2 Roberto 3 Manoel Avenida 3 234,00 1 1 Adriana 3 Manoel Avenida 3 234,00 1 2 Roberto 4 Rodrigo Rua X 137,00 2 1 Adriana 4 Rodrigo Rua X 137,00 2 2 Roberto grau: nmero de atributos de cliente + nmero de atributos de vendedor nmero de tuplas: nmero de tuplas de cliente * nmero de tuplas de vendedor Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Renomear Renomeia nome da relao nomes dos atributos da relao nome da relao e nomes dos atributos ' S(B 1 ,B 2 , ..., B n ) (relao) nome antigo da relao nome novo da relao nomes novos dos atributos Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Renomear Exemplos ' comprador (cliente) ' (cdigo, nome, rua, saldo, vendedor) (cliente) ' comprador (cdigo, nome, rua, saldo, vendedor) (cliente) Observao indicada para ser utilizada quando uma relao usada mais do que uma vez para responder consulta Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: SELECT-FROM-WHERE SELECT <lista de atributos> FROM <lista de tabelas> [WHERE condies de seleo] SQL lgebra Relacional SELECT projeo FROM produto cartesiano WHERE seleo Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Clusula ORDER BY Ordena as tuplas que aparecem no resultado de uma consulta asc (padro): ordem ascendente desc: ordem descendente Ordenao pode ser especificada em vrios atributos a ordenao referente ao primeiro atributo prioritria. Se houver valores repetidos, ento utilizada a ordenao referente ao segundo atributo, e assim por diante Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Clusula AS Renomeia atributos deve aparecer na clusula SELECT til para a visualizao das respostas na tela relaes deve aparecer na clusula FROM til quando a mesma relao utilizada mais do que uma vez na mesma consulta Sintaxe nome_antigo AS nome_novo Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Juno Concatena tuplas relacionadas de duas relaes Passos: forma um produto cartesiano das relaes faz uma seleo forando igualdade sobre os atributos que aparecem nas relaes Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Juno relao argumento 1 condio_juno relao argumento 2 relao resultado de alguma operao da lgebra relacional Sintaxe Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Juno (Exemplo) nro_cli nome_cli end_cli saldo cliente. cod_vend vendedor. cod_vend nome_vend 1 Mrcia Rua X 100,00 1 1 Adriana 1 Mrcia Rua X 100,00 1 2 Roberto 2 Cristina Avenida 1 10,00 1 1 Adriana 2 Cristina Avenida 1 10,00 1 2 Roberto 3 Manoel Avenida 3 234,00 1 1 Adriana 3 Manoel Avenida 3 234,00 1 2 Roberto 4 Rodrigo Rua X 137,00 2 1 Adriana 4 Rodrigo Rua X 137,00 2 2 Roberto Passo 1: formar um produto cartesiano das relaes Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Juno (Exemplo) nro_cli nome_cli end_cli saldo cliente. cod_vend vendedor. cod_vend nome_vend 1 Mrcia Rua X 100,00 1 1 Adriana 1 Mrcia Rua X 100,00 1 2 Roberto 2 Cristina Avenida 1 10,00 1 1 Adriana 2 Cristina Avenida 1 10,00 1 2 Roberto 3 Manoel Avenida 3 234,00 1 1 Adriana 3 Manoel Avenida 3 234,00 1 2 Roberto 4 Rodrigo Rua X 137,00 2 1 Adriana 4 Rodrigo Rua X 137,00 2 2 Roberto Passo 2: fazer uma seleo forando igualdade sobre os atributos que aparecem nas relaes Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Juno (Exemplo) nro_cli nome_cli end_cli saldo cliente. cod_vend vendedor. cod_vend nome_vend 1 Mrcia Rua X 100,00 1 1 Adriana 2 Cristina Avenida 1 10,00 1 1 Adriana 3 Manoel Avenida 3 234,00 1 1 Adriana 4 Rodrigo Rua X 137,00 2 2 Roberto Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Juno (Primeiras Verses) Clusulas SELECT e WHERE especificam atributos com mesmo nome usando o nome da relao e o nome do atributo (nome_relao.nome_atributo) Clusula FROM possui mais do que uma relao Clusula WHERE inclui as condies de juno (igualdade sobre os atributos que aparecem nas relaes) Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Juno (Exemplo) SELECT nro_cli, nome_cli, end_cli, saldo, vendedor.cod_vend, nome_vend FROM cliente, vendedor WHERE cliente.cod_vend = vendedor.cod_vend Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL-92: Juno SELECT nro_cli, nome_cli, end_cli, saldo, vendedor.cod_vend, nome_vend FROM cliente JOIN vendedor ON cliente.cod_vend = vendedor.cod_vend Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra e SQL: Juno [INNER] JOIN R S somente as tuplas de R que tm tuplas correspondentes em S e vice-versa aparecem no resultado LEFT [OUTER] JOIN R S mantm cada tupla de R na tabela de juno preenche com valores nulos as tuplas de S que no correspondem coluna de juno em R Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri RIGHT [OUTER] JOIN R S mantm cada tupla de S na tabela de juno preenche com valores nulos as tuplas de R que no correspondem coluna de juno em S FULL [OUTER]JOIN R S mantm cada tupla de R e de S na tabela de juno preenche com valores nulos as tuplas que no correspondem coluna de juno lgebra e SQL: Juno Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri [INNER] JOIN A B C A D R.A S.A B C D 1 a x 1 d 1 1 a x d 2 b y 2 d 2 2 b y d 3 a y 5 e 4 c y R S R S Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri LEFT [OUTER] JOIN A B C A D R.A S.A B C D 1 a x 1 d 1 1 a x d 2 b y 2 d 2 2 b y d 3 a y 5 e 3 Null a y Null 4 c y 4 Null c y Null R S R S Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri RIGHT [OUTER] JOIN A B C A D R.A S.A B C D 1 a x 1 d 1 1 a x d 2 b y 2 d 2 2 b y d 3 a y 5 e Null 5 Null Null e 4 c y R S R S Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri FULL [OUTER]JOIN A B C A D R.A S.A B C D 1 a x 1 d 1 1 a x d 2 b y 2 d 2 2 b y d 3 a y 5 e 3 Null a y Null 4 c y 4 Null c y Null Null 5 Null Null e R S R S Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Operaes sobre Conjuntos Unem duas relaes Operaes unio interseco diferena Caractersticas atuam sobre relaes compatveis eliminam tuplas duplicadas da relao resultado Duas relaes so compatveis se: possuem o mesmo grau seus atributos possuem os mesmos domnios (os domnios dos i-simos atributos de cada relao so os mesmos) Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Operaes sobre Conjuntos Unio (R ! S) gera uma relao que contm todas as tuplas pertencentes a R, a S, ou a ambas R e S Interseco (R " S) gera uma relao que contm todas as tuplas pertencentes tanto a R quanto a S Diferena (R ( S) gera uma relao que contm todas as tuplas pertencentes a R que no pertencem a S Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Operaes sobre Conjuntos SQL lgebra Relacional UNION ! INTERSECT " MINUS ( Observao operaes oferecidas dependem do SGBD Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplo Liste os nomes dos clientes que possuem nomes iguais aos nomes de vendedores.
SELECT nome_cli FROM cliente INTERSECT SELECT nome_vend FROM vendedor
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Subconsultas Aninhadas Subconsulta expresso SELECT ... FROM ... WHERE ... aninhada dentro de outra consulta Aplicaes mais comuns testes para membros de conjuntos comparaes de conjuntos cardinalidade de conjuntos Observao a mesma consulta SQL pode ser escrita de diversas maneiras Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Membros de um Conjunto IN testa se um atributo ou uma lista de atributos membro do conjunto NOT IN verifica a ausncia de um membro em um conjunto Conjunto: coleo de valores produzidos por uma clusula SELECT ... FROM ... WHERE ... Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplo Liste os nmeros dos clientes que tm nome igual ao nome de um vendedor.
SELECT nro_cli FROM cliente WHERE nome_cli IN (SELECT nome_vend FROM vendedor) Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Cardinalidade de Conjuntos EXISTS ... WHERE EXISTS (lista) a condio verdadeira quando a lista (resultado de uma consulta) no for vazia NOT EXISTS ... WHERE NOT EXISTS (lista) a condio verdadeira quando a lista for vazia Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplo Liste os nmeros dos clientes que tm nome igual ao nome de um vendedor. SELECT nro_cli FROM cliente WHERE EXISTS (SELECT * FROM vendedor WHERE cliente.nome_cli = vendedor.nome_vend) Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Diviso Diviso de duas relaes R e S todos os valores de um atributo de R que fazem referncia a todos os valores de um atributo de S Utilizada para consultas que incluam o termo para todos ou em todos Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri R: atende S: % cod_vend (vendedor) R S nro_cli cod_vend cod_vend nro_cli 9 12 66 1 1 04 04 1 66 4 03 cliente (nro_cli, nome_cli, end_cli, saldo) 5 11 atende (nro_cli, cod_vend) 8 04 vendedor (cod_vend, nome_vend) 8 74 lgebra Relacional: Exemplo Liste os nmeros dos clientes que j foram atendidos por todos os vendedores. Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Exemplo Liste os nmeros dos clientes que j foram atendidos por todos os vendedores. SELECT nro_cli FROM cliente WHERE NOT EXISTS ( (SELECT cod_vend FROM vendedor) MINUS (SELECT cod_vend FROM atende WHERE cliente.nro_cli = atende.nro_cli) ) Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri lgebra Relacional: Agregao Permite a utilizao de funes de agregao atributos_agrupamento ! funes_agregao ( relao argumento ) relao resultado de alguma operao da lgebra relacional lista de atributos de agrupamento os atributos so separados por vrgula Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: GROUP BY-HAVING SELECT <lista de atributos e funes> FROM <lista de tabelas> [ WHERE predicado ] [ GROUP BY <atributos de agrupamento> ] [ HAVING <condio para agrupamento> ] [ ORDER BY <lista de atributos> ] ; Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Funes de Agregao Funes Mdia: AVG( ) Mnimo: MIN( ) Mximo: MAX( ) Total: SUM( ) Contagem: COUNT( ) Observao DISTINCT: no considera valores duplicados ALL: inclui valores duplicados Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Funes de Agregao Caractersticas recebem uma coleo de valores como entrada retornam um nico valor SQL: Entrada sum( ) e avg( ): conjunto de nmeros demais funes: tipos de dados numricos e no-numricos Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Funes de Agregao vinho_id nome_vinho tipo_vinho preo vincola_id 10 Amanda tinto 100,00 1 09 Belinha branco 200,00 1 05 Camila ros 300,00 1 15 Daniela branco 250,00 2 27 Eduarda branco 150,00 2 48 Fernanda tinto 7,00 2 13 Gabriela tinto 397,00 3 12 Helena branco 333,00 3 vinho (vinho_id, nome_vinho, tipo_vinho, preo, vincola_id) Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplos Qual a mdia dos preos? ! AVG(preo) (vinho) SELECT AVG (preo) FROM vinho Qual o vinho mais barato e qual o vinho mais caro? ! MIN(preo), MAX(preo) (vinho) SELECT MIN (preo), MAX (preo) FROM vinho 217,125
7,00, 397,00 Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplos Quantos vinhos existem na relao vinho? ! COUNT (vinho_id) (vinho) SELECT COUNT (vinho_id) FROM vinho Quantos tipos de vinho diferentes existem na relao vinho? ! COUNT-DISTINCT (tipo_vinho) (vinho) SELECT COUNT (DISTINCT tipo_vinho FROM vinho 8 3 Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Clusula GROUP BY Funcionalidade permite aplicar uma funo de agregao no somente a um conjunto de tuplas, mas tambm a um grupo de conjunto de tuplas Grupo de conjunto de tuplas conjunto de tuplas que possuem o mesmo valor para os atributos de agrupamento Semntica da respostas atributos de agrupamento no GROUP BY tambm devem aparecer no SELECT Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Exemplo Qual o preo mais alto e a mdia dos preos por tipo de vinho? ' (tipo_vinho, maior preo, preo mdio)
( tipo_vinho ! MAX (preo), AVG (preo) (vinho))
SELECT tipo_vinho, MAX (preo) AS maior preo, AVG (preo) AS preo mdio FROM vinho GROUP BY tipo_vinho
Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Soluo do Exemplo As tuplas da tabela vinho so divididas em grupo, cada grupo contendo o mesmo tipo de valor para o atributo de agrupamento tipo_vinho vinho_id nome_vinho tipo_vinho preo vincola_id 10 Amanda tinto 100,00 1 09 Belinha branco 200,00 1 05 Camila ros 300,00 1 15 Daniela branco 250,00 2 27 Eduarda branco 150,00 2 48 Fernanda tinto 7,00 2 13 Gabriela tinto 397,00 3 12 Helena branco 333,00 3 Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri Consideraes adicionais a funo MAX e a funo AVG so aplicadas a cada grupo de tuplas separadamente a clusula SELECT inclui somente os atributos de agrupamento e as funes a serem aplicadas a cada grupo de tuplas o comando SELECT pode possuir clusula WHERE de qualquer complexidade SQL: Soluo do Exemplo Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Soluo do Exemplo tipo_vinho maior preo preo mdio branco 333 233,25 ros 300 300 tinto 397 168 Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Clusula HAVING Funcionalidade permite especificar uma condio de seleo para grupos, melhor do que para tuplas individuais Resposta recupera os valores para as funes somente para aqueles grupos que satisfazem condio imposta na clusula HAVING Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Exemplo Qual o preo mais alto e a mdia dos preos por tipo de vinho, para mdias de preos superiores a R$200,00 SELECT tipo_vinho, MAX (preo), AVG (preo) FROM vinho GROUP BY tipo_vinho HAVING AVG (preo) > 200
tipo_vinho max(preo) avg(preo) branco 333 233,25 ros 300 300 Banco de Dados lgebra Relacional e SQL Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL: Processamento da Consulta Passos aplica-se o predicado que aparece na clusula WHERE coloca-se as tuplas que satisfazem a clusula WHERE em grupos por meio da clusula GROUP BY aplica-se a clusula HAVING a cada grupo remove-se os grupos que no satisfazem o predicado da clusula HAVING exibe-se as colunas listadas na clusula SELECT