达梦数据库
达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。达梦数据库管理系统的最新版本是8.0版本,简称DM8。
DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM8产品的品质。
高级查询
多表联查
1.笛卡尔集查询
select 列名列表 from 表 1,表 2;
2. 内联接查询
select 列名列表 from 表 1,表 2 where 两表关联列条件表达式;
select 列名列表 from 表 1 inner join on 两表关联列条件表达式;
3. 外联接查询
a) 左外联接查询
select 列名列表 from 表 1 left outer join 表 2 on 两表关联列条件表达
b) 右外联接查询
select 列名列表 from 表 1 right outer join 表 2 on 两表关联列条件表达式;
c) 全联接查询
select 列名列表 from 表 1 full join 表 2 on 两表关联列条件表达式;
子查询
- where 子句子查询: 将一个查询的结果作为另一个查询(更新)操作的条件
select 列名列表 from 表名 where 条件列 = | in | not in (
子查询
) [条件… 其他];
- from 子句子查询: 将一个查询的结果看做一张虚拟表提供给其他查询使用
select 列名列表 from (
子查询
) 临时表名 [条件… 其他];
- select 子句子查询: 将一个查询的结果和其他查询的结果进行组合
select 列名列表,(
子查询
) from 表名 [条件… 其他];
示例
- 使用多表内联接(两种方式)查询用户手机号码、密码、注册时间、昵称信息
select u.phone,u.password,b.nick_name,b.reg_date,b.phone,
u.phone,b.phone
from i_user u inner join i_basic b
on u.phone=b.phone;
select u.phone,u.password,b.nick_name,b.reg_date,b.phone,
u.phone,b.phone
from i_user u,i_basic b
where u.phone=b.phone;
2. 查询用户手机号、昵称、下单时间、订单商品标题、商品数量、总价等信息
select b.phone,b._name,g.goods_title,g.ammount,g.price
from i_basic b,i_cart c,i_goods g
where b.phone=c.phone and g.goods_id=c.goods_id
3.查询显示所有类型的商品,如果某个类型没有对应的商品则显示为空
select *from i_goods g
left outer join i_category ca
on g.category_id=ca.category_id
4. 请用子查询查找年龄最小的用户的基本信息
select *from i_basic where birthday in(
select max(birthday) from i_basic
);
5. 请用子查询查找所有商品以及该商品所属的一级类型名称
select goods_id,goods_title,(
select category_name from i_category where
category_id=(
select parent_id from i_category
where category_id=g.category_id
)
) 一级类型名称 from i_goods g;
6. 分页查询订单编号、用户身份证号、商品名称、商品数据量、总价,要求每页显示 7 条,显示第 5 页的数据
select o.order_id,b.id_card,(
select goods_title from i_goods where goods_id=o.goods_id),
o.ammount,o.sum_price from i_order o,i_basic b
where o.phone=b.phone limit 28,7;
小结
能用多表联查方式实现的查询使用子查询一定能够实现,但是使用子查询实现的查询使用多表联查不一定能够实现,在实际项目业务中根据业务需求灵活使用多表联查和子查询。