Buscar

INTRODUÇÃO A SQL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 55 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 55 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 55 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
Banco de Dados 
SubUnidade 3.2: 
Introdução à SQL 
 
 
 
Luciana Vieira e Roger da Silva 
Date, C. J. – Introdução a Sistemas de Banco de Dados. 
2 
INTRODUÇÃO 
 
 
“SQL é a linguagem padrão para se lidar 
com bancos de dados relacionais”. 
Date 
 
SQL (Structured Query Language) 
 
 
3 
INTRODUÇÃO 
A SQL possui operações de definição de dados 
e operações de manipulação de dados. 
 
 
SQL utiliza os termos tabela (table), linha 
(row), e coluna (column) para relação ou 
entidade, tupla e atributo, respectivamente. 
4 
TIPOS DE DADOS 
 
5 
CREATE TABLE 
CREATE TABLE [nome_banco.[dono_tabela]. ] nome_tabela 
( 
[nm_c prop_c[constraint[constraint[...constraint]]] 
| [ [ , ] constraint ]] 
[ [ , ] [próximo_nome_col|próxima_constraint] ... ] 
); 
 
Ex: 
CREATE TABLE empresa 
 ( cod_empresa int NOT NULL, 
 nome_empresa varchar(45) NOT NULL, 
 cpf char(14) NOT NULL, 
 dt_fundacao smalldatetime, 
 nro_funcionarios smallint ) 
 
6 
CREATE TABLE 
Nomes de colunas devem ser únicos dentro de 
uma mesma tabela; 
Toda coluna deve ter um tipo de dado (datatype) 
Pode-se definir até 2 bilhões de tabelas por banco 
de dados 
Pode-se definir até 250 colunas por tabela 
Um valor NULL indica a ausência de dados. NULL 
não é branco e nem zero. Por default, o SQL 
assume NOT NULL, para as colunas que não estão 
declaradas com NULL. Pode-se alterar esse 
default na configuração do SQL Server. 
 
7 
CREATE TABLE 
CREATE TABLE funcionario 
 ( cod_func int, 
 nome_func varchar(45), 
 endereco varchar(50) NULL, 
 cidade varchar(30) NULL ) 
 
CREATE TABLE cliente 
 ( cod_cliente int Primary Key, 
 nome_cliente varchar(30), 
 CPF varchar(14), 
 Endereco varchar(50)) 
8 
INTEGRIDADE REFERENCIAL 
CREATE TABLE cliente 
 ( cod_cliente int Primary Key, 
 nome_cliente varchar(30), 
 CPF varchar(14), 
 Endereco varchar(50)) 
 
CREATE TABLE pedido 
 ( cod_cliente int, 
 nro_pedido int, 
 data_pedido smalldatetime, 
CONSTRAINT pk_pedido PRIMARY KEY (cod_cliente, nro_pedido), 
CONSTRAINT fk_cliente_pedido FOREIGN KEY (cod_cliente) 
REFERENCES cliente (cod_cliente)) 
 
9 
ALTER TABLE 
ALTER TABLE nm_tab 
 {{CHECK|NOCHECK } CONSTRAINT {nm_constraint |ALL } 
 | 
 [ ADD 
 {nm_col prop_col [constraints_col ] 
 | [[, ] constraint_tabela ]} 
 [, {proxima_col | proxima_constraint_tabela }] ... 
 ] 
 | 
 [DROP CONSTRAINT] 
 nome_constraint [, nome_constraint2 ] ... ] 
10 
ALTER TABLE - EXEMPLO 
ALTER TABLE depto 
 ADD nome_chefia varchar(20) NULL 
 
ALTER TABLE empregado 
 ADD CONSTRAINT fk_depto_emp FOREIGN KEY 
(cod_depto) 
 REFERENCES depto (cod_depto) 
 
ALTER TABLE empregado 
 DROP CONSTRAINT fk_depto_emp 
11 
DROP TABLE 
DROP TABLE nome_tabela 
 
EX: DROP TABLE empregado 
 
Não se pode excluir uma tabela se esta tiver 
alguma outra tabela “filha” ligada à ela. 
Quando se elimina uma tabela, todos os 
registros contidos nela são apagados e a 
tabela em si com toda sua estrutura é 
eliminada da Base de Dados. 
12 
13 
14 
SELECT 
SELECT [ALL | DISTINCT ] select_list 
 FROM nm_tab [, nm_tab2] [..., nm_tab16] 
 [WHERE cláusula ] 
 [GROUP BY cláusula ] 
 [HAVING cláusula ] 
 [ORDER BY cláusula ] 
 [COMPUTE cláusula ] 
