主键约束:默认不能为空,唯一
唯一约束:列里面的内容,必须是唯一,不能出现重复情况 为空
外键都是指向另外一张表的主键,唯一约束不能作为其他表的外键,主键一张表只能有一个,唯一约束可以有多个
多表查询:
交叉连接查询 笛卡尔积
select * from product;
select * from category;
笛卡尔积,查出来是俩张表的乘积,查出开的结果没有意义
SELECT * FROM product,category;
--过滤出有意义的数据
select * from product,category where cid =cno;
select * from product as p,category as c where c.cid =p.cno;
--内连接查询
--隐式内连接
select * from product as p,category as c where c.cid =p.cno;
--显示内连接
select * from product p inner join category c on p.cno=c.cid;
区别:隐式内连接--在查询结果的基础上做的where条件过滤
显示内连接--带着条件去查询结果
--左外连接
select * from product p left outer join category c on p p.cno=c.cid;
--右外连接
select * from product p right outer join category c on p.cno=c.cid;
左右外连接简单解释:
两个表: A(id,name) 数据:(1,张三)(2,李四)(3,王五) B(id,name) 数据:(1,学生)(2,老师)(4,校长) 左连接结果: select A.*,B.* from A left join B on A.id=B.id; 1 张三 1 学生 2 李四 2 老师 3 王五 NULL NULL 右链接结果: select A.*,B.* from A right join B on A.id=B.id; 1 张三 1 学生 2 李四 2 老师 NULL NULL 4 校长 **************** 补充:下面这种情况就会用到外连接 比如有两个表一个是用户表,一个是交易记录表,如果我要查询每个用户的交易记录就要用到左外外连接,因为不是每个用户都有交易记录。 用到左外连接后,有交易记录的信息就会显示,没有的就显示NULL,就像上面我举得例子一样。 如果不用外连接的话,比如【王五】没有交易记录的话,那么用户表里的【王五】的信息就不会显示,就失去了查询所有用户交易记录的意义了。 **************** 看一下结果就能明白左右连接的区别了。
--分页查询
每页数据10
起始索引从0
第一页 1
第二页 11
select * from product limit 0,10; 10为一页显示条数 0表示从1开始
起始索引:index 代表显示第几页
每页显示3条数据
startindex =(index-1)*3
--子查询 sql嵌套
select cid from category where cname=‘手机数码‘;
select * from product where cno = 1;
select * from product where cno =(select cid from category where cname=‘手机数码‘);
--右连接
SELECT p.pname,c.cname FROM product p LEFT OUTER JOIN category c ON p.cno=c.cid;