|
27 | 27 | $ go get github.com/teacat/rushia/v2
|
28 | 28 | ```
|
29 | 29 |
|
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 |
| - |
112 | 30 | ## 使用方式
|
113 | 31 |
|
114 | 32 | Rushia 的使用方式十分直覺與簡易,類似基本的 SQL 指令集但是更加地簡化了。
|
@@ -639,7 +557,74 @@ rushia.NewQuery("Users").SetQueryOption("LOW_PRIORITY", "IGNORE").Insert(data)
|
639 | 557 | // Gives: INSERT LOW_PRIORITY IGNORE INTO Users ...
|
640 | 558 | ```
|
641 | 559 |
|
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 | +## 相關連結 |
643 | 628 |
|
644 | 629 | 這裡是 Rushia 受啟發,或是和資料庫有所關聯的連結。
|
645 | 630 |
|
|
0 commit comments