1、交叉连接查询(笛卡尔积)
1.1 交叉连接查询product,category两张表中数据(无条件)
select * from product,category;
查询出来的是两张表的乘积,查询出来的数据没有意义
1.2 过滤出有意义的数据
select * from product,category where cno=cid;
1.3 加上别名
select * from product as p,category as c where p.cno=c.cid;
或
select * from product p,category c where p.cno=c.cid;
2、内连接查询
2.1 隐式内连接
select * from product p,category c where p.cno=c.cid;
2.2 显式内连接
select * from product p inner join category c on p.cno=c.cid;
3、外连接查询
3.1 左外连接
将左表的数据全部查询出来,如果右表中没有对应的数据,用null代替
数据准备
insert into product values(null,'耐克',1000,null);
左外连接查询
select * from product p left outer join category c on p.cno=c.cid;
3.2右外连接
将右表的数据全部查询出来,如果左表中没有对应的数据,用null代替
数据准备
insert into category values(100,'电脑办公','电脑....');
右外连接查询
select * from product p right outer join category c on p.cno=c.cid;
4、分页查询
limit 第一个参数,第二个参数;
第一个参数是索引,第二个参数是显示的个数。
练习:
- 每页的数据3
- 起始索引从
- 第一页:0
- 第二页:3
使用分页查询第一页
select * from product limit 0,3;
查询第二页
select * from product limit 3,3;
代码计算:
起始索引:index代表显示第几页 页数从1开始
每页显示3条数据:startindex = (index-1)*3
5、子查询
5.1 查询分类名称为手机数码的所有商品
select * from product where cno=(select cid from category where cname='手机数码');
5.2 查询出(商品名称、商品分类名称)信息
左连接方式
select p.pname,c.cname from product p left outer join category c on p.cno=c.cid;
子查询
select pname,(select cname from category c where p.cno=c.cid) from product p;