You are on page 1of 53

Banco de Dados

SubUnidade 3.2: Introduo SQL

Luciana Vieira e Roger da Silva


Date, C. J. Introduo a Sistemas de Banco de Dados.
1

INTRODUO

SQL a linguagem padro para se lidar com bancos de dados relacionais. Date SQL (Structured Query Language)

INTRODUO
A SQL possui operaes de definio de dados e operaes de manipulao de dados.

SQL utiliza os termos tabela (table), linha (row), e coluna (column) para relao ou entidade, tupla e atributo, respectivamente.

TIPOS DE DADOS

CREATE TABLE
CREATE TABLE [nome_banco.[dono_tabela]. ] nome_tabela ( [nm_c prop_c[constraint[constraint[...constraint]]] | [ [ , ] constraint ]] [ [ , ] [prximo_nome_col|prxima_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 )

CREATE TABLE
Nomes e ol s evem ser i os entro e ma mesma tabela; Toda ol na deve ter m ti o de dado (datat e) Pode-se definir at bil es de tabelas or banco de dados Pode-se definir at 0 col nas or tabela Um valor NULL indica a ausncia de dados. NULL no branco e nem ero. Por default, o L assume NOT NULL, ara as colunas que no esto declaradas com NULL. Pode-se alterar esse default na confi urao do L erver.
6

CREATE TABLE
CREATE TABLE funcionario ( cod_func int, nome_func varchar(45), endereco varchar(5 ) NULL, cidade varchar(3 ) NULL ) CREATE TABLE cliente ( cod_cliente int Primary Key, nome_cliente varchar(3 ), CPF varchar(14), Endereco varchar(5 ))
7

INTEGRIDADE REFERENCIAL
CREATE TABLE cliente ( cod_cliente int Primary Key, nome_cliente varchar(3 ), CPF varchar(14), Endereco varchar(5 )) 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))
8

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 ] ... ]

ALTER TABLE - EXEMPLO


ALTER TABLE depto ADD nome_chefia varchar(2 ) NULL ALTER TABLE empregado NOCHECK CONSTRAINT fk_depto_emp ALTER TABLE empregado ADD CONSTRAINT fk_depto_emp FOREIGN KEY (cod_depto) REFERENCES depto (cod_depto) ALTER TABLE empregado DROP CONSTRAINT fk_depto_emp

10

DROP TABLE
DROP TABLE nome_tabela EX: DROP TABLE empregado
No se pode excluir uma tabela se esta tiver alguma outra tabela filha ligada ela. Quando se elimina uma tabela, todos os registros contidos nela so apagados e a tabela em si com toda sua estrutura eliminada da Base de Dados.

11

SELECT
SELECT [ALL | DISTINCT ] select_list FROM nm_tab [, nm_tab2] [..., nm_tab16] [WHERE clusula ] [GROUP BY clusula ] [HAVING clusula ] [ORDER BY clusula ] [COMPUTE clusula ]

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. No se utilizando a clusula WHERE, todas as linhas sero selecionadas.

SELECT - EXEMPLO
SELECT * FROM empregado SELECT nome, idade, salario FROM empregado SELECT cod_depto, cod_empregado, salario FROM empregado WHERE salario > 12

15

16

17

SELECT
Por default, o cabealho mostrado no resultado de uma uery o nome da coluna definido na criao da tabela. Porm, possvel mudar este cabealho, inserindo-o na lista do Select. SELECT * FROM empregado
SELECT nome AS NOME_EMPREGADO, dt_admissao AS DATA_DE_ADMISSAO 18 FROM empregado

SELECT E OPERADORES ARITMTICOS


Os operadores aritmticos podem ser utili ados em qualquer coluna numrica (numeric, decimal, int, smallint, tinynt, float, real, money ou smallmoney).

O operador de mdulo (%) no pode ser executado nos tipos de dados money, smallmoney, float ou real.

19

EXEMPLO

SELECT nome, salario, (salario * 1.15) FROM empregado

20

FUNES - NMEROS

21

FUNES - EXPRESSO

22

FUNES - EXPRESSES

23

FUNES - TEMPO

24

FUNES - TEMPO
SELECT DATE_ADD(CURDATE(), INTERVAL 12 DAY); SELECT NOW(),CURDATE(),CURTIME() SELECT DATEDIFF('2 1 -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

25

FUNO
Obs: Evitar a utilizao de condies de Negao, tal como NOT IN e NOT BETWEEN, pois essas condies no so reconhecidas pelo otimizador de uery.

26

FUNO - EXEMPLO
SELECT nome, dtadmissao FROM empregado WHERE dtadmissao BETWEEN '1995/01/01' AND '2010/01/01' 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)

27

ORDER BY
Utilizado para organizar de A-Z ou de Z-A. Pode-se definir na clusula ORDER BY o n mero relativo da coluna ao invs 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

28

RESUMINDO DADOS
Retorna valores resumidos O resultado aparece como novas colunas Utilizado na Lista de Select ou na Clusula HAVING

EX: SELECT SELECT SELECT SELECT

COUNT(*) FROM empregado SUM (salario) FROM empregado AVG (salario) FROM empregado MAX (salario) FROM empregado

29

INSERT
O comando INSERT utilizado para adicionar linhas a uma tabela Utilize uma sentena 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 clusula VALUES deve corresponder a Lista dos nomes de coluna
30

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

31

UPDATE
O comando UPDATE altera os dados de linhas de uma tabela A clusula SET especifica a coluna e o valor a ser alterado A clusula WHERE identifica exatamente as linhas a serem alteradas Se o UPDATE viola alguma constraint de integridade, a alterao no ser executada

