A linguagem SQL - IC

Propaganda
INF 314
Projeto de Bases de Dados
Relacionais e Linguagem SQL
Prof. Célio Guimarães
IC - Unicamp
Março 2003
A linguagem SQL
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
Modelo Relacional: Codd, 1970, definiu 2
meta-linguagens:
Álgebra Relacional
Cálculo Relacional de Tuplas
implementam os conceitos básicos do
modelo.
grande influência no desenvolvimento de
protótipos do Modelo Relacional
© Célio Cardoso Guimarães
UNICAMP
Histórico
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
SQL (“Structured Query Language):
linguagem de Definição e Manipulação de
dados relacionais
1973: SEQUEL - IBM Research Center NY
SEQUEL/2 - Sistema R - IBM San José
1983: SQL/DS - IBM
1986 - hoje: padronizada pelos comitês
ISO/ANSI.
– 1992: SQL2
– 1999: SQL:1999 (antes SQL3)
© Célio Cardoso Guimarães
UNICAMP
SGBDs Relacionais
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
Oracle
IBM DB2
SQL Server (MS)
Postgres (OpenSource)
MySql (Open Source)
Firebird (Open Source)
SAP DB (Open SOurce - antigo ADABAS)
© Célio Cardoso Guimarães
UNICAMP
SQL:1999
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
Facilidades marcantes:
consultas recursivas
“triggers”
tabelas aninhadas
orientação a objetos:
– “tipos abstratos de dados”
– “métodos”definidos pelo usuário
© Célio Cardoso Guimarães
UNICAMP
Programação em SQL
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
Duas formas principais:
“SQL direto”ou interativo.
– útil para ensino
– tarefas administrativas:
criação, alteração de tabelas, criação de
usuários, testes
“SQL embutido” (embedded SQL)
– embutido via biblioteca em linguagem de
3a geração: Delphi, VB, C
em aplicações para Web: Java, Php, Perl,
Python
© Célio Cardoso Guimarães
UNICAMP
Caracterı́sticas Básicas
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
C, Pascal, Java: linguagens algoritmicas
SQL: linguagem “não procedural” ou “não
algoritmica”
a sintaxe da linguagem especifica:
“que resultados se deseja obter”
e não: “seqüência de instruções para obter
resultados”
© Célio Cardoso Guimarães
UNICAMP
Recursos Básicos
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
“ Definição de Dados”(DDL):
permite especificar esquemas de tabelas
“ Manipulação de Dados”(DML):
permite modificar e recuperar dados.
Concessão, revogação de privilégios de
acesso a tabelas por parte de usuários
Suporte a “transações atômicas”
© Célio Cardoso Guimarães
UNICAMP
O ambiente de um SGBD relacional
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
uma ou mais instâncias do (programa)
SGBD: agente Servidor SQL,
programas de comunicação com agentes
clientes
agentes clientes se conectam local ou
remotamente ao agente Servidor SQL
uma ou mais Bases de Dados controladas
pelo agente Servidor SQL
uma coleção de usuários cadastrados e de
programas com acesso ao SGBD e às suas
Bases de Dados.
© Célio Cardoso Guimarães
UNICAMP
Composição de uma Base de Dados
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
Base de Dados SQL = catálogo contendo um
ou mais SQL-schemas.
SQL-schema= coleção de descritores de
objetos criados por um usuário (tabelas,
visões, restrições, ı́ndices, etc).
Exemplo: catálogo mydbase, usuário scott,
tabela mytable:
mydbase.scott.mytable
Information Schema ou Catálogo do Sistema:
tabelas SQL que descrevem todos os objetos
definidos nos SQL-schemas desse catálogo .
© Célio Cardoso Guimarães
UNICAMP
Conexão a um SGBD
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
connect nome-servidor e/ou nome-base-dados
[as nome-conexão] nome-usuário [senha]
primeira cadeia pode ser endereço DNS do
Servidor SQL remoto
Oracle: endereço DNS do Servidor remoto
e um alias no arquivo tnsnames.ora do
agente cliente,
usuário usa o alias no comando connect
connect inicia uma sessão SQL para o
usuário.
© Célio Cardoso Guimarães
UNICAMP
Tipos de dados
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
CHAR(n) cadeia com n caracteres,
VARCHAR(n) cadeia com até n caracteres,
BIT(n) cadeia com exatamente n bits,
VARBIT(n) cadeia com até n bits,
INT inteiro com sinal (precisão usualmente
32 bits)
SMALLINT inteiro com sinal (precisão varia
com implementação)
© Célio Cardoso Guimarães
UNICAMP
Tipos de dados (cont)
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
NUMERIC(p,q) decimal com p dı́gitos, sinal,
ponto decimal com q dı́gitos a partir da
direita.
DECIMAL(p,q) precisão pode ser maior que
p dı́gitos.
FLOAT ponto flutuante (precisão depende
da implementação)
© Célio Cardoso Guimarães
UNICAMP
Constantes (ou literais)
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
cadeia de caracteres: ’Rua do Cabral 1500’
(sensı́vel a maiúsculas/minúsculas),
constantes numéricas: 4, -95.7, +364.5,
+36.5E-5,
cadeia de bits: B’11001100’, B’0101’,
X’0D0A’, X’ffaa’ (binários e hexadecimais)
datas e horas: DATE ’1999-12-25’ , TIME
’18:45:00’ , TIMESTAMP ’1999-12-25
18:45:00’.
© Célio Cardoso Guimarães
UNICAMP
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Operadores aritméticos, de
comparação, concatenação
Célio Cardoso Guimarães
“+”, “-”, “*” e “/”, com o significado usual
, com o significado
usual
concatenador de cadeias:
’Pedro Alvares’
’Cabral’
© Célio Cardoso Guimarães
UNICAMP
Identificadores, palavras reservadas
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
Nomes definidos pelo usuário e palavras
reservadas não são sensı́veis a maiúsculas
e minúsculas.
Nos exemplos daremos preferência ao uso
de minúsculas
Identificador: começa por letra seguida
(qualquer ordem) de outras letras, dı́gitos
ou do caracter ( máximo 128
© Célio Cardoso Guimarães
UNICAMP
Comandos para definição de dados
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
CREATE TABLE: define o esquema de uma
tabela
ALTER TABLE: altera o esquema de uma
tabela
DROP TABLE: remove uma tabela da BD
© Célio Cardoso Guimarães
UNICAMP
Comandos para definição de dados
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
Esquemas das tabelas da BD “Torneios de
Tenis da ATP”:
Jogadores(numj, nome, pnome, pais, ano n,
ano p, cid n, cid res, tit s, tit d, vits, derrs,
natp)
Lista Torneios(numt, nomet, pais, cat,
quadra, nparts)
Torneios(numt, ano, numj, premio)
© Célio Cardoso Guimarães
UNICAMP
Create Table Jogadores
(numj
nome
pnome
pais
ano n
ano p
cid n
cid res
tit s
tit d
vits
derrs
natp
primary key(numj))
Definição das Tabelas
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
numeric(4)
not null,
varchar(16) unique not null,
varchar(16)
not null,
char(3)
not null,
numeric(4)
not null,
numeric(4)
not null,
varchar(16)
not null,
varchar(16)
not null,
numeric(4),
numeric(4)
default 0,
numeric(4),
numeric(4),
numeric(4)
unique,
© Célio Cardoso Guimarães
UNICAMP
numeric(2),
varchar(24)
char(3)
char(2)
char(1)
numeric(4),
Create Table Lista torneios
(numt
nomet
pais
cat
quadra
nparts
primary key(numt))
Definição das Tabelas (cont)
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
not null,
not null,
not null,
not null,
not null,
not null,
© Célio Cardoso Guimarães
UNICAMP
numeric(2)
numeric(4)
numeric(4)
numeric(4)
Create Table Torneios
(numt
ano
numj
premio
primary key(numt,ano),
foreign key(numt)
foreign key(numj)
Definição das Tabelas (cont)
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
not null,
not null,
not null,
not null,
references Lista torneios(numt),
references
Jogadores(numj))
© Célio Cardoso Guimarães
UNICAMP
Comandos para Dominios
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
create domain, alter domain, drop domain:
nem todos os SGBDs implementam.
Exemplo:
create domain pais default char(3) default
’EUA’
no comando create table jogadores anterior, a
linha pais char(3) not null, poderia ser
substituı́da por:
pais pais default,
© Célio Cardoso Guimarães
UNICAMP
Inserção de linhas numa tabela
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
Exemplos:
insert into jogadores
values(817, ’Courier’, ’Jim’, ’EUA’, 70, 78,
’Sanford’, ’Orlando’, 23, 6, 506, 237, NULL)
insert into Lista torneios
values(1, ’Australian Open’, ’AUS’, ’GS’, ’D’,
128)
insert into torneios
values(1, 1992, 817, 278)
© Célio Cardoso Guimarães
UNICAMP
pnome
Jim
Andre
Stefan
Sergi
Pete
Thomas
Boris
Yevgeny
Richard
Gustavo
Patrick
Petr
Carlos
Marat
Goran
Thomas
Albert
Lleyton
Andre
Fernando
pais
EUA
EUA
SWE
ESP
EUA
AUT
GER
RUS
HOL
BRA
AUS
CHE
ESP
RUS
CRO
SWE
ESP
AUS
BRA
BRA
cid n
Sanford
Las Vegas
Vastervik
Barcelna
Washington
Leibnitz
Leimen
Sochi
Rotterdham
Florianopolis
Mount Isa
Praga
Palma Maiorca
Moscou
Split
Linkoping
Lerida
Adelaide
Belo Horizonte
Buenos Aires
ano p
78
86
83
88
88
85
84
92
89
95
91
87
95
97
88
94
93
98
96
90
ano n
70
70
66
71
71
67
67
74
71
76
72
68
76
80
71
75
75
81
77
71
nome
Courier
Agassi
Edberg
Bruguera
Sampras
Muster
Becker
Kafelnikov
Krajicek
Kuerten
Rafter
Korda
Moya
Safin
Ivanisevic
Johansson
Costa
Hewitt
Sa
Meligeni
numj
817
29
19
16
812
102
1122
218
126
910
1228
123
827
127
913
324
625
224
56
412
Tabela Jogadores
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
cid res
Orlando
Las Vegas
Londres
Barcelona
Los Angeles
Monte Carlo
Monte Carlo
Sochi
Monte Carlo
Florianopolis
Bermuda
Monte Carlo
Genebra
Monte Carlo
Monte Carlo
Monte Carlo
Barcelona
Adelaide
Belo Horizonte
˜ Paulo
Sao
© Célio Cardoso Guimarães
UNICAMP
pais
AUS
FRA
ING
EUA
EUA
EUA
MON
ITA
GER
CAN
EUA
ESP
FRA
CHN
Lista Torneios
numt nomet
1
Australian Open
2
Roland Garros
3
Wimbledon
4
U.S. Open
5
Indian Wells
6
Miami
7
Monte Carlo Open
8
Roma
9
Hamburgo
10
Toronto
11
Cincinati
12
Madri
13
Paris Open
14
Tennis Masters Cup 2002
Tabela Lista Torneios
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
cat quadra nparts
GS
D
128
GS
S
128
GS
G
128
GS
D
128
MS
D
64
MS
D
96
MS
S
64
MS
S
64
MS
S
64
MS
D
64
MS
D
64
MS
T
64
MS
T
64
MS
D
8
© Célio Cardoso Guimarães
UNICAMP
Tabela Torneios
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
As quatro primeiras linhas da tabela Torneios
têm o formato:
1
2
3
4
...
Torneios
1992 817 278
1992 817 490
1992 29 501
1992 19 500
...
...
...
© Célio Cardoso Guimarães
UNICAMP
French Open
1925
Courier
Bruguera
Bruguera
Muster
Kafelnikov
Kuerten
Moya
Agassi
Kuerten
Kuerten
Costa
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
premio
KUS$
278
275
340
341
410
457
407
459
501
462
520
Ano
Torneios
Aus Open
1905
Courier
Courier
Sampras
Agassi
Becker
Sampras
Korda
Kafelnikov
Agassi
Agassi
Johansson
Tabela Torneios condensada
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
premio
KUS$
490
537
527
637
640
644
649
668
590
594
718
© Célio Cardoso Guimarães
UNICAMP
Comando Alter Table
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
Exemplos:
Alter Table Torneios add column num vice
numeric(4) default 0
Se quisermos adicionar uma restrição de
integridade poderı́amos fazer:
Alter Table Lista Torneios add constraint c1
check(cat in (’GS’, ’MS’, ’IS’))
Se agora quisermos remover essa restrição:
Alter Table Lista Torneios drop constraint c1
Para remover uma coluna:
Alter Table Lista Torneios drop column
num vice
© Célio Cardoso Guimarães
UNICAMP
Guia para nomes de tabelas, colunas
Modelagem, projeto e linguagem SQL
Fundamentos de
bancos de dados
Célio Cardoso Guimarães
use nomes para tabelas no plural
é conveniente um atributo que é Chave
Estrangeira ter o mesmo nome da Chave
Primária referenciada,
pois é muito comum usá-lo em junções
Exemplo: tabela Torneios
vencedor recebeu o nome numj
coluna para torneio recebeu o nome numt
com frequencia faremos a junção de
Torneios com Jogadores e Lista Torneios,
nessas colunas.
© Célio Cardoso Guimarães
UNICAMP
Download