Sei sulla pagina 1di 28

Universidade Tecnolgica Federal do Paran

Campus Pato Branco Pr



Prof. Dr. Richardson R.

Disciplina: Banco de Dados 1

Assunto: SQL Fundamental (Parte 1)



Referncias Bsicas para SQL ANSI.

SILBERSCHATZ, Abraham. Sistema de banco de dados.
So Paulo: Makron Books, 1999.

ELMASRI, Ramez; NAVATHE, Shamkant B. Sistemas de
banco de dados. 4. Ed. So Paulo: Pearson Addison
Wesley, c2005.


Introduo a Linguagem SQL (ANSI)

Uma Linguagem para Bancos de Dados Relacionais

O primeiro nome da linguagem foi SEQUEL (Structured English Query
Language), Linguagem de Consulta Estruturada.
To logo, chamada de SQL, foi desenvolvida pela IBM na dcada de 70,
como linguagem de acesso ao seu banco de dados relacional.
Tinha por objetivo demonstrar a viabilidade da implementao do
modelo relacional proposto por E. F. Codd.
Muitas das caractersticas originais do SQL so inspiradas na lgebra
relacional - Matemtica. Por isso a importncia de conhecer a lgebra
relacional e teoria dos conjuntos para facilitar o entendimento das consultas
mais complexas.
A SQL foi padronizada (sintaxes, comandos) em 1986 pelo Instituto
Nacional Americano Nacional de Padres (ANSI
1
), onde no ano seguinte o
padro foi adotado pela Organizao Internacional de Padronizaes (ISO).
uma linguagem de consulta no-procedural, usada para criar tabelas,
ndices, domnios, etc e manipular os dados armazenados. Fazer a
manuteno e o gerenciamento de banco de dados relacionais.

As instrues que compem a linguagem SQL podem ser divididos em
dois grupos:
DDL (data definition language): So instrues voltadas para criar e dar
manuteno ao esquema (estrutura) de um BD;
DML (data manipulation language): So instrues voltadas para
manipular dados contidos nas tabelas de um DB (incluir, alterar, deletar
dados);

Recomendaes a SQL:
No iniciar o nome de um elemento (tabelas, campos, ndices, etc) com
acentos ou cedilhas em seus nomes.
No utilizar espaos em brancos ou smbolos/caracteres especiais
como: , , ,* ,- ,+ , etc.:
No usar nomes de atributos, tabelas como: nome*autor, preo+item,
titulo livro. Usar nome_autor, preco_item, titulo_livro.
Utilize nomes significativos para os elementos.


1
American National Standards Institute (ANSI)
Principais tipos de dados (campos de uma tabela) permitidos no SQL ANSI:
Nomenclatura Descrio Exemplo Observaes
Varchar (n)
CHARACTER VARYING
Caractere de largura varivel: Permite o
armazenamento de caracteres alfanumricos, de
comprimento varivel.

Create table cliente
(
Nome_cli Varchar (50)
);
- n representa o tamanho do campo mximo a
ser alocado, podendo variar de 1 at 32.767.

O varchar no armazena os espaos restantes
no preenchidos. Usar para atributos como
nomes, descries, endereos. Campos onde
a priori, no se sabe a quantidade de
caracteres a ser informado.
// [joo maria]

Char (n)
CHARACTER
Caractere de largura fixa: Permite o
armazenamento de caracteres alfanumricos, de
comprimento fixo.
Create table cliente
(
cpf_cli Char (14)
);
Todos os espaos so preenchidos, mesmo
sem informar valores para todos os caracteres.

Nome_cli Char (20);
- [joo maria ], armazena espaos em
branco.

Integer
Tipo numrico inteiro: Armazenam nmeros inteiros
ou negativos entre -2.147.483.648 e 2.147.483.647.
So usados normalmente para armazenar campos
identificadores - chaves; 4 bytes.
Create table cliente
(
id_cli Integer,
cpf_cli Char (14)
Dica: No utilizem integer para armazenar cpf,
cep, telefones, etc, pois esses possuem
formatao e podem ser tratados como
alfanumricos.

);
Smallint
Tipo numrico curto: Armazenam nmeros entre
32.768 e 32.767; 2 bytes


