mysql - 帮助我的 JAVA 应用程序进行 SQL 查询

标签 mysql sql database phpmyadmin

我不是一个很懂 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

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

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

最佳答案

由于您对 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 相同,后者是最常见的连接类型,表示两个集合的交集。还有 LEFT、RIGHT 和(有时)OUTER 连接。我一般只说 JOIN 而不是 INNER JOIN;同样,不同的人对此有不同的感受。一致性是这里最重要的原则。

关于mysql - 帮助我的 JAVA 应用程序进行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36296909/

相关文章:

sql - 为什么这个 mysql 表在日期时间字段中产生 NULL?

php - 特定行上的自举表 ionic

php - 如何在MYSQL中获取不带小数的列值

mysql - 对于典型的 Web 使用,将 MySQL 隔离设置为 “Read Uncommitted”(脏读)是否安全?即使有复制?

javascript - MySQL 选择共享该字段值的所有值

mysql - Laravel 5.4 连接两个表时出错

mysql - SQL只显示有增加趋势的条目

sql - 使用SQL获取未知字符串的模式?

database - 设计数据库表

javascript - node.js 将嵌套 json 字符串转换为嵌套 json 数组