Você está na página 1de 20

1

SQL – LINGUAGEM DE CONSULTA ESTRUTURADA

Professora: M.Sc. Késsia Rita da Costa Marchi


Tutora: Acadêmica Gleice Karina de Oliveira Souza

Paranavaí
Junho/2013
2

Sumário
1. Linguagem SQL
2. Aspectos Gerais
2.1. Definição de Dados
2.1.1. CREATE
2.1.2. Chaves
2.1.3. Alter
2.1.4. DROP
2.2. Manipulação de Dados
2.2.1. INSERT
2.2.2. UPDATE
2.2.3. DELETE
2.2.4. SELECT
3. Conclusão
3

1. Linguagem SQL

A SQL (Linguagem de Consulta Estruturada) é uma linguagem de consulta declarativa padrão


para bancos de dados relacionais. Ela utiliza uma combinação de construções de álgebra
relacional e cálculo relacional. Embora seja uma linguagem de consulta, a SQL permite a
realização de tarefas mais amplas do que, simplesmente, consultar. Com a SQL é possível
também definir e modificar estruturas de banco de dados, manipular dados e especificar
restrições de segurança (SILBERCHATZ, 2012).

O objetivo deste texto é de apresentar alguns conceitos fundamentais de SQL para o curso de
Programação para Banco de Dados – SQL Linguagem de Consulta Estruturada.

Este curso está disponível para os alunos do 1º e 2º ano do curso de Sistemas de Informação
da Unipar – Unidade Universitária de Paranavaí e ocorrerá em nível introdutório, cujo público
alvo são os alunos que não tiveram contato com Sistemas de Gerenciamento de Banco de
Dados (SGBD).

Para as aplicações práticas, será utilizado neste curso o SGBD MySQL, por ser um SGBD de
menor grau de complexidade. Entretanto, o foco do curso é a Linguagem SQL e não o SGBD.

Para que o aluno possa desenvolver-se no curso, recomendo que instale o MYSQL antes da
primeira aula, para isto, faça a dowload da versão community server, disponível no site do
fabricante: http://dev.mysql.com/downloads/mysql/. A versão que estamos utilizando neste
curso é MySQL Community Server 5.6.12. ATENÇÃO, baixem a versão compatível com o seu
sistema operacional.

Além do servidor, também será utilizado o MySQL Workbench como interface de


desenvolvimento. Para o seu download, acesse o link
http://dev.mysql.com/downloads/tools/workbench/ e faça o download da versão compatível
com o seu sistema operacional. Porém, quem utilizou o intall do Windows, todas as
ferramentas do MySQL já são instaladas.

Após as instalações, já estamos prontos para iniciar o nosso curso. Recomendo fortemente que
busquem também os livros disponível na referencia para um estudo mais completo.

Todas as dúvidas deverão ser tiradas pelo moodle.

Bom estudo a todos!


4

2. Aspectos Gerais

A SQL foi desenvolvida pela IBM e, inicialmente, teve o nome de SEQUEL, no início da década
de 70, com a sua evolução, a linguagem SEQUEL foi alterada para SQL (Linguagem de Consulta
Estruturada). É considerada a linguagem padrão para SGDBR1 (Sistemas de Gerenciamento de
Banco de Dados Relacional), ou seja, mantém as características essenciais nos produtos de
diversos fabricantes (DAMAS, 2007).

Por ser uma linguagem considerada padrão, a SQL apresenta vantagens de utilização para os
usuários, pois, facilita a migração entre SGBDRs, no que diz respeito ao conhecimento dos
Sistemas de Gerenciamentos.

Silberchatz (2012) comenta que a linguagem SQL possui diversas partes, sendo elas:

● Linguagem de Definição de Dados (DDL): Fornece comandos que permite definir,


