Mysql实例Mysql 聚合函数,内外连接 , 视图 ,索引,触发器, 存储
发布时间:2020-12-12 00:48:13 所属栏目:MySql教程 来源:网络整理
导读:《Mysql实例Mysql 聚合函数,内外连接,视图 ,索引,触发器,存储过程》要点: 本文介绍了Mysql实例Mysql 聚合函数,存储过程,希望对您有用。如果有疑问,可以联系我们。 导读:Mysql 聚合函数,视图,索引,触发器,存储过程聚集函数-count语法:select count(*)
《Mysql实例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] between not 逻辑条件 and 逻辑条件 or 逻辑条件 注意:使用括号来控制顺序 联合查询(合并查询) 使用union关键字 语法: select *|col from table_name [where][...]; union select *|col from table_name1 [where][...]; 注意: 要查询出来的列要相同才能使用union关键字进行联合查询 连接查询和子查询技术! 1.内联接查询:inner join 2.外联接查询:left/rigth 3.使用表的别名 4.联合查询:union 5.子查询 分页查询(Limit关键字使用) sqlserver? select Top 5 * from student; mysql select * 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 row begin //触发的事件 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 ) BEGIN IF(number1 IS NOT NULL AND number2 IS NOT NULL) THEN IF(number2<>0) THEN SET result=number1/number2; ELSE SET result=0; END IF; ELSE SET result=0; END IF; END $$ DELIMITER ; 使用存储过程; call 存储过程名称(..)? 如果有参数? 括号中要放入对应参数 有返回值? 要使用@名(定义out 后的名称)来接收 向控制台输出: select @result as '别名'; 事务:要么这个整体都提交,要么都回滚 如何使用事物: 在存储过程中使用 create procedure 名字(参数列表<输入参数,输出参数>) begin start transaction;-- 开启事务 //sql语句 if(没有问题)then commit; else rollback; end if; end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |