Você está na página 1de 53

SQL Structured Query Language - Parte 2 Evandro E.S. Ruiz, Ph.D. evandro@usp.

br

Recordando...Tabelas exemplo

Curso
CodC C1 C2 C3 C4 C5
evandro@usp.br

NomeC Enfermagem Eng Mecnica Cincia Comp Eng Eltrica Turismo

DuracaoC 4 5 4 4 3

MensC 400 600 450 600 350

Tabelas exemplo Disciplina


CodD D1 D2 D3 D4 D5 D6
evandro@usp.br

NomeD TLP1 Clculo1 Ingls Ed Fsica G Analtica Projeto Final

CargaD 2 4 2 3 5 6

AreaD Computao Matemtica Humanas Sade Matemtica null

PreReqD D2 null null null D2 D1

Tabelas exemplo Professor


CodP P1 P2 P3 P4 P5 NomeP Joaquim Paulo Evandro Gil Juliana CidadeP Rib Preto Batatais Rib Preto S Carlos S Carlos TituloP Mestre Ps Doc Doutor Doutor Ps Doc

evandro@usp.br

Recordando...Agora vamos criar esta relao Grade


CodC C1 C2 C3 C4 C4 C5 C5
evandro@usp.br

CodD D6 D2 D2 D1 D3 D4 D4

CodP P1 P2 P2 P5 P3 P3 P4

Sala 305 305 305 201 204 204 207

Recordando...+ um exemplo de criao de uma relao


Exemplo 2: Criao da tabela Grade CREATE TABLE Grade ( CodC CHAR(5), CodD CHAR(5), CodP CHAR(5), Sala INTEGER, PRIMARY KEY (CodC, CodD, CodP), FOREIGN KEY (CodC) REFERENCES Curso (CodC) ON DELETE CASCADE, FOREIGN KEY (CodD) REFERENCES Disciplina (CodD) ON DELETE CASCADE, FOREIGN KEY (CodP) REFERENCES Professor (CodP) ON DELETE SET NULL);
6

evandro@usp.br

O comando SELECT
Sintaxe: SELECT FROM [WHERE [HAVING [DISTINCT | ALL] nome_coluna,.... nome_tabela, .... (condies) [ sub-select] ] (condies)]

[GROUP BY nome_coluna, ....]

[{INTERSECT | MINUS | UNION} comando_select] [ORDER BY nome_coluna {ASC | DESC}, ....]


evandro@usp.br

SELECT: detalhes
SELECT: atributos desejados DISTINCT: apenas valores distintos dos atributos ALL: todos os valores dos atributos FROM: de onde vem as informaes WHERE: de quais tuplas vm as informaes GROUP BY: forma grupo de tuplas HAVING: de quais grupos vm as informaes INTERSECT: interseo de resultados UNION: unio de resultados MINUS: diferena entre resultados
evandro@usp.br

ORDER BY: ordenao do resultado

SELECT: consultas simples


Nomes das disciplinas: SELECT NomeD FROM Disciplina

Grade
CodC C1 C2 C3 C4 C4 C5 C5 CodD D6 D2 D2 D1 D3 D4 D4 CodP P1 P2 P2 P5 P3 P3 P4 Sala 305 305 305 201 204 204 207

evandro@usp.br

SELECT: consultas simples


Nomes das disciplinas: SELECT NomeD FROM Disciplina

Grade
CodC C1 C2 CodD D6 D2 D2 D1 D3 D4 D4 CodP P1 P2 P2 P5 P3 P3 P4 Sala 305 305 305 201 204 204 207

NomeD TLP1 Clculo1 Ingls Ed Fsica G Analtica Projeto Final

C3 C4 C4 C5 C5

evandro@usp.br

SELECT: consultas simples


Salas onde as aulas sero ministradas: SELECT Sala FROM Grade

Grade
CodC C1 C2 CodD D6 D2 D2 D1 D3 D4 D4 CodP P1 P2 P2 P5 P3 P3 P4 Sala 305 305 305 201 204 204 207

evandro@usp.br

Sala 305 305 305 201 204 204 207

C3 C4 C4 C5 C5

10

SELECT: consultas simples


Salas onde as aulas sero ministradas, sem repetio: SELECT DISTINCT Sala FROM Grade
Sala 305 201 204 207

Grade
CodC C1 C2 C3 C4 C4 C5 C5 CodD D6 D2 D2 D1 D3 D4 D4 CodP P1 P2 P2 P5 P3 P3 P4 Sala 305 305 305 201 204 204 207

