mysql5

主键约束:默认不能为空,唯一

唯一约束:列里面的内容,必须是唯一,不能出现重复情况 为空

外键都是指向另外一张表的主键,唯一约束不能作为其他表的外键,主键一张表只能有一个,唯一约束可以有多个

多表查询:

交叉连接查询  笛卡尔积

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;

 

 

mysql5

上一篇:【Sql语句】修改数据库表的属性(修改字段名称、属性)


下一篇:关于数据库 SQL 语句性能优化的52 条 策略。