可以,前面加上模式名就行了x0dx0ax0dx0aselect *x0dx0afrom 数据库1.tablename, 数据库2.tablenamex0dx0awhere 链接条件。x0dx0ax0dx0a这是一个在我本机上跑过的例子,没有链接条件,是个笛卡尔积:x0dx0aselect * from hibernate.card_t,wedb.article_t
⑵ mysql 一个表自连查询数据
建表和视图语句:
DROP TABLE IF EXISTS `tab`;
CREATE TABLE `tab` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NULL DEFAULT NULL,
`date` datetime NULL DEFAULT NULL,
`instructions` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`amount` decimal(18, 2) NULL DEFAULT NULL,
`type` tinyint(1) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
create view tab_v as
select
`tab`.`userid` AS `userid`,
date_format( `tab`.`date`, '%Y-%m' ) AS `ym`,
`tab`.`instructions` AS `instructions`,
`tab`.`amount` AS `amount`,
`tab`.`type` AS `type`
from
`tab`
查询语句:
select t0.userid 用户ID,
t0.ym 年月,
t1.cnt 本月收入笔数,
t2.instructions 本月最大收入项目,
t2.amount 本月最大收入金额,
t3.instructions 本月最小收入项目,
t3.amount 本月最小收入金额,
t4.cnt 本月支出笔数,
t5.instructions 本月最大支出项目,
t5.amount 本月最大支出金额,
t6.instructions 本月最小支出项目,
t6.amount 本月最小支出金额,
t7.cnt 本月结余
from (select distinct a.userid,
a.ym
from tab_v a) t0
left join (select a.userid,
a.ym,
count(1) cnt
from tab_v a
where a.type = 2
group by a.userid,
a.ym) t1
on t0.userid = t1.userid
and t0.ym = t1.ym
left join (select a.userid,
a.ym,
a.amount,
group_concat(b.instructions) instructions
from (select a.userid,
a.ym,
max(a.amount) amount
from tab_v a
where a.type = 2
group by a.userid,
a.ym) a,
tab_v b
where a.userid = b.userid
and a.ym = b.ym
and a.amount = b.amount
group by a.userid,
a.ym,
a.amount) t2
on t0.userid = t2.userid
and t0.ym = t2.ym
left join (select a.userid,
a.ym,
a.amount,
group_concat(b.instructions) instructions
from (select a.userid,
a.ym,
min(a.amount) amount
from tab_v a
where a.type = 2
group by a.userid,
a.ym) a,
tab_v b
where a.userid = b.userid
and a.ym = b.ym
and a.amount = b.amount
group by a.userid,
a.ym,
a.amount) t3
on t0.userid = t3.userid
and t0.ym = t3.ym
left join (select a.userid,
a.ym,
count(1) cnt
from tab_v a
where a.type = 1
group by a.userid,
a.ym) t4
on t0.userid = t4.userid
and t0.ym = t4.ym
left join (select a.userid,
a.ym,
a.amount,
group_concat(b.instructions) instructions
from (select a.userid,
a.ym,
max(a.amount) amount
from tab_v a
where a.type = 1
group by a.userid,
a.ym) a,
tab_v b
where a.userid = b.userid
and a.ym = b.ym
and a.amount = b.amount
group by a.userid,
a.ym,
a.amount) t5
on t0.userid = t5.userid
and t0.ym = t5.ym
left join (select a.userid,
a.ym,
a.amount,
group_concat(b.instructions) instructions
from (select a.userid,
a.ym,
min(a.amount) amount
from tab_v a
where a.type = 1
group by a.userid,
a.ym) a,
tab_v b
where a.userid = b.userid
and a.ym = b.ym
and a.amount = b.amount
group by a.userid,
a.ym,
a.amount) t6
on t0.userid = t6.userid
and t0.ym = t6.ym
left join (select a.userid,
a.ym,
sum(case
when type = 1 then
-1 * a.amount
when 2 then
a.amount
end) cnt
from tab_v a
group by a.userid,
a.ym) t7
on t0.userid = t7.userid
and t0.ym = t7.ym
只能做到这个效果了
⑶ MySQL中常见的连接查询方式有哪些
MySQL中常见的连接查询有:等值连接,使用=连接两列数据,所有能够匹配的结果都会被显示出来;内连接,关键字INNER JOIN ON,连接效果等同于等值连接;左连接,关键字LEFT JOIN ON,关键字左侧的表的所有数据均显示,关键字右侧的表匹配内容显示,无对应内容使用NULL填充;右连接,关键字RIGHT JOIN ON,关键字右侧的表的所有数据均显示,关键字左侧的表匹配内容显示,无对应内容使用NULL填充;一般情况下,左连接和右连接可以实现相同的连接效果。如果对这部分内容感兴趣,可以从黑马程序员获取测试相关课程了解一下。
⑷ mysql数据库连接查询的点.啥意思
这就是一种对象的语义,好比面向对象编程,点(.)之前的表示一个对象(可以是表,视图等),点(.)后的表示该对象的属性,整个语义就是调用了某个对象的某属性,在SQL中表现为查询某个表/视图的某个列。
⑸ mysql 数据库关联表查询的问题
是你SQL写错了,你把LEFT JOIN改成RIGHT JION就好了.
⑹ Mysql数据库连表查询问题。
select a_id, a_name
from a
where a_id not in (select a.a_id
from b
left outer join a
on b.a_id = a.a_id
where b.b_price < 1)
⑺ Mysql数据库多表联合查询有几种方法
select * from table1 t1,table2 t2 where t1.id=t2.id
这样就是联合查询啊
left join
right join
inner join
详细的看操作手册啊
⑻ 数据库(比如MYSQL) ,表连结查询与子查询哪个效率高些 为什么
in子查询、exists子查询、连接,效率的探讨
以下是SQL的帮助 (高级查询优化概念)
Microsoft® SQL Server™ 2000 使用内存中的排序和哈希联接技术执行排序、交集、联合、差分等操作。SQL Server 利用这种类型的查询计划支持垂直表分区,有时称其为分列存储。
SQL Server 使用三种类型的联接操作:
嵌套循环联接
合并联接
哈希联接
如果一个联接输入很小(比如不到 10 行),而另一个联接输入很大而且已在其联接列上创建索引,则索引嵌套循环是最快的联接操作,因为它们需要最少的 I/O 和最少的比较。有关嵌套循环的更多信息,请参见了解嵌套循环联接。
如果两个联接输入并不小但已在二者联接列上排序(例如,如果它们是通过扫描已排序的索引获得的),则合并联接是最快的联接操作。如果两个联接输入都很大,而且这两个输入的大小差不多,则预先排序的合并联接提供的性能与哈希联接相似。然而,如果两个输入的大小相差很大,则哈希联接操作通常快得多。有关更多信息,请参见了解合并联接。
哈希联接可以有效处理很大的、未排序的非索引输入。它们对复杂查询的中间结果很有用,因为:
中间结果未经索引(除非已经显式保存到磁盘上然后创建索引),而且生成时通常不为查询计划中的下一个操作进行适当的排序。
查询优化器只估计中间结果的大小。由于估计的值在复杂查询中可能有很大的误差,因此如果中间结果比预期的大得多,则处理中间结果的算法不仅必须有效而且必须适度弱化。
哈希联接使得对非规范化的使用减少。非规范化一般通过减少联接操作获得更好的性能,尽管这样做有冗余之险(如不一致的更新)。哈希联接则减少使用非规范化的需要。哈希联接使垂直分区(用单独的文件或索引代表单个表中的几组列)得以成为物理数据库设计的可行选项。有关更多信息,请参见了解哈希联接。
⑼ mysql数据库表联合查询的问题
结论:UNION 和order by 不能这样直接共存使用。
解决办法:你可以使用嵌套查询方法,转换查询结果,再把结果合并起来。
例如:
select * from (SELECT * FROM table06122 ORDER BY 2 ASC LIMIT 0, 100)
UNION
select * from (SELECT * FROM table06122 ORDER BY 1 ASC LIMIT 0, 90
);
可以完美解决。希望采纳!