插入数据(insert)
//插入一条数据,对所有字段都赋值
//语法:
insert into <表名> values(值A,值B,值C,值D...值F);
//插入多条数据
insert into <表名>(<列名>,<列名>) values(值A,值B),(值A,值B)
//插入一条数据,且只对一部分字段赋值
//语法:
insert into <表名>(字段A,字段B,字段C) values(值A,值B,值C);
//总结:如果插入数据时,只对部分字段进行初始化,则需要声明要插入的字段;
修改数据(updata)
//修改一个表里的所有数据
//语法:
update <表名> set 字段名1=新值1,字段名2=新值2,字段名3=新值3;
//修改一个表里满足某些条件的数据
update <表名> set 字段名1=新值1,字段名2=新值2,字段名3=新值3 where <条件表达式1> and(or) <条件表达式2>
//示例:
将用户(member)表里Regname为“nick”的用户可用余额修改为1000000.00
update member set leaveamount=1000000.00 where regname = “nick”
//总结:如果要更新一个表里满足某个条件的数据,需要用到关键字”where”来进行过滤找出那一部分数据。然后针对这一部分数据做更新操作。
删除数据库或者表
//删除数据库
//语法:
drop database <数据库名称>;
//删除数据表
//语法:
drop table <表名>;
//总结:
1,drop database A ; 会把数据库A删除掉,因此数据库中的所有表和数据都会被删除;
2,drop table B ; 会把数据库中B删掉,因此B表的数据也删掉了;
3,drop作为一种删除命令,他不仅会删除数据库和数据表,还会删除数据;命令慎用;
删除表数据(delete)
//删除表里所有的数据
//语法:
delete from <表名>;
//删除一个表里的满足条件的数据
//语法:
delete from <表名> where <条件1> and(or) <条件2>
总结:
1,如果要删除某个表里满足条件的数据,需要用到关键字“where”来进行过滤找出那一部分数据;
2,delete也是一种删除命令,但是与drop不同的是,delete只会删除表数据,不会删除表和库;
单表查询
//按条件查询
//多个条件需要同时成立;
select * from <表名> where <条件A> and <条件B> and <条件C>;
//多个条件不需要同时成立,只需要满足其中一个或者多个;
select * from <表名> where <条件A> or <条件B> or <条件C>;
多表查询
这里牵扯到一个数据库的理解,对于不同的数据类型的信息该怎么储存呢?为什么不放一个表中?
首先存放在一个表中有几个缺点:
1,字段过多
2,难以维护
3,表数据庞大
4,数据冗余,重复数据多;
所以不同类型的数据放在了不同的表,那原本有联系的数据怎么保持原有的联系呢
解决方案:
设计表的时候让表之间维持一个关系即可;
语法:
select <要查询的字段> from <表1>,<表2> where <两表并联条件和过滤条件>
示例:
查询id为1001的用户的用户名、手机号码、可用余额以及该用户的借款项目的编号、标题、借款金额
涉及表:用户表(member)、项目表(loan);
查询的字段:会员表(regname,mobilephone,leaveamount),项目表(id,title,amount)
并联关系:member.id=loan.memberid
过滤条件:member.id = 1001
select regname,mobilephone,leaveamount from member,loan where member.id=loan.memberid and member.id = 1001
连接查询
//内连接
inner join : 又称为等值连接,获取两个表中字段匹配的记录;
//语法:
select * from <表1> inner join <表2> on member.id = loan.member_id
//左连接
left join : 读取左表全部数据,即使右表没有关联数据,左连接也会从左表中产生一套完整的记录,和右表匹配的记录,如果右表没有匹配记录,则右侧结果集字段为NULL;
//语法
select * from <表1> left join <表2> on member.id = loan.member_id where member_id = 2;
//右连接
right join :以右表为基础,与left join相反;
对查询结果进行排序(order by)
//对查询结果进行排序,asc(升序),desc(降序);默认是asc
select * from <表名> where <条件1> order by <字段A> asc(desc);
查询-in的用法
// in的用法
//使用场景:查询的时候,条件字段的值存在于某个数据集
select * from member where id in (1,2,3);
//拓展:not in 的用法:条件字段的值不存在于某个数据集
select * from member where id not in (1,2,3);
模糊查询-like
//使用场景:查询的时候,条件字段的值不完整的情况;
// % 用来匹配任意长度的字符串,而且%出现的位置不同所代表的意义不同;
//条件字段的值以任意字符串开头,以xxx结尾的值
select * from <表名> where <条件字段> like '%xxx';
//条件字段的值以xx开头,以任意字符串结尾
select * from <表名> where <条件字段> like 'xx%';
//条件字段的值包含了xx
select * from <表名> where <条件字段> like '%xx%';
常用的mysql函数
//求字段A的最小值:min(字段A)
//求字段A的最大值:max(字段A)
//求字段A的平均值:avg(字段A)
//求字段A的和:sum(字段A)
//语法:
select min(leave_amount) from member;
//获取当前系统日期时间sysdata()
//语法:
select sysdata();
分组 -group by
//使用场景:group by 顾名思义就是按照某一个,或者多个字段来分组,有“聚合函数”来配合才能使用,使用时至少需要一个分组字段。
//语法:
select 查询字段,聚合函数 from <查询涉及到的表> group by 分组字段 having 过滤条件;
//语法解释:
聚合函数:对一组执行计算并返回单一的值的函数。聚合函数经常与select语句的group by 一同使用,常见的聚合函数有:sum(),count(),avg(),min(),max()等
having:在分完组以后如果在这个分组的结果上继续过滤的话就必须把过滤条件写在having后面
//示例:按照项目分组,统计投资表中各个项目的投资次数和项目名称;(多表查询和分组)
select invest.loan_id,loan.title,count(invest.amout) from invest,loan where invest.oan_id = loan.id group by invest.loan_id;
查询-between
//使用场景:条件字段的取值处于两个数据范围内的情况
//语法:
select * from <表名> where <条件字段> between <数值A> and <数值B>;
//示例:id在10到20之间(包含)
select * from member where id between 10 and 20;
查询-去重(distinct)
//使用场景:去除查询结果中的重复数据
//语法:
select distinct <字段名> from <表名>;
查询-分页(limit)
//使用场景:去查询结果的前n条;
//语法:
select * from <表名> limit m,n; m指的索引值是从m开始,n表示每页要取多少;
where和having的区别:
- where ,在对查询结果进行分组前,将不符合where条件的去掉,是在结果返回之前起作用的,即在分组之前过滤数据条件中不能包含聚组函数;
- having , 是筛选满足条件的组,,是在查询返回结果集以后对查询结果进行的过滤操作,即在分组的结果中筛选条件中经常包含聚组函数;