sql 6ª ed

6

Upload: grupo-lidel

Post on 25-Jul-2016

237 views

Category:

Documents


0 download

DESCRIPTION

Esta é uma obra fundamental e de leitura obrigatória pois aborda a temática do acesso a bases de dados através da linguagem SQL - um standard internacional. As matérias são apresentadas de forma detalhada e pragmática recorrendo a múltiplos exemplos de comandos que são explicados com o detalhe suficiente para se tornarem acessíveis mesmo a leitores sem qualquer experiência de programação. A partir da 6ª edição foram adicionados quatro novos capítulos que permitem ao leitor ter uma panorâmica global sobre o contexto em que se inserem as bases de dados e os sistemas de informação, nomeadamente os vários modelos de bases de dados, desenho de bases de dados, normalização, etc. São tratados com especial cuidado os comandos mais utilizados da linguagem: SELECT / INSERT, UPDATE e DELETE / CREATE, ALTER e DROP / GRANT e REVOKE. Comandos SQL testados em Access, SQL Server, Oracle e MySQL.

TRANSCRIPT

Page 1: SQL  6ª Ed
Page 2: SQL  6ª Ed

BBAASSEESS DDEE DDAADDOOSS ((VVIISSÃÃOO GGEERRAALL))

FCA - Editora de Informática 17

O primeiro passo na criação de uma base de dados consiste no seu desenho lógico

utilizando ferramentas de análise.

Neste processo, a fase inicial consiste em elaborar um esquema visual (normalmente

utiliza-se o modelo entidade-associação) que represente a estrutura a implementar mais

tarde como base de dados.

Este é um processo que se desenrola de forma transparente e independente da estrutura de base de dados ou do sistema gestor de base de dados que vier a ser adoptado.

Ora, no problema que nos foi apresentado, existem duas entidades descritas no enunciado

Carro e Pessoa.

O passo seguinte consiste em estabelecer uma relação entre as duas entidades para que possamos relacionar os dados de uma com os dados da outra.

A linha que une as duas entidades estabelece a relação entre elas.

Na realidade existem duas relações:

Entre carro e pessoa (usado por); ( sentido: ) Entre pessoa e carro (usa). ( sentido: )

mas é costume optar por uma delas (pela mais óbvia).

O “pé de galo” colocado no lado da entidade Pessoa significa que um carro pode ser

usado por mais do que uma pessoa. Como não existe pé de galo no lado da entidade Carro, quer isto dizer que, a cada pessoa, só está associado um carro.

Depois de identificadas as entidades e estabelecidas as respectivas relações, é necessário

indicar que atributos vão fazer parte de cada uma delas, isto é, que dados fazem parte da definição da entidade Carro e da entidade Pessoa.

Existindo uma relação quase directa entre o modelo relacional e a implementação física da base de dados desse mesmo modelo, é natural que se opte por este modelo para fazer a

Carro Pessoa

Carro Pessoa Usado por

Page 3: SQL  6ª Ed

DDEESSEENNHHOO DDEE BBAASSEESS DDEE DDAADDOOSS RREELLAACCIIOONNAAIISS

FCA - Editora de Informática 115

Problema: Um código postal pode estar associado a quantas pessoas?

Resposta: Várias, logo colocamos o pé-de-galo junto à entidade Pessoa.

Problema: Um código postal tem que estar associado a alguém?

Resposta: Não. Logo, não existe obrigatoriedade no lado da entidade Pessoa.

Os atributos associados a cada uma das entidades irão ser:

Postal(Código, Localidade) Pessoa(Id, Nome, Idade, Salário, Telefone, Cod_Postal)

Como existe uma relação do tipo 1:N entre as entidades Postal e Pessoa, a entidade do lado N (Pessoa), recebe como atributo (chave estrangeira) a chave da entidade do lado 1

(Postal), para que a relação possa ser estabelecida. Assim, a relação entre as entidades é estabelecida entre os atributos Código e Cod_Postal.

Vejamos agora as tabelas respectivas com alguns dados já carregados.

ID Nome Idade Salario Telefone Cod_Postal

42 António Dias 43 74000 789654 1500

5 Célia Morais 26 170000 123456 1100

32 Florinda Simões 35 147000 4000

37 Isabel Espada 28 86000 1100

49 José António 17 210000 1500

14 Nascimento Augusto 35 220000 456123 2300

25 Paulo Viegas 32 95000 1500

Exemplo de dados da tabela “Pessoa”

Pessoa Postal Tem

Pessoa Postal Tem

Page 4: SQL  6ª Ed

SSQQLL –– SSTTRRUUCCTTUURREEDD QQUUEERRYY LLAANNGGUUAAGGEE

