How I learned to write raw SQL

In my daily job, I mainly use Rails framework. To make code readable and maintainable, we seldom write raw SQL in the codebase. Instead, we use Rails's ActiveRecord::QueryMethods module which helps developers write beautiful queries quickly. For example,

School.joins(:students).where('students.age > ?', 7).limit(100)

Recently, I was assigned to query different operation metrics, product metrics, and marketing metrics. Due to the diversity of these metrics, I found out that if I know what the raw SQL of the metrics is, not only can I complete the query quickly, but also I can use ActiveRecord::QueryMethods more efficiently.

Here are the 4 steps that how I practice writing raw SQL.


1. Browse the Active Record association declaration

Each metric must derive from one or more models. In the huge codebase, we might not be familiar with every model, only when we can clearly understand the association declaration between the models do we write the correct query condition.

2. Imitation is the start of all learning

At first, I know how to query by Rails ActiveRecord::QueryMethods, but I don't know how to write the raw SQL.

It's OK. Rails console can help us.

When asking about the result below, we can realize that it'll return an ActiveRecord::Relation object.

# rails console

Student.where(name: 'Lynn').class
#=> Student::ActiveRecord_Relation

ActiveRecord::Relation class provides a #to_sql method, it will return sql statement for the relation after it is called.

# rails console

Student.where(name: 'Lynn').to_sql
#=> "SELECT \"students\".* FROM \"students\" WHERE \"students\".\"name\" = 'Lynn'"

When we use #to_sql frequently, we can be more familiar with raw SQL.

3. Practice by Blazer gem

Using #to_sql is like a learning process of input. Output is essential if we would like to be good at writing SQL.

[Blazer](Explore your data with SQL. Easily create charts and dashboards, and share them with your team.) is a Ruby gem.

Explore your data with SQL. Easily create charts and dashboards, and share them with your team.

After installing and configuring it to the application, we can write the raw SQL directly.

Blazer does help my SQL skills a lot.

Photo from: github.com/ankane/blazer

4. Take a quiz from SQLZOO

SQLZOO is a SQL tutorial, which provides many query samples and quizzes that we can try. After learning by imitating and practicing writing SQL, I can finish more and more examination questions in SQLZOO now.

I have a sense of accomplishment during this learning process.

Hope you find this information helpful, also.