SQL查询,不带“ on”子句的联接,某些带“ on”子句的联接

时间:2019-09-16 23:55:24

标签: sql

我需要确认此查询正在执行我认为的操作。今天,我了解了这种使用逗号联接表的“老派”方法-并且它们没有指定子句。但是,其他一些表也已加入并且确实存在子句。这是查询:

SELECT a.Col1, a.Col2, b.Col3
FROM b, a
JOIN c ON c.Name = a.Name
AND c.ID = a.ID

到目前为止,根据我的研究,我的理解是逗号表示交叉连接,因此不需要列相等说明符(“ on”子句),因为交叉连接只是将第一张表中的每一行连接到表中的每一行。第二张桌子。

...因此,当为表c应用联接时,是在交叉联接之​​前还是之后应用这些联接?

使用“内部联接”,“交叉联接”而不是逗号的重写示例是什么?

1 个答案:

答案 0 :(得分:1)

编写查询的正确方法是:

public static string HideAllButFirstAndLast(string word)
{
    if (word == null) return null;
    if (word.Length < 4) return new string('*', word.Length);
    return word[0] + new string('*', word.Length - 2) + word[word.Length - 1];
}

private static void Main()
{
    Console.WriteLine("Enter a sentence: ");
    var sentence = Console.ReadLine();

    Console.WriteLine("Enter a comma-separated list of censored words:");
    var censoredWords = Console.ReadLine()
        .Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)
        .Select(word => word.Trim())
        .ToList();

    // Split sentence into words, replace words as needed, and join the words again
    sentence = string.Join(" ", sentence.Split().Select(word =>
        censoredWords.Contains(word, StringComparer.OrdinalIgnoreCase)
            ? HideAllButFirstAndLast(word)
            : word));

    Console.WriteLine(sentence);

    GetKeyFromUser("\n\nDone! Press any key to exit...");
}

没有必要学习逗号。它们已过时,不应使用。