alterar e excluir esquemas2 de dados.
● Linguagem de Manipulação de Dados (DML): Fornece comandos que permite incluir,
alterar e excluir dados em bancos de dados.
● Integridade: inclui comandos que permite especificar restrições de integridade.
● Definição de view: Inclui comandos que permite definir visões3 do banco de dados.
● Controle de transação: possui comandos que permitem especificar o início e o fim de
uma transação.
● SQL embutida e SQL dinâmica: define como as instruções SQL podem ser incorporadas
nas linguagens de programação de finalidade geral.
● Autorização: Inclui comandos que permitem especificar direitos de acessos aos dados
e as visões.

O objetivo deste curso é tratar apenas as linguagens DDL e DML, em seu nível introdutório.

1. Definição de Dados

As relações (tabelas) de um banco de dados são especificadas para o SGBD por meio de
linguagem de definições de dados (DDL). A DDL SQL permite especificar, além das relações,
informações sobre cada relação, como (SILBERCHATZ, 2012):

● O esquema para cada relação;


● O domínio4 de valores associados a cada atributo;

1
SGBDR é um conjunto de programas de computador (softwares) responsáveis pelo gerenciamento de
uma base de dados.
2
Esquema de Dados refere-se a coleção de objetos de um banco de dados que estão disponíveis para
um determinado usuário ou grupo
3
Visões de banco de dados refere-se a um objeto que não armazena dados, ou seja, não ocupa espaço
em disco e é composto por uma consulta.
5

● As restrições de integridade;
● O conjunto de índice a serem mantidos em cada relação;
● As informações de segurança e autorização de cada relação;
● A estrutura de armazenamento físico de cada relação.

Para uma melhor compreensão, discutiremos neste texto apenas as definições básicas de DDL,
entretanto, é importante ressaltar que há outros recursos disponíveis em SQL, em nível de
DDL, além dos recursos tratados neste texto.

CREATE

Por meio do comando Create, é possível criar objetos de banco de dados, como o esquema de
banco de dados, relações (tabelas), visões, trigger, entre outros.

Para definirmos um banco de dados, utilizamos o script apresentado no Quadro 1:

CREATE DATABASE baseteste;

Quadro 1 - Scripte de criação de Banco de Dados.

Após a definição do banco de dados, podemos então, criar as tabelas que irão compor o banco
de dados, para tanto, vamos utilizar o esquema exemplificado na Tabela 1. O Quadro 2
apresenta o script de criação da tabela.

CREATE TABLE funcionário (

idfuncionario INT NOT NULL PRIMARY KEY,

nome VARCHAR(100) NOT NULL,

salario NUMBER(12,2) NOT NULL,

4
O valor de domínio refere-se, sucintamente, ao tipo de dados (integer, char, varchar, entre outros) que
cada atributo pode receber. Para maiores esclarecimentos sobre domínios de valores e demais itens que
a DDL permite especificar, faz-se necessário uma leitura complementar na bibliografia.
4
6

sexo CHAR(1),

uf CHAR(2) );

Quadro 2 - Script de criação de tabela

No Script apresentado no Quadro 2, todos os termos escritos em letra maiúscula são


comandos e/ou palavras reservadas do SQL. Para entendermos melhor este script, temos:

● CREATE TABLE  comando SQL específico para a criação da tabela;


● funcionário  O nome atribuído a tabela;
● (  após o parênteses, inicia-se a lista de atributos (colunas / campos) que pertencem
a tabela;
● idfuncionario INT NOT NULL PRIMARY KEY, São os atributos da tabela funcionário.
● nome VARCHAR(100) NOT NULL,
● salario NUMBER(12,2) NOT NULL,
● sexo CHAR(1),
● uf CHAR(2) );

Na definição de cada atributo, temos a seguinte sintaxe básica, embora possa existir algumas
variantes desta sintaxe:

Nome_do_atributo domínio obrigatoriedade,

● Nome_do_atributo  refere-se ao nome dado a coluna que irá guardar um


