码迷,mamicode.com
首页 > 数据库 > 详细

MySql学习 - 查询/子查询/连接查询/联合查询

时间:2015-03-10 21:34:37      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:mysql   子查询   连接查询   联合查询   

数据库查询

设定两张数据库表

  • 第一个表格user包含:
user_id username age sex
1 Alps1992 22 man
  • 第二个表格toy包含
user_id toyname
1 OnePiece

普通查询:

查询关键字:

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=‘onepiece‘);

联接查询:

首先交叉连接:cross join

select u.username, t.toyname from user as u cross join toy as t;
//交叉连接就是把所有第一个表和第二个表的值一一对应
//例如:假如第一个表格有5个值,第二个表有4个值,这个结果就应该有20条记录。

内联接:inner join

相等连接:(equal join)

select u.username, t.toyname from user as u inner join toy as t on(也可以用where) u.user_id = t.user_id;
//这个的结果就是各自拥有的玩具了。

不等连接:(non-equal join)

select u.username, t.toyname from user as u inner join toy as t on(也可以用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 on (这里不能用where) u.user_id = t.user_id;
//这个是查询用户姓名和他所拥有的玩具名字

select u.username, t.toyname from user u left outer join toy t on u.user_id = t.user_id;
//这个是以左表(user)为基准,来查询所有用户姓名和他所拥有的玩具名字。

select u.username, t.toyname from user u right outer join toy t on 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;
//这样会把user里的user_id和toy表里的user_id的内容都拿出来放到心创建的m_union表格里。

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)

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

MySql学习 - 查询/子查询/连接查询/联合查询

标签:mysql   子查询   连接查询   联合查询   

原文地址:http://blog.csdn.net/alps1992/article/details/44180187

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!