Você está na página 1de 9

Linguagem de Consulta Estruturada

SQL- DML

INTRODUO

A SQL - Structured Query Language, foi desenvolvido pela IBM em meados dos anos 70 como uma
linguagem de manipulao de dados (DML - Data Manipulation Language) para suas primeiras tentativas de
desenvolvimento de bancos de dados relacionais. Sua vantagem sobre modelos de dados anteriores que as
operaes realizadas sobre os dados so especificadas numa linguagem no procedural e conjuntos de dados
so manipulados com um nico comando. Isto faz com que os programadores no tenham de navegar por
uma estrutura complexa de banco de dados, reduzindo a quantidade de cdigo necessrio para acessar os
dados.

SQL tornou-se padro depois de 1986, quando o American National Standards Institute (ANSI),
definiu a SQL como linguagem padro para os bancos de dados relacionais. Desde ento, o SQL j sofreu
diversas atualizaes oficiais. O novo padro SQL chama-se SQL3, nesta verso a mais importante a
adio de caractersticas de orientao a objetos na linguagem. . Atualmente este padro utilizado para o
acesso a diversos bancos de dados relacionais, tais como Oracle, DB2, SQL Server, Sybase, Mysql,
Postgresql, Interbase, Firebird etc.

Os comandos da SQL podem ser agrupados em trs categorias:


DML Data Manipulation Language
DDL Data Definition Language
DCL Data Control Language
DTL Data Transaction Language

A DDL disponibiliza comandos que permitem criar e eliminar base de dados, tabelas e indices alem
de disponibilizar comandos que eliminar todos os dados da tabela e alteram a estrutura da tabela

A DML disponibiliza comandos que permitem manipular os dados das tabelas no banco de dados
Principais comandos
A DCL disponibiliza comandos que definem usurios e controla o acesso destes aos dados na base
de dados.
A DTL disponibiliza comandos que controlam transaes a serem realizadas no banco de dados

Principais comandos das sub-linguagens da SQL

DML DDL DCL DTC


Insert Create table Create user Start transaction
update Drop table create role commit
delete Create drop user rollback
select database drop role
Drop database create view
alter table drop view
truncate grant
create index revoke
drop index

Nota de Aula 1
Prof. Sidney Vieira
COMANDOS DA DML

Considere a instncia de banco de dados abaixo, do banco de dados funcionrios, composto


das tabelas funcionrio e departamento:
DEPARTAMENTO

COD NOME ORCAMENTO MATR_CHEFE

===========================================================
1 desenvolvimento 100000.00 2
2 rede 200000.00 7 Banco de dados
3 manutencao 80000.00 <null> Funcionarios

FUNCIONARIO

MATR NOME SALARIO COMISSAO ADMISSAO SEXO DEP_COD


===============================================================================

1 ze 1000.00 100.00 09-DEC-2000 M 1


2 ana 1500.00 200.00 10-NOV-2001 F 1
3 pedro 1000.00 <null> 21-JAN-1999 M 2
4 eva 2000.00 400.00 03-DEC-1998 F 1
5 ivo 1800.00 400.00 10-OCT-2000 M 3
6 sid 900.00 200.00 22-FEB-2001 M 2
7 ines 1500.00 400.00 01-NOV-2002 F 3

obs:
o campo matr_chefe em DEPARTAMENTO tem a funo de guardar a matricula do funcionario
que o chefe do departamento e
o campo DEP_COD em funcionario tem a funo de guardar o departamento de alocao do
funcionario.

1 - INSERT
Permite inserir valores nas tuplas, linhas, de uma tabela de uma base de dados

Sintaxe:

INSERT INTO nome_da_tabela( colunai, ..., colunaj) VALUES (valor_ colunai, ... valor_ colunaj)

Obs:
Caso se deseje inserir um campo com valor nulo emprega-se o termo NULL para o valor da
coluna
Caso se deseje inserir todos os campos pode-se omitir o nome das colunas, desde que a insero
seja feita na mesma ordem na qual os campos foram criados pelo comando Create Table

