BANCO DE DADOS Universidade do Estado de Santa Catarina Centro de Ciências Tecnológicas Departamento de Ciência da Computação Prof. Alexandre Veloso de Matos alexandre.matos@udesc.br
SQL (STRUCTUREDQUERY LANGUAGE) Linguagem comercial para BD relacional: Padrão ISO desde a década de 80: SQL-1 (86); SQL-2 (92); SQL-3 (99). Não é apenas uma linguagem de consulta! Embora o nome sugira! Base Formal: Álgebra relacional e cálculo relacional.
SQL (STRUCTUREDQUERY LANGUAGE) Pode ser considerada uma das maiores razões para o sucesso dos sistemas de banco de dados relacionais. É suportada por todos os SGBDs relacionais comerciais. Estes deveriam suportar um padrão SQL padrão. Alguns fornecedores incluem outros comandos próprios.
SQL (STRUCTUREDQUERY LANGUAGE) Em resposta a proliferação dos dialetos do SQL, ANSI publicou seu primeiro padrão SQL em 1986 [1989] alterações ao padrão SQL 1986 [1992 e 1993] padrões SQL adotados pela ISO [1999 e 2003] busca por uma sinergia entre ANSI e ISO [2006] tentativa de aproximar dialetos SQL de expressões XML
SQL (STRUCTURED QUERY LANGUAGE) Funcionalidades principais: Definição (DDL) e manipulação (DML) de dados; Definição de visões e autorizações de acesso; Definição de restrições de integridade; Definição de transações; Comandos para embutimento em LPs.
SQL: DDL Criação de um BD: SQL padrão não oferece tal comando: BDs são criados via ferramentas do SGBD. Alguns SGBDs (SQL Server, DB2, MySQL) oferecem este comando: CREATE DATABASE nome_bd DROP DATABASE nome_bd
SQL: DDL Comandos para definição de esquemas: CREATE TABLE Define a estrutura da tabela, suas restrições de integridade e cria uma tabela vazia. ALTER TABLE Modifica a definição de uma tabela: Inclusão / Exclusão / Alteração de atributos; Inclusão / Exclusão de regras de integridade. DROP TABLE Remove uma tabela com todas as suas tuplas.
SQL: CREATE TABLE CREATE TABLE nome_tabela ( nome_atributo_1 tipo_1 [[NOT]NULL][UNIQUE] [{, nome_atributo_ntipo_n}] [, PRIMARY KEY (nome(s)_atributo(s))] [{, FOREIGN KEY (nome_atributo) REFERENCES nome_tabela(nome_atributo}] )
SQL: CREATE TABLE Principais tipos de dados do MySQL: int, smallint, tinyint, numeric(tamanho[,nro_casas_decimais]), char(tamanho), varchar(tamanho), date, time, datetime,... Formato para data e hora: YYYY-MM-DD HH:MM:SS
SQL: CREATETABLE-EXEMPLOS CREATE TABLE laboratorio( cdlabo INT NOT NULL, delabo VARCHAR(50), PRIMARY KEY (cdlabo)); CREATE TABLE consulta( cdconsulta INTEGER NOT NULL AUTO_INCREMENT, cdmedico INT NOT NULL, cdpaciente INT NOT NULL, deconsulta VARCHAR(50), dtconsulta DATE, hrconsulta TIME, demedicacao VARCHAR(100), dediagnostico VARCHAR(200), nuvalor DECIMAL(10,2), PRIMARY KEY (cdconsulta), FOREIGN KEY (cdmedico) REFERENCES medico (cdmedico), FOREIGN KEY (cdpaciente) REFERENCES paciente (cdpaciente));
SQL: ALTER TABLE ALTER TABLE nome_tabela ADD [COLUMN] nome_atributo_1 tipo_1 [{RIs}] [{, nome_atributo_n tipo_n [{RIs}]}] MODIFY [COLUMN] nome_atributo_1 tipo_1 [{RIs}] [{, nome_atributo_n tipo_n [{RIs}]}] DROP COLUMN nome_atributo_1 [{, nome_atributo_n }] ADD CONSTRAINT nome_ri_1 def_ri_1 [{, nome_ri_n def_ri_n}] DROP CONSTRAINT nome_ri_1 [{, nome_ri_n}] [ADD DROP] [PRIMARY KEY... FOREIGN KEY...]
SQL: ALTERTABLE-EXEMPLOS ALTER TABLE consulta ADD nuvalor DECIMAL(10,2); ALTER TABLE medico DROP PRIMARY KEY; ALTER TABLE paciente DROP COLUMN detelpaciente, DROP COLUMN cdplanosaude; ALTER TABLE paciente ADD cdplanosaude REFERENCES cdplanosaude (plano_saude);
SQL: ÍNDICES Definidos sobre atributos para acelerar consultas a dados; Índices são definidos automaticamente para chaves primárias. Índices cd_médico 1 2 3 4 5 6 7 cdmedico nmmedico dtadm dtnasc deespecializacao 3 João 2005-04-21 1978-03-15 Oncologia 2 José 2001-02-25 1970-10-22 Otorrinolaringologia 1 Pedro 1998-01-30 1966-05-12 Cardiologia 5 Ana 2004-08-12 1972-12-21 Pediatria 7 Tiago 2000-11-25 1970-11-25 Oncologia 6 Joana 2003-10-10 1976-05-18 Ortopedia 4 Elisa 2002-06-21 1975-05-02 Cardiologia
SQL: ÍNDICES Comando: CREATE [UNIQUE] INDEX nome_indice ON nome_tabela (nome_atributo_1[{, nome_atributo_n }]) DROP INDEX nome_indice ON nome_tabela Exemplos: CREATE UNIQUE INDEX ind_cpf ON medico(nucpf) DROP INDEX ind_cpf ON medico
SQL: DML Define operações de manipulação de dados: (INSERT) (UPDATE) (DELETE) (SELECT) Instruções declarativas: Manipulação de conjuntos; Especifica-se o que fazer e não como fazer.
SQL: DML Inserção de dados: INSERT INTO nome_tabela [(lista_atributos)] VALUES (lista_valores_atributos) [, (lista_valores_atributos)] Exemplos INSERT INTO laboratorio VALUES(1,"Laboratório São Francisco"); ou INSERT INTO laboratorio(cdlabo, delabo) VALUES(1, "Laboratório São Francisco")
SQL: DML Alteração de dados: UPDATE nome_tabela SET nome_atributo_1 = Valor [{, nome_atributo_n = Valor}] [WHERE condição] Exemplos: UPDATE consulta SET cdmedico = 601 UPDATE paciente SET deendpaciente = SC 301, cdplanosaude = NULL WHERE cdpaciente = 12;
SQL: DML Exclusão de dados: DELETE FROM nome_tabela [WHERE condição] Exemplos DELETE FROM medico DELETE FROM consulta WHERE cdpaciente = 21 AND dtconsulta >= 2013/03/20
EXERCÍCIO Considerando o script de criação de tabelas para o esquema EasyTrip gerado na aula anterior: Cliente Crie o Banco de Dados EasyTrip Crie as tabelas do BD Popule as tabelas com os seguintes dados: CPF Nome Ender Fone_Com Fone_Res Fone_Cel Cidade Estado 123 Maria das Dores Rua das Mangabeiras, 230 (41)234-5678 (41)345-7890 (41)9999-1111 Curitiba PR 456 Madalena Dortheia Avenida dos Andradas, 1002 ap. 109 789 Arnaldo Silva Rua Sete, 215 Bloco A ap. 321 (47)456-7890 (47)465-0001 (47)8888-0001 Joinville SC (47)222-3333 (47)363-1000 (47)9999-0001 Joinville SC
EXERCÍCIO Viagem Origem Destino Data_Ida Data_Retorno Hora_Ida Hora_Retorno Qde_Passageiros CPF Data_Pgto Valor Modalidade Curitiba Brasilia 20/02/2012 20/03/2012 13:50 07:06 3 123 15/01/2012 960,00 AV Joinville Cuiabá 15/03/2014 19/03/2014 14:00 20:45 2 456 16/03/2024 1844,00 AV Joinville Manaus 10/10/2013 25/11/2013 07:45 09:05 1 789 10/10/2013 1200,00 CC Bilhete Localizador CPF A568VM 123 9442JP 123 KK8801P 123 YGLL991 456 99AAPPW 456 007YOTG 789
EXERCÍCIO Insira na tabela Bilhete a Origem, o Destino, a Data de Ida, a Data de Retorno, o Horário de Ida e o Horária de Retorno das viagens de cada CPF. Atualize a data de ida e a data de retorno do voo do CPF 123 para 20/02/2014 e 20/03/2014 respectivamente.