determinado valor;
● Domínio  especifica o tipo de dado que aquele atributo poderá armazenar, no
exemplo temos os seguintes tipos:
○ INT  Tipo Inteiro que pode armazenar valores numéricos inteiro (com sinal);
○ VARCHAR(n)  Caractere Variante que pode armazenar uma string de
comprimento variável.
○ NUMBER(n,d)  Valor numérico constituído por n dígitos, sendo d o número
de casas decimais;
○ CHAR(n)  uma string de comprimento fixo.
● Obrigatoriedade  especifica se o atributo deverá ter o seu valor preenchido (NOT
NULL) ou poderá ser nulo/vazio (NULL).
● ,  a vírgula separa colunas que serão inseridas na tabela.

A primeira coluna criada nesta tabela possui uma regra que a define como chave primária
(primary key). Uma chave primária é um atributo ou um conjunto de atributos que tem a
finalidade de identificar o registro. Como característica, uma chave primária deve ter o seu
preenchimento obrigatório (NOT NULL) e deve ser única, ou seja, não pode ocorrer dois
7

campos (coluna) de chaves primária com o mesmo valor. As chaves primárias também são
utilizadas para realizar os relacionamentos entre as tabelas, por meio das chaves estrangeiras
(foreign key).

Questões a considerar:

É importante seguir um padrão de nomenclatura (nome dados aos objetos – bancos de dados,
tabelas, atributos e outros) em SQL. A utilização do padrão pode amenizar ou, até mesmo,
eliminar problemas futuros de manutenção.

No final de cada script temos o “;” que indica o final do comando.

Chaves

No modelo relacional, a única forma de relacionar dados entre tabelas distintas é por
meio de atributos comuns. Assim, vão existir atributos especiais (Chaves estrangeiras –
Foreign Key) que servem para fazer a ligação com outras tabelas, onde esses mesmos
atributos são usados para identificar, univocamente, cada uma das linhas (Chaves
Primárias – Primary Key) (DAMAS, 2007).

Tipos de Chave

São 4 os tipos de chaves disponíveis no modelo relacional, sendo:

● Superchave – Associação de um ou mais atributos (campos) que, em conjunto,


identificam cada uma das tuplas (linhas da tabela).
● Chave candidata – Subconjunto dos atributos de uma superchave que, sendo
ainda superchave, não pode ser reduzido sem perder a qualidade.
● Chave primária – Chave selecionada entre as diferentes chaves candidatas
para, efetivamente, identificar cada tupla (linha da tabela).
● Chave estrangeira – Atributo ou conjunto de atributos de uma relação, que é
chave primária em outra relação.

Constraint UNIQUE

Antes de explicarmos o que é Constraint UNIQUE, vamos nos ater no que é uma
CONSTRAINT. De forma geral, uma constraint trata-se de regras que limitam o valor dos
dados nos momentos de inserção e/ou manipulação. Os tipos de constraints que temos são os
de dados – determina o tipo de dado que o atributo receberá, de não nulos – define a
obrigatoriedade de preenchimento do atributo, de unicidade – defini se o valor da coluna é
8

único na tabela e, por fim, validação – permite definir regras que validam o dado para ser
inserido / manipulado na tabela. Então, concluímos que as constraints são utilizadas para
impor restrições de integridade, assunto este que será abordado em um segundo curso.

A constraint UNIQUE permite indicar que os valores dessa coluna não podem se
repetir. Para garantir que não existem dados repetidos nessa coluna, os SGBDs criam,
sobre cada uma das colunas UNIQUE um índice único.

Diferenças entre PRIMARY KEY e UNIQUE KEY

A PRIMARY KEY equivale às cláusulas NOT NULL + UNIQUE juntas, isto é, o conteúdo da
coluna ou colunas não pode ser nulo e não pode admitir repetições.
Em uma tabela só pode existir apenas uma PRIMARY KEY, enquanto podem existir
várias ocorrências da cláusula UNIQUE.
A cláusula UNIQUE aceita NULL.

Chave Primária Composta

Se a chave primária for constituída por vários campos então se usa a abordagem de
Chave Primária COMPOSTA, que se refere a designar mais do que um atributo como
chave primária.

Ex: ... PRIMARY KEY (Coluna1, Coluna2)...

Código SQL para criação de Chaves

