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 [email protected] SQL (STRUCTURED QUERY 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! É usada para que se permita comunicar com um BD Base Formal: Álgebra relacional e cálculo relacional. SQL (STRUCTURED QUERY 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 (STRUCTURED QUERY LANGUAGE) Sua origem se confunde com a concepção do modelo relacional Tão logo Codd apresentou os princípios formais do Modelo Relacional, a IBM iniciou trabalhos em um projeto de uma linguagem que pudesse facilitar o acesso a BDs: SEQUEL (Structured English Query Language) Por causa dessa iniciativa, muitos sugerem que a IBM foi a precursora da definição da linguagem SQL No entanto, outras empresas também trabalhavam em paralelo, entre elas a ORACLE, desenvolvendo suas próprias versões de linguagem. [1986] ANSI (American National Standarts Institute) publicou as primeiras definições padronizadas de SQL [1987] ISO (International Organization for Standardization) também define padrões para SQL SQL (STRUCTURED QUERY LANGUAGE) Em resposta à 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 ISSO Embora o SQL, venha sendo padronizado pela ANSI e ISO, existem muitas variações e extensões produzidos por diferentes fabricantes de SGBDs. [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_n tipo_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: CREATE TABLE - 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: ALTER TABLE - 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 Dica: Caso esteja usando MySQL, dados podem ser inseridos diretamente de um arquivo padrão CSV (Comma-Separated Values) LOAD DATA INFILE 'c:/bd/clientes.csv' INTO TABLE Cliente FIELDS TERMINATED BY ‘;' LINES TERMINATED BY '\n' 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; (47)456-7890; (47)465-0001; (47)8888-0001; Joinville; SC 789; Arnaldo Silva; Rua Sete, 215 Bloco A ap. 321; (47)222-3333; (47)363-1000; (47)9999-0001; Joinville; SC 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ÍCIOS Considerando o script de criação de tabelas para o esquema EasyTrip gerado na aula anterior: Crie o Banco de Dados EasyTrip Crie as tabelas do BD EXERCÍCIOS Popule as tabelas (Insira) com os seguintes dados: Clientes CPF Nome Ender Fone_Com 123 Maria das Dores Rua das Mangabeiras, 230 456 Madalena Dortheia 789 Arnaldo Silva Fone_Res Fone_Cel Cidade Estado (41)234-5678 (41)345-7890 (41)9999-1111 Curitiba PR Avenida dos Andradas, 1002 ap. 109 (47)456-7890 (47)465-0001 (47)8888-0001 Joinville SC Rua Sete, 215 Bloco A ap. 321 (47)222-3333 (47)363-1000 (47)9999-0001 Joinville SC EXERCÍCIOS Viagens IdViagem Origem Destino Data_Ida Data_Retorno Hora_Ida Hora_Retorno Qde_Passageiros CPF Data_Pgto Valor Modalidade 001 Curitiba Brasilia 20/02/2012 20/03/2012 13:50 07:06 3 123 15/01/2012 960,00 AV 002 Joinville Cuiabá 15/03/2014 19/03/2014 14:00 20:45 2 456 16/03/2024 1844,00 AV 003 Joinville Manaus 10/10/2013 25/11/2013 07:45 09:05 1 789 10/10/2013 1200,00 CC Bilhetes Localizador CPF A568VM 123 9442JP 123 KK8801P 123 YGLL991 456 99AAPPW 456 007YOTG 789 EXERCÍCIOS Atualize a data de ida e a data de retorno da viagem do cliente com CPF 123 para 20/02/2014 e 20/03/2014 respectivamente.