Create table livro
(
num_pag Smallint
)

Numeric (p,e)
Tipo numrico decimal: Armazenam valores que
contenham nmeros com casas decimais
preestabelecidas.
Create table livro
(
num_pag Smallint,
Preco_livro Numeric (6,2)
)
O p corresponde o comprimento do valor
numrico, tambm conhecido por preciso. O
e o numero de dgitos de sua parte
fracionria. O valor mximo permitido 18 e a
escala sempre deve ser menor ou igual
preciso. Por exemplo, para representar o
valor 3500,75 seria necessrio a seguinte
definio: numeric (6,2).

Double Precision
Tipo numrico de dupla preciso: A preciso e a
escala possuem comprimentos variveis, com uma
preciso de 15 dgitos.

Create table peca
(
volume Double precision
)

Float
Tipo numrico flutuante: A preciso e a escala
possuem comprimentos variveis, com uma preciso
de 7 dgitos.
Create table livro
(
num_pag Smallint,

preco_livro Numeric (6,2),
peso_livro Float
)
Date
Tipo Data: Armazenamento de datas. um
calendrio contendo um ano (com 4 dgitos), ms e
dia do ms.

Create table nota_fiscal
(
Data_nf Date
)

Time
Tipo hora: Armazena dados temporais entre 00:00
AM at 23:59:9999 PM

Create table corrida
(
hora_chegada Time
)

Not Null
Tipo de dados nulos: Indica a presena ou no de
um valor em um campo.
Create table cliente
(
Cod_clie integer not null,
fax_cli Varchar(9) not Null
)
Para campos obrigatrios devemos usar o not,
exemplo:
nome_cli Varchar (50) Not Null;
Obs. O valor nulo (null) um membro de
todos os domnios. Para certos atributos,
entretanto, valores nulos podem ser
inadequados. Como por exemplo, no valor de
chaves primrias ou de um atributo como o
CPF.


Instrues DDL da linguagem SQL:

So instrues que permitem criar (CREATE), alterar (ALTER) e excluir
(DROP) tabelas, campos, ndices, domnios de um banco de dados.
A DDL usada para construir a estrutura (tabelas) e os relacionamentos
dessas tabelas, bem como definies de acessos e permisses.

Criando tabelas com a SQL (CREATE):

Tabela Livro:

Livro
Pk_liv inteiro, chave primria e no nulo
Titulo caractere varivel 50
Num_pag numrico curto
Ano numrico curto

/* script em SQL DDL */
Create Table Livro
(
PK_liv Integer Not Null Primary key,
Titulo Varchar (50),
Num_pag Smallint,
Ano Smallint
); /*execute a quer*/


Criar Tabela Produtos:

Produtos
Pk_prod inteiro, chave primria e no nulo
Descrio caractere varivel 30, no nulo
Cor caractere varivel 20




Livro
Produtos
Tabela Funcionrios:

Funcionrios
Pk_func inteiro, no nulo, chave primria (restries: valores maior que 0)
Nome caractere varivel 50, no nulo
Sexo caractere fixo 1 (restries: valores permitido ('M' ou 'F'))
Data_Nasc date

Create table funcionarios
(
Pk_func integer not null primary key check (Pk_func >= 0),
Nome varchar(50) not null,
Sexo char (1) not null constraint sexo_M_F check (sexo in ('M','F')),
Data_Nasc date not null
)

Alterando campos de uma tabela:
As alteraes em uma tabela devem ser executadas atravs da instruo
ALTER TABLE.

Para alterar a estrutura de uma tabela devemos usar as seguintes sintaxes:

a. ADD: adiciona um novo campo tabela;

ALTER TABLE nome_da_tabela ADD nome do novo campo e o tipo do campo

b. ALTER...TO: altera o nome de um campo;

ALTER TABLE nome_da_tabela ALTER nome_do_campo TO novo_nome_do_campo
Obs. O to pode no ser suportado por alguns SGBDs.