CREATE TABLE nomedatabela (


Coluna1 tipo obrigatoriedade <PRIMARY KEY>,
Coluna2 tipo obrigatoriedade <UNIQUE>,
...
Colunan tipo obrigatoriedade,
FOREIGN KEY (Colunan) references TABELAREFERENCIADA (atributo_PK)
9

);

Em uma tabela pode conter quantas chaves estrangeiras forem necessárias.

Ou

CREATE TABLE nomedatabela (


Coluna1 tipo obrigatoriedade,
Coluna2 tipo obrigatoriedade,
Coluna3 tipo obrigatoriedade,
Coluna4 tipo obrigatoriedade,
Coluna5 tipo obrigatoriedade references TABELAREFERENCIADA (atributo_PK),
Colunan tipo obrigatoriedade,
PRIMARY KEY (Coluna1, Coluna2),
UNIQUE KEY (Coluna3, Coluna4)
);

Alter

Após a criação da tabela, pode ocorrer a necessidade de realizar alterações nestas tabelas. O
comando ALTER permite realizar alterações em objetos já construídos de uma banco de dados,
entretanto, as alterações só são possíveis de serem realizadas caso elas respeitem as restrições
de integridade5.

Para exemplificar a utilização do comando ALTER, vamos considerar a tabela funcionário criada
no exemplo anterior. Vamos supor que exista a necessidade de adicionar o atributo telefone
nesta tabela, para tanto, vamos utilizar o script abaixo:

ALTER TABLE funcionario ADD telefone char(10);

Neste exemplo, foi adicionado, por meio da cláusula ADD o atributo (campo/coluna) telefone
que deverá receber um valor alfanumérico de 10 caracteres.

Além da adição de novos atributos, a cláusula ALTER também permite modificar atributos
existentes na tabela, por meio da cláusula MODIFY, para isto, veja o script abaixo:

5
Restrição de Integridade são restrições que garantem manter os dados precisos, íntegros e
consistentes em um banco de dados.
10

ALTER TABLE funcionario MODIFY telefone varchar(10);

Neste exemplo, o atributo telefone deixou de ser do tipo char(10) e passou a ser do tipo
varhcar(10). Além do domínio, também é possível alterar questões referentes a
obrigatoriedade dos atributos, especificando a cláusula NOT NULL ou NULL de acordo com as
necessidades deste atributo.

Ainda, é possível também excluir atributos por meio da cláusula ALTER TABLE, fazendo uso do
comando DROP, o próximo exemplo, mostra a exclusão do atributo telefone.

ALTER TABLE funcionario DROP telefone;

DROP

O comando DROP tem a finalidade de excluir os objetos criados no banco de dados, para
exemplificar, vamos excluir a tabela funcionário criada anteriormente, para isto, utilizamos o
script abaixo:

DROP TABLE funcionario;

A exclusão também ocorre respeitando as restrições de integridade, entretanto, podemos


inserir no script de exclusão as cláusula RESTRICT e CASCADE que, no qual, estas cláusulas
possuem as seguintes finalidades:

● RESTRICT  caso esta opção esteja especificada no comando e a tabela que está
sendo apagada esteja referenciada em uma view6 ou em regras de integridade, o
comando DROP TABLE falhará. Esta cláusula é padrão do SQL;
● CASCADE  caso esta opção esteja especificada no comando DROP TABLE, então o
comando sempre terá sucesso, pois, todas as views e restrições de integridade
associadas a tabela também serão excluídas.

2. Manipulação de Dados

Além dos comandos de definição de dados (DDL), a SQL possui também um grupo de
comandos que permitem manipular os dados nas tabelas, sendo este grupo definido como
Linguagem de Manipulação de Dados (DML).

Os comandos que pertencem a este grupo são o INSERT (inserir), UPDATE (alterar), DELETE
(excluir) e SELECT (consultar).

INSERT

O comando INSERT permite inserir registros (linhas) em uma tabela do banco de dados, sua
sintaxe é a seguinte:

