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
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.
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.
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:
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):
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.
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.
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) );
Na definição de cada atributo, temos a seguinte sintaxe básica, embora possa existir algumas
variantes desta sintaxe:
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.
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
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.
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.
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.
);
Ou
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:
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
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.
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:
● 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);
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 é:
Para exemplificar, vamos considerar que necessitamos alterar o estado do funcionário inserido
anteriormente para SP, para tanto, utilizamos o seguinte script:
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:
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 é:
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.
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:
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 é:
Em <condição de seleção> é indicado uma expressão booleana que denota a(s) condição(ões)
especificando os atributos da Relação9.
No qual:
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 tanto, utilizamos a consulta, em termos SQL para obter este resultado:
É 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:
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;
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:
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).
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:
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
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.
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:
Diferentemente do CROISS JOIN, o INNER JOIN apresenta em seu resultado apenas as tuplas
que se relacionam por meio de seus indicadores.
NOME NOMEPROJ
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.
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:
NOME NOMEPROJ
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.
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
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
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.