evandro@usp.br

11

SELECT: consultas simples


Nome e cdigo dos professores de Ribeiro Preto: SELECT NomeP, CodP FROM Professor WHERE CidadeP = 'Rib Preto'
NomeP Joaquim Evandro
evandro@usp.br

Professor
CodP P1 P2 P3 P4 P5 NomeP Joaquim Paulo Evandro Gil Juliana CidadeP Rib Preto Batatais Rib Preto S Carlos S Carlos TituloP Mestre Ps Doc Doutor Doutor Ps Doc
12

CodP P1 P3

SELECT: consultas simples


Todas as colunas da grade do curso C4: SELECT * FROM Grade WHERE CodC = 'C4'
CodC C4 C4
evandro@usp.br

Grade
CodC C1 C2 C3 C4 C4 CodD D6 D2 D2 D1 D3 D4 D4 CodP P1 P2 P2 P5 P3 P3 P4 Sala 305 305 305 201 204 204 207

CodD D1 D3

CodP P5 P3

Sala 201 204

C5 C5

13

SELECT: operadores

Aritmticos Lgicos Relacionais AND =

OR
<> !=

/ NOT

<

<=

>

>=

LIKE

BETWEENAND

Conjunturais

IN UNION

IS NULL

ANY

ALL

(NOT) EXISTS MINUS

Conjuntos

INTERSECT

evandro@usp.br

14

SELECT: uso de operadores


Nome e durao em meses de cada curso: SELECT NomeC, (DuracaoC * 12) FROM Curso
NomeC Enfermagem Eng Mecnica Cincia Comp Eng Eltrica Turismo DuracaoC * 12 48 60 60 60 36

Curso
CodC C1 C2 C3 NomeC Enfermagem Eng Mecnica Cincia Comp Eng Eltrica Turismo DuracaoC 4 5 4 4 3 MensC 400 600 450 600 350
15

evandro@usp.br

C4 C5

SELECT: uso de operadores


Nomes dos cursos cuja mensalidade inferior a 500 reais: SELECT NomeC FROM Curso WHERE MensC < 500
NomeC Enfermagem Cincia Comp Turismo
evandro@usp.br

Curso
CodC C1 C2 C3 C4 C5 NomeC Enfermagem Eng Mecnica Cincia Comp Eng Eltrica Turismo DuracaoC 4 5 4 4 3 MensC 400 600 450 600 350
16

SELECT: uso de operadores


Cdigo e carga horria das disciplinas da rea de Matemtica, com carga horria maior ou igual a 5: SELECT CodD, CargaD FROM Disciplina WHERE AreaD = 'Matemtica' AND CargaD >= 5
evandro@usp.br

CodD D5

CargaD 5

veja a tabela a seguir:

17

A tabela Disciplina Disciplina


CodD D1 D2 D3 D4 D5 D6
evandro@usp.br

NomeD TLP1 Clculo1 Ingls Ed Fsica G Analtica Projeto Final

CargaD 2 4 2 3 5 6

AreaD Computao Matemtica Humanas Sade Matemtica null

PreReqD D2 null null null D2 D1

18

SELECT: uso de operadores


O cdigo e o nome de todos os cursos de engenharia: SELECT CodC, NomeC FROM Curso WHERE NomeC LIKE 'Eng%'
CodC C2 C4
evandro@usp.br

Curso
CodC C1 C2 C3 C4 C5 NomeC Enfermagem Eng Mecnica Cincia Comp Eng Eltrica Turismo DuracaoC 4 5 4 4 3 MensC 400 600 450 600 350
19

NomeC Eng Mecnica Eng Eltrica

SELECT: uso de operadores


Cdigo dos cursos cuja mensalidade est entre 400 e 550 reais: SELECT CodC FROM Curso WHERE MensC BETWEEN 400 AND 550
CodC C1 C3
evandro@usp.br

Curso
CodC C1 C2 C3 C4 C5 NomeC Enfermagem Eng Mecnica Cincia Comp Eng Eltrica Turismo DuracaoC 4 5 4 4 3 MensC 400 600 450 600 350
20

SELECT: uso de operadores


Nome das disciplinas que so da rea de Computao ou de Humanas ou de Sade: SELECT NomeD FROM Disciplina WHERE AreaD IN ('Computao', 'Humanas', 'Sade')
NomeD TLP1 Ingls Ed Fsica

evandro@usp.br

Disciplina

21

SELECT: uso de operadores