6
View refere-se a visões de banco de dados, em outras palavras, podemos dizer que visões são tabelas
virtuais que auxiliam nas especificações de segurança do banco, possibilitando que os usuários tenham
acesso somente a dados e informações de direito, respeitando assim, as questões de privacidade.
11

INSERT INTO nome_tabela (campo1, ..., campon) VALUES (valor1, ... valorn);

Para exemplificar, vamos realizar a inserção de um registro na tabela funcionário criada


anteriormente:

INSERT INTO funcionario (idfuncionario, nome, salario, sexo, uf) VALUES (1, ‘José da Silva’,
3.000, ‘M’,’PR’);

É importante ressaltar neste exemplo que os valores inseridos a partir da cláusula VALUES
devem seguir a mesma ordem das colunas apresentadas anteriormente, ou seja, no nosso
exemplo, a primeira coluna é o idfuncionário, então, na cláusula VALUES o primeiro valor a ser
apresentado é o valor referente ao idfuncionario, e assim por diante.

Além desta ordenação, também observamos nos valores que os atributos do tipo
alfanuméricos estão entre aspas e os atributos numéricos não necessitam de aspas.

Por fim, é importante dizer que esta não é a única sintaxe para o comando INSERT,
encontramos na literatura algumas variações desta sintaxe.

UPDATE

Com o comando UPDATE podemos alterar valores já inseridos nos registros de única tabela.
Sua sintaxe é:

UPDATE nome_tabela SET atributo = valor, ... , atributon=valorn [WHERE condição];

Para exemplificar, vamos considerar que necessitamos alterar o estado do funcionário inserido
anteriormente para SP, para tanto, utilizamos o seguinte script:

UPDATE funcionario SET uf=’SP’;

Com a execução deste script, todos os registros da tabela funcionário passariam a ter o valor
SP para o atributo uf, o que nem sempre seria correto. Para corrigir este problema, é
necessário incluir uma condição que limite qual(is) atributo(s) que sofreriam a alteração,
ficando da seguinte forma:

UPDATE funcionario SET uf=’SP’ WHERE idfuncionario=1;

Neste novo script, foi considerado o idfuncionario para condição pois é a chave primária e isto
garante que não haverá outro funcionário de código 1. Podemos criar condições diversas, para
tanto, sempre é necessário avaliar se as condições criadas assegurarão que somente os
registros necessários sofrerão as alterações.

DELETE

O Comando DELETE tem a finalidade de excluir registro(s) em única tabela. Sua sintaxe é:

DELETE FROM nome_tabela [WHERE Condição]


12

Assim como no comando UPDATE, o comando delete depende de condições para garantir que
sejam excluídos apenas os registros necessários, caso não seja especificada(s) a(s)
condição(ões) todos os registros da tabela serão excluídos.

Para exemplificar a utilização do comando DELETE, vamos excluir o registro inserido


anteriormente.

DELETE FROM funcionario WHERE idfuncionario=1;

SELECT

Por meio da cláusula SQL SELECT podemos realizar diversos tipos de consultas em Banco de
Dados.

Para iniciarmos, vamos considerar uma consulta básica, como mostrar uma consulta, em
termos de SQL que resulte em todas as tuplas7 que compõem a tabela funcionário:

SELECT * FROM funcionario;

Este Script é a consulta mais trivial que compõem o SQL, no qual, a cláusula SELECT é
responsável por indiciar ao Sistema de Gerenciamento de Banco de Dados8 (SGBD) que será
realizado uma consulta e deverá retornar resultados que atendam as especificidades da
consulta.

Impondo Condição

Para impor condições em SQL, utilizamos a cláusula WHERE, no qual, sua sintaxe é:

SELECT * FROM nome_tabela WHERE <condição de seleção>;

Em <condição de seleção> é indicado uma expressão booleana que denota a(s) condição(ões)
especificando os atributos da Relação9.

A <condição de seleção> é especificada por um número de cláusulas na forma de:

<nome do atributo> <operador de comparação><valor da constante>

No qual:

<nome do atributo> é o nome de um atributo da Relação (tabela). <operador de comparação>


