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:

MySQL Select Statements 1

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:

MySQL Select Statements 2

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:

MySQL Select Statements 3

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:

MySQL Sub-Query

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:

MySQL Inner Join

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 JOINs more efficient and perform better. If you encounter performance issues with your queries or an application try converting any subqueries into JOINs 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.