SELECT 
SELECT - especifica as colunas 
FROM - especifica as tabelas 
WHERE - especifica as linhas 
Quando se utiliza * na lista de select, 
seleciona-se todas as colunas da tabela. 
Não se utilizando a cláusula WHERE, todas 
as linhas serão selecionadas. 
SELECT - EXEMPLO 
SELECT * FROM empregado 
 
SELECT nome, idade, salario FROM empregado 
 
SELECT cod_depto, cod_empregado, salario 
 FROM empregado 
 WHERE salario > 1200 
18 
SELECT 
Por default, o cabeçalho mostrado no 
resultado de uma query é o nome da coluna 
definido na criação da tabela. Porém, é 
possível mudar este cabeçalho, inserindo-o 
na lista do Select. 
 
SELECT * FROM empregado 
 
SELECT nome AS NOME_EMPREGADO, 
 dt_admissao AS DATA_DE_ADMISSAO 
 FROM empregado 
 
19 
SELECT E OPERADORES 
ARITMÉTICOS 
Os operadores aritméticos podem ser 
utilizados em qualquer coluna numérica 
(numeric, decimal, int, smallint, tinynt, 
float, real, money ou smallmoney). 
 
 
 
 
O operador de módulo (%) não pode ser 
executado nos tipos de dados money, 
smallmoney, float ou real. 
 
 
 
20 
EXEMPLO 
 
 
 
SELECT nome, salario, (salario * 1.15) 
 FROM empregado 
 
 
 
21 
FUNÇÕES - NÚMEROS 
22 
FUNÇÕES - EXPRESSÃO 
23 
FUNÇÕES - EXPRESSÕES 
24 
FUNÇÕES - TEMPO 
25 
FUNÇÕES - TEMPO 
SELECT DATE_ADD(CURDATE(), INTERVAL 120 DAY); 
SELECT NOW(),CURDATE(),CURTIME() 
SELECT DATEDIFF('2010-01-05','2009-01-05'); 
SELECT DATE_FORMAT(Curdate(), '%d %m %Y'); 
SELECT nome, dt_admissao, DATEDIFF (Curdate(), 
dt_admissao) FROM empregado 
SELECT nome, dt_admissao FROM empregado 
 WHERE DAYNAME(dt_admissao) = 
 "MONDAY” 
26 
FUNÇÃO 
Obs: Evitar a utilização de condições de 
Negação, tal como NOT IN e NOT BETWEEN, 
pois essas condições não são reconhecidas 
pelo otimizador de query. 
 
27 
FUNÇÃO - EXEMPLO 
 
SELECT nome, codigo FROM empregado 
 WHERE codigodepto IN (1,3,4) 
 
SELECT * FROM empregado 
 WHERE nome LIKE '%Jose%„ 
 
SELECT * FROM empregado 
 WHERE (nome LIKE 'S%' OR codigodepto = 1) 
 AND (salario > 500.00) 
28 
ORDER BY 
Utilizado para organizar de A-Z ou de Z-A. 
Pode-se definir na cláusula ORDER BY o número 
relativo da coluna ao invés do nome da coluna. 
Por default, a forma ascendente (ASC) é assumida. 
Pode-se classificar por até 16 colunas. 
 
EX: 
SELECT nome, codigodepto, salario FROM empregado 
 ORDER BY codigodepto, salario DESC 
 
29 
RESUMINDO DADOS 
Retorna valores resumidos 
O resultado aparece como novas colunas 
Utilizado na Lista de Select ou na Cláusula HAVING 
 
 
 
 
EX: 
SELECT COUNT(*) FROM empregado 
SELECT SUM (salario) FROM empregado 
SELECT AVG (salario) FROM empregado 
SELECT MAX(salario) FROM empregado 
 
 
30 
INSERT 
O comando INSERT é utilizado para 
adicionar linhas a uma tabela 
Utilize uma sentença INSERT para cada linha 
a ser adicionada 
A ordem e o tipo de dado dos item a serem 
inseridos devem corresponder a ordem e tipo 
de dado das colunas da tabela 
Os itens de dados na cláusula VALUES deve 
corresponder a Lista dos nomes de coluna 
 