corresponde normalmente a um dos operadores (=, <, >, <=, >=, <>); e o <valor da constante>
refere-se ao valor constante do domínio do atributo.

7
Tupla é um termo empregado na literatura acadêmica que tem o mesmo significado de registro.
7
8
SGBD – Sistema Gerenciador de Banco de Dados (SGBD) é uma aplicação, ou conjunto de aplicações
informatizadas, que fornece interface entre os dados armazenados fisicamente no Banco de Dados (BD)
e o usuário desses dados. É utilizado para definir, acessar e gerenciar os dados existentes no banco de
dados (SILBERCHATZ, 2012).
9
Relação é um termo empregado na literatura acadêmica que tem o mesmo significado de tabela.
13

Ao analisarmos o script SQL acima, observamos que serão exibidos todos os atributos que
pertencem a tabela, pois estamos utilizando o * que refere-se a um conjunto de atributos. A
cláusula FROM, tem a finalidade de definir qual(is) será(ão) a(s) tabela(s) utilizada(s) nesta
consulta. Por fim, temos a cláusula WHERE, responsável por impor as condições que limitarão
as tuplas resultantes desta consulta.

Para melhor exemplificar, vamos considerar a Relação FUNCIONARIO, apresentada na Tabela


1.

Tabela 1 - Relação Funcionário


IDFUNCIONARIO NOME SALARIO SEXO UF

1 José da Silva R$2.000,00 M PR

2 Madalena da Silva R$2.300,00 F PR

3 Joaquim de Andrade R$ 800,00 M SP

4 Ana Carolina R$1.400,00 F SC

Vamos considerar as seguintes situações:

É necessário obter apenas os funcionários que tenham um salário superior a R$1.500,00.

Para tanto, utilizamos a consulta, em termos SQL para obter este resultado:

SELECT * FROM funcionario WHERE salario > 1500;

Para esta consulta, o retorno é apresentado na Tabela 2:

Tabela 2 - Retorna da primeira consulta de seleção


IDFUNCIONARIO NOME SALARIO SEXO UF

1 José da Silva R$2.000,00 M PR

2 Madalena da Silva R$2.300,00 F PR

É possível, que em uma consulta seja necessário a implicação de mais de uma condição de
seleção, para estas situações, podemos conectar as condições por meio dos operadores
booleanos AND, OR e NOT, estou considerando neste texto que o leitor já tenha a
compreensão destes operadores.
14

Para exemplificar, vamos supor que precisamos obter a lista de funcionárias que sejam do
sexo Feminino e que tenham um salário superior a R$1.500,00.

Em SQL:

SELECT * FROM funcionario WHERE sexo=’F’ AND salario > 1500;

O retorno desta consulta é apresentado na Tabela 3.

Tabela 3 - Retorno do segundo exemplo de Seleção


IDFUNCIONARIO NOME SALARIO SEXO UF

2 Madalena da Silva R$2.300,00 F PR

Consultas em SQL também permite que realizemos a operação de Projeção. A operação


de projeção permite selecionar determinadas colunas em uma relação. Para isto, apenas substituímos
o * pelos atributos que serão projetados na consulta, exemplificando a mesma consulta
apresentada em álgebra relacional em termos de SQL temos:

SELECT nome, salario FROM funcionario;

O resultado desta consulta é visto na Tabela 4.

Tabela 4 - Resultado a expressão de Projeção


NOME SALARIO

José da Silva R$2.000,00

Madalena da Silva R$2.300,00

Joaquim de Andrade R$ 800,00

Ana Carolina R$1.400,00

Vamos considerar agora que precisamos ver apenas o nome e o salário dos
funcionários do sexo feminino e que tenham o salário maior que R$1.500,00.
Em termos de SQL teremos:

SELECT nome, salario FROM funcionario WHERE sexo = ‘F’ AND salario > 1500;

O resultado desta expressão é exibido na Tabela 5.

Tabela 5 - Resultado da Expressão aninhada de Projeção e Seleção


