SQL怎么连接查询2个表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL怎么连接查询2个表?相关的知识,希望对你有一定的参考价值。

参考技术A

使用where语句进行查询,如:

select Emp.E_Id,Company.C_OraName from Emp,Company where Companey.C_Id=Emp.C_Id

但是往往会碰到比较复杂的语句,这时候使用where就不太合适了,其实SQL可以用较为直接的形式进行连接操作,可以在From子句中以直接的形式指出:

select top 10 E_Id,E_Name,C_Name 

from 

Emp join Companey on Companey.C_Id=Emp.C_Id 

where 

E_Id not in (select top 20 E_Id from Emp order by  E_Id  asc) 

order by E_Id asc

//查询表Emp中第21到第30条数据以升序排列,其中C_Name来自于另一个表

扩展资料:

SQL查询语句

1、获取当前数据库中的所有用户表select Name from sysobjects where xtype='u' and status>=0

2、获取某一个表的所有字段select name from syscolumns where id=object_id('表名')select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')

3、查看与某一个表相关的视图、存储过程、函数select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

4、查看当前数据库中所有存储过程select name as 存储过程名称 from sysobjects where xtype='P'

5、查询用户创建的所有数据库select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')

或者select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

6、查询某一个表的字段和数据类型select column_name,data_type from information_schema.columnswhere table_name = '表名'

使用 1 个 SQL 查询连接 3 个表,并找到为每个客户群产生最多收入的产品类别

【中文标题】使用 1 个 SQL 查询连接 3 个表,并找到为每个客户群产生最多收入的产品类别【英文标题】:Use 1 SQL query to join 3 tables and find the category of products that generates the most revenue for each customer segment 【发布时间】:2021-07-14 22:57:46 【问题描述】:

我正在使用 SQLite3 进行以下查询。

我有一个名为“产品”的表,如下所示:

我有一个名为“事务”的表,如下所示:

我有一个名为“segments”的表格,如下所示:

对于每个活跃的细分,我想找到产生最高收入的类别。

我认为我知道如何在 3 个不同的查询中做到这一点。

create table table1 as
SELECT s.seg_name, p.category, t.item_qty * t.item_price as revenue
from segments s
JOIN
transactions t
on s.cust_id = t.cust_id
JOIN products p
on p.prod_id = t.prod_id
where s.active_flag = 'Y'
order by s.seg_name, p.category
;

create table table2 as
select seg_name, category, sum(revenue) as revenue
from table1
group by seg_name, category;

select seg_name, category, max(revenue) as revenue
from table2
group by seg_name;

如何在 1 个查询中做到这一点

【问题讨论】:

【参考方案1】:

这是一种方法:

select seg_name,category,revenue
from 
(
SELECT
    s.seg_name,
    p.category,
    sum(t.item_qty * t.item_price) as revenue,
    rank() over (partition by seg_name order by sum(t.item_qty * t.item_price) desc) rn 
from
    segments s
    JOIN transactions t on s.cust_id = t.cust_id
    JOIN products p on p.prod_id = t.prod_id
where
    s.active_flag = 'Y'
group by seg_name, p.category
) t
where rn = 1

【讨论】:

这行得通!但是,如何在最终输出中省略排名列(rn)的显示? @Iterator516 是的,别名错误,还用您用于记录的 dbms 标记您的问题 抱歉 - 我不知道我使用的是什么 DBMS。有人只是将 .db 文件发送给我。我将它上传到sqliteonline.com,并使用该接口运行 SQL。

以上是关于SQL怎么连接查询2个表?的主要内容,如果未能解决你的问题,请参考以下文章

sql 查询连接多个表 - 太慢(8 个表)

用于连接 5 个表的 SQL 查询 [重复]

SQL 外连接 2 个表

如何通过单个 sql 查询连接 3 个表?

SQL 命令未正确结束尝试使用查询连接 3 个表

SQL - 内连接 2 个表,但如果 1 个表为空,则返回所有表