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