INSERT INTO nome_da_tabela VALUES (valor_ colunai, ... valor_ colunaj)

Exemplos:

INSERT INTO FUNCIONARIO(matr, nome, comissao, admissao, admissao, sexo) VALUES


(8,'zelupe',1000.68,550,'3-2-2001','M')

INSERT INTO DEPARTAMENTO(cod, nome,orcamento) VALUES (4,'VENDAS',6000)

Nota de Aula 2
Prof. Sidney Vieira
2 - UPDATE

Permite modificar linhas existentes em uma tabela

Sintaxe:
UPDATE tabela
SET COLUNAj = valor, ..., COLUNAn = valor
WHERE condio

Exemplos:

Mudar a o valor da comisso do funcionario de matr 02 para 100

UPDATE funcionario
SET comissao = 100
WHERE matr = 02

Alterar para 100 reais, o valor da comisso, e para 1000, o valor do salario, do funcionario de matr 04

UPDATE funcionario
SET comissao = 100, salario = 1000
WHERE matr = 04

3 - DELETE

Permite eliminar linhas em uma tabela

Sintaxe:
DELETE FROM tabela
WHERE condio

Exemplo:

Excluir todos os funcionarios com salario superior a 1000 reais

DELETE FROM funcionario


WHERE salrio >1000

4 SELECT

Permite obter dados das tabelas contidas no base de dados.

Sintaxe

SELECT [atributo] { * | tabela.* | [tabela.]campo 1 [AS alias1] [, [tabela.]campo2 [AS alias2] [, ...]]}
FROM expressodetabelas
[WHERE..condio. ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]

Nota de Aula 3
Prof. Sidney Vieira
Parte Descrio
Atributo Um dos atributos a seguir: ALL, DISTINCT. Voc utiliza o atributo para
restringir o nmero de campos retornados. Se nenhum for especificado, o padro
ser ALL
* Especifica que todos os campos da tabela ou tabelas especificadas esto
selecionados.
Tabela O nome da tabela contendo os campos a partir dos quais os campos so
selecionados.
campo1, campo2 Os nomes dos campos contendo os dados que voc deseja recuperar. Se voc
incluir mais de um campo, eles sero recuperados na ordem listada.
alias1, alias2 Os nomes a serem utilizados como cabealhos de coluna em lugar dos nomes
originais de coluna em tabela.
Expresso de tabelas O nome da tabela ou tabelas contendo os dados que voc deseja recuperar.

Operadores relacionais para formao da condio na clusula Where

Expresso para formao da condio Descrio


campoi= value Igual a
campoi < value Menor que
campoi > value Maior que
campoi <= value Menor ou igual a
campoi >= value Maior ou igual a
campoi!< value No menor que
campoi!> value No maior que
campoi <> value Diferente de
campoi != value No igual a

Operadores lgicos para formao da condio na clusula where

AND OR NOT

Operadores aritmticos para formao da condio na clusula where

+ - / *

Outros Operadores para formao da condio na clusula Where

Expresso para formao da condio Descrio


campoi Between value AND value Entre a faixa de valores passada
campoi Like value Use '%' para 0 ou mais caracteres
Use '_' para 1 nico caractere
campoi IN (value, value, ...value) Um dos elementos da lista
campoi IS NULL Testa se o valor nulo (ausncia do valor)
campoi IS NOT NULL Testa se o valor no nulo
campoi CONTAINING value Procura em string case insentitive

Nota de Aula 4
Prof. Sidney Vieira
campoi STARTING WITH value Procura em string case sentitive

Obs:
Os operadores aritmticos podem ser usados na clusula Select
Comparaes com string so caso sensitivo no padro SQL-ANSI
String em comparaes devem ser colocadas entre (aspas)

Precedncia na formao da clusula Where

Os operadores relacionais possuem maior precedncia do que os operadores lgicos


