Baco de Dados Liguagem SQL 1
A liguagem SQL: história Em juho de 1970, o matemático Edgar Frak Codd, publicou o artigo "A Relatioal Model of Data for Large Shared Data Baks" a revista "Commuicatios of the ACM ; Neste trabalho, Codd estabeleceu pricípios sobre gerecia de baco de dados, deomiado-os com o termo relacioal; Esse material é um marco a área de baco de dados; Codd faleceu em 18 de abril de 2003, aos 79 aos; A razão do sucesso dos bacos de dados relacioais e da liguagem SQL se deve ao fato de existir um modelo matemático formal que serviu de base para seu desevolvimeto. A liguagem SQL: história A liguagem SQL foi desevolvido o iício dos aos 70 os laboratórios da IBM em Sa Jose, detro do projeto System R, que tiha por objetivo demostrar a viabilidade da implemetação do modelo relacioal proposto por E. F. Codd. O ome origial da liguagem era SEQUEL, acrôimo para "StructuredEglish Query Laguage", vido daí o fato de, até hoje, a sigla, em iglês, ser comumete prouciada "síquel. A liguagem SQL é um grade padrão de baco de dados. Isto decorre da sua simplicidade e facilidade de uso; A SQL é uma liguagem declarativa, em oposição a outras liguages procedurais. A liguagem SQL especifica a forma do resultado e ão o camiho para chegar a ele. Isto reduz o ciclo de apredizado daqueles que se iiciam a liguagem. 2
A liguagem SQL: história Embora o SQL teha sido origialmete criado pela IBM, rapidamete surgiram vários "dialetos" desevolvidos por outros produtores. Essa expasão levou à ecessidade de ser criado e adaptado um padrão para a liguagem. Esta tarefa foi realizada pela America Natioal Stadards Istitute (ANSI em 1986 e ISO em 1987. A liguagem SQL: história A SQL foi revista em 1992 e a esta versão foi dado o ome de SQL-92 ou SQL2. Foi revisto ovamete em 1999 e 2003 para se torar SQL:1999 (SQL3 e SQL:2003, respectivamete. A liguagem SQL, embora padroizado pela ANSI e ISO, possui muitas variações e extesões produzidas pelos diferetes fabricates de sistemas gereciadores de bases de dados. A liguagem pode ser migrada de plataforma para plataforma sem grades mudaças estruturais. 3
A liguagem SQL: estrutura Liguagem de Defiição de dados (DDL Subcojuto de comados para defiição e modificação de esquemas de relação (tabelas, remoção de tabelas, etc. Liguagem de Maipulação de dados (DML Subcojuto de comados para iserir, remover e modificar iformações em um baco de dados. Liguagem de Cotrole de Dados (DCL Subcojuto de comados para cotrolar aspectos de autorização de dados e liceças de usuários; Liguagem de Defiição de Dados DDL 4
Liguagem de Defiição de Dados: Relação Relação É a matéria prima para a costrução de toda a teoria do modelo relacioal e, por coseqüêcia, é o alicerce teórico de todo sistema de baco de dados baseado o modelo relacioal. Nos sistemas de baco de dados relacioais os dados são agrupados em TABELAS. Uma tabela possui um ome e é costituída de uma ou mais coluas (ou campos. Os campos devem também possuir um ome, jutamete com o tipo de dado que será armazeado a colua. Liguagem de Defiição de Dados: Relação Cliete Relação ou tabela CodCli Edereco colua, campo ou atributo 123 João Rua Pio XI 567 Maria Rua S. Fracisco 678 Joaa Av. Liberdade liha ou registro 876 Gabriela Av. Jatiúca 976 Aa Júlia Av. São Paulo 5
Liguagem de Defiição de Dados Liguagem de Defiição de Dados: comados CREATE objeto cria um objeto (uma Tabela, por exemplo o baco de dados. DROP objeto Apaga/exclui um objeto do baco de dados. ALTER objeto Altera a estrutura ou a cofiguração de um objeto o baco de dados 6
Liguagem de Defiição de Dados: tipos de dados (Iterbase CHAR( Armazea caracteres alfauméricos de tamaho fixo. = 1 a 32767 CHARACTER( VARCHAR( INTEGER Cadeia de caracteres de comprimeto variável e tamaho máximo de caracteres. = 1 a 32767 Dado umérico iteiro de tamaho fixo (32 bits. Represeta valores o itervalo de: 2.147.483.648 a -2.147.483.647 SMALLINT Represeta valores iteiros de 16 bits o itervalo de: -37.768 a 32.767 NUMERIC(,m Dado umérico de tamaho variável, sedo o úmero total de dígitos e m o úmero DECIMAL(,m de casas decimais. O Parâmetro m é opcioal FLOAT DATE TIME TIMESTAMP BLOB Dado umérico de poto flutuate com precisão de 7 dígitos. Tem tamaho de 32 bits e armazea valores o itervalo de: 1.175 x 10-38 a 3.402 x 10 38 Data de tamaho fixo. Hora de tamaho fixo Itegra iformações de data e hora BiaryLargeObject. Possui tamaho variável e permite armazear dados, tais como images, audio, vídeo, etc. Os subtipos defiem o coteúdo do campo. Os subtipos 0 e 1 são mais utilizados: 0 = dados biários de tipo idetermiado; 1 = Texto Liguagem de Defiição de Dados: criado tabelas Aluo RA RG Edereco Sexo dt_asc umeric(8 char(40 umeric(10 varchar(50 char(1 date create table Aluo ( RA umeric(8, ome char(40, rg umeric(10, edereco varchar(50, sexo char(1, dt_asc date 7
Liguagem de Defiição de Dados: restrição de itegridade Chave primária A fução da chave primária é idetificar uivocamete cada registro da tabela. Toda tabela deve possuir uma chave primária, que deve ser composta por um ou mais campos. Todo campo que compõe a chave primária dever ter a cláusula NOT NULL. create table Aluo ( ra umeric(8 ot ull primary key, ome char(40, rg umeric(10, edereco varchar(50, sexo char(1, dt_asc date Liguagem de Defiição de Dados: restrição de itegridade Evitado valores ulos É muito comum defiirmos campos que ão podem coter valores ulos. Isto é, o preechimeto do campo é obrigatório. Para evitar que em algum mometo um campo de uma tabela possa coter valor ulo (ull deve-se utilizar a cláusula NOT NULL após a defiição do campo. create table Aluo ( ra umeric(8 ot ull primary key, ome char(40 ot ull, rg umeric(10, edereco varchar(50, sexo char(1, dt_asc date 8
Liguagem de Defiição de Dados: restrição de itegridade Evitado valores iválidos Existem situações ode um campo pode receber apeas algus determiados valores. Para que o valor de um campo fique restrito a um determiado cojuto de valores, utiliza-se a cláusula CHECK. create table Aluo ( ra umeric(8 ot ull primary key, ome char(40 ot ull, rg umeric(8, edereco varchar(50, sexo char(1 CHECK(sexo= M or sexo= F, dt_asc date Liguagem de Defiição de Dados: restrição de itegridade Evitado valores duplicados Existem situações as quais ão deve existir dois iguais armazeados em uma mesma colua. Isto é, valores iseridos em uma ou mais coluas são úicos para cada liha da tabela; Para evitar que um valor armazeado em uma colua de uma liha seja igual ao valor armazeado a mesma colua de outra liha, utiliza-se a cláusula UNIQUE. A cláusula UNIQUE deve ser usada jutamete com a cláusula NOT NULL create table Aluo ( ra umeric(8 ot ull primary key, ome char(40 ot ull, rg umeric(8 ot ull UNIQUE, edereco varchar(50, sexo char(1 CHECK(sexo= M or sexo= F, dt_asc date 9
Exercícios Exercício 1 Cod_liv Título edicao ISBN ao prateleira Livro autoria 1 editado liv_assuto Editora Edereco Cidade CNPJ Telefoe Autor Cod_au CPF Edereco Cidade RG Telefoe Cod_as Assuto descricao 10
Exercício 1: resposta create table editora ( cod_ed umeric(3 ot ull primary key, ome varchar(40 ot ull, cpj umeric(15 ot ull UNIQUE, edereco varchar(50, telefoe char(15, cidade varchar(30, uf char(2 Editora ome CNPJ edereco telefoe cidade Liguagem de Defiição de Dados: itegridade referecial É utilizada para garatir a Itegridade dos dados etre as tabelas; Aluo RA RG Edereco Sexo dt_asc cd_curso umeric(8 char(40 umeric(10 varchar(50 char(1 date iteger Curso # cd_curso iteger char(40 11
Liguagem de Defiição de Dados: itegridade referecial 1. create table Curso ( cd_curso iteger ot ull primary key, ome char(40 ot ull, 2. create table Aluo ( ra umeric(8 ot ull primary key, ome char(40 ot ull, rg umeric(8 ot ull UNIQUE, edereco varchar(50, sexo char(1 CHECK(sexo= M or sexo= F, dt_asc date, cd_curso iteger refereces curso(cd_curso Liguagem de Defiição de Dados: itegridade referecial Curso cd_curso ome 01 Ciêcia da Computação 02 Ciêcia da Iformação O campo cd_curso da tabela Aluo é chamado de chave estrageira ( Foreig Key Aluo RA ome Rg edereco sexo Dt_asc Cd_curso 1242532 Maoel 13243647 Rua Cico M 30/01/1963 01 1425534 Johaa 62736432 Rua São Paulo F 14/11/1950 02 1565243 Maria 6152632 Rua Pio XII F 15/09/1980 02 4537642 João 746732 Rua Leão 23 M 14/08/1970 01 12
Liguagem de Defiição de Dados: itegridade referecial Curso cd_curso ome 01 Ciêcia da Computação 02 Ciêcia da Iformação Mas... e se os dados da tabela Curso forem alterados ou excluídos? Aluo RA ome Rg edereco sexo Dt_asc Cd_curso 1242532 Maoel 13243647 Rua Cico M 30/01/1963 01 1425534 Johaa 62736432 Rua São Paulo F 14/11/1950 02 1565243 Maria 6152632 Rua Pio XII F 15/09/1980 02 4537642 João 746732 Rua Leão 23 M 14/08/1970 01 Liguagem de Defiição de Dados: itegridade referecial Cláusulas complemetares à cláusula REFERENCES campo REFERENCES outra_tabela (outro_campo ON DELETE { CASCADE SET NULL } ON UPDATE { CASCADE SET NULL } 13
Liguagem de Defiição de Dados: itegridade referecial create table Curso ( cd_curso iteger ot ull primary key, ome char(40 ot ull, create table Aluo ( ra umeric(8 ot ull primary key, ome char(40 ot ull, rg umeric(10 ot ull UNIQUE, edereco varchar(50, sexo char(1 CHECK(sexo= M or sexo= F, dt_asc date, cd_curso iteger REFERENCES curso(cd_curso ON DELETE CASCADE Liguagem de Defiição de Dados: itegridade referecial Curso cd_curso ome 01 Ciêcia da Computação 02 Ciêcia da Iformação Aluo RA ome Rg edereco sexo Dt_asc cd_curso 1242532 Maoel 13243647 Rua Cico M 30/01/1963 01 1425534 Johaa 62736432 Rua São Paulo F 14/11/1950 02 1565243 Maria 6152632 Rua Pio XII F 15/09/1980 02 4537642 João 746732 Rua Leão 23 M 14/08/1970 01 cd_curso REFERENCES curso(cd_curso ON DELETE CASCADE 14
Liguagem de Defiição de Dados: itegridade referecial create table Curso ( cd_curso iteger ot ull primary key, ome char(40 ot ull, create table Aluo ( ra umeric(8 ot ull primary key, ome char(40 ot ull, rg umeric(10 ot ull UNIQUE, edereco varchar(50, sexo char(1 CHECK(sexo= M or sexo= F, dt_asc date, cd_curso iteger REFERENCES curso(cd_curso ON DELETE SET NULL Liguagem de Defiição de Dados: itegridade referecial Curso cd_curso ome 01 Ciêcia da Computação 02 Ciêcia da Iformação Aluo RA ome Rg edereco sexo Dt_asc cd_curso 1242532 Maoel 13243647 Rua Cico M 30/01/1963 01 1425534 Johaa 62736432 Rua São Paulo F 14/11/1950 02 1565243 Maria 6152632 Rua Pio XII F 15/09/1980 02 4537642 João 746732 Rua Leão 23 M 14/08/1970 01 cd_curso REFERENCES curso(cd_curso ON DELETE SET NULL 15
Liguagem de Defiição de Dados: itegridade referecial create table Curso ( cd_curso iteger ot ull primary key, ome char(40 ot ull, create table Aluo ( ra umeric(8 ot ull primary key, ome char(40 ot ull, rg umeric(10 ot ull UNIQUE, edereco varchar(50, sexo char(1 CHECK(sexo= M or sexo= F, dt_asc date, cd_curso iteger REFERENCES curso(cd_curso ON UPDADE CASCADE Liguagem de Defiição de Dados: itegridade referecial 01 Curso cd_curso ome 17 Ciêcia da Computação 02 Ciêcia da Iformação Aluo RA ome Rg edereco sexo Dt_asc cd_curso 1242532 Maoel 13243647 Rua Cico M 30/01/1963 17 1425534 Johaa 62736432 Rua São Paulo F 14/11/1950 02 1565243 Maria 6152632 Rua Pio XII F 15/09/1980 02 4537642 João 746732 Rua Leão 23 M 14/08/1970 17 cd_curso REFERENCES curso(cd_curso ON UPDATE CASCADE 16
Liguagem de Defiição de Dados: itegridade referecial create table Curso ( cd_curso iteger ot ull primary key, ome char(40 ot ull, create table Aluo ( ra umeric(8 ot ull primary key, ome char(40 ot ull, rg umeric(10 ot ull UNIQUE, edereco varchar(50, sexo char(1 CHECK(sexo= M or sexo= F, dt_asc date, cd_curso iteger REFERENCES curso(cd_curso ON UPDADE SET NULL Liguagem de Defiição de Dados Itegridade Referecial 01 Curso cd_curso ome 17 Ciêcia da Computação 02 Ciêcia da Iformação Aluo RA ome Rg edereco sexo Dt_asc cd_curso 1242532 Maoel 13243647 Rua Cico M 30/01/1963 01 1425534 Johaa 62736432 Rua São Paulo F 14/11/1950 02 1565243 Maria 6152632 Rua Pio XII F 15/09/1980 02 4537642 João 746732 Rua Leão 23 M 14/08/1970 01 cd_curso REFERENCES curso(cd_curso ON UPDATE SET NULL 17
Exercícios Exercício 2 Cod_liv Título ISBN edicao ao Livro 1 editado Editora autoria liv_assuto Edereco Cidade CNPJ Telefoe Autor Cod_au CPF Edereco Cidade RG Telefoe Cod_as Assuto descricao 18
Exercício 2: resposta create table livro ( cod_liv umeric(5 ot ull primary key, titulo varchar(40 ot ull, isb umeric(15, edicao umeric(2, ao umeric(4, cod_ed umeric(3 refereces editora(cod_ed o update cascade o delete set ull Exercício 2: resposta Editora ome CNPJ edereco telefoe cidade Livro Cod_liv titulo isb edicao ao 19
Liguagem de Defiição de Dados: alterado a estrutura de uma tabela Adicioado um ovo campo ALTER TABLE tabela ADD ome_campo tipo_dado Alteração do ome do campo ALTER TABLE tabela ALTER ome_campo TO ovo_ome_campo Alteração do tipo (de dado de um campo ALTER TABLE tabela ALTER ome_campo TYPE ovo_tipo Alterado a posição de um campo a tabela ALTER TABLE tabela ALTER ome_campo POSITION Excluido um campo ALTER TABLE tabela DROP ome_campo Excluido uma tabela DROP TABLE tabela é a ova posição do campo a tabela A posição do primeiro campo é zero Exercícios 20
Exercício 3 Cod_liv Título ISBN edicao ao Livro 1 editado Editora autoria liv_assuto Edereco Cidade CNPJ Telefoe Cod_au Autor Edereco Cidade CPF RG Telefoe Cod_as Assuto descricao Exercício 3: resposta create table autor ( cod_au umeric(3 ot ull primary key, ome varchar(40 ot ull, cpf umeric(11, rg umeric(10, edereco varchar(50, telefoe char(15, cidade varchar(30, uf char(2 Autor Cod_au ome cpf rg edereco telefoe cidade uf 21
Exercício 4 Cod_liv Título ISBN edicao ao Livro 1 editado Editora autoria liv_assuto Edereco Cidade CNPJ Telefoe Autor Cod_au CPF Edereco Cidade RG Telefoe Cod_as Assuto descricao Exercício 4: resposta create table assuto ( cod_as umeric(3 ot ull primary key, descricao varchar(40 ot ull, Assuto Cod_as descricao 22
Exercício 5: trasformar relacioametos : em tabelas Cod_liv Título ISBN edicao ao Livro 1 editado Editora autoria liv_assuto Edereco Cidade CNPJ Telefoe Cod_au Autor Edereco Cidade CPF RG Telefoe Cod_as Assuto descricao Cod_liv Cod_au Título ISBN CPF Exercício 5 edicao Livro Autor Edereco RG autoria ao Cidade Telefoe create table livro ( cod_liv umeric(5 ot ull primary key, titulo varchar(40 ot ull, isb umeric(15, edicao umeric(2, ao umeric(4, prateleira iteger, cod_ed umeric(3 refereces editora(cod_ed o update cascade o delete set ull create table autoria ( cod_liv umeric(5 ot ull refereces livro(cod_liv o update cascade o delete cascade, cod_au umeric(3 ot ull refereces autor(cod_au o update cascade o delete cascade, primary key(cod_liv, cod_au create table autor ( cod_au umeric(3 ot ull primary key, ome varchar(40 ot ull, cpf umeric(11, rg umeric(10, edereco varchar(50, telefoe char(15, cidade varchar(30, uf char(2 23
Cod_liv Cod_as Título ISBN Exercício 5 edicao Livro liv_assuto Assuto ao create table livro ( cod_liv umeric(5 ot ull primary key, titulo varchar(40 ot ull, isb umeric(15, edicao umeric(2, ao umeric(4, prateleira iteger, cod_ed umeric(3 refereces editora(cod_ed o update cascade o delete set ull create table liv_assuto ( cod_liv umeric(5 ot ull refereces livro(cod_liv o update cascade o delete cascade, cod_as umeric(3 ot ull refereces assuto(cod_as o update cascade o delete cascade, primary key(cod_liv, cod_as create table asuto ( cod_as umeric(3 ot ull primary key, ome varchar(40 ot ull, descricao Resultado fial Cod_liv Título ISBN edicao ao Livro 1 editado Editora autoria liv_assuto Edereco Cidade CNPJ Telefoe Cod_au Autor Edereco Cidade CPF RG Telefoe Cod_as Assuto descricao 24
Resultado fial Livro Cod_liv titulo isb edicao ao Editora ome CNPJ edereco telefoe cidade Autoria Cod_liv Cod_au liv_assuto Cod_liv Cod_as Autor Assuto Cod_au ome cpf rg edereco telefoe cidade uf Cod_as descricao create table editora ( cod_ed umeric(3 ot ull primary key, ome varchar(40 ot ull, cpj umeric(15 ot ull UNIQUE, edereco varchar(50, telefoe char(15, create table livro cidade varchar(30, ( cod_liv umeric(5 ot ull primary key, uf char(2 titulo varchar(40 ot ull, isb umeric(15, edicao umeric(2, ao umeric(4, create table autor cod_ed umeric(3 refereces editora(cod_ed o update cascade o delete set ull ( cod_au umeric(3 ot ull primary key, ome varchar(40 ot ull, cpf umeric(11, rg umeric(10, edereco varchar(50, telefoe char(15, create table assuto cidade varchar(30, ( cod_as umeric(3 ot ull primary key, uf char(2 descricao varchar(40 ot ull, create table autoria ( cod_liv umeric(5 ot ull refereces livro(cod_liv create table liv_assuto o update cascade ( cod_liv umeric(5 ot ull refereces livro(cod_liv o delete cascade, cod_au umeric(3 ot ull refereces autor(cod_au o update cascade o update cascade o delete cascade, o delete cascade, cod_as umeric(3 ot ull refereces assuto(cod_as primary key(cod_liv, cod_au o update cascade o delete cascade, primary key(cod_liv, cod_as 25