MySQL基础知识五

来源:互联网 发布:俄罗斯民族性格 知乎 编辑:程序博客网 时间:2024/06/04 23:19
六大约束
主键约束 primamy key
一个表只有一个主键,且不能空值
唯一约束 unique
表示,一行数据中不能有相同的列值,一个表可以定义多个unique的约束
检查约束 check
输入一列或多列的值的范围,通过逻辑表达式来判断数据的有效性
外键约束 foreign key (ID) references 表名(ID)
连接主表与从表,主表中的一个列,与另一个表中的数据相连接
非空约束 not null
默认约束 default
创建索引的优点是,可以提高查询效率,
缺点是:当基本表,不断地在更新,删除,增加数据时,会提高维护索引的时间
创建新的索引:
create index 索引名 on 表名()
[]代表可以有可无 可以不带前提条件
查询调用方法: select 函数名 from..表名
模糊查询(LIKE)
%百分号,放两边%100% 结果表示模糊包含
放左边%100 结果表示以100开头
放右边100% 结果表示以100结束
_下划线,有几个下划线,表示结果后面可以跟几个字符
select 查表
单表查询
select * from 表名;
查表里面所有数据
select name,id from student where id=12;
查表里面所有id为12的数据,结果要显示名字和id;
select * from student where sname like '%lishi%';
模糊查询,student里面sname带有lishi的全都显示到结果
select sum(sage) from student;#求总数
select avg(sage) from student;#平均值
select *from student order by sdate asc;
按sdate查询出整个表的结果,然后进行升序 默认结果为升序排列
select *from student order by sdate desc;
按sdate查询出整个表的结果,然后进行降序
select scid,avg(sage) avg from student group by scid;
多表查询
*外连接
select cname,sname from student,classes;
查询两个表,两个表之间用逗号隔开
select scid,sname,cname from student,classes where scid=cid;
查询两个表,条件是第一个表的id=第二个表的id;
还有取别名,如果取了别名的话,一定要使用别名
*左连接
 left join用来查询左侧表的全部记录及右测表的连接字段完全相同于左侧表的记录
select cname,count(scid) sum from classes
left join student on student.scid=classes.cid group by cname;
查询calsses 和student里面的名字和所有id的,如果是左id=右id的话,把左边名字都列出来,
右边如果条件吻合的话也列出来,排序cname分几个小组
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。
它的作用是通过一定的规则将一个数据集划分成若干个小的区域
*自连接 
树形结构,存到二维表中 自己先复制一份,
select sname,cname from category c1,category c2 where c1.pid=c2.cid;
*子查询
select playerno   
from players   
where (sex, town) = (  
select sex, town   
from players   
where playerno = 100); 

内外连接示例:
-------------------------------------------------
  a表     id   name     b表     id   job   parent_id   
              1   张3                   1     23     1   
              2   李四                 2     34     2   
              3   王武                 3     34     4       
  a.id同parent_id   存在关系   
--------------------------------------------------    
 1) 内连接   
  select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id       
  
结果是     
  1   张3                   1     23     1   
  2   李四                  2     34     2   


  2)左连接   
  select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id       
  
结果是     
  1   张3                   1     23     1   
  2   李四                  2     34     2   
  3   王武                  null   


 3) 右连接   
  select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id       
 
 结果是     
  1   张3                   1     23     1   
  2   李四                  2     34     2   
  null                       3     34     4   


 
0 0
原创粉丝点击