***\*MySQL\* ***下 ( 基本操做 )

****MySQL* ***下 ( 基本操做 )

insert into user_auths values(1, ‘martin’, md5(‘123456qweQWE’));**** *#使用内部函数md5 加密,一亿年马老师都无法破解*

*简单查询*

select 模板名 from class 另一个模板名=xxx;**** *#查询表class 中某一个字段的记录*

SELECT field1,field2,…,fieldn FROM tablename; //列出所有的字段,也可用*

SELECT DISTINCT field1,field2,…,fieldn FROM tablename;//某一模板列去重复的查询

select * from class where teacher in (‘Martin’,‘Rock’)**** *;* ****#查询class表中的teacher 域是martin 和Rock 的记录 查询表中teacher 模板含有martin ,Rock 的记录 使用NO T IN 来反向查询 也就是说不在这个集合中的数据

SELECT field1,field2,…,fieldn

FROM tablename WHERE fieldm BETWEEN minvalue AND maxvalue

select * from class where chinese between 80 and 90;**** *#查询成绩表中语文成绩在80 和 90 之间的学员记录* BETWEEN AND 为查询一个区间的关键字可以为时间为条件int数据为条件 不可以以中文字符为条件 NOTBETWEEN AND为反向查询 TBETWEEN OR 表示或的意思这个两个条件符合一个即可 比如 **

select * from class where chinese between xx<80 OR xx>90;或者操做

*LIKE模糊查询*

SELECT teacher FROM class WHERE teacher LIKE ‘%Ma%’;#查询class表中的teacher 域,包含重复记录****%为通配符可匹配0个或多个字符 必须添加通配符或者_(仅可以匹配一个字符); 条件中也可以添加 and 条件 NOT LIKE 取反查找不是以这个的所有数据

*对查询结果排序*

ELECT teacher FROM class WHERE teacher LIKE ‘%Ma%’ ORDER BY teacher ;对查询的结果配许 默认为从小到大排序 【[ASC|DESC]】ASC 升序DESC 降序

*.* *简单分组查询*****

利用group by 模板 来进行分组 这个模板最好是int类型

selsct sum(模板)from 表名;sum求和 对这个模板列求和 所有的数据为一组

selsct sum(模板)from 表名 group by 另一个模板;按照另一个模板来分组 求和 group by 条件 ****注意:****在具体进行分组查询时,分组所依据的字段上的值一定要具有重复值,否则分组没有任何意义。

selsct count(模板)from 表名 group by 另一个模板;求另一个模板的数据分别有几条 记录为空不统计 count(*)记录空值也算一条也进行统计

selsct 模板, avg(模板),avg(模板) from 表名 group by 另一个模板;可统计多个模板的平均值avg 为平均值 统计时忽略null的值

selsct 模板, max(模板),max(模板) from 表名 group by 另一个模板;按照分组来统计最大值 max为最大值

selsct 模板, min(模板),min(模板) from 表名 group by 另一个模板;按照分组来统计最大值 min为最小值

统计记录查询

selsct count(*)GROUP_CONCAT(模板 是字符类型) from 表名 group by 另一个模板;求另一个模板的数据分别有几条 记录为空不统计 GROUP_CONCAT()用来把这个字符类型的数据显示全面 当使用分组查询时如果查询的模板是一个字符型的会显示不全面 这个时候可以用统计查询


联合查询****

内连接

select *from 表名 inner join 另一个表名on 表名.模板名=另一个表名.模板名;注两个模板名必须 一个为另一个的外键必须有相同的 两个表联合起来查询

select *from 表名 AS xxxx inner join 另一个表名 AS xxxxx on 表名.模板名=另一个表名.模板名;AS给这两张表取别名 如果不想显示同样的数据可指定select选择的模板

自链接就是给自己这张表定义别名然后在和自己链接用and 添加条件

外连接

select *from 表名 AS xxxx LEFT join 另一个表名 AS xxxxx on 表名.模板名=另一个表名.模板名;左外链接

select *from 表名 AS xxxx RIGHT join 另一个表名 AS xxxxx on 表名.模板名=另一个表名.模板名;右外链接 顾名思义就是把两张表对接在一起无需条件 左外链接 以左边的表为准 右边长度不一样就制空 如果超出就 省略多的长度

合并查询(竖着)

SELECT field1,field2,…,fieldn FROM tablename1

UNION | UNION ALL

SELECT field1,field2,…,fieldn FROM tablename2; UNION | UNION ALL的区别就是不去重和去重 注查询时两个表的列数必须一样

子表查询

select teacher from class where id = (select class_id from student where name=‘小花’);#查询“小花”所在班级班主任的姓名*只能查询一条 在一张表中加入另一张表查询 条件为父表进行 子查询使用比较运算符时,select 子句获得的记录数不能大于*1条****!!!

带关键字IN的子查询 in表示在什么里面 not in 表示取反比如

select teacher from class where id in (select class_id from student where name=‘小花’);#查询“小花”所在班级班主任的姓名**** 可以查询多条

带关键字EXISTS的子查询 判断是否存在

select * from class where id=102 and exists (select * from student where class_id=102);**** *#如果102班存在学生记录,就查询102班的班级信息* 判断某个表中是否存在记录 如果存在就返回真否则返回假

带关键字ANY的子查询 关键字ANY表示满足其中任一条件。

select st.id, st.name, st.math+st.chinese+st.english total from grade st where (math+chinese+english) >= ANY (select score from scholarship);**** *#查询能获得奖学金的学院记录*