176 FCA - Editora de Informática

6.2 Ordenação por uma Coluna A ordenação por coluna faz-se especificando, na cláusula ORDER BY, qual a coluna pela qual se pretende ordenar.

Problema: Seleccionar todas as pessoas, ordenando o resultado pela Idade.

SELECT * FROM Pessoa ORDER BY Idade

+----+-------------------+-------+-----------+----------+------------+ | Id | Nome | Idade | Salario | Telefone | Cod_Postal | +----+-------------------+-------+-----------+----------+------------+ | 49 | José António | 17 | 210000.00 | NULL | 1500 | | 5 | Célia Morais | 26 | 170000.00 | 123456 | 1100 | | 37 | Isabel Espada | 28 | 86000.00 | NULL | 1100 | | 25 | Paulo Viegas | 32 | 95000.00 | NULL | 1500 | | 32 | Florinda Simões | 35 | 147000.00 | NULL | 4000 | | 14 | Nascimento Augusto| 35 | 220000.00 | 456123 | 2300 | | 42 | António Dias | 43 | 74000.00 | 789654 | 1500 | +----+-------------------+-------+-----------+----------+------------+

Por defeito a ordenação é Ascendente.

Assim, o comando anterior é equivalente a:

SELECT * FROM Pessoa ORDER BY Idade ASC

Problema: Seleccionar o Nome e o Salário de todas as Pessoas, ordenando o resultado

pelo Salário, de tal forma que os maiores ordenados fiquem no topo da lista.

Resolução: Teremos que fazer uma selecção ordenada de registos em que a ordenação

tem que ser feita descendentemente (DESC) de maneira que os maiores salários apareçam no topo da lista.

Nota

Page 5: SQL  6ª Ed

CCRRIIAAÇÇÃÃOO EE MMAANNUUTTEENNÇÇÃÃOO DDEE TTAABBEELLAASS

FCA - Editora de Informática 275

12.5.3.3 Constraint UNIQUE

A Constraint UNIQUE permite indicar que os valores dessa coluna não se podem repetir. Para garantir que não existem dados repetidos nessa coluna, os SGBDR criam, sobre cada

uma das colunas UNIQUE, um índice único (a ver no próximo capítulo).

Numa tabela podem existir tantas colunas UNIQUE quantas forem necessárias.

CREATE TABLE Teste( Id INTEGER PRIMARY KEY, Nome CHAR(60) UNIQUE, Telefone CHAR(15),

BI INTEGER UNIQUE)

O comando anterior poderia ser escrito da seguinte forma:

CREATE TABLE Teste( Id INTEGER PRIMARY KEY, Nome CHAR(60),

Telefone CHAR(15), BI INTEGER,

UNIQUE(Nome), UNIQUE(BI) )

Nem todos os sistemas implementam a característica UNIQUE da mesma

forma. Embora nenhum deles admita repetição de valores, a forma como os nulos são tratados pode ser diferente de sistema para sistema. Por exemplo, em

Oracle é possível adicionar valores NULL repetidos numa coluna UNIQUE, enquanto o MySQL e o SQL AnyWhere não aceita o valor NULL em campos UNIQUE.

Se necessário, é possível a especificação da Constraint UNIQUE relativa a duas ou mais

colunas seguindo a forma apresentada. No exemplo seguinte, garante-se que não existem

na tabela duas pessoas com o mesmo nome e apelido.

CREATE TABLE Teste( Id INTEGER PRIMARY KEY, Nome CHAR(50), Apelido CHAR(10), Telefone CHAR(15), BI INTEGER, UNIQUE(Nome,Apelido), UNIQUE(BI) )

Nota

Page 6: SQL  6ª Ed

SSQQLL EE VVIISSUUAALL BBAASSIICC

FCA - Editora de Informática 389

Fig. 17.13 - Ecrã de Gestão de Códigos Postais

No início do Form procede-se à declaração de um DataAdapter que irá fazer a ligação física aos dados e de um DataSet que os irá suportar em termos aplicacionais.

Dim DA As New OleDbDataAdapter("SELECT * FROM Postal ", Conn) Dim DsPostal As New DataSet

No evento Load do form começamos por declarar um objecto do tipo CommandBuilder de modo a preencher os comandos INSERT, UPDATE e DELETE do DataAdapter.

Private Sub fPostal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim cmd As New OleDbCommandBuilder(DA)

Depois procedemos ao preenchimento do DataSet e à associação da grelha ao DataSet. Try DsPostal.Clear() DA.Fill(DsPostal) DataGrid.DataMember = "Postal" DataGrid.DataSource = DsPostal.Tables(0) DataGrid.Refresh() Catch ex As Exception MsgBox(ex.Message) End Try End Sub