c. ALTER.....TYPE: altera o tipo de dado de um campo;

ALTER TABLE nome_da_tabela ALTER nome_do_campo TYPE tipo_do_campo
Obs. O type pode no ser suportado por alguns SGBDs.

d. ALTER......DROP: Exclui um campo da tabela.

Funcionrios
ALTER TABLE nome_da_tabela DROP nome do campo a excluir

e. DROP table: Exclui uma tabela.

DROP TABLE nome_tabela


Resumo:
ADD: adiciona um novo campo tabela;
ALTER.....TYPE: altera o tipo de dado de um campo;
ALTER...TO: altera o nome de um campo;
DROP: Exclui um campo da tabela.

Exemplo:
Vamos excluir e criar novamente a tabela livro:

Excluir:
Drop table livro

Criando tabela livro:

/* script em SQL */
Create Table Livro
(
Codliv Integer Not Null,
Tituloliv Varchar(50),
Editoraliv Varchar(20),
Assuntoliv Varchar(80),
Autorliv Varchar(50),
Generoliv Varchar(50)
); /*execute a query*/

Inserindo uma chave primria:
Alter table Livro add Primary Key (Codliv); execute a query

Inserindo um novo campo:
Alter table Livro add Tipocapliv Varchar (20) Not Null; execute a query

Excluindo um campo:
Alter table Livro drop Autorliv; execute a query

Alterando o tipo de dado de um campo:
Alter table Livro alter Generoliv type Varchar (100); execute a query

Alterando o nome de um campo:
Alter table Livro alter Generoliv to Gen_Livro; execute a query

Excluindo tabelas:
Drop table Livro; execute a query
Drop table Funcionarios;
Drop table Produtos;

Criando ndices com SQL: (SQL padro no aborda ndices)

Create Unique Index nome_do_ndice ON tabela (campo);

Obs. Unique uma restrio, impedindo que seja armazenar valores
duplicados. Seu uso opcional.

Exemplo:
Create Unique Index unq_cor ON produtos (cor);

Excluindo um ndice:
Drop index nome_indice; execute a query

Comentrios gerais sobre ndices:

Quando criar ndices:
- Uma coluna contiver muitos valores nulos;
- Quando uma ou mais colunas forem usadas frequentemente em
clusulas WHERE ou em JOINS;
- Se a quantidade de dados da tabela grande e as consultas realizadas
recuperam menos de 5% dos registros.

Quando no criar ndices:
- As colunas no so usadas frequentemente como condio nas
consultas;
- Se a tabela possuir poucos dados ou se os resultados das consultas
forem maiores que 5 - 10% dos registros;
- A tabela for atualizada com freqncia;
- As colunas fizerem parte de uma expresso (um predicado).