带关键字ALL的子查询 关键字ALL表示满足所有条件

select st.id, st.name, st.math+st.chinese+st.english total from grade st where (math+chinese+english) >= ALL (select score from scholarship);**** *#查询能获得一等奖学金的同学记录*

*****创建视图* 视图就是形成一个新的表(临时的)

select user, Select_priv, Create_view_priv FROM mysql.user;********#查询数据库用户创建和选择视图权限****

alter table student add privacy varchar(64);********# 增加私隐列****为这个表增加一列

CREATE VIEW view_student AS select id, class_id, name from student ;********#为学生表创建视图**** 基于student表来创建视图 VIEW视图的关键字 view_student视图的名字

dese view_student;查看视图的结构

select * from view_student;**** *#根据视图进行查询* 更新视图就等于是更新原表

CREATE VIEW view_student_class AS select student.id, student.name, class.name, class.teacher from class inner join student on class.id = student.class_id;********#为学生表创建视图**** 联合多个表创建视图(内联)

alter table 表名 change coumn 列名 要修改的列名 varchar(64);修改模板列的名字

ALTER VIEW view_student_class AS select student.id, student.name, class.name, class.id as class_id, class.teacher from class inner join student on class.id = student.class_id;********#为学生班级表视图增加 class_id 字段**** ALTER VIEW修改视图的语句 追加 删除模板(就是少写那个模板名)

drop view view_student_class;********#删除视图****

*****触发器*

create trigger 触发器的名字 BEFORE|AFIER 事件 on 表名 FOR EACH ROW 执行的语句; trigger 触发器 BEFORE|AFIER在什么之前或之后 事件可以是插入更新销毁 FOR EACH ROW对表的每一行 定义触发器 比如

create trigger tri_insert_srudent agter insert on student for each row update class set count= count+1 where NEW.id=student.id; update class set count= count+1 where NEW.id=student.id;这一段时触发器所执行的语句 insert 用NEW delete 用OLD 才合法 更新的话都可用 更新前用new(更新后)old(更新前)

drop trigger tri_insert_srudent;干掉触发器

show triggers 查看触发器

DELIMITER $$ 设置美元符为结束符

create trigger tri_delete_srudent agter delete on student for each row

begin

DELETE from grade where id =OLD.id;

update class set count=count-1 where OLD.class_id;

end;

$$ 创建触发器 执行两条语句中间用begin ; end 连接

DELIMITER ; 设置回分号为结束符

*****存储过程* 可一次性添加删除多张表的内容

DELIMITER $$ 设置美元符为结束符

create procedure proc_xxxx(in sid int)//创建储存过程 in为输入 out为输出

begin

declare cid int;//声明一个变量 用来保存id;declare cid int default 0;默认值为0

select class_id into cid from student where id=sid;用声明的变量保存id

delete from geade where id=sid;//删除geade表中id等于=sid的那条记录

delete from strdent where id=sid;//删除strdent 表中id等于 sid的那条记录

update class set count =count-1 where id=cid;更新 class表中的数据

end; $$

DELIMITER ;

call proc_xxxx(1);调用这个存储过程

drop procedure proc_xxxx;删除这个存储过程

drop procedure if exists proc_xxxx;如果存在就删除这个存储过程


变量 声明在begin之后 end 之前

declare cid int default 0;定义变量默认值为0

set cid=5;赋值操做 set 为关键字 值也可以为一个表达式

@xxx;定义用户变量用来接收储存过程输出的值

call 存储过程 (4,@xxx);调用存储过程

select @xxx;查看这个用户变量的值

*****光标* 在存储过程中使用 声明在begin之后 end 之前

declare cur_srudent cursor for select 条件;声明一个光标并指定他的条件declare cursor for为关键字

DELIMITER $$ 设置美元符为结束符

create procedure proc_xxxx(in sid int,out cname varchar(128),out cid int)//创建储存过程定义了一个输入的变量和两个输出的变量

​ begin

​ declare tmp_name varchar(128);定义临时变量

​ declare tmp_cid int;注变量需定义在光标之前

​ // declare done int default 0;//定义一个游标结束的标志(这个变量默认为0 配合if语句使用)

​ declare cur_srudent cursor for selectname,class_id from student where id=sid;创建光标并指定他的条件

​ // decalre continue handler for not found set done=1;如果游标读完数据就改变done的值(固定这样写)

​ open cur_srudent;打开这个光标

​ fetch cur_srudent into tmp_name,tmp_cid;取出光标里的东西放入临时变量fetch是取出的意思(每次读取一行,需加循环语句)

​ select tmp_name,tmp_cid;选择这两哥变量可直接打印出光标里的信息

​ close cur_srudent ;关闭这个光标

​ set cname =tmp_name,cid=tmp_cid;将这两个临时变赋值给输出的参数

​ end;

​ $$

​ DELIMITER ;

​ call proc_xxxx(4,@a,@b);//调用这个储存的方法

​ select @a;查看这个用户变量的值

*****if语句*

DELIMITER $$ 设置美元符为结束符

create procedure proc_xxxx(in sid int,out cname varchar(128),out cid int)//创建储存过程定义了一个输入的变量和两个输出的变量

begin

if sid>20 then set sid=sid+20; then那么 set 设置

elseif sid<20 then set sid=sid+40;

else sid=sid+30;

end if; if语句结束

set cid=sid;

end;

$$

DELIMITER ;

call proc_xxxx(4,@a,@b);//调用存储过程

select @b;显示输出的值


后续敬请期待 😀*******

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值