Todos os operadores relacionais possuem a mesma precedncia.
O operador lgico and possui maior precedncia do que o operador or
Operadores de igual precedncia so calculados da esquerda para a direita

Exemplos:

Obter todos os dados de funcionario

SELECT *
FROM funcionario

OBS:
o caracter * empregado quando se deseja obter todos os campos, colunas, de uma tabela.

SELECT nome, salario


FROM funcionario

SELECT funcionario.nome, funcionario.salario


FROM funcionario

OBS:
neste caso a referncia ao campo feita descrevendo-se o nome da tabela e o nome do campo,
separado por ponto. Isto empregado quando se deseja obter informaes de mais de uma tabela,
com uma tabela no necessrio empregar este recurso.

SELECT f.nome, f.salario


FROM funcionario f

OBS:
Neste caso foi empregado um alias para a tabela funcionario

Atributos permitidos na clusula Select

SELECT [ALL | DISTINCT]

ALL o default seu emprego faz com que colunas iguais apaream no resultado de uma consulta
DISTINCT seu emprego faz com que caso haja colunas iguais em um resultado de uma consulta elas sejam
eliminadas

SELECT MATR o mesmo que : SELECT ALL MATR


FROM funcionario FROM funcionario

Exemplo:
Nota de Aula 5
Prof. Sidney Vieira
SELECT DISTINCT DET_COD
FROM funcionario

obs: Esta consulta nos permite visualizar o codigo dos departamentos, sem repetio, nos quais
existem funcionarios alocados. Caso no empregarmos o distinct teremos uma repetio
desnecessrio dos codigos que aparecem mais de uma vez na tabela.

Diferenas:

SELECT DET_COD SELECT DISTINCT DET_COD


FROM funcionario FROM funcionario
DEP_COD DEP_COD
========== ==========

1 1
1 2
2 3
1
3
2
3

Exemplos:
Obter o nome e salario dos funcionrios com salario maior ou igual a 100 reais

SELECT nome, salario


FROM funcionario
WHERE salario >= 1000

Obter o nome e salrio dos funcionrios com salario entre 1000 e 1500 reais

SELECT nome, salario


FROM funcionario
WHERE salario BETWEEN 1000 AND 1500

Obter o nome e salario dos funcionrios com salario de 100 ou 1500 ou 200 reias

SELECT nome, salario


FROM funcionario
WHERE salrio IN(1000,1500,2000)

Obter o nome e salario dos funcionrios com salario nulo

SELECT nome, salario


FROM funcionario
WHERE salrio IS NULL

Obter o nome e salario dos funcionrios cujo nome comece com a letra S

SELECT nome, salario


FROM funcionario
WHERE nome LIKE S%

Obter o nome, salario e a comisso dos funcionrios com salario superior a 500 reais e comisso inferior a
200 reais

SELECT nome, salario, comissao


FROM funcionario
Nota de Aula 6
Prof. Sidney Vieira
WHERE salrio < 500 AND comissao <200

Obter o nome, salario e a comisso dos funcionarios com salario igual a 100 reais ou comisso igual a 100
reais

SELECT nome, salario, comissao


FROM funcionario
WHERE salrio = 100 OR comissao = 100

Obter o nome, salario dos funcionarios que no possuem comisso com valor de 100 reais

SELECT nome, salario


FROM funcionario
WHERE NOT comissao = 100

Obter o nome, salario e a comisso dos funcionarios com comisso nula

SELECT nome, salario, comissao


FROM funcionario
WHERE comissao is null

Obter o nome, salario e a comisso dos funcionarios sua comisso adicionada com 100 reais seja menor do
que seu salrio

SELECT nome, salario, comissao


FROM funcionario
WHERE salrio > comissao + 100

Obter o nome e seus ganhos (salario + comisso) de todos os funcionarios que possuam comisso no nula

SELECT nome, salario + comissao


FROM funcionario
WHERE comissao is not null

