SQL
23/9/2011 SQL 2
SQL
• Structured Query Language
• Linguagem de Consulta Estruturada
SQL
• Edgar F. Codd
• Proposta em 1970 como uma linguagem
para acessar dados em BD Relacional
• Fundamentação:
Teoria dos Conjuntos Álgebra Relacional
23/9/2011 SQL 4
SQL
• Linguagem não-procedural
• Ou seja, não existem procedimentos para
acessar o dado, como por exemplo,
open/close, read, etc.
• Apenas se diz o que se deseja!
23/9/2011 SQL 5
SQL
• Possui 3 componentes (ou 3
sub-linguagens):
DDL (Data Definition Language)
DML (Data Manipulation Language)
DCL (Data Control Language)
SQL- DDL
• DDL (Data Definition Language) Linguagem de Definição de Dados
Seus comandos afetam os objetos relacionais (como tabelas, índices, etc.)
23/9/2011 SQL 7
SQL - DDL
• Principais comandos:
CREATE {objeto} {nome} {parâmetros}
DROP {objeto} {nome} {parâmetros}
ALTER {objeto} {nome} {parâmetros}
23/9/2011 SQL 8
SQL – DDL- CREATE
CREATE TABLE [dbo].GIS_TBEX01_01EXEMPLO ( codigo numeric (5, 0) NOT NULL ,
nome varchar (72) NULL , tipo char (1) NULL , dat_fund datetime NULL , PRIMARY KEY CLUSTERED
(codigo) ) ON [PRIMARY]
SQL – DDL- DROP
23/9/2011 SQL 10
SQL – DDL- ALTER
ALTER TABLE [dbo].GIS_TBEX01_01EXEMPLO WITH NOCHECK
ADD
CONSTRAINT
CK_GIS_TBEX01_01EXEMPLO_tipo CHECK (tipo = 'f' or tipo = 'm' or tipo = 's‘) ,
CONSTRAINT
CK_GIS_TBEX01_01EXEMPLO_adm CHECK (adm = 'p' or (adm = 't'))
23/9/2011 SQL 11
SQL- DML
• DML (Data Manipulation Language) Linguagem de Manipulação de Dados Seus comandos afetam os dados relacionais contidos nas tabelas
SQL - DML
• Principais comandos: INSERT DELETE UPDATE SELECT23/9/2011 SQL 13
SQL – DML- INSERT
• O comando INSERT grava 1 linha (ou tupla, ou registro) em 1 tabela
Insert into [dbo].GIS_TBEX01_01EXEMPLO values
(1, 'Alumar', 'm', 'p', NULL, 31, 'MA', 'Alumar', NULL)
23/9/2011 SQL 14
SQL – DML- INSERT
• Notar que, neste caso, cada valor é carregado na coluna correspondente da tabela.
Insert into [dbo].GIS_TBEX01_01EXEMPLO values
(1, 'Alumar', 'm', 'p', NULL, 31, 'MA', 'Alumar', NULL)
SQL – DML- INSERT
• É possível trocar a ordem de carga das colunas em uma tupla.
Insert into [dbo].GIS_TBEX01_01EXEMPLO (nome, código, tipo, dat_fund)
values
('Alumar', 1, 'm', 'p', NULL, 31, 'MA', 'Alumar', NULL)
23/9/2011 SQL 16
SQL – DML- DELETE
• O comando DELETE elimina uma ou mais linhas (ou tuplas, ou registros) de 1 tabela Delete From [dbo].GIS_TBEX01_01EXEMPLO
[Where Predicados]
23/9/2011 SQL 17
SQL – DML- DELETE
• Se o comando DELETE for emitido sem a cláusula Where, todas as linhas da tabela serão eliminadas
Delete From [dbo].GIS_TBEX01_01EXEMPLO
SQL – DML- DELETE
• Para eliminar apenas algumas linhas de uma tabela, o comando DELETE deve ser emitido com a cláusula Where especificando quais linhas devem ser eliminadas
Delete From [dbo].GIS_TBEX01_01EXEMPLO [Where Predicados]
23/9/2011 SQL 19
SQL – DML- UPDATE
• O comando UPDATE altera o conteúdo de um ou mais campos em uma ou mais linhas (ou tuplas ou registros) de 1 tabela
Update [dbo].GIS_TBEX01_01EXEMPLO Set coluna1 = novo-valor1
[ , coluna2 = novo-valor2, ...] [Where Predicados]
23/9/2011 SQL 20
SQL – DML- UPDATE
• Se a cláusula Where for omitida, todas as linhas terão os campos alterados.
Update [dbo].GIS_TBEX01_01EXEMPLO Set coluna1 = novo-valor1
[ , coluna2 = novo-valor2, ...] [Where Predicados]
SQL – DML- SELECT
• O comando SELECT recupera uma ou mais linhas (ou tuplas ou registros) de uma ou mais tabelas Select tupla From tabelas [Where predicados] [Order By colunas] [Group By colunas] [Having predicados]
23/9/2011 SQL 22
SQL – DML- SELECT
• Cláusulas:
From
obrigatória
Where
opcional
Order By
opcional
Group By
opcional
Having
opcional
23/9/2011 SQL 23SQL – DML- SELECT
• Cláusulas:
Group By
Having
Não serão tratadas no curso
SQL – DML- SELECT
• Formato simples
• Recupera todas as colunas de todas as
linhas da tabela.
Select *
From tabela
23/9/2011 SQL 25
SQL – DML- SELECT
Select *
From [dbo].GIS_TBEX01_01EXEMPLO
Neste comando são recuperadas todas as
colunas (*) de todas as linhas (não há
cláusula Where para filtrar as linhas)
23/9/2011 SQL 26
SQL – DML- SELECT
• Seleção de funções
Select função
From tabela
SQL – DML- SELECT
• Dentre as funções disponíveis, temos as
Funções de Agregação
Select função_agregação [label]
From tabela
23/9/2011 SQL 28
SQL – DML- SELECT
• Funções de Agregação
Count(*) conta linhas da tabela
MAX(nome_coluna) seleciona o maior valor da coluna (maximum)
MIN(nome_coluna) seleciona o menor valor da coluna (minimum)
23/9/2011 SQL 29
SQL – DML- SELECT
• Funções de Agregação
SUM(nome_coluna) efetua a somatória dos valores da coluna (summary) AVG(nome_coluna) efetua a média dos valores
da coluna (average)
SQL – DML- SELECT
Função Count (*)
Select count(*)
From [dbo].Gis_Tbex01_01Exemplo
O resultado será o total de linhas que
23/9/2011 SQL 31
SQL – DML- SELECT
Função Max (coluna)
Select max(salario)
From [dbo].Gis_Tbex01_01Exemplo
O resultado será o maior valor de salário
desta tabela.
23/9/2011 SQL 32
SQL – DML- SELECT
Função Min (coluna)
Select min(salario)
From [dbo].Gis_Tbex01_01Exemplo
O resultado será o menor valor de salário
desta tabela.
SQL – DML- SELECT
Função Sum (coluna)
Select sum(salario)
From [dbo].Gis_Tbex01_01Exemplo
O resultado será a somatória de todos os
23/9/2011 SQL 34
SQL – DML- SELECT
Função Avg (coluna) Select avg(salario)
From [dbo].Gis_Tbex01_01Exemplo
O resultado será a média de todos os valores de salário desta tabela.
Lembre-se que o valor NULL pode alterar o valor desta média. 23/9/2011 SQL 35
SQL – DML- SELECT
• Seleção de tuplas
Select tupla
From tabela
SQL – DML- SELECT
Select [tab1.] nome_col1 [label1], [ [,tab1.] nome_col2 [label2],
[,tab1.] nome_col3 [label2], ...] From tabela
[Where predicados] [Order By colunas]
23/9/2011 SQL 37
SQL – DML- SELECT
• Predicados
Colocados na cláusula Where Principais predicados: Igualdade In Between Is Null Like 23/9/2011 SQL 38
SQL – DML- SELECT
• Predicadosnome_coluna [NOT] predicado operando2 and / or
nome_coluna [NOT] predicado operando2
SQL – DML- SELECT
• Predicado de igualdade nome_col1 [NOT] = coluna2
[!] > literal < constante
>= expressão_matemática <= subselect
23/9/2011 SQL 40
SQL – DML- SELECT
• Predicado IN
nome_coluna [NOT] IN (lista de valores) subselect 23/9/2011 SQL 41
SQL – DML- SELECT
• Predicado IN nome_coluna IN (1, 2, 3, 4) nome_coluna NOT IN (‘m’, ‘,f’,)SQL – DML- SELECT
• Predicado IN nome_coluna IN (1, 2, 3, 4) • Equivale a: nome_coluna = 1 or nome_coluna = 2 or nome_coluna = 3 or nome_coluna = 423/9/2011 SQL 43
SQL – DML- SELECT
• Predicado BETWEEN
nome_coluna BETWEEN valor1 and valor2 nome_coluna NOT BETWEEN valor1 and valor2 (Observação: o intervalo entre valor1 e valor2 é um
intervalo fechado)
23/9/2011 SQL 44
SQL – DML- SELECT
• Predicado BETWEEN
nome_coluna BETWEEN 100 and 250
SQL – DML- SELECT
• Predicado BETWEEN
nome_coluna BETWEEN 100 and 250
• Equivale a:
nome_coluna >= 100 and nome_coluna <= 250
23/9/2011 SQL 46
SQL – DML- SELECT
• Predicado IS NULL
nome_coluna IS NULL nome_coluna IS NOT NULL
23/9/2011 SQL 47
SQL – DML- SELECT
• Predicado IS NULL
Atenção: Nenhum valor é igual a nulo
Nulo é o valor dado para a ausência de valor Nulo não é branco. Nulo não é zero.
Ou uma coluna é nula ou é não nula
SQL – DML- SELECT
• Predicado LIKE
nome_coluna LIKE ‘string’ nome_coluna NOT LIKE ‘string’
23/9/2011 SQL 49
SQL – DML- SELECT
• Predicado LIKE
• 2 caracteres:
% Qualquer conjunto de caracteres (0 a N caracteres)
_ 1 posição com qualquer caracter
23/9/2011 SQL 50
SQL – DML- SELECT
• Predicado LIKE coluna1 like ‘%A’ coluna1 like ‘A%’ coluna1 like ‘%A%’ coluna1 like ‘A_%A’ coluna1 like ‘A_G%A’
SQL – DML- SELECT
• Subselect
É um Select dentro de outro Select
A execução é feita de trás para a frente (ou seja, do último Select para o primeiro Select) (ou do Select mais interno para o Select mais externo)
23/9/2011 SQL 52
SQL – DML- SELECT
Select codigo 'Código do Continente' From GIS_TBA01_01CONTINENTE
Where ext_km2 =
(Select max(ext_km2)
From GIS_TBA01_01CONTINENTE)
(Em negrito destacamos o subselect)
23/9/2011 SQL 53
SQL – DML- SELECT
• Junção (Join)
É a junção de duas ou mais tabelas
A junção é feita através de uma coluna comum
SQL – DML- SELECT
• A junção (join) pode ser: Natural (ou nativo) Inner Join
23/9/2011 SQL 55
SQL – DML- SELECT
• Existem outros joins, além do Inner: Outer Join Left Join Right Join 23/9/2011 SQL 56
SQL – DML- SELECT
• Join NaturalSelect tab1.col1 [label1] , tab2.col1 [label2] From tab1 [apelido1]
, tab2 [apelido2] Where tab1.PK = tab2.FK
SQL – DML- SELECT
• Join Natural
Select apelido1.col1 [label1] , apelido2.col1 [label2] From tab1 apelido1
, tab2 apelido2
23/9/2011 SQL 58
SQL – DML- SELECT
• Inner Join
Select apelido1.col1 [label1] , apelido2.col1 [label2] From tab1 apelido1
INNER JOIN tab2 apelido2 ON apelido1.PK = apelido2.FK Where ... 23/9/2011 SQL 59
SQL- DCL
• DCL (Data Control Language) Linguagem de Controle de Dados
Engloba comandos que não são DDL e nem são DML
SQL - DCL
• Principais comandos:
GRANT
23/9/2011 SQL 61
SQL – DCL- GRANT
GRANT
Concede privilégios (direitos)
Concede autoridade
23/9/2011 SQL 62SQL – DCL- GRANT
GRANT
privilégio1, ... , privilégion
ON objeto1, ..., objeton
TO user1, ..., usern
With Grant Option
SQL – DCL- GRANT
GRANT
SELECT
ON GIS.TBA01.01CONTINENTE
TO GIS01
23/9/2011 SQL 64
SQL – DCL- GRANT
GRANT
SELECT
ON GIS.TBA01.01CONTINENTE
TO GIS01
WITH GRANT OPTION
23/9/2011 SQL 65
SQL – DCL- REVOKE
REVOKE
Retira privilégios (direitos) concedidos
Retira autoridade concedida
SQL – DCL- REVOKE
REVOKE
privilégio1, ... , privilégion
ON objeto1, ..., objeton
FROM user1, ..., usern
23/9/2011 SQL 67