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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值