3.1 criação de tabelas • 3.2 queries simples • 3.3 ...sites.poli.usp.br/d/pmr2490/curso...
TRANSCRIPT
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 1
PROGRAMA
• 3.SQL Básico• 3.1 Criação de tabelas• 3.2 Queries simples• 3.3 Subqueries• 3.4 Agregação
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 2
3.SQL Básico
A linguagem SQL foi desenvolvida para o ambienterelacional, podendo ser adaptada a ambientes nãorelacionais;
A idéia original só previa o seu uso de formainterativa. Após sofrer alguns acréscimos,ela passou a ter capacidade de ser utilizadaem linguagens hospedeiras, tais como,COBOL, FORTRAN, C, etc...
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 3
3.SQL Básico
SQL – Structured Query Language• Fundamentos no modelo relacional de Codd• Sua primeira versão SEQUEL (Structured
English Query Language) – definida porChamberlin
• Tornou-se ANSI (American NationalStandard Institute) em 1982.
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 4
3.SQL Básico
Breve Histórico• SQL89
– Integrity Enhancement Feature (IEF)– Data Language Embedded SQL
• SQL92 (SQL2)– Grandes expansões; sinônimo de SQL
• SQL/CLI (95)• SQL3 (em andamento)
– recursão, triggers, objetos
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 5
AVISOSintaxe Simplificada!
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 6
3.1.Criação de Tabelas
CREATE TABLE
CREATE TABLE <table_name> ( <lista_colunas>)
<def_coluna>::= <nome> <tipo>
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 7
3.1.Criação de Tabelas
Tipos de Dados ANSI• Bit• Character• Date• Decimal• Double Precision• Float• Integer• Interval
• Numeric• Real• Smallint• Timestamp• Time• Varbit• Varchar
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 8
3.1.Criação de Tabelas
ExemploCREATE TABLE s_dept( id DECIMAL(7), name VARCHAR(25),
region_id DECIMAL(7))CREATE TABLE s_emp( id DECIMAL(7), name VARCHAR(25),
dept DECIMAL(7)salary DECIMAL(8,2)
)
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 9
Tabela Cliente
CREATE TABLE CLIENTE (CODIGO_CLIENTE SMALLINT NOT NULL UNIQUE,NOME CLIENTE CHAR(20),ENDERECO CHAR(30),CIDADE CHAR(15),CEP CHAR(8),UF CHAR(2),CGC CHAR(20),IE CHAR(20),PRIMARY KEY (CODIGO_CLIENTE)
);
3.1.Criação de Tabelas
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 10
Tabela Pedido
CREATE TABLE PEDIDO (NUM_PEDIDO INT NOT NULL UNIQUE,PRAZO_ENTREGA SNALLINT NOT NULL,CODIGO_CLIENTE SMALLINT NOT NULL,CODIGO_VENDEDOR SMALLINT NOT NULL,PRIMARY KEY (NUM_PEDIDO),FOREIGN KEY (CODIGO_CLIENTE) REFERENCES CLIENTE,FOREIGN KEY (CODIGO_VENDEDOR) REFERENCES VENDEDOR
);
3.1.Criação de Tabelas
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 11
Tabela Item do Pedido
CREATE TABLE ITEM_DO_PEDIDO (NUM_PEDIDO INT NOT NULL UNIQUE,CODIGO_PRODUTO SMALLINT NOT NULL UNIQUE,QUANTIDADE DECIMAL,FOREIGN KEY (NUM_PEDIDO) REFERENCES PEDIDO,FOREIGN KEY (CODIGO_PRODUTO) REFERENCES PRODUTO,PRIMARY KEY (NUM_PEDIDO,CODIGO_PRODUTO)
);
3.1.Criação de Tabelas
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 12
Tabela Vendedor
CREATE TABLE VENDEDOR (CODIGO_VENDEDOR SMALLINT NOT NULL UNIQUE,NOME_VENDEDOR CHAR(20),SALARIO_FIXO MONEY,FAIXA_COMISSAO CHAR(1),PRIMARY KEY (CODIGO_VENDEDOR)
);
3.1.Criação de Tabelas
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 13
Tabela Produto
CREATE TABLE PRODUTO (CODIGO_PRODUTO SMALLINT NOT NULL UNIQUE,UNIDADE CHAR(3),DESCRICAO_PRODUTO CHAR(30),VAL_UNIT MONEY,PRIMARY KEY (CODIGO_PRODUTO)
);
3.1.Criação de Tabelas
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 14
3.1.Destruição de Tabelas
DROP TABLE
DROP TABLE <nome>
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 15
3.1.Alteração de Tabelas
ALTER TABLE
ALTER TABLE <nome> ADD <def_coluna>
ALTER TABLE <nome> DROP <coluna>
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 16
3.1.População de Tabelas
INSERT INTO
INSERT INTO <nome>{ (lista_colunas) }VALUES ( <lista_valores> )
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 17
3.1.População de Tabelas
Exemplo
• Insere o Departamento de ComprasINSERT INTO s_deptVALUES ( 1, “Compras”, 1 )
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 18
3.2. Queries simples
SELECT
SELECT { ALL | DISTINCT } <lista_itens> FROM <lista_tabelas> WHERE <expressão_seleção>
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 19
3.2. Queries simples
Projeção
<lista_itens> contém algumas colunas
Seleção
<expressão_seleção> seleciona itens
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 20
3.2. Queries simples
Exemplos• Seleciona nomeSELECT nome FROM s_dept
• Seleciona tudoSELECT * FROM s_dept
• Seleciona nome de todos os Departamentos da região 3SELECT nome FROM s_deptWHERE region_id=3
• Seleciona o nome de todos os empregados da região 3SELECT s_emp.nome FROM s_emp, s_deptWHERE (s_dept.region_id=3 AND
s_emp.dept=s_dept.id)
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 21
3.2. Queries simples
Operadores IN e NOT IN
WHERE <nome da coluna> IN <valores>WHERE <nome da coluna> NOT IN <valores>
Listar os vendedores que são da faixa de comissão A e B
SELECT NOME_VENDEDOR FROM VENDEDORWHERE FAIXA_COMISSAO IN (‘A’,’B’)
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 22
3.2. Queries simples
Operadores IS NULL e IS NOT NULL
Mostrar os clientes que não tenham inscrição estadual
SELECT * FROM CLIENTE WHERE IE IS NULL
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 23
3.2. Queries simples
Ordenando os dados selecionados
SELECT <NOME_COLUNA> FROM <TABELA>WHERE <CONDICOES> ORDER BY<NOME_COLUNA> ASC ou <NOME_COLUNA> DESC
Mostrar em ordem alfabética a lista de vendedores e seus respectivossalários fixos
SELECT NOME_VENDEDOR, SALARIO_FIXO FROMVENDEDOR ORDER BY NOME_VENDEDOR
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 24
3.2. Queries simples
LIKE
WHERE <NOME_COLUNA> LIKE <VALOR>WHERE <NOME_COLUNA> NOT LIKE <VALOR>
% substitui uma palavra_ substitui um caracter
‘LAPIS%’ == ‘LAPIS PRETO’, ‘LAPIS CERA’, ‘LAPIS BORRACHA’‘BROCA N_’ == ‘BROCA N1’, ‘BROCA N2’, ‘BROCA N9’
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 25
3.2. Queries simples
Listar os nomes, cidades e estados de todos os clientes,ordenados por estado e cidade de forma descendente
SELECT NOME_CLIENTE, CIDADE, UF FROMCLIENTE ORDER BY UF DESC, CIDADE DESC
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 26
3.2. Queries simples - problemas
Listar todos os produtos com as respectivas descrições,unidades e valores unitários
SELECT DESCRICAO_PRODUTO, UNIDADE, VAL_UNIT FROMPRODUTO
Listar o nome do cliente com seu endereço e CGC
SELECT NOME_CLIENTE, ENDERECO, CGC FROM CLIENTE
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 27
3.2. Queries simples - problemas
Listar todo o conteúdo de vendedor
SELECT * FROM VENDEDOR
Listar o NUM_PEDIDO, o COD_PRODUTO e aquantidade dos itens do pedido com a quantidade igual a35
SELECT NUM_PEDIDO, CODIGO_PRODUTO, QUANTIDADEFROM ITEM_PEDIDO WHERE QUANTIDADE = 35
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 28
3.2. Queries simples - problemas
Listar os clientes que moram em NITEROI
SELECT NOME_CLIENTE FROM CLIENTE WHERE CIDADE =‘NITEROI’
Listar os produtos que tenham unidade igual a ‘M’ e valorunitário igual a R$ 1,05
SELECT DESCRICAO_PRODUTO FROM PRODUTO WHEREUNIDADE = ‘M’ AND VAL_UNIT = 1.05
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 29
3.2. Queries simples - problemas
Listar os clientes e seus respectivos endereços, que moremem São Paulo ou estejam na faixa de CEP entre 30077-000 e 30079-000
SELECT NOME_CLIENTE, ENDERECO FROM CLIENTEWHERE (CEP >= ‘30077000’ AND CEP <= ‘30079000’) ORCIDADE = ‘SÃO PAULO’
Listar todos os pedidos que não tenham prazo de entregaigual a 15 dias
SELECT NUM_PEDIDO FROM PEDIDO WHERE NOT(PRAZO_ENTREGA = 15)
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 30
3.2. Queries simples - problemas
Listar o código e a descrição dos produtos que tenham ovalor unitário na faixa de R$ 0,32 até R$ 2,00
SELECT CODIGO_PRODUTO, DESCRICAO_PRODUTO FROMPRODUTO WHERE VAL_UNIT BETWEEN 0.32 AND 2.00
Listar todos os produtos que tenham a sua unidadecomeçando por ‘K’
SELECT CODIGO_PRODUTO, DESCRICAO_PRODUTO FROMPRODUTO WHERE UNIDADE LIKE ‘K_’
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 31
3.2. Queries simples - problemas
Listar os vendedores que não começam por ‘JO’
SELECT CODIGO_VENDEDOR, NOME_VENDEDOR FROMVENDEDOR WHERE NOME_VENDEDOR NOT LIKE ‘JO’
Listar a descrição e o valor unitário de todos os produtosque tenham a unidade ‘KG’, em ordem crescente devalor unitário
SELECT DESCRICAO, VAL_UNIT FROM PRODUTO WHEREUNIDADE = ‘KG’ ORDER BY 2 ASC
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 32
3.2. Queries simples
UPDATE
UPDATE <tabela> SET <lista_atribuições> {WHERE <expressão_seleção>}
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 33
3.2. Queries simples
Exemplos• Duplica todos os saláriosUPDATE s_empSET salario=salario*2
• Duplica o salário de todos os “Marcos”UPDATE s_empSET salario=salario*2WHERE nome=“Marcos”
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 34
3.2. Queries simples - problemas
Alterar o valor unitário do produto parafuso de R$ 1.25para R$ 1.62
UPDATE PRODUTO SET VAL_UNIT = 1.62 WHEREDESCRICAO = ‘PARAFUSO’
Alterar o salário fixo de todos os vendedores em 27% maisuma bonificação de R$ 100,00
UPDATE VENDEDOR SET SALARIO_FIXO = (SALARIO_FIXO *1.27) + 100.00
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 35
PRÁTICA
Queries Simples
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 36
Prática: Queries simples
PRODUTO
OF
DETALHE
(1,n)
(1,n)(1,n)
(1,1)
IDNome
IDDueDate
IDTipo de operaçãoTempo
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 37
Prática: Queries simples
1.Representar o modelo E-R no modelo relacional2.Codificar a criação das tabelas3.Codificar a população das tabelas4.Executar as seguintes queries:
4.1.Quais são todos os produtos4.2.Quais são todas as OF?4.3.Quais são todas as OF de um dado produto?4.4.Quais são todos os detalhes de uma OF de um dadoproduto?
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 38
3.3.Subqueries
CONCEITO
Uma subquery é um SELECT inserido em umacláusula de outro comando SQL
SELECT { ALL | DISTINCT } <lista_itens> FROM <lista_tabelas> WHERE <expressão_seleção>
<expressão_seleção> ::= <expr> <operator> (SELECT ....)
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 39
3.3.Subqueries
CONCEITO(ii)
<expressão_seleção> ::= <expr> <operator> (SELECT ....)
<operator>::= [ >|=|>=|<|<>|<= ] | [ IN | NOT IN ]
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 40
3.3.Subqueries
Exemplo(i): Subquery retorna uma única linha
Obter todos os departamentos que se encontram namesma região que o departamento de Compras.
SELECT nome FROM s_deptWHERE region_id =
(SELECT region_id FROM s_deptWHERE nome = ‘Compras’)
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 41
3.3.Subqueries
Exemplo(ii): Subquery retorna várias linhas
Obter todos os funcionários de todos osdepartamentos que se encontram na mesma região
SELECT nome FROM s_empWHERE dept IN
(SELECT dept FROM s_deptWHERE region_id=3)
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 42
3.4.Agregações
Operadores de agregação
• Count• AVG• MIN• MAX• SUM
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 43
3.4.Agregações
Exemplo
• Determina o número de funcionáriosSELECT count(*) FROM s_emp;
• Determina o salário médioSELECT AVG(salary) FROM s_emp;
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 44
3.4.Agregações
Agrupamento
GROUP BY <critério_agrupamento>
Formação de grupos
Uso: junto com SELECT
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 45
3.4.Agregações
Exemplo
• Calcular o total de salários por departamentoSELECT dept, SUM(salary) FROM s_empGROUP BY dept
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 46
3.4.Agregações
Pertinência
HAVING <critério_pertinência>
Seleção baseada em alguma propriedade do grupo (ou seja,após o cálculo do GROUP BY)
Uso: junto com SELECT
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 47
3.4.Agregações
Exemplo
• Calcular o total de salários por departamento detodos os departamentos com folha superior ao deum dado departamento (no caso, o 32)
SELECT dept, SUM(salary) FROM s_empGROUP BY deptHAVING AVG(salary) >
(SELECT AVG(salary) FROM s_empWHERE dept = 32)
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 48
PRÁTICA
Subqueries e Agregações
EPUSP-PMR Prof. Dr. Marcos Tsuzuki 49
Prática: Subqueries e agregações
1.Executar as seguintes queries:1.Dados um produto, quantas OF há?2.Admitindo que cada OF tenha um campo “Duração”,qual é a duração média de uma OF?3.Quais são todas as OF com operaçãoTORNEAMENTO, agrupadas por Produto?