[{"data":1,"prerenderedAt":190},["ShallowReactive",2],{"roadmap-sql":3},{"framework":4,"title":7,"description":8,"model":9},{"slug":5,"name":6},"sql","SQL","SQL Learning Roadmap","A guided path through SQL for technical interviews — work through each topic from fundamentals to advanced.",{"stages":10,"topicCount":187,"subtopicCount":188,"questionCount":189},[11,84,138],{"name":12,"summary":13,"topics":14,"gaps":82,"questionCount":83},"Getting Started","",[15,47,62],{"slug":16,"name":17,"description":18,"subtopics":19,"questionCount":46},"basics","Query Basics","SELECT, WHERE, JOINs and aggregation — the core SQL every interview expects you to know cold.",[20,26,32,37,41],{"path":21,"subtopic":22,"difficulty":23,"questionCount":24,"blogPath":25},"\u002Fsql\u002Fbasics\u002Fjoins","Joins","medium",33,"\u002Fblog\u002Fsql-joins-vs-subqueries-vs-ctes",{"path":27,"subtopic":28,"difficulty":29,"questionCount":30,"blogPath":31},"\u002Fsql\u002Fbasics\u002Fselect-where","SELECT & WHERE","easy",17,"\u002Fblog\u002Fsql-select-where-filtering",{"path":33,"subtopic":34,"difficulty":29,"questionCount":35,"blogPath":36},"\u002Fsql\u002Fbasics\u002Fsorting-limiting","Sorting & Limiting",16,"\u002Fblog\u002Fsql-sorting-limiting-order-by",{"path":38,"subtopic":39,"difficulty":23,"questionCount":30,"blogPath":40},"\u002Fsql\u002Fbasics\u002Faggregation","Aggregation & GROUP BY","\u002Fblog\u002Fsql-aggregation-group-by-having",{"path":42,"subtopic":43,"difficulty":23,"questionCount":44,"blogPath":45},"\u002Fsql\u002Fbasics\u002Fset-operations","Set Operations",15,"\u002Fblog\u002Fsql-set-operations-union-intersect-except",98,{"slug":48,"name":49,"description":50,"subtopics":51,"questionCount":61},"subqueries","Subqueries & CTEs","Scalar, correlated and nested subqueries, IN\u002FEXISTS, derived tables and common table expressions — composing queries out of other queries.",[52,57],{"path":53,"subtopic":54,"difficulty":23,"questionCount":55,"blogPath":56},"\u002Fsql\u002Fsubqueries\u002Fsubqueries","Subqueries",19,"\u002Fblog\u002Fsql-subqueries-correlated-scalar",{"path":58,"subtopic":59,"difficulty":23,"questionCount":55,"blogPath":60},"\u002Fsql\u002Fsubqueries\u002Fctes","Common Table Expressions (CTEs)","\u002Fblog\u002Fsql-ctes-common-table-expressions",38,{"slug":63,"name":64,"description":65,"subtopics":66,"questionCount":81},"window-functions","Window Functions","OVER and PARTITION BY, ranking, LAG\u002FLEAD and frame clauses — per-row analytics that keep every row instead of collapsing groups.",[67,72,76],{"path":68,"subtopic":69,"difficulty":23,"questionCount":70,"blogPath":71},"\u002Fsql\u002Fwindow-functions\u002Fwindow-basics","Window Function Basics",18,"\u002Fblog\u002Fsql-window-functions-vs-group-by",{"path":73,"subtopic":74,"difficulty":23,"questionCount":70,"blogPath":75},"\u002Fsql\u002Fwindow-functions\u002Franking-functions","Ranking Functions","\u002Fblog\u002Fsql-ranking-functions-row-number-rank",{"path":77,"subtopic":78,"difficulty":79,"questionCount":70,"blogPath":80},"\u002Fsql\u002Fwindow-functions\u002Fframes-and-offsets","Frames & Offset Functions","hard","\u002Fblog\u002Fsql-window-frames-lag-lead",54,[],190,{"name":85,"summary":13,"topics":86,"gaps":136,"questionCount":137},"Building Core Skills",[87,109,123],{"slug":88,"name":89,"description":90,"subtopics":91,"questionCount":108},"schema","Schema & Data Types","Data types, CREATE\u002FALTER\u002FDROP, constraints and normalization — designing the tables your queries run against.",[92,96,100,104],{"path":93,"subtopic":94,"difficulty":23,"questionCount":35,"blogPath":95},"\u002Fsql\u002Fschema\u002Fdata-types","Data Types","\u002Fblog\u002Fsql-data-types-choosing-right-type",{"path":97,"subtopic":98,"difficulty":23,"questionCount":44,"blogPath":99},"\u002Fsql\u002Fschema\u002Fddl","DDL — Creating & Altering Tables","\u002Fblog\u002Fsql-ddl-create-alter-drop",{"path":101,"subtopic":102,"difficulty":23,"questionCount":44,"blogPath":103},"\u002Fsql\u002Fschema\u002Fconstraints","Constraints & Integrity","\u002Fblog\u002Fsql-constraints-primary-foreign-unique",{"path":105,"subtopic":106,"difficulty":23,"questionCount":44,"blogPath":107},"\u002Fsql\u002Fschema\u002Fnormalization","Normalization","\u002Fblog\u002Fsql-normalization-1nf-2nf-3nf",61,{"slug":110,"name":111,"description":112,"subtopics":113,"questionCount":122},"dml","Modifying Data","INSERT, UPDATE, DELETE, UPSERT and views — changing the data and exposing it through saved queries.",[114,118],{"path":115,"subtopic":116,"difficulty":23,"questionCount":44,"blogPath":117},"\u002Fsql\u002Fdml\u002Finsert-update-delete","INSERT, UPDATE & DELETE","\u002Fblog\u002Fsql-insert-update-delete-dml",{"path":119,"subtopic":120,"difficulty":23,"questionCount":44,"blogPath":121},"\u002Fsql\u002Fdml\u002Fviews","Views","\u002Fblog\u002Fsql-views-virtual-tables",30,{"slug":124,"name":125,"description":126,"subtopics":127,"questionCount":122},"transactions","Transactions","ACID, COMMIT\u002FROLLBACK\u002FSAVEPOINT, isolation levels and locking — keeping data correct when many things happen at once.",[128,132],{"path":129,"subtopic":130,"difficulty":23,"questionCount":44,"blogPath":131},"\u002Fsql\u002Ftransactions\u002Ftransactions","Transactions & ACID","\u002Fblog\u002Fsql-transactions-acid-commit-rollback",{"path":133,"subtopic":134,"difficulty":79,"questionCount":44,"blogPath":135},"\u002Fsql\u002Ftransactions\u002Fisolation-concurrency","Isolation Levels & Concurrency","\u002Fblog\u002Fsql-isolation-levels-concurrency",[],121,{"name":139,"summary":13,"topics":140,"gaps":185,"questionCount":186},"Going Deeper",[141,154,172],{"slug":142,"name":143,"description":144,"subtopics":145,"questionCount":122},"performance","Indexes & Performance","Indexes, EXPLAIN, query plans and optimization — why a query is slow and how to make it fast.",[146,150],{"path":147,"subtopic":148,"difficulty":23,"questionCount":44,"blogPath":149},"\u002Fsql\u002Fperformance\u002Findexes","Indexes","\u002Fblog\u002Fsql-indexes-btree-performance",{"path":151,"subtopic":152,"difficulty":79,"questionCount":44,"blogPath":153},"\u002Fsql\u002Fperformance\u002Fquery-optimization","Query Optimization","\u002Fblog\u002Fsql-query-optimization-explain",{"slug":155,"name":156,"description":157,"subtopics":158,"questionCount":171},"functions","Built-in Functions","String, numeric, date and conditional functions — the everyday built-ins for transforming values inside a query.",[159,163,167],{"path":160,"subtopic":161,"difficulty":29,"questionCount":44,"blogPath":162},"\u002Fsql\u002Ffunctions\u002Fstring-numeric-functions","String & Numeric Functions","\u002Fblog\u002Fsql-string-numeric-functions",{"path":164,"subtopic":165,"difficulty":23,"questionCount":44,"blogPath":166},"\u002Fsql\u002Ffunctions\u002Fdate-functions","Date & Time Functions","\u002Fblog\u002Fsql-date-time-functions",{"path":168,"subtopic":169,"difficulty":23,"questionCount":44,"blogPath":170},"\u002Fsql\u002Ffunctions\u002Fconditional-null-functions","Conditional & NULL Functions","\u002Fblog\u002Fsql-case-coalesce-null-handling",45,{"slug":173,"name":174,"description":175,"subtopics":176,"questionCount":122},"security","Security & Integrity","GRANT\u002FREVOKE, roles and SQL injection prevention — controlling who can do what and keeping queries safe from untrusted input.",[177,181],{"path":178,"subtopic":179,"difficulty":23,"questionCount":44,"blogPath":180},"\u002Fsql\u002Fsecurity\u002Fpermissions","Permissions & Roles","\u002Fblog\u002Fsql-permissions-roles-grants",{"path":182,"subtopic":183,"difficulty":23,"questionCount":44,"blogPath":184},"\u002Fsql\u002Fsecurity\u002Fsql-injection","SQL Injection","\u002Fblog\u002Fsql-injection-prevention",[],105,9,25,416,1782244083099]