mysql select符合查询_mysql学习-select查询,子查询,联接查询,union,intersect,except联合...

先设定两个表格:

第一个表格user包含:user_id、username、age、sex

第二个表格toy包含:user_id、toyname

普通查询:

查询关键字:AS, SUM, DESC, GROUP BY, ORDER BY, AVG,

MIN, MAX, COUNT, LIMIT;

select * from user as u order by age limit

5;// as 用来做别名, order by

用来排序(从小到大,从大到小是DESC), limit用来取结果的条数。

select sum(age) from

user group by sex; // sum分别求出user中男性年龄的和,还有女性的年龄和,group

by分组。

avg是求平均, min是求最小值,

max是最大值,和sum用法一样

select

count(user_id) from user;

//返回user_id个数,也就是表中人数。

查询所有人的信息,并按照年龄排序:

select * from user order by age;

查询名叫chen的信息:

select * from user where username='chen';

查询年龄为18的人的姓名,并让id从大到小排序

select username from user where age=18 order by user_id

DESC;

子查询:

关键字:IN, NOT IN,

EXISTS, NOT EXISTS。

查询所有拥有toyname为pig的人的姓名:

select username from user where user_id in (select user_id

from toy where toyname='pig');

联接查询:

首先交叉连接:cross join

select u.username, t.toyname from user as u cross join toy as

t;

交叉连接就是把所有第一个表和第二个表的值一一对应

例如:假如第一个表格有5个值,第二个表有4个值,这个结果就应该有20条记录。

内联接:inner join

相等连接:(equijoin)

select u.username, t.toyname from user as u inner join toy as

t on(也可以用where)

u.user_id = t.user_id;

这个的结果就是各自拥有的玩具了。

不等连接:(non-equijoin)

select u.username, t.toyname from user as u inner

join toy as ton(也可以用where)u.user_id

<> t.user_id  order

by u.username;

这个的结果是各自没有的玩具

自然连接:(natural join)

这个是有在连接的两个表格中的列名称相等的时候才能用。

select u.username, t.toyname from user as u natural join toy

as t;

和上面的相等连接的结果是一样的。

外连接:outer join

左外联接、右外联接比较相似:left outer join ; right outer join;

select u.usrename, t.toyname from user u inner join toy t

where u.user_id = t.user_id;

这个是查询用户姓名和他所拥有的玩具名字

select u.username, t.toyname from user u left outer join toy t

where u.user_id = t.user_id;

这个是以左表(user)为基准,来查询所有用户姓名和他所拥有的玩具名字。

select u.username, t.toyname from user u right outer join toy

t where u.user_id = t.user_id;

这个是以右表(toy)为基准,来查询所有玩具的拥有者姓名,对于没有拥有者的为NULL

联合:UNION,

INTERSECT, EXCEPT

联合查询就是合并几次的查询结果到一张表里

select user_id from user union select user_id from toy order

by user_id;

联合的两个查询语句的列必须相同, union可以连接多个, 假如排序在最后一条语句后面加order

by;(重复自动去除)

union all:

select user_id from user

union all select user_id from toy order by user_id;

和union的运作方式一样,就是union

all的结果里会返回所有值,而不是每个值的复制,包裹重复的也会列出来。

用union来创建表格:

create table m_union as select user_id from user union select

user_id from toy;

INTERSECT,EXCEPT

INTERSECT是交集,EXCEPT是差集的意思

select user_id from user intersect select user_id from

toy;

就是返回这两个select查询相同的部分.(这里就是有玩具的孩子的user_id)

select user_id from user except select user_id from toy;

就是返回第一个select 减去第二个select 结果的部分。(这里就是没有玩具的孩子的user_id)

大致先这么多,以后再说联接转换子查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值