mysql 多表树查询_mysql 单表查询多表查询

1.数据库的核心就是关联,多表查询首先就是要抓住各个表之间的关联部分,两个表联系起来后,再写条件,写查询什么就很简单了

2.and 和 or 之间的关系要搞清楚。

3.基本表达式记住

- 一:单表查询

-- 1:查询单个表的所有数据,显示所有字段

--select * from 表名;

-- select * from member; -- *代表所有字段

-- 2:查询单个表的所有数据库,显示部分字段

--select from < 表名 >;

-- 查询所有的会员信息,显示用户名,手机号,可用余额

-- select RegName,MobilePhone,LeaveAmount from member;

-- 3: 查询部分数据-- where 字句

--select from < 表名 > where 条件表达式1 and/or 条件表达式2...;

-- 条件表达式1:筛选条件

-- =  > < >=  <=  != ==  :比较表达式

-- 查询id为3的会员信息

-- select * from member where id=3;

-- 查询id为3,用户名为大树的信息

-- and :并且,需要满足其中所有条件

-- select * from member where id=3 and RegName='大树';

-- or:或者,只要满足多个条件中一个条件即可

-- select * from member where id=3 or RegName='大树';

-- select * from member where id>10;

--不等于

-- select * from member where id<>10;

-- select * from member where id!=10;.

-- 二:多表查询

对于不同类型的信息放在一个表的缺点:

1.字段过多

2.难以维护

3.表数据庞大

4.数据冗余,重复数据多

既然不同类型的数据放在了不同的表,那原本有联系的数据怎么保持原来的联系呢

设计表的时候两个表之间维持一个关联即可

-- Oracle、MySQL、SQL Server...关系数据库:表与表存在关系、存在联系

-- 笛卡尔积、叉乘  --》结果集(虚表、缓存表)->存在无效数据的

-- select * from member,invest; -- 5964

-- select * from member; -- 42

-- select * from invest; -- 142

-- 幼儿园两个班,交朋友(条件握手)

-- A  B

-- 10 20

-- --只有什么样的数据是有效的?? 通过关联条件:member.Id=invest.MemberID

-- select * from member,invest where member.Id=invest.MemberID;

-- 查询投资金额大于10000的信息,显示用户名、手机号、投资金额、投资时间 -- invest  member

/*

select member.RegName,member.MobilePhone,invest.Amount,invest.CreateTime

from member,invest

where member.id = invest.MemberID -- 条件1:关联条件

and invest.Amount>10000;-- 条件2

*/

-- 别名

/*

select t1.RegName,t1.MobilePhone,t2.Amount,t2.CreateTime

from member as t1,invest as t2

where t1.id = t2.MemberID

and t2.Amount>10000;

*/

/*

select t1.RegName,t1.MobilePhone,t2.Amount,t2.CreateTime

from member t1,invest t2

where t1.id = t2.MemberID

and t2.Amount>10000;

*/

/*

select t1.RegName as  用户名,t1.MobilePhone  as 手机号码,

t2.Amount as  投资金额 ,t2.CreateTime  as 投资时间

from member  as t1,invest  as t2

where t1.id = t2.MemberID

and t2.Amount>10000;

*/

-- 四:排序

-- 查询投资金额大于10000的信息,显示用户名、手机号、投资金额、投资时间 ,按投资金额降序、升序排序

-- 降序:DESC、升序: ASC(默认为ASC)

select t1.Id as 用户id,t1.RegName as  用户名,t1.MobilePhone  as 手机号码,

t2.Amount as  投资金额 ,t2.CreateTime  as 投资时间

from member  as t1,invest  as t2

where t1.id = t2.MemberID

and t2.Amount>10000

order by 投资金额 DESC;

左连接右连接

8644647.html

、select * from girls t1 inner join boys t2 on t1.matchNum = t2.matchNum;

select * from girls t1 join boys t2 on  t1.matchNum = t2.matchNum;

select - from girls cross join boys  //笛卡儿积 叉乘

连接两个语句连接用union,且字段名要相同才可以显示  所以要取别名

select t1.id,t1.girjNum num from girls t1 left join boys t2 on   t1.matchNum = t2.matchNum where t2.id is null

union

select t2.id,t2.boyNum num from girls t1 right  join boys t2 on   t1.matchNum = t2.matchNum where t1.id is null;

子查询

子查询概念:一个select语句嵌套在另一个select 语句中

子查询也可以称为内部查询,而包含子查询的语句又成为外部查询或主查询

子查询可分类:

非相关子查询 :独立于外部查询,子查询只执行一次,执行完将结果传递给外部查询,子查询可以单独运行

相关子查询:依赖于外部查询的数据,外部查询每执行一次,子查询就执行一次

子查询自身可以包含一个或多个子查询  一个查询语句中可以嵌套任意数量的子查询

比较大小

max是纵向比较,GREATEST是横向比较

Greatest(1,2,3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值