Nome das disciplinas que no pertencem a nenhuma rea especca: SELECT NomeD FROM Disciplina WHERE AreaD IS NULL
NomeD Projeto Final

evandro@usp.br

Disciplina

22

SELECT: Uso de Alias


Nome e durao em meses de cada curso: SELECT NomeC AS Curso, (DuracaoC * 12) AS Durao_Meses FROM Curso
Curso Duracao_Meses Enfermagem Eng Mecnica Cincia Comp Eng Eltrica Turismo

evandro@usp.br

48 60 60 60 36

Curso

23

SELECT: Concatenao de campos


Cdigos dos cursos com seu nome e mensalidade concatenados: SELECT CodC, NomeC || MensC || ' reais' AS Info_Curso FROM Curso
CodC C1 C2 C3 C4 C5 Info_Curso Enfermagem 400 reais Eng Mecnica 600 reais Cincia Comp 450 reais Eng Eltrica 600 reais Turismo 350 reais

evandro@usp.br

Curso

24

SELECT: Ordenao do resultado


Nomes dos cursos ordenados de forma ascendente: SELECT NomeC FROM Curso ORDER BY NomeC ASC
NomeC Cincia Comp Enfermagem Eng Eltrica Eng Mecnica Turismo

evandro@usp.br

Curso

25

Exerccio: enunciado
Considere o esquema da Empresa: Func (cod_func, nome, dta_nasc, salrio, nro_deptoce, cod_supervce) Depto (nro_depto, nome, cod_gerce) Projeto (cod_proj, nome, durao, nro_deptoce) Participa (cod_projce, cod_funcce, horas_trab)

evandro@usp.br

26

Exerccio
1. Nome e salrio dos funcionrios do departamento 5, com salrio na faixa entre 1000 e 2000 2. Todas as informaes sobre projetos do departamento 5 3. Salrio lquido (85% do salrio bruto) dos funcionrios supervisionados pelo funcionrio 2 4. Cdigo dos funcionrios que so supervisores 5. Cdigo dos funcionrios que no tm supervisores 6. Nome completo, em ordem alfabtica, dos funcionrios que tm Felipe no nome 7. Nome, durao e depto dos projetos Shopping1, Edifcio Toriba, Bloco Didtico e Anel Virio

evandro@usp.br

27

SELECT: algumas funes