NOME SALARIO
15

Madalena da Silva R$2.300,00

Rebatizando

Além disto, também podemos rebatizar os atributos, para tanto utilizamos a Cláusula
AS. Um exemplo de sua utilização é visto no script abaixo:

SELECT nome AS “Nome do Funcionário”, salario AS “Salário Mensal” FROM funcionario


WHERE sexo = ‘F’ AND salario > 1500;

O resultado desta expressão é visto na Tabela 6.

Tabela 6 - Resultado da Expressão que utiliza a Operação de Rebatizar


Nome do Funcionário Salário Mensal

Madalena da Silva R$2.300,00

A operação de rebatizar se faz muito útil, tanto em termos de SQL, na conexão com
expressões mais complexas.

Produto Cartesiano

O produto cartesiano também é conhecido como CROSS PRODUCT ou CROSS JOIN. É utilizado
para combinar tuplas de duas relações de forma combinatória, logo, sua expressão deve ser
composta por uma operação binária e seu resultado apresenta uma combinação Q com grau
n+m de atributos (SILBERCHATZ, 2012).

Para exemplificar as operações binárias vamos utilizar a relação Funcionário apresentada


anteriormente na Tabela 1 e a Relação Projeto, exibida na Tabela 7, supondo que cada Projeto
seja composto por apenas 1 Funcionário.

Tabela 7 - Relação Projeto

IDPROJETO NOMEPROJ IDFUNCPROJ

1 Software CRM 1

2 Software ERP 2

3 Software Especialista 3
16

Vamos realizar um CROSS JOIN entre as relações funcionário e projeto, esta operação está
exibida, em termos de SQL por meio da cláusula CROSS JOIN, no qual, sua sintaxe é
apresentada por meio do exemplo abaixo:

SELECT funcionario.nome, projeto.nomeproj FROM funcionario CROSS JOIN projeto;

Observamos, neste exemplo acima, que na projeção de cada atributo foi incluída o nome da
tabela anteriormente ao nome do atributo (funcionario.nome e projeto.nomeproj). Isto se faz
necessário em SQL em consultas nárias, ou seja, que possuem mais de uma tabela.

Esta consulta resulta em uma relação que exibe todos os projetos relacionados a todos os
funcionários, este resultado pode ser visto na Tabela 8.
Tabela 8 - Resultado da Expressão de CROSS JOIN

NOME NOMEPROJ

José da Silva Software CRM

Madalena da Silva Software CRM

Joaquim de Andrade Software CRM

Ana Carolina Software CRM

José da Silva Software ERP

Madalena da Silva Software ERP

Joaquim de Andrade Software ERP

Ana Carolina Software ERP

José da Silva Software Especialista

Madalena da Silva Software Especialista

Joaquim de Andrade Software Especialista

Ana Carolina Software Especialista

Neste exemplo, obtivemos um resultado que não apresenta sentido, logo, poderíamos inserir
uma operação de SELEÇÃO, impondo uma condição que elimine as tuplas não reais, como
exemplo, inserir os atributos de identificação de ambas as tabelas, comparando-os.

Operações de Junção Interna

A operação de junção interna ou INNER JOIN é utilizada para combinar tuplas relacionadas em
única operação (ELMASRI, 2005).

Para exemplificar a junção interna vamos considerar que necessitamos saber o nome dos
funcionários e o projeto que o mesmo está alocado.
17

Em SQL a cláusula que realiza a junção interna é a INNER JOIN, no qual sua sintaxe é
apresentada no exemplo abaixo:

SELECT funcionario.nome, projeto.nomeproj FROM funcionario INNER JOIN projeto ON


funcionario.idfuncionario=projeto.idfuncproj;

Diferentemente do CROISS JOIN, o INNER JOIN apresenta em seu resultado apenas as tuplas
que se relacionam por meio de seus indicadores.

Ao analisarmos o script SQL acima, vimos a cláusula ON que tem a responsabilidade de


garantir que sejam exibidos apenas as tuplas que respeitem o relacionamento entre chave
primária e estrangeira, para isto, estes atributos são comparados.

