{"id":18955011,"url":"https://github.com/alaca/query-builder","last_synced_at":"2026-03-30T17:30:18.556Z","repository":{"id":41381028,"uuid":"505807297","full_name":"alaca/query-builder","owner":"alaca","description":"Query Builder","archived":false,"fork":false,"pushed_at":"2023-12-04T10:00:24.000Z","size":190,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-14T22:04:51.577Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alaca.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-21T11:07:38.000Z","updated_at":"2023-03-07T05:17:26.000Z","dependencies_parsed_at":"2024-11-08T13:57:13.620Z","dependency_job_id":null,"html_url":"https://github.com/alaca/query-builder","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alaca%2Fquery-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alaca%2Fquery-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alaca%2Fquery-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alaca%2Fquery-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alaca","download_url":"https://codeload.github.com/alaca/query-builder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239952637,"owners_count":19723924,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T13:46:57.367Z","updated_at":"2026-03-30T17:30:18.522Z","avatar_url":"https://github.com/alaca.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Query Builder\n\n- [Select](#select)\n\n- [From](#from)\n\n- [Joins](#joins)\n    - [LEFT Join](#left-join)\n    - [RIGHT Join](#right-join)\n    - [INNER Join](#inner-join)\n    - [Join Raw](#join-raw)\n    - [Advanced Join](#advanced-join)\n\n- [Where Clauses](#where-clauses)\n    - [Where](#where)\n    - [Where IN](#where-in)\n    - [Where BETWEEN](#where-between)\n    - [Where LIKE](#where-like-clauses)\n    - [Where IS NULL](#where-is-null)\n    - [Where Subquery](#where-subquery)\n    - [Where Nested](#where-nested)\n\n- [Ordering, Grouping, Limit \u0026 Offset](#ordering-grouping-limit--offset)\n    - [Ordering](#ordering)\n    - [Grouping](#grouping)\n    - [Limit \u0026 Offset](#limit--offset)\n\n- [Union](#union)\n\n## Select\n\n#### Available methods - select / selectRaw / distinct\n\n```ts\nconst sql = (new QueryBuilder())\n  .select('id', 'name', 'age')\n  .from('table')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT id, name, age\nFROM table\n```\n\n**Column alias**\n\n```ts\nconst sql = (new QueryBuilder())\n  .select({\n    id: 'product_id',\n    title: 'product_title'\n  })\n  .from('table')\n  .getSQL();\n```\n\nGenerated SQL:\n\n```sql\nSELECT id AS product_id, title AS product_title\nFROM table\n```\n\n**Distinct**\n\n```ts\nconst sql = (new QueryBuilder())\n  .distinct()\n  .select('category')\n  .from('table')\n  .getSQL();\n```\n\nGenerated SQL:\n\n```sql\nSELECT DISTINCT category\nFROM table\n```\n\n**selectRaw**\n\n```ts\nconst sql = (new QueryBuilder())\n  .selectRaw('SELECT one, two, three')\n  .from('table')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT one, two, three\nFROM table\n```\n\n**By default, all columns will be selected from table.**\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\n```\n\n## From\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .getSQL();\n```\n\nSet multiple `FROM`\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .from('another_table')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table,\n     another_table\n```\n\n## Joins\n\n#### Available methods - leftJoin / rightJoin / innerJoin / joinRaw / join\n\n### LEFT Join\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .leftJoin('another_table', 'id', 'another_id')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\n         LEFT JOIN another_table ON id = another_id\n```\n\n### RIGHT Join\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .rightJoin('another_table', 'id', 'another_id')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\n         RIGHT JOIN another_table ON id = another_id\n```\n\n### INNER Join\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .innerJoin('another_table', 'id', 'another_id')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\n         INNER JOIN another_table ON id = another_id\n```\n\n### Join Raw\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .joinRaw('LEFT JOIN another_table t ON id = another_id')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\n         LEFT JOIN another_table t ON id = another_id\n```\n\n### Advanced Join\n\n```ts\n  const sql = (new QueryBuilder())\n  .from('table')\n  .join(qb =\u003e {\n    qb\n      .leftJoin('another_table')\n      .on('id', 'another_id')\n      .and('other_column', 'something')\n      .or('other_column', 'other_thing')\n  })\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\n         LEFT JOIN another_table ON id = another_id AND other_column = 'something' OR other_column = 'other_thing'\n```\n\n## Where Clauses\n\n### Where\n\n#### Available methods - where / orWhere\n\n```ts\nconst sql = (new QueryBuilder())\n  .where('id', 10)\n  .from('table')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nWHERE id = 10\n```\n\nSet multiple `WHERE`\n\n```ts\nconst sql = (new QueryBuilder())\n  .where('id', 10)\n  .where('status', 'published')\n  .from('table')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nWHERE id = 10\n  AND status = 'published'\n```\n\n### Where IN\n\n#### Available methods - whereIn / orWhereIn / whereNotIn / orWhereNotIn\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .whereIn('id', [10, 100])\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nWHERE id IN (10, 100)\n```\n\n### Where BETWEEN\n\n#### Available methods - whereBetween / orWhereBetween / whereNotBetween / orWhereNotBetween\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .whereBetween('id', 10, 100)\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nWHERE id BETWEEN 10 AND 100\n```\n\n### Where LIKE Clauses\n\n#### Available methods - whereLike / orWhereLike / whereNotLike / orWhereNotLike\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .whereLike('status', 'something')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nWHERE status LIKE '%something%'\n```\n\n### Where IS NULL\n\n#### Available methods - whereIsNull / orWhereIsNull / whereIsNotNull / orWhereIsNotNull\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .whereIsNull('id')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nWHERE id IS NULL\n```\n\n### Where Subquery\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .whereIn('id', qb =\u003e {\n    qb\n      .select('another_id')\n      .from('another_table')\n      .where('category', 'something')\n  })\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nWHERE id IN (SELECT another_id FROM another_table WHERE category = 'something')\n```\n\n### Where Nested\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .where('status', 'published')\n  .orWhere(qb =\u003e {\n    qb\n      .where('status', 'draft')\n      .where('writing', 'locked')\n  })\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nWHERE status = 'published'\n   OR (status = 'draft' AND writing = 'locked')\n```\n\n## Ordering, Grouping, Limit \u0026 Offset\n\n### Ordering\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .orderBy('id')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nORDER BY id ASC\n```\n\nOrder by multiple columns\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .orderBy('id')\n  .orderBy('column_one', 'DESC')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nORDER BY id ASC, column_one DESC\n```\n\n### Grouping\n\n#### Available methods - groupBy / having / orHaving / havingCount / orHavingCount / havingMin / orHavingMin / havingMax / orHavingMax / havingAvg / orHavingAvg / havingSum / orHavingSum / havingRaw\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .groupBy('id')\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nGROUP BY id\n```\n\n**Having**\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .groupBy('id')\n  .having('id', '\u003e', 10)\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nGROUP BY id\nHAVING id \u003e 10\n```\n\n### Limit \u0026 Offset\n\n#### Available methods - limit / offset\n\n**Limit**\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .limit(10)\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nLIMIT 10\n```\n\n**Offset**\n\n```ts\nconst sql = (new QueryBuilder())\n  .from('table')\n  .limit(10)\n  .offset(10)\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT *\nFROM table\nLIMIT 10 OFFSET 10\n```\n\n## Union\n\n#### Available methods - union / unionAll\n\n**Union**\n\n```ts\nconst builder1 = (new QueryBuilder())\n  .select('something')\n  .from('table');\n\nconst sql = (new QueryBuilder())\n  .select('something_else')\n  .from('another_table')\n  .union(builder1)\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT something_else\nFROM another_table\nUNION\nSELECT something\nFROM table\n```\n\n**Union ALL**\n\n```ts\nconst builder1 = (new QueryBuilder())\n  .select('something')\n  .from('table');\n\nconst builder2 = (new QueryBuilder())\n  .select('another_thing')\n  .from('another_table');\n\nconst sql = (new QueryBuilder())\n  .select('something_else')\n  .from('some_table')\n  .unionAll(builder1, builder2)\n  .getSQL();\n```\n\nGenerated SQL\n\n```sql\nSELECT something_else\nFROM some_table\nUNION ALL\nSELECT something\nFROM table\nUNION ALL\nSELECT another_thing\nFROM another_table\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falaca%2Fquery-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falaca%2Fquery-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falaca%2Fquery-builder/lists"}