CRIAR E USAR DOMNIOS (DOMAIN'S) Globais

Usar domnios pode deixar o banco de dados mais organizado, com
regras claras e melhores definidas, e ainda conseguir uma economia
substancial de mo de obra na construo e manuteno do banco de dados.
Voc j deve ou ir observar que vrios atributos tm a mesma
finalidade em diferentes tabelas, como por exemplo: campos chaves, nomes,
datas, etc.
Tambm podemos colocar determinadas restries aos valores dos
campos, usando por exemplo o check.

Create Domain Dm_Chaveprimaria Integer Not Null Check (Value > 0); execute
a query

Create Domain Dm_Nome Varchar(40) Not Null; execute a query

Create Domain Dm_Fone Varchar(20); execute a query

Create Domain Dm_Renda Numeric (9,2) Default 0 Not Null Check (Value
>= 0); execute a query

Create Domain Dm_sexo char(1) not null check (value in ('M', 'F')); execute a
query

Create Domain Dm_EstCivil as char(1) check (value in ('S', 'C', 'D', 'V', 'U'));
execute a query

Criar uma tabela de nome cliente com os domnios criados anteriormente.
Observe na tabela abaixo que no necessrio informar o tipo de dado, ou
seja, o domnio do campo.

Create Table Clientes
(
PK_Cod DM_ChavePrimaria primary key,
Nome DM_Nome,
Fone DM_Fone,
Fax DM_Fone,
Celular DM_Fone,
Renda DM_Renda,
Est_civil Dm_EstCivil,
Sexo Dm_sexo
); execute a query


INSTRUES DML DA LINGUAGEM SQL

So instrues para manipular os dados contidos nas tabelas que
compe um banco de dados. Tais instrues se dividem em grupos:

Insert: Para inserir dados em uma tabela;
UpDate: Para modificar dados em registros j existentes em uma tabela;
Delete: Para excluir registros de uma tabela;
Select: Para selecionar/pesquisar dados. a mais poderosa e complexa das
instrues, pois por meio dela que toda seleo/pesquisa deve ser realizada.

Obs. Em instrues DML ocorrem transaes, onde necessrio comandos para
confirmar ou desfazer tais transaes. O comando commit usado para confirmar a
gravao dos dados no banco (garantir a atomicidade). Para completar a transao
digite: commit (aps uma instruo da DML), confirmando a gravao dos dados no
HD. J o comando rollback usado para desfazer a transao, eliminando os dados
da memria.
Obs. Antes desses comandos os dados estaro na memria.
Criando uma tabela para manipular os dados:

Create Table Funcionario
(
Codigo Integer Not Null Primary Key,
Nome Varchar(30) Not Null,
Salario Numeric(12,2),
Sexo char(1),
Idade Integer,
Uf char (2),
Cidade varchar (40) not null,
Est_Civil char (10)
)

Inserindo registros: INSERT

Obs. Quando o tipo de dado de um campo for alfanumrico (char, varchar,
date, etc), devemos colocar os valores a serem gravados entre aspas simples.
Somente os valores, no os campos.

Sintaxe para inserir valores em uma tupla:

Insert Into nome_da_tabela (campo_1, campo_2, campo_n) Values
(valor_do_campo_1, valor_do_campo_2, valor_do_campo_n)

Ex.:
Insert Into Funcionario (codigo, nome, salario, sexo, idade, uf, cidade,
est_civil) Values (1, 'Maria Ana', 900.00, 'f', 19, 'pr', 'Pato Branco', 'Solteira');
execute a query

Ou

Insert Into Funcionario Values (1, 'Maria Dutra', 900.00, 'f', 19, 'pr', 'Pato
Branco', 'Solteira'); execute a query

Obs. Observe neste ltimo insert a no necessidade de informar o nome dos campos. Isso
pode ser feito quando forem inseridos valores para todos os campos.

Insert Into Funcionario (Codigo, nome) Values (2, Alone Zicky); execute a query e
observe as mensagens!

Faa algumas inseres para praticar o insert

a. Inserir valores para os campos cdigo, nome, salrio e cidade;
Cdigo= 100;
Nome = Rodrigo Cardoso
Salrio = 1000
Cidade = Campinas

b. Inserir valores para os campos cdigo, nome, salrio e cidade;
Cdigo= 101;
Nome = Pablo Almeida
Salrio = 800
Cidade = Itaipolis

c. Inserir uma nova tupla com valores para todos os campos;
- onde cdigo seja igual a 103.


Lembre-se do commit para confirmar a gravao!

Alterando linhas: UPDATE

Sintaxe:

Update nome_tabela Set campo = novo_valor Where predicado/condio

Ex.:
Update Funcionario Set nome = Rodrigo Cardozo Where codigo = 100; execute
a query e Commit;


Update Funcionario Set salario = salario * 1.2 Where codigo = 100; execute a query
e Commit;


Excluindo linhas: DELETE

Sintaxe:

Delete from nome_tabela Where condio_do_filtro_sobre_linhas

Ex.:
Delete from funcionario Where codigo = 2

Lembre-se do commit;


Instruo SELECT: Selecionando/pesquisando/exibindo linhas

O Select uma das instrues mais importantes e mais usadas pela
linguagem SQL, pois permite fazer as consultas dos dados.
Sua sintaxe contm um grande nmero de opes que permitem
executar consultas em um nvel de complexidade bastante elevado.
Quando usado em sua sintaxe mais simples, tem por objetivo recuperar
todos os campos e todos os registros de uma tabela.
Aplicaremos com o select os conceitos da lgebra relacional.

Sintaxe:

Select campos_separados_por_vrgula
From nome_tabela

Para facilitar a interpretao das consultas, utilize as instrues insert
into abaixo:
Antes de inserir, exclua todos os registros armazenados, usando o
comando:

delete from funcionario; execute a query

INSERT INTO FUNCIONARIO VALUES (1, 'Rodrigo Cardoso', 1588, 'm', 25, 'sc', 'Lages', 'Solteiro');

INSERT INTO FUNCIONARIO VALUES (2, 'Maria Joaquina', 2000, 'm', 23, 'pr', 'Pato Branco', 'Casado');

INSERT INTO FUNCIONARIO VALUES (4, 'Bastianzinho Silva', 1000, 'm', 55, 'pr', 'Curitiba', 'Solteiro');

INSERT INTO FUNCIONARIO VALUES (3, 'Ana Paula', 4500, 'f', 34, 'sc', 'Florianpolis', 'Casado');

INSERT INTO FUNCIONARIO VALUES (5, 'Tonico Alves', 1500, 'm', 25, 'sc', 'Sao Paulo', 'Solteiro');

INSERT INTO FUNCIONARIO VALUES (6, 'Jose de Deus', 1000, 'm', 35, 'ba', 'Savador', 'Casado');

Commit;

Ex.:
Select codigo, nome, salario, sexo, idade, uf, cidade, est_civil
From funcionario;

ou

Select *
From funcionario;

Neste exemplo, colocando o asterisco (*), a instruo select seleciona
todos os campos da tabela funcionario (from funcionario). O asterisco (*) atua
como um curinga, informando para o select que todos os campos devem ser
mostrados.
Mas observe que somente usamos o asterisco (*) quando queremos que
todos os campos sejam mostrados, algo que nem sempre acontece.

Resultado da consulta:


Na maioria das vezes, no precisamos que todos os campos sejam
mostrados em uma consulta. Nesse caso, a melhor maneira de escrever o
select relacionar o nome de cada campo desejado. Este procedimento
diminui consideravelmente o tempo de resposta (processamento) de uma
consulta.

Ex.:
Mostrar o nome, salrio e a idade dos funcionrios.

Select nome, salario, idade from funcionario;

Resultado da consulta:



A clusula WHERE

At o momento usamos a instruo select para retornar todas
tuplas/registros de uma tabela. Mas o que realmente torna o select de grande
utilidade a possibilidade de podermos retornar apenas os registros desejados
em uma consulta, ou seja, os registros que atendam a determinadas
condies/predicados.
Neste caso, devemos agregar ao select a clusula WHERE que
permitir filtrar uma consulta de acordo com a necessidade da consulta (query).

Sintaxe:

Select campo1, campo_2, campo_n
From nome_da_tabela
Where predicado/condio



Ex.:
Select nome, salario, idade
From funcionario
Where nome = Bastianzinho Silva;

Resultado da consulta:


Observe que o valor a ser pesquisado deve estar entre apstrofos ( ),
pois se trata de um campo do tipo string (alfanumrico) e deve coincidir
exatamente com o valor contido no campo, pois para strings a consulta case-
sensitive.
J para valores numricos no necessrio usar apstrofos, exemplo:

Ex.:
Select *
From funcionario
Where idade = 25;

Resultado da consulta:


A clusula WHERE permite o emprego de diretrizes para as seguintes
comparaes:

BETWEEN.....AND
Permite especificar um intervalo de valores.

Ex.:
Select *
From funcionario
Where idade between 25 and 35;

Resultado da consulta:


NOT BETWEEN.....AND
Permite a comparao que no esteja entre dois valores.

Ex.:
Select *
From funcionario
Where idade not between 25 and 35;

LIKE
Operador do tipo contm (est contido).

Ex.:
Select *
From funcionario
Where nome like Ana Paula;



Funcionou!, tente agora executar o script anterior substituindo a string Ana
Paula pela string Ana.



Queremos mostrar que muitas vezes no conhecemos a string completa
para buscar um determinado valor de um campo.
A grande vantagem do like poder us-lo para filtrar parte de um
determinado campo.
Para isso, o operador like usado junto com o smbolo (%) colocado
esquerda e/ou direita da palavra a ser pesquisada. Exemplos:

Ex.:
Select *
From funcionario
Where nome like M%;

Resultado da pesquisa:




O smbolo (%) pode ser usado de diferentes formas:

Like %Maria: pesquisa um campo que comea com qualquer palavra e
termina com Maria.

Like Maria%: pesquisa um campo que comea com Maria e termina com
qualquer palavra.

Like %Maria%: pesquisa um campo que contenha a palavra Maria, no
importa sua posio na frase.

NOT LIKE
Negao do contm

Ex.:
Select *
From funcionario
Where nome not like %a and nome not like __n%;




Operadores
Os seguinte operadores tambm podem ser usados em uma consulta:
>, >=, <, <=, =, <> (diferente)

Ex.:
Select *
From funcionario
Where idade <> 34;

Os operadores/conectivos lgicos AND, OR e NOT tambm podem ser
usados com a clusula where.

Lembram do case-sensitive para campos com tipo de dados alfanumrico?

Bem, para contornar esse problema, podemos usar a funo UPPER,
que tem por objetivo converter (somente durante a consulta) todos os
caracteres minsculos em maisculos.

Ex.:
Select *
From funcionario
Where UPPER (nome) = ANA PAULA;

onderline posio de n
deixa o texto em caixa alta
Resultado da consulta:



Para testar, retire o UPPER do script anterior e execute novamente.

Resultado da consulta:



A clusula ORDER BY
Permite ordenar os registros de uma consulta por intermdio de um ou
mais campos. A ordenao pode ser crescente (asc) ou decrescente (desc).

Sintaxe:

Select campos
From nome_tabela
Order by nome_campo asc /ou desc

Ex.: Ordenar em ordem ascendente o campo uf.
Select nome, salario, uf
From funcionario
Order by uf asc;

Resultado da consulta:


Ex. Ordenar em ordem ascendente o campo uf, onde o salrio seja menor que
2000.

Ex.:
Select nome, salario, uf
From funcionario
Where salario < 2000
Order by uf asc;

Resultado da consulta:



possvel ainda, ordenar mais do que um campo simultaneamente.

Ex.:
Select nome, salario, uf
From funcionario
Where salario < 2000
Order by uf, nome;

Observe que no obrigatrio informar o tipo de ordenao (asc ou desc).
Caso no seja informado, a ordenao ser por default asc.

Resultado da consulta:



Funes Estatsticas
A linguagem SQL contm uma srie de funes que tm como objetivos
retornar valores estatsticos, conhecidos como funes de agregao.
Estas funes permitem calcular a mdia de valores, valores mximos,
valores mnimos, contar o nmero de registros, somar valores em campos
numricos, etc.

Funes:
Count(): conta nmero de registros.
Sum(): soma os valores de uma coluna.
Max(): retorna o maior valor de uma coluna.
Min(): retorna o menor valor de uma coluna.
Avg(): calcula a mdia aritmtica de uma coluna com tipo de dados numrico.

Podemos observar que em um banco de dados so comuns essas
funes, por exemplo, informar ao usurio quantos registros foi encontrado em
uma pesquisa, a soma de um determinado pedido, qual cliente efetuou maior
pedido, qual a mdia de vendas, vendedor com mais vendas, etc..

Sintaxe:

Select funo (nome_do_campo) as novo_nome_do_campo
From tabela

COUNT
Ex.: Contar o nmero de funcionrios, nomeando o cabealho da coluna como
qtde_func.

Select count (*) as qtde_func
From funcionario

Resultado da consulta:


Ex.: Contar o nmero de funcionrios, os quais moram no estado de SC,
nomeando o cabealho da coluna count para func_de_sc.

Select count (*) as Qtde_Func_de_SC
From funcionario
Where UPPER (uf) = SC

Resultado da consulta:


Ex.: Contar o nmero de funcionrios que possuem o sexo informado na tabela
funcionrio, nomeando o cabealho da coluna count para sexo_informado.

Select count (sexo) as sexo_informado
From funcionario
Where sexo = m or sexo = f

Resultado da consulta:


Obs. Para o resultado ser 5, um dos registros deve ficar sem o campo sexo
informado.

AVG
Ex.: Mostrar a mdia da idade dos funcionrios, nomeando o cabealho da
coluna avg med_idade.

Select avg (idade) as med_idade
From funcionario

Resultado da consulta:


MIN
Ex. Mostrar a menor idade do funcionrio, nomeando o cabealho da coluna
min func_de_menor_idade.

Select min (idade) as func_de_menor_idade
From funcionario

Resultado da consulta:


MAX
Ex. Mostrar a maior idade do funcionrio, nomeando o cabealho da coluna
max func_de_maior_idade.

Select max (idade) as func_de_maior_idade
From funcionario

Resultado da consulta:



Clusula GROUP BY (Agrupamento de Registros)

Em muitos casos nos deparamos com a necessidade de agrupar
informaes para emisso de relatrios ou consultas, a fim de permitir uma
anlise mais precisa da informao.
Esse procedimento permite criar uma seleo de registros e agrup-los
em um determinado campo.

Sintaxe:

Select campo_1, campo_2, campo_n
From tabela_1, tabela_n
Where condies
Group by campo_1,campo_n
Order by campo_n

Obs. A clusula where, quando usada com o group by, deve sempre preceder
a clusula group by, ao passo que a clusula order by deve vir sempre aps o
group by.

Ex.: Total de funcionrios que residem em cada estado.

Select uf, count (uf) as total_por_estados
From funcionario
Group by uf


Ex.: Total de funcionrios que residem em cada estado, mostrando apenas os
casados e do sexo masculino.

Select uf, count (uf) as total_por_estados
From funcionario
Where est_civil = 'Casado' and sexo = 'm'
Group by uf

Resultado da consulta:



Exerccio: Retornar a idade mdia dos casados e solteiros.



HAVING - Utilizamos para expressar uma condio ao grupo (group by). Isto
, usado para filtrar campos que foram agrupados.

Select uf, count (uf) as total_por_estados
From funcionario
Select est_civil, avg (idade) as IDADE_MEDIA
From funcionario
Where est_civil = 'Casado' or est_civil = 'Solteiro'
Group by est_civil
Group by uf
having count (uf) >= 2




DISTINCT - Utilizada para eliminar tuplas repetidas. Devemos coloc-lo antes
do campo que desejamos eliminar os valores repetidos.

Selects aninhados (Subquery)
O select aninhado uma subconsulta, um comando SELECT embutido
em uma outra clusula SQL.

Ex.: Mostrar o nome e o salrio do(s) funcionrio(s) com maior salrio.

select nome, salario as maior_renda
From funcionario
Where salario = (select max(salario) from funcionario)


Atividades:

A. Escrever as consultas em SQL
1 - Selecionar todos os funcionrios e todos os seus dados;
2 - O nome de todos os funcionrios e seus respectivos salrios;
3 - O maior salrio entre todos os funcionrios;
4 - O menor salrio entre todos os funcionrios;
5 - A mdia dos salrios entre todos os funcionrios;
6 - A soma de todos os salrios;
7 - O salrio do funcionrio com o cdigo = 3;
8 - O nome dos funcionrios que moram em Santa Catarina;
9 - Os funcionrios com o cdigo 1, 2, 4 e 6 apresentados na ordem alfabtica
decrescente;
<- Essa linha executa 1
10 - A quantidade de funcionrios que ganham entre 1000 e 2000;
11 - A mdia entre as idades dos funcionrios;
12 - Todos os funcionrios que conheam com a letra R.

Potrebbero piacerti anche