目录
联合查询 子查询 分页查询
联合查询
联合查询是指将多个查询结果合并成一个结果集(二维表),通常出现在统计分析中。
语法:
查询语句1
UNION
查询语句2
UNION
...
查询语句N
注意:
1.所有查询语句的返回结果的列数必须相等
2.每列的数据类型必须一致,【查询语句1中字段列表的类型必须和查询语句2中的字段列表类型对应且一致】
代码实例:
SELECT user_id,name,sex,birthday,age FROM b_user
UNION
SELECT 0,'合计','','',SUM(age) FROM b_user;
子查询
所谓子查询是指嵌套在另一个SQL语句内部的查询语句。
子查询分类:
按结果及行数分:
1、 标量子查询(单行子查询:结果集只有一行一列)
2、 列子查询(多行子查询:结果集多行一列)
3、 行子查询(结果集有多行多列)
4、 表子查询(结果集有多行多列)
按出现位置分:
1、 SELECT 后面:只能出现标量子查询
2、 FROM 后面:表子查询(查询结果必须起别名)
3、 WHERE|HAVING:支持标量子查询,列子查询,行子查询
4、 EXISTS后面:支持表子查询
代码实例:
查询订单信息,并显示用户姓名
SELECT a.*,(SELECT name FROM b_user WHERE user_id=a.user_id)
FROM b_order a;
查询所有用户信息
SELECT * FORM b_user;
SELECT * FROM (SELECT * FROM b_user) a;
查询李四购买的订单信息
SELECT *
FROM b_order
WHERE user_id=(SELECT user_id FROM b_user WHERE name='李四');
关键字
IN子句
查询平台购买过商品的用户(查询用户表,只要用户的user_id在b_order表中,满足条件)
SELECT *
FROM b_user
WHERE user_id
IN (SELECT user_id FROM b_order);
查询未在平台购买过商品的用户
SELECT *
FROM b_user
WHERE user_id
NOT IN(SELECT user_id FROM b_order);
ANY|SOME
t1中有5条记录,每一行的s1去和(select s1 from t2)每一行s1去比较,只要有t1中的s1大于t2中的任意一个s1,那么当前行满足查询条件
SELECT s1
FROM t1
WHERE s1>ANY|SOME (SELECT s1 FROM t2);
ALL
t1中有5条记录,每一行的s1去和(select s1 from t2)每一行s1去比较,必须t1中的s1大于t2中的所有的s1,那么当前行满足查询条件
SELECT s1 FROM t1 WHERE s1 > ALL(select s1 FROM t2);
EXISTS
SELECT *
FROM b_user
EXISTS (SELECT * FROM b_order WHERE order_id>10);
select * from b_order where order_id>10有返回结果,执行select* from b_user;
select * from b_order where order_id>10没有返回结果,执行select* from
b_user; 返回空
分页查询
如果数据量过大(100亿),如果一次性显示10亿条数据,(100亿条数据本身从数据库中读取时慢【分库 分表】,将100亿条新闻展示在网页的过程也是很慢的)
手工分页
百度新闻、微商城、淘宝这些根据滚动条的位置来刷新数据。
滚动条分页
基础语法:
SELECT 查询字段列表
FROM 表名
WHERE 筛选条件
GROUP BY 分组列表
HAVING 筛选条件
ORDER BY 排序列表
LIMIT offset,size;
offset:代表查询的启始索引,从0开始
size:你需要显示的条数
注意:如果offset是从0开始,可以省略
查询前2条数据
SELECT * FROM b_user LIMIT 0,2;
如果offset为0
SELECT * FROM b_user LIMIT 2;
注意:
在SQL Server中使用top关键字进行分页;所谓top 7,代表查询前7条记录。