32

UPDATE
UPDATE empregado SET salario = salario * 1.05

UPDATE empregado SET codigodepto = 5 WHERE codigodepto = 2

33

DELETE
O comando DELETE remove uma ou mais linhas de uma tabela A clusula WHERE especifia os critrios pelos uais as linhas sero removidas Se A clusula WHERE no especificada, todas as linhas da tabela sero removidas. DELETE from empregado WHERE DATEDIFF (YEAR, dt_admissao, GETDATE()) >= 5

34

DELETE
O comando DELETE remove uma ou mais linhas de uma tabela A clusula WHERE especifica os critrios pelos uais as linhas sero removidas Se A clusula WHERE no especificada, todas as linhas da tabela sero removidas. DELETE from empregado WHERE Salario is null
35

GROUP BY
Organiza os dados em grupos Geralmente utilizada com funes de agregao Resulta um nico valor para cada grupo Cada coluna na lista de Select deve estar na clusula GROUP BY

36

GROUP BY - EXEMPLO
SELECT cod_depto, AVG (salario) AS MediaSalario FROM empregado GROUP BY cod_depto

37

HAVING
Clusula de restrio de grupo Permite funes de agregao Similar a clusula WHERE As colunas na clusula HAVING devem ter somente um nico valor Uma uery com HAVING deve ter um GROUP BY

38

HAVING - EXEMPLO

SELECT cod_depto, SUM( salario ) AS SalarioDepto FROM empregado GROUP BY cod_depto HAVING SUM ( salario ) > 5000.00

39

JOIN
Operao que permite o tratamento de duas ou mais tabelas Implementado pela utili ao da sentena LECT Na lista de ELECT colocamos as colunas de uma ou mais tabelas que desejamos listar Na cl usula OM definimos todas as tabelas envolvidas no oin, Na cl usula ERE especificamos quais linha sero includas no resultado. Na cl usula ERE, um operador de join tilizado entre os omponentes q e est o fazendo a juno. 40

JOIN
Pode-se definir at tabelas na cl usula ROM. Normalmente, uma chave primria 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 no se defina nenhuma condio de oin ERE), gerado um produto (com a clusula Cartesiano entre as tabelas. ( oin Irrestrito)
41

JOIN
Exemplo de oin Irrestrito (Produto Cartesiano entre as Tabelas): ELECT nome_empreg, nome_depend FROM empregado, dependente

No exemplo acima, supondo que a Tabela Empregado tenha 0 linhas, e a Tabela ependente 0 linhas, ento o resultado do oin Irrestrito ser 0 * 0 00 linhas. 42

EQUI JOIN
Especifica uma condio de igualdade entre as tabelas para satisfazer o oin.

ELECT 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

43

OUTER JOIN
Mostra todas as linhas do join, inclusive aquelas que no encontram linhas correspondentes na tabela relacionada. S se pode fazer um outer join entre duas tabelas. Operadores do Outer oin: Left join -> Inclui todas as linhas da primeira tabela especificada nas restries da sentena Right joint Inclui todas as linhas da Segunda 44 tabela especificada nas restries da sentena

OUTER JOIN
SELECT titles.title_id, title, ty FROM titles LEFT JOIN sales ON titles.title_id = sales.title_id SELECT titles.title_id, title, ty FROM titles RIGHTJOIN sales ON titles.title_id = sales.title_id
45

SUBQUERIES
So sentenas SELECT aninhadas A sentena SELECT de uma subquery sempre colocado dentro de parnteses. Uma subquery pode estar inserida na lista de SELECT, numa clusula WHERE ou HAVING da query externa. Em aninhamentos normais de subqueries, as mais internas so executadas primeiro.

46

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)

47

SUBQUERIES CORRELATAS
So aquelas subqueries que referenciam na clusula WHERE, uma tabela da clusula 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)

48

EXERCCIO
Para os exerccios a seguir considere os seguintes es uemas: Atleta= (cod_atleta, nome, sexo, cidade, data_nasc) E uipe = (cod_e uipe, nome) E uipe_Atleta = (cod_e uipe, cod_atleta) Competicao = ( cod_competicao, data, cidade, pais) Participacao = (cod_atleta, cod_e uipe, cod_competicao, ualificacao) Penalidades = (cod_atleta, cod_penalidade, data, pontos, valor) 49

EXERCCIO
1. Mostre a relao de todos os atletas ue sofreram penalidades: 2. Mostre apenas a relao dos cdigos de todos os atletas ue sofreram penalidades: 3. Mostre apenas a relao dos nomes de todos os atletas ue sofreram penalidades: 4. Mostre o n mero do atletas ue receberam mais de duas penalidade. 5. Mostre a relao das cidades de onde provm os atletas. 50 6. Mostre uantos atletas moram em BELM

EXERCCIO
7. Mostre o n mero total de penalidades aplicadas 8.Mostre a penalidade de maior valor 9.Mostre uantas outras penalidades tem valor igual a penalidade de menor valor. 10.Mostre os nomes distintos das cidades de onde provm os atletas. ( mostrar apenas uma vez o nome de cada cidade)

51

EXERCCIO
11.Mostre o cdigo 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 cdigo 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
52

EXERCCIO
13. Mostre todas as cidades ue tem pelo menos 4 atletas provenientes 14. Mostre todas os atletas ue participaram de pelo menos 2 competies. 15. Mostre a relao de competies e a ualificao dos seus participantes organizado por competio e por atletas. 16. Mostre o nome de cada atleta ue comea coma letra M. 17. Mostre o nome de cada atleta ue no 53 comea coma letra M.

You might also like