Obter o nome e seus ganhos (salario + comisso), renomeando a coluna como total de ganhos, de todos os
funcionarios que possuam comisso no nula

SELECT nome, salario + comisso AS total de ganhos


FROM funcionario
WHERE comissao is not null

Funes

Permitem efetuar transformao sobre colunas especificadas. De modo que os valores NULL so
ignorados nos clculos efetuados pelas funes.

Funes disponveis:
AVG(coluna) retorna a media dos valores da coluna especificada
MAX(coluna) retorna o valor mximo da coluna especificada
MIN(coluna) retorna o valor mnimo da coluna especificada
SUM(coluna) retorna o soma dos valores da coluna especificada
COUNT(coluna) retorna o total de tuplas, da coluna especificada, que satisfazem a
clusula WHERE

Exemplos:

Nota de Aula 7
Prof. Sidney Vieira
Qual a media dos valores dos salarios pagos ?

SELECT AVG( salario)


FROM funcionario

Qual o maior valor de salrio pago ?

SELECT MAX( salario)


FROM funcionario

Qual o menor valor de salrio pago ?

SELECT MIN( salario)


FROM funcionario

Qual o valor total gasto com salrios ?

SELECT SUM( salario)


FROM funcionario

Quantos funcionrios de nomes distintos existem ?

SELECT COUNT( nome)


FROM funcionario

Em quantos departamentos existem funcionarios alocados?

SELECT COUNT( dep_cod)


FROM funcionario

SELECT COUNT( matri), SUM( salrio), MIN( salrio), MAX( salrio), AVG(salrio)
FROM funcionario

SELECT COUNT(*)
FROM funcionario
(retorna o total de tuplas da relao)

Ordenao e agrupamento de resultados

Esto disponveis as seguintes clusulas:

Order by colunai, colunaj, ...,colunan tem a funo de ordenar os resultados segundo os campos
especificados nesta clusulas. O default e uma ordenao ascendente ASC, possvel ordenar de
forma descendente usando DESC
Group By colunai, colunaj, ...,colunan tem a funo de agrupar os resultados quando se emprega
funes agregadas a clusulas Select e um uma outra coluna sem funo agregada.
Having condio tem a funo de especificar a condio em caso de agrupamentos usando Group
By, substitui o where quando se emprega o group by. Os campos que compem o having no
precisam fazer parte do select.

Exemplos:

Obter o nome e salarios dos funcionrios cujo salario seja superior a 1000 ordene por nome do funcionario

SELECT nome_fun, salrio


Nota de Aula 8
Prof. Sidney Vieira
FROM funcionario
WHERE salrio > 1000
ORDER BY nome

Obter o nome e salarios dos funcionrios cujo salario seja superior a 1000 ordene de forma decrescente por
salario

SELECT nome_fun, salrio


FROM funcionario
WHERE salrio > 1000
ORDER BY salario DESC

Obter o os codigos dos departametos e as quantidades de funcionarios alocadas neles

SELECT dep_cod , count(dep_cod)


FROM funcionario
GROUP BY dep_cod

ou

SELECT dep_cod, count(*)


FROM funcionario
GROUP BY dep_cod

Obter o os cdigos dos departametos e as quantidades de funcionarios alocadas neles dos departamentos que
possuam 3 ou mais funcionarios

SELECT dep_cod , count(*)


FROM funcionario
GROUP BY dep_cod
HAVING count(*) < 3

(neste caso ocorre a seleo onde cada grupo de cd tenha mais de 10 funcionarios)

Obter o os cdigos dos departametos e as quantidades de funcionarios alocadas neles dos departamentos que
cuja media salarial seja menor do que 1000 reais

SELECT dep_cod , count(*)


FROM funcionario
GROUP BY dep_cod
HAVING AVG(salario) < 1000

(neste caso ocorre a seleo onde cada grupo de cd tenha como media salaria 1000)

Nota de Aula 9
Prof. Sidney Vieira

Você também pode gostar