Apostila SQL
Apostila SQL
MySQL, o mais popular sistema de gerenciamento de banco de dados SQL Open Source,
é desenvolvido, distribuído e tem suporte da MySQL AB.
O MySQL é um software Open Source. Open Source significa que é possível para qualquer um
possa usar e modificar o programa. Qualquer pessoa pode fazer download do MySQL pela
Internet e usá-lo sem pagar nada. Se você quiser, você pode estudar o código fonte e alterá-lo
para adequá-lo às suas necessidades. O MySQL usa a GPL (GNU General Public License -
Licença Pública Geral GNU) para definir o que você pode e não pode fazer com o software em
diferentes situações.
Ambiente MYSQL
Vamos inicializar o ambiente MYSQL Client. É um prompt como o DOS para execução de
comandos MYSQL. Quando executado o ambiente MYSQL Client, ele pede uma senha que foi
configurada pelo administrador na instalação do programa, para execução do MYSQL. A princípio
vamos ser usuários servidores depois vamos criar outros usuários e colocar permissões para eles.
Nossa senha é: [Link]
Para verificar se estamos conectados no ambiente o MYSQL verifique o prompt se está
mysql>
Aqui está um comando simples que solicita ao servidor seu número de versão e a data atual.
Digite-o como visto abaixo seguindo o prompt mysql> e digite a tecla ENTER:
mysql> SELECT VERSION(), CURRENT_DATE;
1
• O mysql mostra quantas linhas foram retornadas e quanto tempo a consulta levou para
executar, o que lhe dá uma vaga idéia da performance do servidor. Estes valores são
impreciso porque eles representam tempo de relógio (Não tempo de CPU ou de máquina),
e porque eles são afetados pelos fatores como a carga do servidor e latência de rede.
Aqui está outra consulta. Ela demonstra que você pode usar o mysql como uma calculadora
simples:
mysql> SELECT (4+1)*5;
As consultas mostradas até agora têm sido instruções relativamente pequenas, de uma linha.
Você pode também entrar com múltiplas instruções em uma única linha. Basta finalizar cada uma
com um ponto e vírgula:
mysql> SELECT VERSION(); SELECT NOW();
Um comando não necessita estar todo em uma única linha, então comandos extensos que
necessitam de várias linhas não são um problema. O mysql determina onde sua instrução termina
através do ponto e vírgula “terminador”, e não pelo final da linha de entrada. (Em outras palavras,
o mySQL aceita entradas de livre formato: Ele coleta linhas de entrada mas não as executa até
chegar o ponto e vírgula.)
Aqui está uma instrução simples usando múltiplas linhas:
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+--------------------+--------------+
Neste exemplo, note como o prompt altera de mysql> para -> depois de você entrar com a
primeira linha de uma consulta com múltiplas linhas. Isto é, como o mysql indica que ainda não
achou uma instrução completa e está esperando pelo resto. O prompt é seu amigo, porque ele
fornece um retorno valioso. Se você usa este retorno, você sempre estará ciente do que o mysql
está esperando.
Se você decidir que não deseja executar um comando que está no meio do processo de entrada,
cancele-o digitando \c:
mysql> SELECT
-> USER()
-> \c
mysql>
Note o prompt aqui também. Ele troca para o mysql> depois de você digitar \c, fornecendo
retorno para indicar que o mysql está pronto para um novo comando.
A seguinte tabela mostra cada dos prompts que você pode ver e resume o que ele significa sobre
o estado em que o mysql se encontra:
Prompt Significado
mysql> Pronto para novo comando.
-> Esperando pela próxima linha de comando com múltiplas linhas.
'> Esperando pela próxima linha, coletando uma string que comece
com uma aspas simples (‘'’).
"> Esperando pela próxima linha, coletando uma string que comece
com aspas duplas (‘"’).
`> Esperando pela próxima linha, coletando uma string que comece
com crase (‘`’).
2
É muito comum instruções multi-linhas ocorrerem por acidente quando você pretende publicar um
comando em uma única linha, mas esquece o ponto e vírgula terminador. Neste caso,o mysql
espera por mais entrada:
mysql> SELECT USER()
->
Se isto ocorrer com você (acha que entrou uma instrução, mas a única resposta é um prompt ->),
o mais provável é que o mysql está esperando pelo ponto e vírgula. Se você não perceber o que o
prompt está lhe dizendo, você pode parar por um tempo antes de entender o que precisa fazer.
Entre com um ponto e vírgula para completar a instrução, e o mysql irá executá-la:
mysql> SELECT USER()
-> ;
+--------
Suponha que você tenha diversos animais de estimação em sua casa (animais_estimacao)
e você
gostaria de ter o registro de vários tipos de informações sobre eles. Você pode fazer isto criando
tabelas para armazenar seus dados e carregá-los com a informação desejada. Depois você pode
responder diferentes tipos de questões sobre seus animais recuperando dados das tabelas.
O banco de dados animais_estimacao será simples, mas não é difícil pensar em situações na vida real em
que um tipo similar de banco de dados pode ser usado. Por exemplo, um banco de dados deste tipo pode
ser usado por um fazendeiro para gerenciar seu estoque de animais, ou por um veterinário para gerenciar
registros de seus pacientes.
Utilizamos a instrução SHOW para saber quais bancos de dados existem atualmente no servidor.
A lista de bancos de dados provavelmente será diferente na sua máquina, mas os bancos de
dados mysql e test provavelmente estarão entre eles. O banco de dados mysql é necessário
porque ele descreve privilégios de acessos de usuários. O banco de dados test é geralmente
fornecido como um espaço para que os usuários possam fazer testes.
Se o banco de dados test existir, tente acessá-lo:
mysql> USE test
Database changed
Podemos verificar se o banco de dados foi criado através do comando anterior SHOW.
Agora vamos utilizar o nosso banco de dados criado.
A parte mais difícil é decidir qual a estrutura que seu banco de dados deve ter: quais tabelas você
precisará e que colunas estarão em cada uma delas.
Você irá precisar de uma tabela para guardar um registro para cada um de seus animais de
estimação. Esta tabela pode ser chamada pet, e ela deve conter, pelo menos, o nome de cada
animal. Como o nome por si só não é muito interessante, a tabela deverá conter outras
informações. Por exemplo, se mais de uma pessoa na sua família também tem animais, você
3
pode desejar listar cada dono. Você pode também desejar gravar algumas informações descritivas
básicas como espécie e sexo.
Idade? Pode ser do interesse, mas não é uma boa coisa para se armazenar em um banco de
dados. A idade muda à medida em que o tempo passa, o que significa que você sempre terá de
atualizar seus registros. Em vez disso, é melhor armazenar um valor fixo como a data de
nascimento. Então, sempre que você precisar da idade, basta você calculá-la como a diferença
entre a data atual e a data de aniversário.
Informações identificadas até o momento na tabela pet são suficientes por agora: nome,
dono, espécie, sexo, data de nascimento(data_nasc) e data da morte(data_morte).
A criação de tabelas em SQL se faz com a utilização do comando CREATE TABLE seguido do
nome da tabela, bem como de outros parâmetros para a determinação de sua estrutura. A sintaxe
padrão pode ser:
CREATE TABLE <tabela>
(<campo> <tipo> [NULL/NOT NULL] [DEFAULT <valor>]
[AUTO_INCREMENT] [PRIMARY KEY]);
Sendo tabela a definição do nome da tabela a ser criada; campo o nome do campo a ser definido;
tipo um dos tipos de padrão; NULL/NOT NULL é a definição do campo em aceitar ou não valores
nulos; DEFAULT <valor> permite determinar um valor padrão para o campo;
AUTO_INCREMENT determina se o campo será preenchido automaticamente quando nele forem
entrados valores do tipo zero ou NULL, sendo válido apenas para campos que aceitem valores
inteiros; PRIMARY KEY determina que o campos é a chave primária da tabela.
VARCHAR é uma boa escolha para os campos nome, dono, e especie porque os valores da
coluna são de tamanho variável. Os tamanhos destas colunas não precisam necessariamente
de ser os mesmos e não precisam ser 20. Você pode escolher qualquer tamanho de 1 a 255,
o que você achar melhor.
O sexo dos animais podem ser representados em várias formas, por exemplo, "m" e "f" ou
mesmo "macho" e "fêmea". É mais simples usar os caracteres "m" e "f". O uso do tipo de dados
DATE para as colunas data_nasc e data_morte são obviamente a melhor escolha.
Agora que você criou uma tabela, a instrução SHOW TABLES deve produzir alguma saída:
Antes de continuarmos a criar a tabela, vamos verificar alguns tipos de dados que os campos
podem possuir.
Definição de dados
A linguagem de consulta estruturada SQL trabalha com vários tipos de dados, categorizados em
três grupos distintos (tipo numérico, tipo temporal e tipo literal). A seguir, são apresentados
apenas os tipos de dados padrão.
O tipo numérico pode ser utilizado no tratamento de valores numéricos inteiros ou reais. Estão
disponíveis os seguintes tipos:
• SMALLINT [(tamanho)] – utiliza-se este tipo de dado quando houver a necessidade de
fazer uso de valores inteiros curtos entre a faixa de valores de -32.768 até 32.767. O
parâmetro tamanho é opcional e permite estabelecer o tamanho máximo do valor a ser
exibido, podendo ser um valor máximo 255;
• INTEGER [(tamanho)] – utiliza-se este tipo de dado quando houver a necessidade de
fazer uso de valores inteiros longos entre a faixa de valores de -[Link] até
[Link]. O parâmetro tamanho é opcional e permite estabelecer o tamanho máximo
do valor a ser exibido, podendo ser um valor máximo 255.
4
• FLOAT – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de
valores com ponto flutuante com sete dígitos de precisão decimais. Este tipo permite
trabalhar com valores na faixa de 3,4 * 10 -38 até 3,4 * 1038.
• DECIMAL [(tamanho [, decimal])] – utiliza-se este tipo de dado quando houver a
necessidade de fazer uso de valores com ponto flutuante. O parâmetro tamanho é opcional
e permite estabelecer o tamanho máximo do valor a ser exibido, podendo se um valor
máximo 255. Se omitido, o tamanho assumido é 10. O parâmetro opcional decimal,
permite estabelecer o tamanho máximo de casas decimais a ser exibido, podendo ser um
valor máximo de 30;
• NUMERIC [(tamanho[, decimal])] – utiliza-se este tipo de dado quando houver a
necessidade de fazer uso de valor com ponto flutuante, sendo semelhante ao tipo
DECIMAL;
• DOUBLE PRECISION [(tamanho, decimal)] – utiliza-se este tipo de dado quando houver
a necessidade de fazer uso de valores com ponto de dupla precisão. O parâmetro
tamanho deve estar entre 25 e 53 para estabelecer o tamanho máximo. O parâmetro
opcional decimal permite estabelecer o tamanho máximo de casas decimais a ser exibido,
podendo ser um valor máximo de 30.
O tipo temporal pode ser utilizado no tratamento de valores relacionados à data e horário. Estão
disponíveis os seguintes tipos:
• DATE – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de um data
de calendário no formato AAAA-MM-DD (formato ANSI). O intervalo aceito depende da
ferramenta de gerenciamento de banco de dados em uso. (No MYSQL de 01/01/1000 até
31/12/9999)
• TIME – utiliza-se este tipo de dado quando houver a necessidade de fazer uso de uma
informação relacionada a um determinado horário.
O tipo literal pode ser a recepção de valores baseados em cadeias de caracteres (strings –
dados alfanuméricos delimitados por aspas ou apóstrofos). Estão disponíveis os seguintes tipos:
• CHAR (tamanho) – utiliza-se este tipo de dado quando houver a necessidade de fazer uso
de seqüências de caracteres de tamanho fixo que estejam limitadas até 255 caracteres de
comprimento. O parâmetro tamanho determina o valor máximo em caracteres que pode
conter a seqüência;
• VARCHAR (tamanho) – utiliza-se este tipo de dado quando houver a necessidade de
fazer uso de seqüências de caracteres de tamanho variável que estejam limitadas até 255
caracteres de comprimento. A diferença entre este tipo e o CHAR é que neste caso, os
espaços em branco excedentes do lado direito da seqüência de caracteres não utilizados
são automaticamente desprezados. O parâmetro tamanho determina o valor máximo em
caracteres que pode conter a seqüência.
Com os tipos de dados apresentados é possível definir uma grande variedade de campos par a
construção de tabelas.
Voltando ao nosso exemplo anterior, depois de criado a tabela pet com os campos, vamos
verificar se a tabela ficou como esperado.
Para verificar se sua tabela foi criada da forma que esperada, utilize a instrução DESCRIBE:
Podemos usar DESCRIBE a qualquer hora, por exemplo, se esquecermos dos nomes das
colunas na sua tabela ou de que tipos elas têm.
Depois de criar a tabela, precisamos povoá-la. As instruções LOAD DATA e INSERT são
úteis para isto.
5
Quando desejar adicionar novos registros um a um, a instrução INSERT é usada. Na sua forma
mais simples, você fornece valores para cada coluna, na ordem em que as colunas foram listadas
na instrução CREATE TABLE. Suponha que Diane tenha um novo hamster chamado Puffball.
Você pode adicionar um registro utilizando uma instrução INSERT desta forma:
Perceba que os valores de string e datas são especificados aqui como strings com aspas.
Com o INSERT você também pode inserir NULL diretamente para representar um valor em
falta.
+----------+--------+---------+------+------------+------------+
| nome | dono | especie | sexo | data_nasc | data_morte |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29|
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+--------+---------+------+------------+------------+
Esta forma do SELECT é útil se você deseja ver sua tabela inteira como agora.
Por exemplo, você pode pensar que a data de nascimento do Bowser não está correta.
Consultando seus papéis originais de pedigree, descobriu que o ano correto do nascimento deve
ser 1989, não 1979.
Existem pelo menos duas formas de corrigir isto:
• usando DELETE
mysql> DELETE FROM pet;
Entretanto, se você fizer isto, você também deve refazer a entrada de todos os dados.
• Corrigir somente o registro errado com uma instrução UPDATE:
O comando UPDATE para atualizar linhas de uma tabela utiliza
UPDATE nome_tabela
SET nome_coluna = valor [, nome_coluna = valor]
[WHERE condiçaõ]
O UPDATE altera apenas o registro em questão e não exige que você recarregue a tabela.
Aproveitando os dados acima, vamos inserir o restante dos dados na nossa tabela.
6
1 - Exercício Cadastro da tabela cadfun .
Quando criamos a tabela cadfun, utilizamos o dentro do comando a restrição primary key no
codfun. Que representa a chave primária de nossa tabela.
Existe alguns tipos de restrição que nossa tabela pode ter:
Chave primária – chave primária é a coluna, ou grupo de colunas, que permite identificar um
único registro na tabela. Para especificar que uma coluna ou grupo de colunas representa a chave
primária de uma tabela, deve-se acrescentar a palavra chave PRIMARY KEY seguida do nome
da(s) colunas(s).
Chave estrangeira – chave estrangeira é o campo que estabelece o relacionamento entre duas
tabelas. Assim, uma coluna, ou grupo de colunas, de uma tabela corresponde à mesma coluna,
ou grupo de colunas, que é a chave primária de outra tabela. Dessa forma, deve-se especificar na
tabela que contém a chave estrangeira quais são essas colunas e à qual tabela está relacionada.
O banco de dados irá verificar se todos os campos que fazer referência à tabela estão
especificados.
Ao determinar esse tipo de relacionamento, fica garantida a integridade das informações. Os
valores presentes na(s) coluna(s) definida(s) como chave estrangeira devem ter um
correspondente na outra tabela, caso contrário o banco de dados deve retornar uma mensagem
de erro.
[NOT] NULL – indica que o conteúdo de uma coluna não poderá ser Nulo. Se cada coluna não
tiver valor atribuído durante uma inclusão, terá seu valor Nulo.
UNIQUE – indica que não pode haver repetição no conteúdo da coluna. Isso é diferente do
conceito de chave primária. A chave primária, além de não permitir repetição, não pode conter
valores nulos. Ao especificarmos que uma coluna deve conter valores únicos, indicamos que
todos os valores não nulos devem ser exclusivos. Devemos acrescentar a cláusula UNIQUE, após
a definição da coluna, ou UNIQUE, seguido dos campos que devam ter esta característica no final
da criação da tabela. Um exemplo que UNIQUE que poderíamos acrescentar numa tabela seria
para o número do CPF como campo de valor único.
Após criarmos a tabela de Cadastro de Funcionários (cadfun), vamos modificar alguns dados
desta tabela.
7
Para demonstrar as opções de alteração da estrutura de uma tabela, vamos inserir na tabela
cadfun o campo data_admissao, conforme o comando seguinte:
Após a execução do comando, vamos verificar na tela cadfun o novo campo que foi inserido.
Este campo criado, por default, ele vem null (vazio), pois não inserimos nenhum dado nele.
Você pode ainda definir na ordenação da tabela, onde você quer inserir o seu campo na tabela na
hora de criar este campo, como definido no comando abaixo:
Vamos criar um campo sexo, e quero que seja depois do nome. Então o comando utilizado será
mysql> ALTER TABLE cadfun ADD sexo char(1) AFTER nome
Além de adicionar campos a outra possibilidade que temos e de modificar os campos de uma
tabela.
Vamos modificar o campo nome da tabela cadfun de Char(40) para Varchar(30).
Para fazer esta modificação utilizamos o comando:
Após o comando, verifique novamente a descrição da tabela e veja a modificação que fizemos.
Além do comando MODIFY, posso estar utilizando o comando CHANGE para modificação da
estrutura ou apenas do nome da coluna da minha tabela.
Vamos supor que queremos na inserção do campo data_admissao, eu queira trocar apenas o
campo para admissao. Então vamos precisar utilizar o comando CHANGE para fazer esta
modificação com escrito abaixo:
Da mesma forma eu posso apenas modificar o tipo de campo com o comando CHANGE da
seguinte forma:
Utilizando o comando CHANGE, eu preciso colocar o campo nome duas vezes, para mostrar que
estou modificando apenas o tipo dele e não o seu nome também.
Posso ainda alterar o nome de minha tabela.
Vamos trocar o nome da nossa tabela cadfun para apenas cadastro. Utilizamos o comando
RENAME para fazer esta alteração:
Além de adicionar e alterar, ainda podemos remover um campo desnecessário na nossa tabela.
Para isto utilizamos o comando DROP.
8
mysql> ALTER TABLE cadfun (cadastro) DROP funcao;
Devemos ter muito cuidado com o comando DROP, pois se não houver nenhuma restrição ele
remove todos os dados de uma tabela, uma tabela inteira e também um banco de dados.
Utilizando o comando:
Vamos agora trabalhar mais detalhado com a DML (Data Manipulation Language) – Linguagem de
Manipulação de Dados. Inserção de registros (INSERT), Atualização de registros (UPDATE),
Seleção de registros (SELECT), e Deleção de registros (DELETE).
Alteração de Registros
No processo de manutenção de registros em banco de dados é necessário periodicamente
atualizar dados e informações existentes. Para tanto, é necessário utilizar o comando UPDATE
que possui a seguinte sintaxe:
mysql> UPDATE cadfun SET depto =’3’ where= nome = ‘Ana Bastos’;
9
Remoção de Registros
Dentre as várias atividades de manutenção de registro, existe a possibilidade de efetuar a
remoção de registros que não sejam mais desejados. Para isso deve-se utilizar o comando
DELETE que possui a seguinte sintaxe:
Ocorrerá a remoção de todos os registros da tabela cadfun. Devido a isto, é conveniente sempre
utilizar o parâmetro WHERE nas operações de remoção de registros, a menos que se tenha a
certeza de que se deseja realmente apagar todos os registros.
Exemplo:
Vamos supor que a empresa está passando por uma reformulação; o departamento ‘5’ foi extinto
e seus funcionários foram demitidos. Desta forma, torna-se necessário remover os registros que
atendam a este critério de condição. Utilizamos a seguinte linha de comando:
Inserção de Registros
Se quisermos inserir mais registros em nossa tabela utilizamos o comando já dito anteriormente
INSERT.
Vamos supor que depois das mudanças na empresa, ela reabriu o departamento 5 e admitiu
quatro novos funcionários relacionados em seguida:
mysql> INSERT INTO cadfun (CodFun, Nome, Depto, Funcao, Salário, Admissao)
> VALUES (20, ‘Audrey Toledo’, ‘2’, ‘SUPERVISORA’, ‘1700.00’, ‘2002-07-05’);
mysql > INSERT INTO cadfun (CodFun, Nome, Depto, Funcao, Salário, Admissao)
> VALUES (22, ‘Sandra Manzano’, ‘2’, ‘Gerente, ‘2000.00’, ‘2002-07-01’);
mysql > INSERT INTO cadfun (CodFun, Nome, Depto, Funcao, Salário, Admissao)
> VALUES (24, ‘Marcio Canuto’, ‘2’, ‘Vendedor, ‘1200.00’, ‘2002-07-10’);
mysql > INSERT INTO cadfun (CodFun, Nome, Depto, Funcao, Salário, Admissao)
> VALUES (26, ‘Miguel Silva’, ‘2’, ‘Vendedor, ‘1200.00’, ‘2002-07-15’);
Comando SELECT
Este comando é utilizado para realizar pesquisas, ou seja, extrair informações do banco de dados.
Atrás dele há uma extensão de possibilidades que vão desde a simples extração do conteúdo de
todas as linhas e colunas de uma tabela até a união de diversas tabelas, cálculos, agrupamentos,
além de ordenações e filtragem de linhas e colunas.
A sintaxe mais simples do comando SELECT é:
mysql SELECT [DISTINCT | ALL] { * | coluna [, coluna, …]} FROM tabela
10
ALL mostra todos os valores, mesmo que repetidos. Esse é o padrão se DISTINCT não for
definido.
* Indica que devem ser mostradas todas as colunas da tabela.
coluna lista de colunas que devem ser mostradas.
Tabela nome da tabela em que será realizada a busca.
Para visualizar todas as linhas e colunas de uma tabela utilizamos o seguinte comando:
Exemplo na tabela CD
Cláusula WHERE
Usada para filtrar um subconjunto de linhas de uma tabela
Sintaxe
mysql> SELECT nome_colunas FROM nome_tabela [WHERE condição]
11
OPERADORES RELACIONAIS
Operadores relacionais definem um tipo de condição básica. Podemos testar igualdade, diferença,
maior, menor, maior ou igual e menor ou igual. Deve-se colocar o operador entre os argumentos
que estão sendo comparados. Veja uma lista de operadores relacionais, seu significado e
exemplo de utilização.
Desta forma, se quisermos pesquisar apenas os CDs com preço de venda superior a 10, devemos
utilizar o seguinte comando:
OPERADORES LÓGICOS
Existem ocasiões em que é necessário trabalhar com o relacionamento de duas ou mais
condições ao mesmo tempo, efetuando desta forma testes múltiplos. Para estes casos é
necessário trabalhar com a utilização dos operadores lógicos, também conhecidos como
operadores booleanos. Veja a tabela abaixo os operadores lógicos:
AND
O Operador AND é utilizado quando dois ou mais relacionamentos lógicos de uma determinada
condição necessitam ser verdadeiros, ou seja, duas condições devem ser verdadeiras para que
seja mostrada a linha. Exemplo:
O operador AND faz com que somente seja executada uma determinada operação se todas as
condições mencionadas forem simultaneamente verdadeiras, gerando assim um resultado lógico
verdadeiro.
Somente serão mostrados os nomes dos CDs que tiverem preço de venda maior que 10 e cuja
gravadora seja a de código 2.
12
OR
O Operador OR é utilizado quando pelo menos um dos relacionamentos lógicos (quando houver
mais de um relacionamento) de uma condição necessita ser verdadeiro, ou seja, quando
quisermos que o resultado final seja verdadeiro sempre que uma das duas condições forem
verdadeiras (ou ambas). Exemplo:
O Operador OR faz com que seja executada uma determinada operação se pelo menos uma das
condições mencionadas gerar um resultado lógico verdadeiro.
Somente serão mostrados os nomes dos CDs que tiverem preço de venda maior que 11 ou cuja
gravadora seja de código 3.
Neste caso a consulta inclui na listagem preços com venda inferior a 11. Isso acontece por que
primeiro é verificado se o código da gravadora é 2 ou 3 e, somente depois, verifica-se o preço de
venda.
Vamos ver o mesmo exemplo com parênteses:
Neste caso, checa-se o código da gravadora e obtém-se uma lista de linhas válidas (somente os
das gravadoras 2 e 3). Depois, verifica-se o preço de venda, apenas as linhas selecionadas
anteriormente, e, assim, temos o que deve ser apresentado.
NOT ou !
O operador do tipo NOT é utilizado quando se necessita estabelecer que uma determinada
condição deve não ser verdadeira ou deve não ser falsa. O operador NOT se caracteriza por
inverter o estado lógico de uma condição, ou seja, ele nega o resultado da condição.
No resultado desta operação aparece apenas as linhas da tabela CD que não tenham preço
menor que 15. Primeiro o banco de dados avalia o preço de venda menor que 15 e depois exclui
da lista esses elementos.
13
Mais uma vez, apesar de opcional, o uso de parênteses deixa mais claro o que está sendo
esperando do comando. Pode-se avaliar com o NOT expressões complexas incluindo as
cláusulas AND e OR.
Nesse caso, como é excluído o grupo de CDs das gravadoras 2 e 3, pois utilizamos o NOT antes
do parênteses, resta apenas o CD com preço superior a 11.
Em que expressão pode ser a definição de um campo, valor numérico, seqüência de caracteres,
sendo que este parâmetro serve para definir a efetivação da comparação; valor mínimo é a
definição do menor valor da faixa de intervalo e valor máximo é a definição do maior valor da
faixa de intervalo.
De forma análoga, o operador BETWEEN... AND efetua a definição de uma condição baseada na
expressão: <valor mínimo> <= <expressão> AND <expressão> <=<valor máximo>
Caso utilizemos o comando NOT, somente as linhas for a do intervalo serão apresentadas
Em que expressão pode ser a definição de uma campo, valor numérico, seqüência de caracteres,
sendo que este parâmetro serve para definir a efetivação da comparação; valor1, valor2, valorN,
são as definições do grupo de valores em que a expressão será verificada.
Caso a expressão analisada esteja dentro (IN) da sequência de valores indicados, será possível
executar a ação estabelecida ante da cláusula WHERE.
14
mysql> SELECT *
-> from AUTOR
-> WHERE codigo_autor IN (1,10,20);
Ao efetuar o comando, note que apenas os autores cujo código seja 1, 10 ou 20 serão retornados.
Em que expressão pode ser a definição de um campo, valor numérico, seqüência de caracteres,
sendo que este parâmetro serve para definir a efetivação da comparação; valor é a definição do
que será pesquisado.
Utilizando a combinação desses caracteres especiais com o que se quer localizar, pode-se
conseguir uma variedade muito grande de expressões. Veja na tabela a seguir algumas possíveis
combinações.
Expressão Explicação
LIKE ‘A%’ Todas as palavras que iniciem com a letra A
LIKE ‘%A’ Todas que terminem com a letra A
LIKE ‘%A%’ Todas que tenham a letra A em qualquer posição
LIKE ‘A_’ String de dois caracteres que tenham a primeira letra A e o segundo caractere
seja qualquer outro.
LIKE ‘_A’ String de dois caracteres cujo primeiro seja qualquer um e a última letra seja A.
LIKE ‘_A_’ String de três caracteres cuja segunda letra seja A, independentemente do
primeiro e do último caractere.
LIKE ‘%A_’ Todas que tenham a letra A na penúltima posição e a última seja qualquer
outro caractere.
LIKE ‘_A%’ Todas que tenham a letra A na segunda posição e o primeiro caractere seja
qualquer um.
Exemplos:
1 - Procuremos todos os autores cujos nomes sejam iniciados com a letra R:
mysql> SELECT *
-> from AUTOR
-> WHERE nome_autor LIKE ‘R%’;
3 – Buscar todos os autores com a letra C no início e a letra R na terceira posição do nome;
mysql> SELECT *
-> from AUTOR
-> WHERE nome_autor LIKE ‘C_r%’;
15
mysql> SELECT *
-> from AUTOR
-> WHERE nome_autor LIKE ‘%to%’;
IS NULL - se vazio
Uma ocorrência bastante útil é verificar a existência de campos que possuam valores em branco
ou não. Nestes casos, utiliza-se junto à cláusula WHERE em uma condição o operador IS NULL
que possui a seguinte sintaxe:
Em que expressão pode ser a definição de um campo, valor numérico, seqüência de caracteres,
sendo que este parâmetro serve para definir a efetivação da comparação.
Exemplo:
IS NOT NULL
Compara a negação do operador anterior. Somente aqueles que tiverem conteúdo atribuído serão
mostrados.
CÁLCULOS
Podemos fazer cálculos quando realizamos buscas no banco de dados, simplesmente aplicando
um dos operadores aritméticos a colunas. Dessa forma, mesmo não tendo armazenado o valor
total (preço unitário multiplicado pela quantidade) em um item pedido, é possível realizar este
cálculo.
Como exemplo, será verificado o preço dos CDs caso estes sofram um aumento de 5%.
16
Note que os dados da tabela não foram alterados.
OPERADORES ARITMÉTICOS
Como já mencionados anteriormente os operadores aritméticos são responsáveis pela execução
de operações matemáticas simples, que venham a efetuar adição, subtração, multiplicação e
divisão.
É possível efetuar cálculos tanto para a apresentação de listagem como para efetivação de
atualizações de registros, como foi demonstrado anteriormente, quando aumentamos os salários
dos funcionários em 10%.
A precedência dos operadores é igual à da matemática, ou seja, multiplicação e divisão têm
prioridade sobre soma e subtração. Se houver duas ou mais operações do mesmo grupo
(multiplicação e divisão ou adição e subtração), a operação será realizada na ordem em que
aparecer. Dentro do mesmo grupo não há prioridade. Para alterar a prioridade, devemos utilizar
parênteses.
15 / 5 * 3
15 / (5 * 3)
Funções Numéricas
Algumas funções que retornam valores numéricos
POSITION/INSTR
O objetivo de ambas as funções é retornar a posição do caractere de busca na cadeia de
caracteres de origem.
CHARACTER_LENGTH/LENGTH
Retorna o número de caracteres contidos em uma cadeia de caracteres.
17
CHARACTER_LENGTH (‘cadeia de caracteres’);
LENGHT(‘cadeia de caracteres’);
Funções Alfanuméricos
O padrão SQL indica o uso de um operador para concatenar alfanuméricos e de algumas funções
para manipula-los.
UPPER e LOWER
Quando realizamos buscas alfanuméricas no banco de dados, devemos notar que o conteúdo do
campo será comparado, literalmente, com a cadeia de caracteres informada. Isso quer dizer que
caso o que seja informado na busca seja composto por letras maiúsculas e o que está
armazenado no banco de dados esteja com a primeira letra maiúscula e as demais minúsculas,
não será retornada nenhuma linha.
No caso do Mysql não teremos problemas com letras maiúsculas ou minúsculas, ele aceita os
dois tipos quando se faz a busca, mas em alguns bancos de dados SQL se fizermos a busca a
função UPPER faz com que todos os conteúdos da coluna nome_autor fossem convertidos para
caracteres maiúsculos (UPPER) e depois comparados com ROBERTO%. Isso é particularmente
útil quando não sabemos exatamente como os usuários digitaram o conteúdo das colunas. O
comando LOWER utilizado dessa forma produz o mesmo efeito, apenas transformando em
minúsculos os caracteres a serem comparados.
Manipulação de Datas
Quando criamos colunas com tipo de dado Data, podemos realizar uma série de cálculos e
operações cronológicas. Podemos calcular o número de dias entre duas datas, somar e subtrair
dias, meses etc.
Tipo Descrição
DATE Apenas data.
TIME Apenas hora.
TIMESTAMP Data e hora.
INTERVAL Intervalo entre os dois tipo de dados anteriores
O padrão SQL definiu algumas funções para determinar a data e/ou hora atuais do sistema,
acrescentando CURRENT_antes dos três primeiro tipos anteriores: CURRENT_DATE,
CURRENT_TIME e CURRENT_TIMESTAMP.
18