先设定两个表格:
第一个表格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)
大致先这么多,以后再说联接转换子查询