Union
UNION 操作符用於合並兩個或多個 SELECT 語句的結果集。
請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。
默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。
另外,UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。
JOIN
有時為了得到完整的結果,我們需要從兩個或更多的表中獲取結果。我們就需要執行 join。
數據庫中的表可通過鍵將彼此聯系起來。主鍵(Primary Key)是一個列,在這個列中的每一行的值都是唯一的。在表中,每個主鍵的值都是唯一的。這樣做的目的是在不重復每個表中的所有數據的情況下,把表間的數據交叉捆綁在一起。
- JOIN: 如果表中有至少一個匹配,則返回行(INNER JOIN 與 JOIN)
- LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
- RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
- FULL JOIN: 只要其中一個表中存在匹配,就返回行
栗子:
let { limit, offset } = _4page(params) let whereString = `` for (let item of ['xxx1', 'xxx2', 'xxx3', 'xxx4', 'xxx5']) { if (params[item]) { if (whereString == ``) { whereString += item + ` like '%` + params[item] + `%'` } else { whereString += `and ` + item + ` like '%` + params[item] + `%'` } } } let sqlString = `select A.xxx1, A.xxx2, A.xxx3, A.yyy, B.id, B.cid, B.xxx4, B.xxx5, B.zzz, B.ctime from ( select * from 表1)A JOIN (select * from 表2)B on A.id = B.cid`
let pageSqlString = `select * from (` + sqlString + `)data order by ctime desc limit :offset, :limit`
let allSqlString = `select count(*) count from (` + sqlString + `)data order by ctime desc`
if (whereString) { pageSqlString = `select * from (` + sqlString + `)data where ` + whereString + ` order by ctime desc limit :offset, :limit`
allSqlString = `select count(*) count from (` + sqlString + `)data where ` + whereString + ` order by ctime desc` }
let replacements = { limit: limit, offset: offset } let allResult = await conn.query(allSqlString, { type: conn.QueryTypes.SELECT })
let pageResult = await conn.query(pageSqlString, { replacements: replacements, type: conn.QueryTypes.SELECT })
推薦網址:https://blog.csdn.net/weixin_41761540/article/details/80729617