O resultado desta consulta pode ser visto na Tabela 9.

Tabela 9 - Resultado da expressão de INNER JOIN

NOME NOMEPROJ

José da Silva Software CRM

Madalena da Silva Software ERP

Joaquim de Andrade Software ERP

Operação de Junção Externa

A operação de junção externa, ou LEFT JOIN, ou ainda RIGHT JOIN é utilizada quando
queremos manter todas as tuplas em R independente de suas relações em S (ELMASRI,
2006).

Para exemplificar esta operação vamos escrever uma expressão em SQL, abaixo, que resulte
em uma relação que mostre todos os funcionários cadastrados e quando os mesmos estiverem
alocados a projetos, a consulta deverá mostrar também o nome do projeto.

SELEC funcionario.nome, projeto.nomeproj FROM funcionario LEFT JOIN projeto ON


funcionario.idfuncionario=projeto.idfuncproj;

Em SQL realizamos a junção externa por meio das cláusulas LEFT JOIN ou RIGHT JOIN,
dependendo da posição da tabela que queremos ver o resultado. Traduzindo a consulta acima
em SQL temos:

O resultado desta expressão é visto na Tabela 10. Na expressão exemplificada acima,


utilizamos a junção externa a esquerda, por este motivo, o seu resultado trouxe todas as tuplas
cadastradas na relação funcionário e as suas referências em projeto. Se mudarmos para a
junção externa a direita e mantiver as relações nas mesmas posições, o resultado iria omitir a
tupla com o dado Ana Carolina, pois ele traria todas as tuplas da relação projeto e as suas
referências em funcionário.
Tabela 10 - Resultado da Expressão de Junção Externa.

NOME NOMEPROJ

José da Silva Software CRM


18

Madalena da Silva Software ERP

Joaquim de Andrade Software ERP

Ana Carolina

Se utilizarmos os exemplos expostos nas relações em SQL abaixo, teremos o mesmo resultado
apresentado na Tabela 10, pois alteramos a junção para junção externa a direita, mas também
mudamos a posição das relações.

SELEC funcionario.nome, projeto.nomeproj FROM projeto RIGHT JOIN funcionario ON


funcionario.idfuncionario=projeto.idfuncproj;

Além destas operações de consulta apresentadas neste texto, encontramos na literatura outras
operações em SQL, como a junção natural, as funções de agregação, as operações de divisão
e outras, que não serão citadas neste texto. Para maiores informações, recomendo a leitura
dos autores ELMASRI (2006), SILBERCHATZ (2012) e outros.
19

3. Conclusão

Por meio de linguagens de consulta é possível que os usuários requisitem e acessem


informações em bancos de dados, logo, estas linguagens são extremamente importantes para
a manipulação dos dados em sistemas computacionais. Neste texto foi abordado algumas
questões básicas sobre Linguagens de Consultas, especificamente o SQL.

Iniciamos o texto apresentando o SQL, por ser uma linguagem padrão para a maioria dos
SGBDRs disponível no mercado. Esta padronização caracteriza-se em uma grande vantagem de
sua utilização, pois facilita a migração entre SGBDRs por parte dos profissionais de banco de
dados. Além das aspectos gerais da linguagem SQL, foram apresentados neste texto alguns
comandos SQL que fazem parte dos grupos de DDL e DML, estes comandos foram: DDL -
Create database, Create Table, Alter Table e Drop Table; DML – INSERT, UPDATE, DELETE E
SELECT.
20

Referências

DATE, C. J. Sistemas de Banco de Dados. Rio de Janeiro: Ed. Campus, 2000.

DAMAS, L. SQL – Linguagem de Consulta Estruturada. Rio de Janeiro: Ed. LTC, 2007.

ELMASRI, R. Sistemas de Banco de Dados. São Paulo: Ed. Addisson Wesley, 2005.

SILBERCHATZ, A. Sistemas de Banco de Dados. Ed. Elsevier, 2012.

Você também pode gostar