Até agora criamos um banco de dados, adicionamos duas tabelas e inserimos dados em ambas as tabelas. Agora vamos ver como recuperar esses dados. Mas não apenas recuperar os dados, mas para consultar o banco de dados para isso.
SQL significa Linguagem de Consulta Estruturada . É a Consulta pouco que torna o SQL tão poderoso. SQL é uma linguagem que permite executar consultas contra seu banco de dados. Permite consultar banco de dados para os dados que você deseja.
O SQL SELECT
Declaração
Quando se trata de consultar seu banco de dados MySQL, o SQL
SELECT
declaração torna tudo isso possível. Esta é provavelmente a sua instrução SQL usada com mais frequência ao trabalhar com o MySQL. O SELECT
permite que você descreva para o MySQL exatamente quais dados você deseja que ele recupere. Considere a seguinte instrução SQL:
SELECT * FROM Fruit;
Aqui está o resultado:
Este é o
SELECT
declaração em sua forma mais simples. A instrução SQL acima recupera todos os registros do
Fruit
tabela. O asterisco (
*
) diz ao MySQL para retornar todas as colunas. Isso nos poupa tempo e esforço. Sem isso, precisaríamos escrever os nomes de todas as colunas que gostaríamos de ter retornado. Dito isso, você também pode dizer ao MySQL para retornar apenas as colunas que deseja retornar. Isso é feito nomeando apenas as colunas que você gostaria de ter retornado. Assim:
SELECT FruitId, FruitName FROM Fruit;
Aqui está o resultado:
A instrução SQL acima seleciona o FruitId e FruitName colunas da Frutas tabela.
Isso pode reduzir a desordem para que você veja apenas as colunas nas quais está interessado. Também pode aumentar o desempenho, porque o MySQL (e qualquer aplicativo que você usa) não precisa usar recursos valiosos para retornar dados desnecessários.
Novamente, esta consulta recupera todos registros da tabela — o MySQL retornará todos os registros a menos que especificado de outra forma.
O WHERE
Cláusula
Você pode adicionar o
WHERE
cláusula para restringir o conjunto de resultados apenas aos registros nos quais você está interessado. Assim:SELECT * FROM Fruit WHERE UnitId = 1;
Resultado:
A consulta acima retorna todos os registros da Fruit tabela onde o UnitId coluna tem um valor de
1
. Subconsultas — SELECT
aninhado Declarações
E se não conhecêssemos o UnitId ? E se soubéssemos procurar esses registros com um nome de unidade de
Piece
? Fácil! Poderíamos reescrever o exemplo acima para usar um
SELECT
aninhado instrução (também conhecida como subconsulta ) que consulta outra tabela (as
Unidades
tabela). Isso nos permitirá usar a unidade real nome (em vez de seu ID) porque a segunda tabela contém isso no UnitName
campo:SELECT * FROM Fruit WHERE UnitId = (SELECT UnitId FROM Units WHERE UnitName = 'Piece');
Resultado:
Aqui usamos um
SELECT
aninhado instrução (ou seja, um SELECT
declaração dentro de um SELECT
instrução) para consultar as
Unidades
tabela para o
UnitId
do registro que contém Piece
como seu
UnitName
valor. Podemos fazer isso porque
Fruit.UnitId
coluna é uma chave estrangeira para o
Units.UnitId
coluna. Aqui estão mais exemplos de subconsultas se você estiver interessado.
Usando um SQL JOIN
Dando um passo adiante, poderíamos reescrever nosso
SELECT
aninhado declaração em um INNER JOIN
. No SQL, um
JOIN
permite consultar várias tabelas que compartilham dados. No nosso caso, ambas as tabelas compartilham o UnitId
então você poderia dizer que eles estão "unidos" por este campo. Existem diferentes tipos de junções no SQL, no entanto, estamos interessados principalmente no
INNER JOIN
por enquanto. O
INNER JOIN
sintaxe fica assim:SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Assim, poderíamos reescrever nossa subconsulta do exemplo anterior para o seguinte:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Resultado:
Especificamos
Fruit.*
em vez de apenas *
porque só queríamos retornar todas as colunas do
Fruit
tabela. Se tivéssemos usado *
, a consulta retornaria todas as colunas de ambas as tabelas. Confira também o
LEFT JOIN
e RIGHT JOIN
para ver como você pode obter dados diferentes dependendo do tipo de junção. Subconsulta vs JOIN
?
Agora que você viu dois métodos para alcançar o mesmo resultado, provavelmente está se perguntando qual é o melhor?
As subconsultas tendem a ser mais legíveis (e talvez mais fáceis de compreender), o que pode facilitar a compreensão dos iniciantes.
No entanto, muitos programadores SQL encontram
JOIN
é mais eficiente e tem melhor desempenho. Se você encontrar problemas de desempenho com suas consultas ou um aplicativo, tente converter qualquer subconsulta em JOIN
s ou vice-versa (em alguns casos, uma subconsulta pode ter um desempenho melhor). Além disso, pode haver casos em que uma subconsulta seja sua única opção, portanto, isso também é uma consideração.
Mais operadores
Nossas consultas até agora continham um sinal de igual (
=
). Isso é chamado de operador . Mais especificamente, é um operador de comparação uma vez que compara uma expressão com outra. Existem muitos outros operadores que você pode usar em suas consultas. Isso pode ajudar muito a restringir o conjunto de resultados apenas aos registros necessários. Não é incomum que um banco de dados contenha milhões de registros. Mesmo se você tiver apenas milhares de registros, tentar encontrar um registro (ou mesmo apenas um punhado) entre milhares seria uma tarefa muito difícil se você não tivesse esses operadores à sua disposição.
Aqui estão alguns dos operadores SQL mais usados.
O >
Operador
Você pode usar o
>
operador para selecionar dados maiores do que um determinado valor. SELECT * FROM Fruit WHERE Inventory > 10;
O <
Operador
Você pode usar o
<
operador para selecionar dados menos do que um determinado valor. SELECT * FROM Fruit WHERE Inventory < 10;
O <>
Operador
Você pode usar o
<>
operador para selecionar dados que são menores que e maior que um determinado valor. SELECT * FROM Fruit WHERE Inventory <> 10;
O >=
Operador
Você pode usar o
>=
operador para selecionar dados maiores ou iguais a um determinado valor. SELECT * FROM Fruit WHERE Inventory >= 10;
O <=
Operador
Você pode usar o
<=
operador para selecionar dados que são menores ou iguais a um determinado valor. SELECT * FROM Fruit WHERE Inventory <= 10;
O AND
Operador
Você pode adicionar um
AND
operador para WHERE
cláusula para limitar sua seleção apenas aos registros que atendem a duas condições (ou mais, se você incluir mais AND
operadores). Aqui está um exemplo:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
O OR
Operador
Você pode usar um
OR
operador para ampliar sua seleção para mais de um critério. Como o nome sugere, o OR
cláusula permite que você selecione dados onde o critério é este OU que. Portanto, o AND
operador limites sua seleção e o OR
operador amplia isto. Aqui está um exemplo:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
O BETWEEN
Operador
Use o
BETWEEN
operador para selecionar dados que estão entre dois valores fornecidos. SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
O NOT
Operador
Use o
NOT
operador para selecionar dados que não equivalente a uma dada condição. SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');