我建议您从关注此主题的一些教程开始。对于在SQL中从初级到中级移动的人而言,您的问题并不罕见。 SQLZoo是学习SQL的绝佳资源,因此请考虑以下事项。
在回答你的问题:
1)找到一个重复的所有记录在一个特定的列
有两个步骤在这里:找到重复的记录,并选择那些记录。要了解你应该沿着线做一些重复的记录:
select possible_duplicate_field, count(*)
from table
group by possible_duplicate_field
having count(*) > 1
我们在这里所做的一切选择从一个表,然后我们想检查重复字段分组它。计数函数然后给我一个该组内项目数的计数。 HAVING子句表示我们想要在分组之后进行过滤,以仅显示具有多个条目的组。
这本身就很好,但它并没有给你带有这些值的实际记录。如果您知道重复的值,那么你会这样写:
select * from table where possible_duplicate_field = 'known_duplicate_value'
我们可以使用内选择选择来获得比赛的名单:从链接
select *
from table
where possible_duplicate_field in (
select possible_duplicate_field
from table
group by possible_duplicate_field
having count(*) > 1
)
2)SUM价格在同一查询内表
这是一个简单的两个表之间与这两者的SUM JOIN:
select sum(tableA.X + tableB.Y)
from tableA
join tableB on tableA.keyA = tableB.keyB
您在这里做的是将两个表连接在一起,其中这两个表由关键字段链接。在这种情况下,这是一个自然的连接,它可以像你期望的那样工作(也就是让我从左边的表中得到一切,它在右边表中有一个匹配的记录)。
3)解释4个连接的区别;左,右,外,内
考虑两个表A和B.在这种情况下,“左”和“右”的概念稍微清晰一点,如果您从左到右阅读您的SQL。所以,当我说:
select x from A join B ...
左表是“A”,右表是“B”。现在,当您明确声明“LEFT”SQL语句时,您声明您要加入的两个表中的哪一个是主表。我的意思是:我首先扫描哪张表?顺便说一下,如果你省略了LEFT或RIGHT,那么SQL隐式地使用了LEFT。
对于INNER和OUTER,您声明在其中一个表中不存在匹配项时要执行的操作。 INNER声明您希望主表中的所有内容(如使用LEFT或RIGHT声明的)在辅助表中存在匹配的记录。因此,如果主表包含键“X”,“Y”和“Z”,并且辅助表包含键“X”和“Z”,那么INNER将只返回“X”和“Z”记录两张桌子。
当使用OUTER时,我们说:给我一切从主表和任何匹配次表。因此,在前面的例子中,我们会在输出记录集中获得“X”,“Y”和“Z”记录。但是,应该来自辅助表的键值为“Y”的字段中将存在NULL,因为它不存在于辅助表中。
4)从一台基于SELECT和WHERE条件
这是相当琐碎,我很惊讶你从来没有遇到过的数据复制到另一个。这是在INSERT语句中一个简单的嵌套SELECT(这可能不是由你的数据库的支持 - 如果没有,请尝试下一个选项):
insert into new_table select * from old_table where x = y
这是假设表具有相同的结构。如果你有不同的结构,那么你需要指定列:
insert into new_table (list, of, fields)
select list, of, fields from old_table where x = y
这味道像hw。 –