为我的JAVA应用程序提供SQL查询帮助

时间:2016-03-29 23:25:28

标签: mysql sql database phpmyadmin

我不是一个SQL人,所以请原谅我以前曾经问过类似的东西。我甚至不确定我需要搜索什么来学习这个。因为一旦我认为我可以证明这一点,我只需要做这样的事情。

我正在编写我的第一个需要与在线数据库交谈的Android应用程序之一,并且已成功编写了几个与我的应用程序配合良好的SQL查询,但这一点对我的基本知识来说有点复杂。 / p>

下面我提供了一个我需要的样本,我认为至少具有SQL基础知识的人可以理解这些内容。我想知道是否有任何善良的灵魂能够帮助解决查询或让我对我需要做的事情有所了解。提前谢谢!

伪样本

SELECT * 
FROM events 
WHERE user_has_event.user_user_id = user.user_id AND user_has_event.attendance = 1 OR 2
JOIN attendance

以下是我的表格的基本视觉效果(没有用户表格):

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|
----------------------------------------------
|        |          |             |          |   

2 个答案:

答案 0 :(得分:1)

您可以类似地添加USER表格......但是对于您请求的基本输出,请参阅以下内容

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

答案 1 :(得分:1)

由于您对SQL的了解是基本的,所以我会在Andy的答案中进一步扩展(好吧,事实证明,相当多)。首先,t1t2不是必需的,但是方便。您可以直接参考表格,如果字段名称是唯一的,则不必这样做。你可以这样做:

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

正如你所看到的,这是相当冗长乏味的。因此,当您第一次引用表时,可以使用Andy所做的缩写立即跟随它,实际上通常认为这是最佳实践。现在,你也可以这样做:

SELECT
event_id,
event_name,
event_society,
attendance
FROM
events
INNER JOIN user_has_event ON event_id = event_event_id

您可以避免这种情况,因为所有字段名称在SELECT语句访问的表中都是唯一的。由于这通常不是真的,因此它不是一个好主意,因为它很容易错过一个模糊的引用。安迪是最好的方式。现在,您可能已经不再使用不同的字段名称,因为您不知道可以使用Table.Field语法引用该表。使用相同的字段名称通常更清楚;不同的人对此有不同的看法。我通常只使用" ID"对于每个表中的主键。这是有效的,因为您可以通过使用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

现在,您已将所选字段的名称与结果中字段的名称分离,这样可以避免头痛。一个重要的原则是存储数据的方式和格式化数据输出的方式应该松散耦合。您不希望考虑如何使用输出数据来决定如何命名字段,因此您需要了解这些内容。

现在,让我们假装你也有一个User表(你可能会这样做)。让我们说它看起来像这样(它可能不会):

User
    ID
    FirstName
    LastName
    OtherStuff

现在,我们将修改UserEvent表,以便在User表中包含一个外键:

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相同,INNER JOIN是最常见的连接类型,表示两组的交集。还有LEFT,RIGHT和(有时)OUTER连接。我通常只说JOIN而不是INNER JOIN;再一次,不同的人对此有不同的看法。一致性是这里最重要的原则。