(Microsoft PowerPoint - [BAN - aula 13] Introdu\347\343o a SQL

Propaganda
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.
Download