帮助 SQL 查询我的 JAVA 申请
Aid with SQL query for my JAVA application
我不是一个 SQL 人,如果之前有人问过类似的问题,请原谅我。我什至不确定为了学习这个我需要搜索什么。因为我只需要做一次这样的事情,一旦我认为我可以证明问这个问题是合理的。
我正在编写我的第一个 android 应用程序,它需要与在线数据库对话,并且已经成功地编写了几个 SQL 与我的应用程序配合良好的查询,但是这个一个对我的基础知识来说有点复杂。
下面我提供了我需要的示例,我认为至少具有 SQL 基本知识的任何人都可以理解。我想知道是否有任何善良的人能够帮助草拟一个查询或让我对我需要做的事情有一些了解。提前致谢!
伪样本:
SELECT *
FROM events
WHERE user_has_event.user_user_id = user.user_id AND user_has_event.attendance = 1 OR 2
JOIN attendance
这是我的 table 的基本视觉效果(没有用户 table):
Event Table User_has_event Table
----------------------------------- ---------------------------------------
|event_id|event_name|event_society| |user_user_id|event_event_id|attendance|
----------------------------------- ---------------------------------------
| | | | | | | |
这是我想要的结果:
Outcome Table
----------------------------------------------
|event_id|event_name|event_society|attendance|
----------------------------------------------
| | | | |
您可以类似地在 USER table 中添加...但对于您请求的基本输出,请参阅以下内容
SELECT
t1.event_id,
t1.event_name,
t1.event_society,
t2.attendance
FROM
events t1
INNER JOIN user_has_event t2 ON t1.event_id = t2.event_event_id
由于您对 SQL 的了解很基础,我将对 Andy 的回答进行一些扩展(好吧,事实证明,相当多)。首先,t1
和 t2
不是必需的,但很方便。您可以直接引用 table,如果字段名称是唯一的则不必引用。你可以这样做:
SELECT
events.event_id,
events.event_name,
events.event_society,
user_has_event.attendance
FROM
events
INNER JOIN user_has_event ON events.event_id = user_has_event.event_event_id
如您所见,这相当冗长乏味。因此,当您第一次引用 table 时,您可以像 Andy 所做的那样立即在其后加上缩写词,这确实是通常被认为是最佳做法的做法。现在,您也可以这样做:
SELECT
event_id,
event_name,
event_society,
attendance
FROM
events
INNER JOIN user_has_event ON event_id = event_event_id
您可以避免这种情况,因为所有字段名称在您的 SELECT 语句访问的 table 中都是唯一的。由于这通常不是真的,所以这不是一个好主意,因为很容易错过模棱两可的参考。安迪的是最好的方法。现在,您可能已经特地使用了不同的字段名称,因为您不知道可以使用 Table.Field 语法来引用 table。使用相同的字段名通常更清楚;不同的人对此有不同的感受。我通常只使用 "ID" 作为每个 table 中的主键。这是可行的,因为您可以通过使用 Table.Field 来引用字段来解决歧义。
接下来您会发现了解它很有帮助,那就是您可以使用 AS 关键字为输出分配您想要的任何字段名称。假设我这样重命名你的字段:
Event
ID
Name
Society
UserEvent
ID
EventID
Attendance
现在,看看这个:
SELECT
e.ID AS 'Event ID',
e.Name AS 'Event Name',
e.Society AS 'Event Society',
ue.Attendance
FROM
Events e
INNER JOIN UserEvent ue ON e.ID = ue.EventID
现在您已经将所选字段的名称与结果中的字段名称分离,这应该可以让您省去麻烦。一个重要的原则是存储数据的方式和格式化数据输出的方式应该是松耦合的。您不想考虑您希望输出数据的外观来决定您应该如何命名您的字段,因此您需要了解这些内容。
现在,让我们假设您也有一个用户 table(您可能有)。假设它看起来像这样(可能不是):
User
ID
FirstName
LastName
OtherStuff
现在,我们将修改 UserEvent table,以便将外键包含到用户 table:
UserEvent
ID
EventID
UserID
Attendance
现在,看看这个:
SELECT
e.Name AS 'Event Name',
e.Society AS 'Event Society',
u.LastName + ', ' + u.FirstName AS 'User Name',
ue.Attendance
FROM
Events e
JOIN UserEvent ue ON e.ID = ue.EventID
JOIN User u ON u.ID = ue.UserID
除了 WHERE 子句之外,这应该为您提供了基础知识,您可以自己掌握这些基础知识(也可以随意询问有关 WHERE 子句的问题)。
附带说明:JOIN 与 INNER JOIN 相同,是最常见的连接类型,表示两个集合的交集。还有 LEFT、RIGHT 和(有时)OUTER 连接。我一般只说 JOIN 而不是 INNER JOIN;同样,不同的人对此有不同的看法。一致性是这里最重要的原则。
我不是一个 SQL 人,如果之前有人问过类似的问题,请原谅我。我什至不确定为了学习这个我需要搜索什么。因为我只需要做一次这样的事情,一旦我认为我可以证明问这个问题是合理的。
我正在编写我的第一个 android 应用程序,它需要与在线数据库对话,并且已经成功地编写了几个 SQL 与我的应用程序配合良好的查询,但是这个一个对我的基础知识来说有点复杂。
下面我提供了我需要的示例,我认为至少具有 SQL 基本知识的任何人都可以理解。我想知道是否有任何善良的人能够帮助草拟一个查询或让我对我需要做的事情有一些了解。提前致谢!
伪样本:
SELECT *
FROM events
WHERE user_has_event.user_user_id = user.user_id AND user_has_event.attendance = 1 OR 2
JOIN attendance
这是我的 table 的基本视觉效果(没有用户 table):
Event Table User_has_event Table
----------------------------------- ---------------------------------------
|event_id|event_name|event_society| |user_user_id|event_event_id|attendance|
----------------------------------- ---------------------------------------
| | | | | | | |
这是我想要的结果:
Outcome Table
----------------------------------------------
|event_id|event_name|event_society|attendance|
----------------------------------------------
| | | | |
您可以类似地在 USER table 中添加...但对于您请求的基本输出,请参阅以下内容
SELECT
t1.event_id,
t1.event_name,
t1.event_society,
t2.attendance
FROM
events t1
INNER JOIN user_has_event t2 ON t1.event_id = t2.event_event_id
由于您对 SQL 的了解很基础,我将对 Andy 的回答进行一些扩展(好吧,事实证明,相当多)。首先,t1
和 t2
不是必需的,但很方便。您可以直接引用 table,如果字段名称是唯一的则不必引用。你可以这样做:
SELECT
events.event_id,
events.event_name,
events.event_society,
user_has_event.attendance
FROM
events
INNER JOIN user_has_event ON events.event_id = user_has_event.event_event_id
如您所见,这相当冗长乏味。因此,当您第一次引用 table 时,您可以像 Andy 所做的那样立即在其后加上缩写词,这确实是通常被认为是最佳做法的做法。现在,您也可以这样做:
SELECT
event_id,
event_name,
event_society,
attendance
FROM
events
INNER JOIN user_has_event ON event_id = event_event_id
您可以避免这种情况,因为所有字段名称在您的 SELECT 语句访问的 table 中都是唯一的。由于这通常不是真的,所以这不是一个好主意,因为很容易错过模棱两可的参考。安迪的是最好的方法。现在,您可能已经特地使用了不同的字段名称,因为您不知道可以使用 Table.Field 语法来引用 table。使用相同的字段名通常更清楚;不同的人对此有不同的感受。我通常只使用 "ID" 作为每个 table 中的主键。这是可行的,因为您可以通过使用 Table.Field 来引用字段来解决歧义。
接下来您会发现了解它很有帮助,那就是您可以使用 AS 关键字为输出分配您想要的任何字段名称。假设我这样重命名你的字段:
Event
ID
Name
Society
UserEvent
ID
EventID
Attendance
现在,看看这个:
SELECT
e.ID AS 'Event ID',
e.Name AS 'Event Name',
e.Society AS 'Event Society',
ue.Attendance
FROM
Events e
INNER JOIN UserEvent ue ON e.ID = ue.EventID
现在您已经将所选字段的名称与结果中的字段名称分离,这应该可以让您省去麻烦。一个重要的原则是存储数据的方式和格式化数据输出的方式应该是松耦合的。您不想考虑您希望输出数据的外观来决定您应该如何命名您的字段,因此您需要了解这些内容。
现在,让我们假设您也有一个用户 table(您可能有)。假设它看起来像这样(可能不是):
User
ID
FirstName
LastName
OtherStuff
现在,我们将修改 UserEvent table,以便将外键包含到用户 table:
UserEvent
ID
EventID
UserID
Attendance
现在,看看这个:
SELECT
e.Name AS 'Event Name',
e.Society AS 'Event Society',
u.LastName + ', ' + u.FirstName AS 'User Name',
ue.Attendance
FROM
Events e
JOIN UserEvent ue ON e.ID = ue.EventID
JOIN User u ON u.ID = ue.UserID
除了 WHERE 子句之外,这应该为您提供了基础知识,您可以自己掌握这些基础知识(也可以随意询问有关 WHERE 子句的问题)。
附带说明:JOIN 与 INNER JOIN 相同,是最常见的连接类型,表示两个集合的交集。还有 LEFT、RIGHT 和(有时)OUTER 连接。我一般只说 JOIN 而不是 INNER JOIN;同样,不同的人对此有不同的看法。一致性是这里最重要的原则。