I sometimes informally teach new hires on my team some SQL basics. Honestly the basic concepts are pretty intuitive when you sit down with them, since it's easy to make analogies to other normal life concepts. Indexes are like a table of contents in a book. Joining tables is a cartesian product which you tame by adding filter conditions. That naturally flows into why joining on indexes is more efficient, which leads to understanding table design patterns, and so on.
Then it gets hard when you run into the real life situations, and the endless edge cases and performance tuning that needs to be done in practice. And that takes a long time to get good at.
I sometimes informally teach new hires on my team some SQL basics. Honestly the basic concepts are pretty intuitive when you sit down with them, since it's easy to make analogies to other normal life concepts. Indexes are like a table of contents in a book. Joining tables is a cartesian product which you tame by adding filter conditions. That naturally flows into why joining on indexes is more efficient, which leads to understanding table design patterns, and so on.
Then it gets hard when you run into the real life situations, and the endless edge cases and performance tuning that needs to be done in practice. And that takes a long time to get good at.