Mysql 聚合函数,内外连接 , 视图 ,索引,触发器, 存储过程

2017-01-07 19:03:14来源:CSDN作者:Mrf_w人点击

Mysql  聚合函数,内外连接 ,  视图 ,索引,触发器, 存储过程聚集函数-count语法:select count(*)|count(列名) from 表名 [where 条件]例子:select count(*) '人数' from studentScore where score>80;说明:Count(列名)返回某一列,行的总数聚集函数——sum(列名)   算数值的和语法:select sum(列名) from 表名 [where 条件]例子:select sum(score) from studentscore where score>80;说明:Sum函数返回满足where条件的行的和  如果不写where 算全表的对应列的和聚集函数——avg(列名)   算数值的平均值语法:select avg(列名) from 表名 [where 条件]例子:select avg(score) from studentscore where score>80;说明:avg函数返回满足where条件的行的平均值  如果不写where 算全表的对应列的平均值聚集函数——max(列名)/min(列名)语法:select max(列名) from 表名 [where 条件]select min(列名) from 表名 [where 条件]例子:select max(score) from studentscore where score>80;select min(score) from studentscore where score>80;说明:max/min函数返回满足where条件的行的最大/最小值 如果不写where 算全表的对应列的最大/最小值使用group by 子句对列进行分组SELECT column1, column2,column3.. FROM table [where 条件];group by column having ...说明  having 只能出现在 group by 后面  作用:having 子句 对分组结果进行过滤ORDER BY 子句应位于SELECT语句的结尾。小结:小结 select 语句 : S-F-W-G-H-O 组合 select ... from ... where ... group by... having... order by ... ; 顺序不能改变 !!!外键约束:(必须要现有主表  ,才能添加外键约束)关键字:foreign key语法:边建表边添加约束create table 表名(字段名 类型 约束,foreign key(本表字段) references 主表名(字段(主键)));后期添加约束alter table 子表名 add foreign key(本表字段) references 主表名(字段(主键));多表设计中三种实体关系一对一关系(身份证对人)一对多关系(商品类别对应商品信息)多对多关系(老师对应学生,用户对应权限)多表查询:内连接:两张或两张以上的表进行等值连接  提取出来信息写法一:select * from a inner join b on a.id=b.id;写法二:select * from a,b where a.id = b.id;左外连接说明:以left关键字左边的表 为基本表和右边的表进行匹配  如果右边的表有引用字段的值 返回该值,没有以null填充语法:select * from a left join b on a.id=b.id;右外连接说明:以right关键字右边的表 为基本表和左边的表进行匹配  如果左边的表有引用字段的值 返回该值,没有以null填充语法: select * from a right join b on a.id=b.id;子查询:就是在正常的查询语句中  嵌套一个或多个select查询语句语法:select * from table_name where col =|in|not in|!= (select col from table_name where col = 条件)子查询主要注意:括号查询中出来的结果  如果返回的是多行的值  使用 in 或 not in返回的是一个值,你可以使用 in/=..建议不要嵌套超过三层。(超过三层效率会降低)子查询查询的效率低于连接查询总结sql语句:SQL 语句对大小写不敏感SQL 语句可以写成一行或多行关键字不能简写或分开折行子句通常放在不同的行缩进用于增强可读性 总结优先规则;求值循序:算数运算符连字操作比较操作is [not] null/like/[not] in[not] betweennot 逻辑条件and 逻辑条件or 逻辑条件注意:使用括号来控制顺序联合查询(合并查询)使用union关键字语法:select *|col from table_name [where][...]; unionselect *|col from table_name1 [where][...]; 注意:要查询出来的列要相同才能使用union关键字进行联合查询
连接查询和子查询技术! 1.内联接查询:inner join2.外联接查询:left/rigth3.使用表的别名4.联合查询:union5.子查询
分页查询(Limit关键字使用)sqlserver  select Top 5 * from student;mysqlselect * from student Limit 5;  返回前五行数据(虚拟表)select * from student Limit 5,2;返回前除了五行数据以外的两行数据(虚拟表)数据库的几种技术:视图:为不同的角色显示不同的信息为什么用视图?限制数据访问使得复杂的查询容易提供数据的独立性表现相同数据的不同观察 注意:查询语句有相同列名  应该起别名  才不会报错创建视图:create view 视图的名字 as 查询语句修改视图:create or replace view 视图名字 as 查询语句删除视图:drop view 视图名字;使用视图:select * from 视图名字;查看当前数据库的所有视图:show table status where comment='VIEW';索引:什么是索引?提高查询效率的一种技术、手段目的:提高查询的效率设计原则:1.选择惟一性索引2.为经常需要排序、分组和联合操作的字段建立索引3.为常作为查询条件的字段建立索引4.限制索引的数目5.尽量使用数据量少的索引6.尽量使用前缀来索引7.删除不再使用或者很少使用的索引创建索引的语法:create index 索引的名字 on 表名(列名);删除索引的语法:DROP INDEX 索引的名字 ON 表名;触发器什么是触发器:由一个事件(insert,delete,update)触发了另一个事件当数据库系统执行这些事件时,就会激活触发器执行相应的操作。MySQL从5.0.2版本开始支持触发器如何创建一个触发器:delimiter $$create trigger 触发器的名字 before insert/update/delete on 表名 for each rowbegin//触发的事件end $$delimiter ;删除触发器:DROP TRIGGER 触发器名字;存储过程:一些列sql语句的集合(预编译sql语句)创建的语法:create procedure 名字(参数列表<输入参数,输出参数>)begin//sql语句end例子:DELIMITER $$CREATE PROCEDURE pro_calcu(     IN number1 INT,     IN number2 INT,     OUT result DOUBLE)BEGINIF(number1 IS NOT NULL AND number2 IS NOT NULL) THENIF(number2<>0) THENSET result=number1/number2;ELSESET result=0;END IF;ELSESET result=0;END IF;END $$DELIMITER ;使用存储过程;call 存储过程名称(..)  如果有参数  括号中要放入对应参数 有返回值  要使用@名(定义out 后的名称)来接收向控制台输出:select @result as '别名';事务:要么这个整体都提交,要么都回滚如何使用事物:在存储过程中使用create procedure 名字(参数列表<输入参数,输出参数>)beginstart transaction;-- 开启事务//sql语句if(没有问题)thencommit;elserollback;end if;end

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台