Mestrado em Educação (em andamento) MBA em Marketing e Vendas (em andamento) Especialista em games Bacharel em Sistema de Informação Email: marcelosantos@outlook.com
AULA 03 SQL (Structure Query Language)
SQL Linguagem para: Definição de dados: criação das estruturas Data Definition Language (DDL) Manipulação de dados: atualização e consultas Data Manipulation Language (DML) 3
Histórico Linguagem SQUEL desenvolvida pela IBM para um banco de dados experimental R Baseada no padrão ANSI e ISO: SQL-86 SQL-89 SQL-92 SQL:1999 SQL:2003 A maioria dos SGBD comerciais suportam o SQL-92, e algumas das caracteristicas das últimas versões 4
Mais SQL SQL é considerada a razão principal para o sucesso dos bancos de dados relacionais comerciais Tornou-se a linguagem padrão para bases relacionais Funciona entre diferentes produtos Embedded SQL: Java, C/C++, Cobol Fácil uso para o usuário 5
Permite especificar: SQL COMO LINGUAGEM DE DEFINIÇÃO DE DADOS O esquema de cada relação O domínio dos valores associados a cada atributo Restrições de integridade O conjunto de índices Visões Permissão de acesso às relações 6
DDL (Data Definition Language)
Criando uma base de dados 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 8
Criando Esquemas em SQL 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: atributos chave não podem ser removidos de uma tabela atributos NOT NULL não podem ser inseridos em uma tabela drop table remove uma tabela com todas as suas tuplas 9
Criação de Tabelas CREATE TABLE Colunas são especificadas primeiro, sob a forma: Depois Chaves, integridade referencial e restrições de integridade CREATE TABLE <nome_da_tabela> (C 1 D 1, C 2 D 2,..., C n D n,... PRIMARY KEY <lista_de_colunas>, FOREIGN KEY <nome_da_coluna> REFERENCES <nome_tab_ref>(<nome_da_coluna_ref>)); cada C i é uma coluna no esquema da tabela D i é o tipo de dado no domínio da coluna 10 C i
Criando Esquemas em SQL CREATE TABLE Ambulatorios ( nroa int, andar numeric(3) NOT NULL, PRIMARY KEY(nroa) ) CREATE TABLE Medicos ( codm int, nome varchar(40) NOT NULL, especialidade char(20), CPF numeric(11) UNIQUE, cidade varchar(30), nroa int, PRIMARY KEY(codm), FOREIGN KEY(nroa) REFERENCES Ambulatorios ) 11
Tipos de dados (Transact-SQL) https://msdn.microsoft.com/ptbr/library/ms187752(v=sql.120).aspx 12
Create Table Exemplo: create table produto (codigo integer not null, descricao varchar(30), tipo varchar (20) PRIMARY KEY codigo) Codigo Descricao tipo 13
Alterando Tabelas 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...] 14
Domínios
Restrições NOT NULL Restrição aplicada em colunas cujos valores não podem ser nulos Valor Default Usado para inicializar o valor de uma coluna DEFAULT <valor> logo após a restrição: create table produto (codigo integer not null, descricao varchar(30), tipo varchar (20) PRIMARY KEY codigo) 16
Tipos de Domínios em SQL char (n). Character de tamanho n definido pelo usuário varchar (n). int Smallint numeric (p,d) real, double precision float(n) 17
SQL (Structure Query Language)
SQL Linguagem para: Definição de dados: criação das estruturas Data Definition Language (DDL) Manipulação de dados: atualização e consultas Data Manipulation Language (DML) 19
Manipulação de Dados Define operações de manipulação de dados I (INSERT) A (UPDATE) E (DELETE) C (SELECT) Instruções declarativas manipulação de conjuntos especifica-se o que fazer e não como fazer 20
Inserções, Alterações e Exclusões
SQL Insert Inserção de dados INSERT INTO nome_tabela [(lista_atributos)] VALUES (lista_valores_atributos) [, (lista_valores_atributos)] Exemplos INSERT INTO Ambulatorios VALUES (1, 1, 30) INSERT INTO Medicos (codm, nome, idade, especialidade, CPF, cidade) VALUES (4, Carlos, 28, ortopedia, 11000110000, Joinville ); 22
Inserção de dados SQL Inserção a partir de outra tabela Permite inserir em uma tabela a partir de outra tabela A nova tabela terá os mesmos atributos, com os mesmos domínios Exemplos INSERT into cliente as SELECT * from funcionario 23
SQL Update Alteração de dados UPDATE nome_tabela SET nome_atributo_1 = Valor [{, nome_atributo_n = Valor}] [WHERE condição] Exemplos UPDATE Medico SET cidade = Florianopolis UPDATE Ambulatorios SET capacidade = capacidade + 5, andar = 3 WHERE nroa = 2 24
SQL DML Exclusão de dados DELETE FROM nome_tabela [WHERE condição] Exemplos DELETE FROM Ambulatorios DELETE FROM Medicos WHERE especialidade = cardiologia or cidade < > Florianopolis 25
Atividade 3 Inserir 3 médicos na tabela de médicos Cadastrar 4 ambulatórios, com numeroa sendo 1,2,3 e 4 Cadastrar 2 pacientes Cadastrar 3 consultas Alterar o numero do ambulatório de todos os médicos para 3 Alterar o nome do paciente 1 para Pedro da Silva 26
Consultas: SELECT
Estrutura Básica Uma consulta em SQL tem a seguinte forma: select A 1, A 2,..., A n from r 1, r 2,..., r m where P A i representa um atributo R i representa uma tabela P é um predicado Esta consulta é equivalente a uma expressão da Algebra Relacional ( P( r1 r2 r A1, A2,, An m O resultado de uma consulta SQL é sempre uma tabela )) 28
Estrutura Básica: resumindo. SELECT lista de atributos desejados FROM uma ou mais tabelas WHERE com restrições sobre atributos Exemplo: encontre o nome e o salário dos funcionarios da relação funcionário SELECT nome, salario FROM funcionario 29
Distinct O SQL permite duplicatas em relações e resultados em consultas Para eliminar duplatas, usa-se a cláusula DISTINCT depois do SELECT Exemplo: SELECT distinct nome FROM funcionario 30
A cláusula * O asterisco na cláusula SELECT denota TODOS OS ATRIBUTOS SELECT * FROM funcionario Expressões artitméticas podem ser usadas na cláusula SELECT +,,, / Exemplo: SELECT nome, salario + 200 FROM funcionario 31
A cláusula FROM Equivale a operação de Produto Cartesiano da Álgebra Lista as relações envolvidas na consulta Exemplo: SELECT FROM funcionario, departamento 32
A cláusula FROM Quando mais de uma tabela é utilizada é necessário dar um apelido para elas que deve ser utilizado para diferenciar atributos iguais Exemplo: SELECT f. FROM funcionario f, departamento d WHERE f.coddepto = d.coddepto 33
A cláusula WHERE A cláusula where especifica as condições que o resultado precisa satisfazer Corresponde ao predicado de seleção da álgebra Exemplo: SELECT nome, salario FROM funcionario WHERE salario > 2000 operadores AND, OR e NOT podem ser usados Exemplo: SELECT nome, salario FROM funcionario WHERE salario > 2000 AND idade < 30 34
Renomeando atributos Renomeação de atributos old-name as new-name Exemplo: SELECT nome as nomecliente, (salario+200) as comissao FROM funcionario 35
Operações com Strings O SQL permite comparar strings com o operador like Pode ser combinado com outros caracteres % compara substrings Exemplo I: encontre o nome dos funcionarios cujos nomes iniciam com Pedro select nome from funcionario where nome like 'Pedro%' 36
Operações com Strings Exemplo II: encontre o nome dos funcionarios cujos nomes contém Pedro no nome select nome from funcionario where nome like %Pedro%' 37
Operações de Conjunto Envolvem ao menos 2 tabelas Interseção e União: elimina automaticamente repetições Relações precisam ser compatíveis (mesmo número de atributos) Union ALL e intersects ALL preserva duplicatas 38
Operações de Conjunto n Encontre os clientes que tenham empréstimos e contas (select nome from conta) intersect (select nome from emprestimo) (select nome from conta) union (select nome from emprestimo) 39
Ordenando tuplas com Order By Exemplo: Liste em ordem alfabética os funcionarios que trabalham no departamento financeiro select distinct funcionario.nome from funcionario, departamento where funcionario.coddepto=departamento.coddepto AND departamento.nome= financeiro order by funcionario.nome Order by pode ser em ordem descendente Exemplo: order by nome desc 40
Funções de Agregação Operam sobre múltiplos valores de uma coluna da tabela e retornam um valor avg: média min: valor mínimo max: valor máximo sum: soma de valores count: número de valores 41
Exemplos: Funções de Agregação n Encontre o número de tuplas da relação CLIENTE select count(*) FROM cliente n Encontre a soma dos salários dos funcionários select SUM(salario) FROM funcionario 42
Funções de Agregação e Group By Encontre o total de funcionários de cada departamento select d.nome, count(f.*) as numerofuncionarios FROM funcionario f, departamento d WHERE f.coddepto=d.coddepto GROUP BY d.nome Nota: Atributos na cláusula SELECT que estão FORA da função de agregação precisam aparecer na lista de atributos do GROUP BY 43
Funções de Agregação e Having A função HAVING é utilizada para aplicar condições sobre grupos e não sobre uma única tupla Exemplo: Quais são os departamentos onde a soma dos salários dos funcionários ultrapassa 50.000 select d.nome, sum(f.salario) from funcionario f, departamento d where f.coddepto=d.coddepto group by d.nome having um (salario) > 50.000 Nota: predicados da cláusula having são aplicados depois que os grupos foram gerados, mas a condição do where é aplicada antes da formação dos grupos 44
Consultas Aninhadas Uma subconsulta select-from-where está aninhada dentro de outra consulta Exemplo: Selecione os clientes que são funcionários select nomecliente From cliente Where nomecliente in (select nomefuncionario from funcionario) 45
Valores nulos Consulta sobre valores inexistentes Exemplo: Encontre os funcionarios que não possuem carteira de habilitação select nome from funcionario where carteirahabilitacao is null OBS: cuidado que valores nulos em operações matemáticas podem dar problemas 46
SQL e Álgebra Relacional Álgebra nome ( (Médicos X = Médicos.codm = Consultas.codm ( codm ( data = 06/11/13 (Consultas))) ) ) ( CPF (Funcionários)) ( CPF (Pacientes)) ( CPF (Médicos)) ( CPF (Pacientes)) SQL Select nome From Médicos Where codm in (select codm from Consultas where data = 06/11/13 ) Select CPF From Funcionários Where CPF not in (select CPF from Pacientes) Select CPF From Médicos Where CPF in (select CPF from Pacientes) 47
Atividade 4 Selecione 10 (DEZ) questões e realize a consulta correspondente. 1)Buscar os dados dos pacientes que estão com sarampo 2) buscar os dados dos médicos ortopedistas com mais de 40 anos 3) Recuperar a especialidade e o numero total de médicos de cada especialidade 4) Recupere os nomes dos médicos que não tem consultas na tabela de consultas 48
Atividade 4 5) Buscar os dados das consultas, exceto aquelas marcadas para os médicos com CRM 46 e 79 6) Buscar os dados dos ambulatórios do quarto andar que ou tenham capacidade igual a 50 ou tenham número superior a 10 7) Buscar o nome dos médicos que têm consulta marcada e as datas das suas consultas, ordenando o nome dos médicos em ordem alfabética 49
Atividade 4 8) Buscar o CRM dos médicos e as datas das consultas para os pacientes com RG 122 e 725 9) Buscar os números dos ambulatórios, exceto aqueles do segundo e quarto andares, que suportam mais de 50 pacientes 10) Buscar o número e a capacidade dos ambulatórios do quinto andar e o nome dos médicos que atendem neles 50
Atividade 4 11) Buscar o nome dos médicos e o nome dos seus pacientes com consulta marcada, assim como a data destas consultas 12) Buscar os nomes dos pacientes, com consultas marcadas para os médicos João Carlos Santos ou Maria Souza, que estão com pneumonia 13) Buscar os nomes e idade dos médicos, pacientes e funcionários que residem em Florianópolis 51
Atividade 4 14) Buscar os nomes e RGs dos funcionários que recebem salários abaixo de R$ 1300,00 e que não estão internados como pacientes 15) Buscar os números dos ambulatórios onde nenhum médico fornece atendimento 16) Buscar os nomes e os RGs dos funcionários que estão internados como pacientes 17) Buscar os nomes dos funcionários que nunca consultaram 52
Atividade 4 18) Quais são as cidades cuja soma dos salários dos funcionários ultrapassa 1.000.000? 19) Recupere o nome dos médicos e dos pacientes e a cidade onde moram. 20) Buscar o total de médicos para cada especialidade 53
BIBLIOGRAFIA Elmasri & Navathe Fundamentos de Bancos de Dados Carlos Alberto Heuser Projeto de Banco de Dados Korth e Silberchatz Sistema de Bancos de Dados PROGRAMAÇÃO ORIENTADA A EVENTOS 54
BIBLIOGRAFIA HEUSER, C.A. Projeto de Banco de Dados. 6ª Edição. Porto Alegre. Capítulos 2 e 3 Korth, H. F.; Sudarshan, S; Silberschatz, A. Sistema de Banco de Dados. 5a ed. Editora Campus, 2006. - Capítulo 6 Elmasri, R.; Navathe S. B. Sistemas de Banco de Dados. 4 ed. Editora Addison-Wesley. 2005. - Capítulo 3 PROGRAMAÇÃO ORIENTADA A EVENTOS 55
BIBLIOGRAFIA HEUSER, C.A. Projeto de Banco de Dados. 6ª Edição. Porto Alegre. Capítulos 2 e 3 Korth, H. F.; Sudarshan, S; Silberschatz, A. Sistema de Banco de Dados. 5a ed. Editora Campus, 2006. - Capítulo 6 Elmasri, R.; Navathe S. B. Sistemas de Banco de Dados. 4 ed. Editora Addison-Wesley. 2005. - Capítulo 3 PROGRAMAÇÃO ORIENTADA A EVENTOS 56