Grupo Funo AVG (col) SUM (col) MAX (col) MIN (col) COUNT UPPER (col) LOWER (col) SUBSTR (col, pos, n) ROUND (col/const, n) TRUNC (col/const, n) ABS (col/const) MONTH (data) YEAR (data) MINUTE (hora) TO_CHAR(num/data) TO_NUMBER (char) TO_DATE (char) Descrio mdia dos valores da coluna soma de valores da coluna valor mximo da coluna valor mnimo da coluna total de tuplas converte caracteres minsculos em maisculos converte caracteres maisculos em minsculos substring da coluna, iniciando em pos, com n caracteres arredondamento em n da coluna (ou da constante truncamento em n da coluna (ou da constante) valor absoluto da coluna ou da constante ms da data ano da data minuto da hora nmero (ou data) para caracter caracter para nmero caracter para data

Agregao

Caracter

Nmeros

Data/Hora
evandro@usp.br

Converses

28

SELECT: funes
Valor mnimo, mximo e mdio das mensalidades dos cursos cuja durao de 4 anos: SELECT MIN(MensC), MAX(MensC), AVG(MensC) FROM Curso WHERE DuracaoC = 4
MIN(MensC) 400
evandro@usp.br

MAX(MensC) 600

AVG(MensC) 483

Curso

29

SELECT: agrupamentos
Carga horria total de cada rea: SELECT AreaD, SUM(CargaD) FROM Disciplina GROUP BY AreaD

evandro@usp.br

AreaD (CargaD) Computao Matemtica Humanas Sade Null

SUM 2 9 2 3 6

Disciplina

30

SELECT: agrupamentos
Salas que so utilizadas para mais de uma aula e as respectivas quantidades de aulas: SELECT Sala, COUNT(*) FROM Grade GROUP BY Sala HAVING COUNT(*) > 1
evandro@usp.br

Sala COUNT(*) 305 3 204 2

Grade

31

Exerccio: enunciado
Considere o esquema da Empresa: Func (cod_func, nome, dta_nasc, salrio, nro_deptoce, cod_supervce) Depto (nro_depto, nome, cod_gerce) Projeto (cod_proj, nome, durao, nro_deptoce) Participa (cod_projce, cod_funcce, horas_trab)

evandro@usp.br

32

Exerccio
1. O maior e o menor salrio da empresa 2. O maior e o menor salrio de cada departamento 3. O maior e o menor salrio dos departamentos cuja mdia salarial maior ou igual a 2000 4. Total de horas trabalhadas de cada projeto

evandro@usp.br

33

SELECT: juno
Todas as informaes sobre a grade e as disciplinas do curso C4: SELECT * FROM Grade, Disciplina WHERE Disciplina.CodD = Grade.CodD AND CodC = 'C4
CodC CodD CodP Sala CodD NomeD CargaD AreaD C4 D1 P5 201 D1 TLP1 2 Computao C4 D3 P3 204 D3 Ingls 2 Humanas

evandro@usp.br

veja tabelas

34

Tabelas Grade e Disciplina Disciplina


CodD D1 D2 D3 D4 D5 D6
evandro@usp.br

NomeD TLP1 Clculo1 Ingls Ed Fsica G Analtica Projeto Final

CargaD 2 4 2 3 5 6

AreaD Computao Matemtica Humanas Sade Matemtica null

PreReqD D2 null null null D2 D1

Grade
CodC C1 C2 C3 C4 C4 C5 C5 CodD D6 D2 D2 D1 D3 D4 D4 CodP P1 P2 P2 P5 P3 P3 P4 Sala 305 305 305 201 204 204 207
35

SELECT: juno
Todas as informaes sobre a grade e as disciplinas do curso C4: (OUTRA SINTAXE) SELECT * FROM Grade INNER JOIN Disciplina ON Disciplina.CodD = Grade.CodD WHERE CodC = 'C4'
evandro@usp.br

CodC CodD CodP Sala CodD NomeD CargaD AreaD C4 D1 P5 201 D1 TLP1 2 Computao C4 D3 P3 204 D3 Ingls 2 Humanas
36

SELECT: juno
Cdigo, nome, carga horria, sala e curso das disciplinas: SELECT Grade.CodD, NomeD, CargaD, Sala, CodC FROM Disciplina, Grade WHERE Disciplina.CodD = Grade.CodD
CodD D1 D2 D2 D3 D4 D4 D6 NomeD CargaD TLP1 2 Clculo1 4 Clculo1 4 Ingls 2 Ed Fsica 3 Ed Fsica 3 Projeto Final 6 Sala 201 305 305 204 204 207 305 CodC C4 C2 C3 C4 C5 C5 C1

evandro@usp.br

veja tabelas

37

SELECT: juno
Nome das disciplinas e dos respectivos professores do curso C4: SELECT NomeD, NomeP FROM Disciplina, Grade, Professor WHERE CodC = 'C4' AND Disciplina.CodD = Grade.CodD AND Grade.CoP = Professor.CodP
NomeD TLP1 Ingls NomeP Juliana Evandro

evandro@usp.br

veja tabelas

38

SELECT: auto-juno
Nomes das disciplinas cujo pr-requisito Clculo1: SELECT Disc1.NomeD FROM Disciplina AS Disc1, Disciplina AS Disc2 WHERE Disc2.CodD = Disc1.PreReqD AND Disc2.NomeD = Clculo1
Disc1.NomeD TLP1 G Analtica

evandro@usp.br

veja tabela

39

Exerccio: enunciado
Considere o esquema da Empresa: Func (cod_func, nome, dta_nasc, salrio, Depto (nro_depto, nome, cod_gerce) Projeto (cod_proj, nome, durao, nro_deptoce) Participa (cod_projce, cod_funcce, horas_trab) nro_deptoce, cod_supervce)

evandro@usp.br

40

Exerccio
1. Nomes dos deptos e nomes dos respectivos gerentes 2. Nomes dos funcionrios que participaram de projetos e respectivos cdigos dos projetos e horas trabalhadas, somente das participaes que excederam 10h 3. Nomes dos funcionrios que participaram de projetos e respectivos totais de horas trabalhadas 4. Nomes de todos os funcionrios e respectivos totais de horas trabalhadas 5. Nomes dos funcionrios que participaram de projetos e nomes dos respectivos projetos
evandro@usp.br

6. Nomes dos funcionrios e nomes dos respectivos supervisores

41

SELECT: unio
Nome dos professores que so de Ribeiro Preto ou que so doutores: SELECT NomeP FROM Professor WHERE CidadeP LIKE 'Rib%Preto' UNION SELECT NomeP FROM Professor WHERE TituloP = 'Doutor
evandro@usp.br

Professor
CodP NomeP Joaquim Paulo Evandro Gil Juliana CidadeP Rib Preto Batatais Rib Preto S Carlos S Carlos TituloP Mestre Ps Doc Doutor Doutor Ps Doc
42

NomeP Joaquim Evandro Gil

P1 P2 P3 P4 P5

SELECT: interseo
Nome dos professores que so de Ribeiro Preto e que so doutores: SELECT NomeP FROM Professor WHERE CidadeP LIKE 'Rib%Preto' INTERSECT SELECT NomeP FROM Professor WHERE TituloP = 'Doutor
evandro@usp.br

Professor
CodP P1 NomeP Evandro P2 P3 P4 P5 NomeP Joaquim Paulo Evandro Gil Juliana CidadeP Rib Preto Batatais Rib Preto S Carlos S Carlos TituloP Mestre Ps Doc Doutor Doutor Ps Doc
43

SELECT: interseo
Nome dos professores que so de Ribeiro Preto e que no so doutores: SELECT NomeP FROM Professor WHERE CidadeP LIKE 'Rib%Preto' MINUS SELECT NomeP FROM Professor WHERE TituloP = 'Doutor'
evandro@usp.br

Professor
CodP P1 NomeP Joaquim P2 P3 P4 P5 NomeP Joaquim Paulo Evandro Gil Juliana CidadeP Rib Preto Batatais Rib Preto S Carlos S Carlos TituloP Mestre Ps Doc Doutor Doutor Ps Doc
44

Linguagem de Controle de Dados (DCL)


Comandos de administrao de acesso: GRANT REVOKE Privilgios para cada usurio, de acesso a um banco de dados, denidos para diferentes operaes sobre o mesmo: SELECT INSERT UPDATE ALTER, entre outros
evandro@usp.br

45

GRANT
Sintaxe: GRANT privilgio(s) ON objeto TO usurio(s) Exemplo: Liberar o acesso ao usurio Joao para realizar consultas tabela Disciplina: GRANT SELECT ON Disciplina
evandro@usp.br

TO Joao

46

GRANT
Permitir a todos os usurios realizar atualizaes das colunas CidadeP e TituloP da tabela Professor: GRANT UPDATE (CidadeP, TituloP) ON Professor TO PUBLIC Permitir todos os privilgios na tabela Grade ao usurio Joao, permitindo tambm que o mesmo possa liberar esses privilgios a outros usurios: GRANT ALL ON Grade
evandro@usp.br

TO Joao WITH GRANT OPTION


47

REVOKE
Sintaxe: REVOKE privilgio(s) ON tabela ou viso FROM usurio(s) Exemplo: Retirar todos os privilgios na tabela Grade para os usurios Joao e Paulo: REVOKE ALL ON Grade FROM Joao, Paulo
evandro@usp.br

48

Exerccios propostos
1. Crie a tabela Aluno, contendo dados pessoais dos alunos e o curso onde esto inscritos. 2. Crie a tabela Matricula, relacionando cada aluno com as disciplinas que o mesmo j cursou ou est cursando. 3. Armazene, altere e remova dados das tabelas criadas. 4. Crie um ndice para a coluna nome da tabela Aluno. 5. Crie privilgios para o usurio Slvio poder consultar e inserir dados na tabela Matricula. 6. Elimine todos os privilgios do usurio Slvio.
evandro@usp.br

49

Exerccios propostos
7.Crie as seguintes consultas: a) Cdigo e nome das disciplinas com carga horria entre 3 e 5 inclusive e que no sejam da rea de Sade. b) Nome das disciplinas com carga horria menor que 5 e que sejam ministradas por professores doutores. c) Salas onde haver aulas cujos cursos possuam durao superior a 3 anos e cujas disciplinas no sejam nem da rea de Matemtica, nem de Sade e nem de Humanas e cujo professor seja o Paulo, o Joaquim ou a Juliana. d) Nome dos cursos e das disciplinas oferecidas em cada curso.

evandro@usp.br

50

Exerccios propostos
f) Nomes das disciplinas e o nome dos respectivos pr-requisitos. g) Carga horria mdia das reas com carga horria mdia maior ou igual a 3. h) Nomes das disciplinas soltas, ou seja, aquelas que no tm pr-requisito e que no so pr-requisito.

evandro@usp.br

51

Agradeo ao Prof.Joaquim C. Felipe pela grande parte do contedo destes slides.

evandro@usp.br

52