Created
June 26, 2025 15:12
-
-
Save omavi/ea1bb21918b932af4f10d85316c77af3 to your computer and use it in GitHub Desktop.
Knex query building example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import knex from "knex"; | |
// Create a knex instance purely for query building (no database connection) | |
const queryBuilder = knex({ client: "pg" }); // We specify a client but don't connect | |
// Example 1: Simple SELECT query | |
const selectQuery = queryBuilder | |
.select("id", "name", "email", "created_at") | |
.from("users") | |
.where("active", true) | |
.andWhere("age", ">", 18) | |
.orderBy("created_at", "desc") | |
.limit(10); | |
console.log("π SELECT Query:"); | |
console.log(selectQuery.toString()); | |
console.log(""); | |
// Example 2: JOIN query | |
const joinQuery = queryBuilder | |
.select("u.name", "u.email", "p.title as post_title", "p.content") | |
.from("users as u") | |
.leftJoin("posts as p", "u.id", "p.user_id") | |
.where("u.active", true) | |
.andWhere("p.published", true) | |
.orderBy("p.created_at", "desc"); | |
console.log("π JOIN Query:"); | |
console.log(joinQuery.toString()); | |
console.log(""); | |
// Example 3: INSERT query | |
const insertQuery = queryBuilder | |
.insert({ | |
name: "John Doe", | |
email: "[email protected]", | |
age: 25, | |
created_at: queryBuilder.fn.now(), | |
}) | |
.into("users") | |
.returning(["id", "name", "email"]); | |
console.log("β INSERT Query:"); | |
console.log(insertQuery.toString()); | |
console.log(""); | |
// Example 4: UPDATE query | |
const updateQuery = queryBuilder | |
.table("users") | |
.update({ | |
last_login: queryBuilder.fn.now(), | |
login_count: queryBuilder.raw("login_count + 1"), | |
}) | |
.where("id", 123) | |
.andWhere("active", true); | |
console.log("βοΈ UPDATE Query:"); | |
console.log(updateQuery.toString()); | |
console.log(""); | |
// Example 5: Complex query with subquery | |
const subQuery = queryBuilder | |
.select("user_id") | |
.from("posts") | |
.where("published", true) | |
.groupBy("user_id") | |
.having(queryBuilder.raw("count(*) > ?", [5])); | |
const complexQuery = queryBuilder | |
.select("*") | |
.from("users") | |
.whereIn("id", subQuery) | |
.andWhere("created_at", ">", "2023-01-01"); | |
console.log("π§© Complex Query with Subquery:"); | |
console.log(complexQuery.toString()); | |
console.log(""); | |
// Example 6: Aggregate query | |
const aggregateQuery = queryBuilder | |
.select("category") | |
.count("* as total_posts") | |
.avg("views as avg_views") | |
.max("created_at as latest_post") | |
.from("posts") | |
.where("published", true) | |
.groupBy("category") | |
.having("total_posts", ">", 10) | |
.orderBy("total_posts", "desc"); | |
console.log("π Aggregate Query:"); | |
console.log(aggregateQuery.toString()); | |
console.log(""); | |
// Example 7: DELETE query | |
const deleteQuery = queryBuilder | |
.del() | |
.from("users") | |
.where("active", false) | |
.andWhere("last_login", "<", "2022-01-01"); | |
console.log("ποΈ DELETE Query:"); | |
console.log(deleteQuery.toString()); | |
console.log(""); | |
console.log("β All queries generated successfully using Knex query builder!"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Output: