Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit 8802656

Browse files
committed
Updated READMEs for complex query
1 parent 7f04d9e commit 8802656

File tree

2 files changed

+136
-88
lines changed

2 files changed

+136
-88
lines changed

README-tw.md

Lines changed: 68 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -27,88 +27,6 @@
2727
$ go get github.com/teacat/rushia/v2
2828
```
2929

30-
## 範例
31-
32-
廢話不多說,讓我們先來點有趣的。
33-
34-
```go
35-
rushia.NewQuery("Users").Select()
36-
// 等效於:SELECT * FROM Users
37-
38-
rushia.NewQuery("Users").Insert(rushia.H{
39-
"Username": "YamiOdymel",
40-
"Password": "test",
41-
})
42-
// 等效於:INSERT INTO Users (Username, Password) VALUES (?, ?)
43-
```
44-
45-
然後再來點刺激的。
46-
47-
```go
48-
jobHistories := rushia.NewQuery("JobHistories").
49-
WhereBetween("DepartmentID", 50, 100).
50-
Select("JobID")
51-
jobs := rushia.NewQuery("Jobs").
52-
WhereIn("JobID", jobHistories).
53-
GroupBy("JobID").
54-
Select("JobID", "AVG(MinSalary) AS MyAVG")
55-
maxAverage := rushia.NewQuery(jobs).
56-
As("SS").
57-
Select("MAX(MyAVG)")
58-
employees := rushia.NewQuery("Employees").
59-
GroupBy("JobID").
60-
Having("Avg(Salary)", "<", maxAverage).
61-
Select("JobID", "AVG(Salary)")
62-
63-
// 等效於:
64-
// SELECT JobID,
65-
// AVG(Salary)
66-
// FROM Employees
67-
// HAVING AVG(Salary) < (SELECT MAX(MyAVG)
68-
// FROM (SELECT JobID,
69-
// AVG(MinSalary) AS MyAVG
70-
// FROM Jobs
71-
// WHERE JobID IN (SELECT JobID
72-
// FROM JobHistories
73-
// WHERE DepartmentID BETWEEN 50
74-
// AND 100
75-
// )
76-
// GROUP BY JobID) AS SS)
77-
// GROUP BY job_id;
78-
79-
agents := rushia.NewQuery("Agents").
80-
WhereValue("Commission", "<", 0.12).
81-
Select()
82-
customers := rushia.NewQuery("Customers").
83-
WhereValue("Grade", "=", 3).
84-
WhereValue("CustomerCountry", "<>", "India").
85-
WhereValue("OpeningAmount", "<", 7000).
86-
WhereExists(agents).
87-
Select("OutstandingAmount")
88-
orders := rushia.NewQuery("Orders").
89-
WhereValue("OrderAmount", ">", 2000).
90-
WhereValue("OrderDate", "<", "01-SEP-08").
91-
WhereValue("AdvanceAmount", "<", NewExpr("ANY (?)", customers)).
92-
Select("OrderNum", "OrderDate", "OrderAmount", "AdvanceAmount")
93-
94-
// 等效於:
95-
// SELECT OrderNum,
96-
// OrderDate,
97-
// OrderAmount,
98-
// AdvanceAmount
99-
// FROM Orders
100-
// WHERE OrderAmount > 2000
101-
// AND OrderDate < '01-SEP-08'
102-
// AND AdvanceAmount < ANY (SELECT OutstandingAmount
103-
// FROM Customers
104-
// WHERE Grade = 3
105-
// AND CustomerCountry <> 'India'
106-
// AND OpeningAmount < 7000
107-
// AND EXISTS (SELECT *
108-
// FROM Agents
109-
// WHERE Commission < 0.12));
110-
```
111-
11230
## 使用方式
11331

11432
Rushia 的使用方式十分直覺與簡易,類似基本的 SQL 指令集但是更加地簡化了。
@@ -639,7 +557,74 @@ rushia.NewQuery("Users").SetQueryOption("LOW_PRIORITY", "IGNORE").Insert(data)
639557
// Gives: INSERT LOW_PRIORITY IGNORE INTO Users ...
640558
```
641559

642-
# 相關連結
560+
## 複雜場景範例
561+
562+
```go
563+
jobHistories := rushia.NewQuery("JobHistories").
564+
WhereBetween("DepartmentID", 50, 100).
565+
Select("JobID")
566+
jobs := rushia.NewQuery("Jobs").
567+
WhereIn("JobID", jobHistories).
568+
GroupBy("JobID").
569+
Select("JobID", "AVG(MinSalary) AS MyAVG")
570+
maxAverage := rushia.NewQuery(jobs).
571+
As("SS").
572+
Select("MAX(MyAVG)")
573+
employees := rushia.NewQuery("Employees").
574+
GroupBy("JobID").
575+
Having("Avg(Salary)", "<", maxAverage).
576+
Select("JobID", "AVG(Salary)")
577+
578+
// 等效於:
579+
// SELECT JobID,
580+
// AVG(Salary)
581+
// FROM Employees
582+
// HAVING AVG(Salary) < (SELECT MAX(MyAVG)
583+
// FROM (SELECT JobID,
584+
// AVG(MinSalary) AS MyAVG
585+
// FROM Jobs
586+
// WHERE JobID IN (SELECT JobID
587+
// FROM JobHistories
588+
// WHERE DepartmentID BETWEEN 50
589+
// AND 100
590+
// )
591+
// GROUP BY JobID) AS SS)
592+
// GROUP BY job_id;
593+
594+
agents := rushia.NewQuery("Agents").
595+
WhereValue("Commission", "<", 0.12).
596+
Select()
597+
customers := rushia.NewQuery("Customers").
598+
WhereValue("Grade", "=", 3).
599+
WhereValue("CustomerCountry", "<>", "India").
600+
WhereValue("OpeningAmount", "<", 7000).
601+
WhereExists(agents).
602+
Select("OutstandingAmount")
603+
orders := rushia.NewQuery("Orders").
604+
WhereValue("OrderAmount", ">", 2000).
605+
WhereValue("OrderDate", "<", "01-SEP-08").
606+
WhereValue("AdvanceAmount", "<", NewExpr("ANY (?)", customers)).
607+
Select("OrderNum", "OrderDate", "OrderAmount", "AdvanceAmount")
608+
609+
// 等效於:
610+
// SELECT OrderNum,
611+
// OrderDate,
612+
// OrderAmount,
613+
// AdvanceAmount
614+
// FROM Orders
615+
// WHERE OrderAmount > 2000
616+
// AND OrderDate < '01-SEP-08'
617+
// AND AdvanceAmount < ANY (SELECT OutstandingAmount
618+
// FROM Customers
619+
// WHERE Grade = 3
620+
// AND CustomerCountry <> 'India'
621+
// AND OpeningAmount < 7000
622+
// AND EXISTS (SELECT *
623+
// FROM Agents
624+
// WHERE Commission < 0.12));
625+
```
626+
627+
## 相關連結
643628

644629
這裡是 Rushia 受啟發,或是和資料庫有所關聯的連結。
645630

README.md

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ Install the package via `go get` command.
2727
$ go get github.com/teacat/rushia/v2
2828
```
2929

30-
## NULL values
31-
32-
We suggest you to make all the columns in the database as non-nullable since Golang sucks at supporting NULL fields.
33-
3430
## Usage
3531

3632
Rushia is easy to use, it's kinda like a SQL query but simplized.
@@ -563,7 +559,74 @@ rushia.NewQuery("Users").SetQueryOption("LOW_PRIORITY", "IGNORE").Insert(data)
563559
// Gives: INSERT LOW_PRIORITY IGNORE INTO Users ...
564560
```
565561

566-
# References
562+
## Complex query example
563+
564+
```go
565+
jobHistories := rushia.NewQuery("JobHistories").
566+
WhereBetween("DepartmentID", 50, 100).
567+
Select("JobID")
568+
jobs := rushia.NewQuery("Jobs").
569+
WhereIn("JobID", jobHistories).
570+
GroupBy("JobID").
571+
Select("JobID", "AVG(MinSalary) AS MyAVG")
572+
maxAverage := rushia.NewQuery(jobs).
573+
As("SS").
574+
Select("MAX(MyAVG)")
575+
employees := rushia.NewQuery("Employees").
576+
GroupBy("JobID").
577+
Having("Avg(Salary)", "<", maxAverage).
578+
Select("JobID", "AVG(Salary)")
579+
580+
// Equals:
581+
// SELECT JobID,
582+
// AVG(Salary)
583+
// FROM Employees
584+
// HAVING AVG(Salary) < (SELECT MAX(MyAVG)
585+
// FROM (SELECT JobID,
586+
// AVG(MinSalary) AS MyAVG
587+
// FROM Jobs
588+
// WHERE JobID IN (SELECT JobID
589+
// FROM JobHistories
590+
// WHERE DepartmentID BETWEEN 50
591+
// AND 100
592+
// )
593+
// GROUP BY JobID) AS SS)
594+
// GROUP BY job_id;
595+
596+
agents := rushia.NewQuery("Agents").
597+
WhereValue("Commission", "<", 0.12).
598+
Select()
599+
customers := rushia.NewQuery("Customers").
600+
WhereValue("Grade", "=", 3).
601+
WhereValue("CustomerCountry", "<>", "India").
602+
WhereValue("OpeningAmount", "<", 7000).
603+
WhereExists(agents).
604+
Select("OutstandingAmount")
605+
orders := rushia.NewQuery("Orders").
606+
WhereValue("OrderAmount", ">", 2000).
607+
WhereValue("OrderDate", "<", "01-SEP-08").
608+
WhereValue("AdvanceAmount", "<", NewExpr("ANY (?)", customers)).
609+
Select("OrderNum", "OrderDate", "OrderAmount", "AdvanceAmount")
610+
611+
// Equals:
612+
// SELECT OrderNum,
613+
// OrderDate,
614+
// OrderAmount,
615+
// AdvanceAmount
616+
// FROM Orders
617+
// WHERE OrderAmount > 2000
618+
// AND OrderDate < '01-SEP-08'
619+
// AND AdvanceAmount < ANY (SELECT OutstandingAmount
620+
// FROM Customers
621+
// WHERE Grade = 3
622+
// AND CustomerCountry <> 'India'
623+
// AND OpeningAmount < 7000
624+
// AND EXISTS (SELECT *
625+
// FROM Agents
626+
// WHERE Commission < 0.12));
627+
```
628+
629+
## References
567630

568631
Let's see what inspired Rushia.
569632

0 commit comments

Comments
 (0)