31 
INSERT 
INSERT INTO depto VALUES (1, 'CONTABILIDADE') 
 
 
INSERT INTO empregado (nro_empregado, nome, 
cod_depto) VALUES (7000, 'Jose Luiz de 
Oliveira', 1) 
 
INSERT INTO empreg_salarioanual 
 SELECT nome_empreg , (salario * 12 ) 
 FROM empregado 
 WHERE idade > 21 
 
 
 
32 
UPDATE 
O comando UPDATE altera os dados de linhas 
de uma tabela 
A cláusula SET especifica a coluna e o valor a 
ser alterado 
A cláusula WHERE identifica exatamente as 
linhas a serem alteradas 
Se o UPDATE viola alguma constraint de 
integridade, a alteração não será executada 
 
33 
UPDATE 
UPDATE empregado 
 SET salario = salario * 1.05 
 
 
UPDATE empregado 
 SET codigodepto = 5 
 WHERE codigodepto = 2 
34 
DELETE 
O comando DELETE remove uma ou mais 
linhas de uma tabela 
A cláusula WHEREespecifia os critérios pelos 
quais as linhas serão removidas 
Se A cláusula WHERE não é especificada, 
todas as linhas da tabela serão removidas. 
 
DELETE from empregado 
WHERE DATEDIFF (YEAR, dt_admissao, 
GETDATE()) >= 5 
 
35 
DELETE 
O comando DELETE remove uma ou mais 
linhas de uma tabela 
A cláusula WHERE especifica os critérios 
pelos quais as linhas serão removidas 
Se A cláusula WHERE não é especificada, 
todas as linhas da tabela serão removidas. 
 
DELETE from empregado 
WHERE Salario is null 
 
36 
GROUP BY 
Organiza os dados em grupos 
Geralmente utilizada com funções de 
agregação 
Resulta um único valor para cada grupo 
Cada coluna na lista de Select deve estar na 
cláusula GROUP BY 
 
 
 
 
 
37 
GROUP BY - EXEMPLO 
SELECT cod_depto, AVG (salario) AS MediaSalario 
 FROM empregado 
 GROUP BY cod_depto 
 
 
 
 
 
38 
HAVING 
Cláusula de restrição de grupo 
Permite funções de agregação 
Similar a cláusula WHERE 
As colunas na cláusula HAVING devem ter 
somente um único valor 
Uma query com HAVING deve ter um GROUP 
BY 
 
 
 
 
 
39 
HAVING - EXEMPLO 
 
 
SELECT cod_depto, SUM( salario ) AS SalarioDepto 
 FROM empregado 
 GROUP BY cod_depto 
 HAVING SUM ( salario ) > 5000.00 
 
 
40 
JOIN 
Operação que permite o tratamento de duas ou 
mais tabelas 
Implementado pela utilização da sentença 
SELECT 
Na lista de SELECT colocamos as colunas de 
uma ou mais tabelas que desejamos listar 
Na cláusula FROM definimos todas as tabelas 
envolvidas no Join, 
Na cláusula WHERE especificamos quais linha 
serão incluídas no resultado. Na cláusula 
WHERE, um operador de join é utilizado entre 
os componentes que estão fazendo a junção. 
41 
JOIN 
Pode-se definir até 16 tabelas na cláusula 
FROM. 
Normalmente, uma chave primária é comparada 
a uma chave estrangeira em qualquer join 
O operador utilizado para o join é o sinal de 
igual (=), que resulta somente nas linhas onde o 
valor da coluna de uma tabela é igual ao valor 
da coluna de outra tabela. 
Caso não se defina nenhuma condição de Join 
(com a cláusula WHERE), é gerado um produto 
Cartesiano entre as tabelas. (Join Irrestrito) 
42 
JOIN 
Exemplo de Join Irrestrito (Produto Cartesiano 
entre as Tabelas): 
 
SELECT nome_empreg, nome_depend 
 FROM empregado, dependente 
 
 
No exemplo acima, supondo que a Tabela 
Empregado tenha 10 linhas, e a Tabela 
Dependente 20 linhas, então o resultado do 
Join Irrestrito será 10 * 20 = 200 linhas. 
 
43 
EQUI JOIN 
Especifica uma condição de igualdade entre 
as tabelas para satisfazer o Join. 
 
 
SELECT d.nome, e.nome FROM depto d, empregado e 
 WHERE d.cod_depto = e.cod_depto 
 
SELECT d.nome, e.nome, dp.nome, dp.idade 
 FROM depto d, empregado e, dependente dp 
 WHERE d.cod_depto = e.cod_depto 
 AND e.cod_empreg = dp.cod_empreg 
44 
OUTER JOIN 
Mostra todas as linhas do join, inclusive 
aquelas que não encontram linhas 
correspondentes na tabela relacionada. 
Só se pode fazer um outer join entre duas 
tabelas. 
 
Operadores do Outer Join: 
Left join -> Inclui todas as linhas da primeira 
tabela especificada nas restrições da sentença 
Right joint  Inclui todas as linhas da Segunda 
tabela especificada nas restrições da sentença 
45 
OUTER JOIN 
 
SELECT titles.title_id, title, qty 
 FROM titles LEFT JOIN sales 
 ON titles.title_id = sales.title_id 
 
SELECT titles.title_id, title, qty 
 FROM titles RIGHTJOIN sales 
 ON titles.title_id = sales.title_id 
 
46 
SUBQUERIES 
São sentenças SELECT aninhadas 
A sentença SELECT de uma subquery é sempre 
colocado dentro de parênteses. 
Uma subquery pode estar inserida na lista de 
SELECT, numa cláusula WHERE ou HAVING da 
query externa. 
Em aninhamentos normais de subqueries, as mais 
internas são executadas primeiro. 
47 
SUBQUERIES 
SELECT cod_depto, nome FROM depto 
 WHERE cod_depto IN ( SELECT DISTINCT 
 cod_depto FROM empregado) 
 
 
SELECT NomeEstado FROM aula.Estado 
 WHERE UF in (select UF FROM aula.cliente 
where salario is not null) 
48 
SUBQUERIES CORRELATAS 
São aquelas subqueries que referenciam na 
cláusula WHERE, uma tabela da cláusula 
FROM da query externa. Neste caso, a 
subquery é executada para cada linha da 
tabela referenciada na query externa. 
 
SELECT title_id, au_id, royaltyper FROM titleauthor ta 
 WHERE royaltyper = (SELECT MAX(royaltyper) FROM 
 titleauthor tb WHERE tb.title_id = ta.title_id) 
 
49 
EXERCÍCIO 
Para os exercícios a seguir considere os 
seguintes esquemas: 
 
Atleta= (cod_atleta, nome, sexo, cidade, data_nasc) 
Equipe = (cod_equipe, nome) 
Equipe_Atleta = (cod_equipe, cod_atleta) 
Competicao = ( cod_competicao, data, cidade, pais) 
Participacao = (cod_atleta, cod_equipe, 
cod_competicao, qualificacao) 
Penalidades = (cod_atleta, cod_penalidade, data, 
pontos, valor) 
 
50 
EXERCÍCIO 
 
51 
EXERCÍCIO 
1. Mostre a relação de todos os atletas que 
sofreram penalidades; 
2. Mostre apenas a relação dos códigos de 
todos os atletas que sofreram penalidades; 
3. Mostre o número do atletas que receberam 
mais de duas penalidade. 
5. Mostre a relação das cidades de onde 
provêm os atletas. 
6. Mostre quantos atletas moram em BELÉM 
52 
EXERCÍCIO 
1. Mostre a relação de todos os atletas que 
sofreram penalidades; 
2. Mostre apenas a relação dos códigos de 
todos os atletas que sofreram penalidades; 
3. Mostre o número do atletas que receberam 
mais de duas penalidade. 
5. Mostre a relação das cidades de onde 
provêm os atletas. 
6. Mostre quantos atletas moram em BELÉM 
53 
EXERCÍCIO 
7. Mostre o número total de penalidades aplicadas 
8.Mostre a penalidade de maior valor 
9.Mostre quantas outras penalidades tem valor 
igual a penalidade de menor valor. 
10.Mostre os nomes distintos das cidades de onde 
provêm os atletas. ( mostrar apenas uma vez o 
nome de cada cidade) 
54 
EXERCÍCIO 
11.Mostre o código dos atletas cuja penalidade 
mais recente recebida foi em 2009. 
SELECT atleta_codatleta, max(data) FROM competicao.penalidade p 
 group by atleta_codatleta 
 having max(data) like '%2009%' 
 
12.Mostre o código dos atletas cujo valor total das 
penalidades aplicadas á ele ultrapassam R$ 
1000,00 
SELECT atleta_codatleta, sum(valor) FROM competicao.penalidade p 
 group by atleta_codatleta 
 having sum(valor) > 1000 
55 
EXERCÍCIO 
13. Mostre todas as cidades que tem pelo 
menos 4 atletas provenientes 
14. Mostre todas os atletas que participaram 
de pelo menos 2 competições. 
15. Mostre a relação de competições e a 
qualificação dos seus participantes 
organizado por competição e por atletas. 
16. Mostre o nome de cada atleta que começa 
coma letra M. 
17. Mostre o nome de cada atleta que não 
começa coma letra M.

Continue navegando