MySQL Queries
So far we've created a database, added two tables, and inserted data into both tables. Now we're going to look at how to retreive that data. But not just retrieve the data, but to query the database for it.
SQL stands for Structured Query Language. It's the Query bit that makes SQL so powerful. SQL is a language that enables you to run queries against your database. It allows you to query the database for the data that you want.
The SQL SELECT
Statement
When it comes to querying your MySQL database, the SQL SELECT
statement makes it all possible. This is likely to be your most frequently used SQL statement when working with MySQL. The SELECT
statement allows you to describe to MySQL exactly what data you want it to retrieve.
Consider the following SQL statement:
Here's the result:
This is the SELECT
statement at its simplest. The above SQL statement retrieves all records from the Fruit table.
The asterisk (*
) tells MySQL to return all columns. This saves us time and effort. Without this we'd need to write the names of all columns we'd like to have returned.
Having said that, you can also tell MySQL to return only those columns that you want to return. This is done by naming only those columns that you'd like to have returned. Like this:
Here's the result:
The above SQL statement selects the FruitId and FruitName columns from the Fruit table.
Doing this can reduce clutter so that you only see those columns that you're interested in. It can also boost performance, because MySQL (and any application you use) doesn't need to use valuable resources to return unnecessary data.
Again, this query retreives all records from the table — MySQL will return all records unless otherwise specified.
The WHERE
Clause
You can add the WHERE
clause to narrow the result set down to only those records that you're interested in. Like this:
Result:
The above query returns all records from the Fruit table where the UnitId column has a value of 1
.
Subqueries — Nested SELECT
Statements
What if we didn't know the UnitId? What if we only knew to look for those records with a unit name of Piece
?
Easy! We could rewrite the above example to use a nested SELECT
statement (otherwise known as a subquery) that queries another table (the Units table). Doing this will enable us to use the actual unit name (rather than its ID) because the second table contains this in the UnitName
field:
Result:
Here we use a nested SELECT
statement (i.e. a SELECT
statement within a SELECT
statement) to query the Units table for the UnitId of the record that contains Piece
as its UnitName value. We can do this because Fruit.UnitId column is a foreign key to the Units.UnitId column.
Here are more examples of subqueries if you're interested.
Using an SQL JOIN
Taking it a step further, we could rewrite our nested SELECT
statement into an INNER JOIN
.
In SQL, a JOIN
enables you to query multiple tables that share data. In our case, both tables share the UnitId
so you could say that they are "joined" by this field.
There are different types of joins in SQL, however, we're mainly interested in the INNER JOIN
for now.
The INNER JOIN
syntax goes like this:
So we could rewrite our subquery from the previous example to the following:
Result:
We specified Fruit.*
instead of just *
because we only wanted to return all columns from the Fruit table. If we'd used *
, the query would've returned all columns from both tables.
Also check out the LEFT JOIN
and RIGHT JOIN
to see how you may get different data depending on the join type.
Subquery vs JOIN
?
Now that you've seen two methods for achieving the same result, you're probably wondering which one is better?
Subqueries tend to be more readable (and perhaps easier to comprehend), which can make it easier for beginners to grasp.
However, many SQL programmers find JOIN
s more efficient and perform better. If you encounter performance issues with your queries or an application try converting any subqueries into JOIN
s or vice versa (in some cases a sub-query could perform better).
Also, there may be cases where a subquery is your only option, so this is also a consideration.
More Operators
Our queries so far have all contained an equals sign (=
). This is called an operator. More specifically it's a comparison operator as it compares one expression with another.
There are many more operators that you can use in your queries. These can assist greatly in narrowing down the result set to only those records that you require. It's not uncommon for a database to contain millions of records. Even if you only have thousands of records, trying to find one record (or even just a handful) amongst thousands would be a very daunting task if you didn't have these operators at your disposal.
Here are some of the more commonly used SQL operators.
The >
Operator
You can use the >
operator to select data that is greater than a given value.
The <
Operator
You can use the <
operator to select data that is less than a given value.
The <>
Operator
You can use the <>
operator to select data that is both less than and greater than a given value.
The >=
Operator
You can use the >=
operator to select data that is greater than or equal to a given value.
The <=
Operator
You can use the <=
operator to select data that is less than or equal to a given value.
The AND
Operator
You can add an AND
operator to the WHERE
clause in order to limit your selection to only those records that meet two conditions (or more if you include more AND
operators).
Here's an example:
The OR
Operator
You can use an OR
operator to broaden your selection to more than one criteria. As the name suggests, the OR
clause lets you select data where the criteria is either this OR that. So the AND
operator limits your selection and the OR
operator broadens it.
Here's an example:
The BETWEEN
Operator
Use the BETWEEN
operator to select data that is between two given values.
The NOT
Operator
Use the NOT
operator to select data that is not equivalent to a given condition.