陈广安个人网站
会写代码的咸鱼
陈广安个人网站阿里云盘资源
陈广安个人网站网盘资源搜索
“ 梦想还是要有的,万一实现了呢!”
— 马云

7.05-数据库增删改查

创建时间:2016-10-19

表中数据的增、删、改 sql语句操作


插入数据

insert into 表名 values(null, "苹果手机", 8888);


删除数据

语法:delete from tb_表名 where 运算符 值;

从tb_xx删除 id = 4的这条记录

delete from tb_xx where id = 4;


更新数据

语法:update tb_表名 set 字段 = "值" where 条件;

更新tb_xx, 条件是 id=1  将该记录的name值改为刘凯

update tb_xx set name = "刘凯" where id = 1;


基本查询、单表查询

查询整个表的所有值

语法:select 字段名|* from 表名 where 运算符 值

*号代表所有字段

select * from tb_xxx;


查询指定字段的值

从tb_xx查询出字段为name,age的所有值

select name,addr from tb_student



给字段取别名

语法:select 字段 as 别名, 字段 as 别名,from tb_表名

select id as 学号, name as 姓名,sex as 性别,addr as 籍贯 from tb_student;



条件查询where【运算符】值

运算符 in 查出指定集中的数据

案例:从tb_xx表查出id=1跟id=3的数据

select * from tb_student where id in(1,3);



运算符 not in 查出不在指定集合中的数据

案例:从tb_xx表查出除了id=1跟id=3以外的所有数据

select * from tb_student where id not in(2,3);


运算符 between and 查出某个范围之内的数据

案例:从tb_student查出age值为8到20之间的数据

select * from tb_student where age between 8 and 20;


运算符 not between and  查出不在某个范围之内的数据

案例:从tb_student查出age值除了8到20之间以外的所有数据

select * from tb_student where age not between 8 and 20;


运算符 like 模糊查询

案例:从tb_student查出何开头的任意多个字符数据

select * from tb_student where name like "何%";


   %   表示任意多个字符
   _    表示任意一个字符 需要匹配多个可以加多个_下划线



运算符 regexp 查出与正则匹配的数据

案例:从tb_student查出湖北开头的数据

select name,age,addr from tb_student where addr regexp "^湖北";


 运算符 or 或 查出or两边为真的数据

案例:从tb_student查出age值大于30或id=2的数据

select * from tb_student where age>30 or id=2;


运算符 and 且 查出满足and条件的数据

案例:从tb_student查出name值为 刘开头且 addr值为江西开头的数据

select * from tb_student where name like "刘%" and addr like "江西%";




运算符 is null 查出字段没有值的数据

案例:从tb_student查出该字段值为空的数据

select * from tb_student where age is null;



#limit 限制查询条数

案例:查询0开始到第3条记录

select * from tb_student limit 0,3



运算符 order by 字段

案例:以age字段的值以升序或降序进行排序显示列表

select * from tb_student order by age asc
select * from tb_student order by age desc

asc升序|desc降序




图片.png

运算符 group by 分组

案例:按性别查出分组所有同学姓名

select name,sex form tb_student group by sex;

查询结果如下:

图片.png




函数group_concat(字段) 连接


案例:按照sex字段分组,把组里面name字段的值用group_concat连接起来

select group_concat(name),sex from tb_student group by sex;

查询结果如下

图片.png


运算符 函数 having 对分组进行过滤

案例:按照sex字段分组,把组里面name字段的值用group_concat连接起来,然后用having过滤出sex值为男的数据

select group_concat(name) 成员,sex 性别 from tb_student group by sex having sex="男";


查寻、多表查询

学生表

图片.png


课程表

图片.png


成绩表

图片.png


inner join 内连接

案例:查出年龄在25岁以下的同学的姓名,所学的课程及成绩信息

三表查询【学生表tb_student 、成绩表 tb_chengji、课程表 tb】

select x.name,k.cname,c.grade from tb_student x inner join tb_chengji c 
on x.id=c.sid inner join tb_kecheng k on c.cid=k.id where x.age=25;

语法解释:

select x.name,k.cname,c.grade———— 查出学生表的name、成绩表的cname、课程表的grade

from tb_student x inner join tb_chengji c————关联学生表跟成绩表,给学生表命名x,给成绩表命名k

on x.id=c.sid inner join tb_kecheng k———— 找出学生表字段id跟成绩表sid匹配的值 并关联课程表字段命名c

on c.cid=k.id———— 找出成绩表cid跟课程表id匹配的值

where x.age=25;———— 条件 是 要学生表里面的age字段的值等于25



left join 左外链接 以左表为准查出与右表的交集

说人话就是:查出左表需要查询的所有数据,右表就算是空的 也要查出来

案例:查出姓名,年龄,性别,籍贯,条件是没有成绩的同学信息

select s.*,g.grade from tb_student s left join tb_grade g on s.id=g.id where g.grade is null;

图片.png



right join 右外链接 以右表为准查出与左表的交集

案例:以右表(成绩表)为准,查出所有有成绩的数据

setect s.*,g.grade from tb_student s right gion tb_grade g on s.id=g.sid

图片.png


union 全连接

(左链接) union (右链接) 

案例:查出左表的所有数据 跟 右表的所有数据

(select s.*,g.grade from tb_student s left join tb_grade g on s.id=g.id) 
union (setect s.*,g.grade from tb_student s right gion tb_grade g on s.id=g.sid)

图片.png


备份与恢复

  • 备份与恢复必须是在开始菜单cmd下面操作,操作前必须设置电脑预定义变量,path的值改为mysql文件路径

  • mysqldump -uroot -p --database zjwdb_569598 >d:zjwdb_569598 备份

  • mysql -uroot -p



  • 恢复

  • 切换到 安装mysql的安装磁盘

  • cd D:wampinmysqlmysql5.5.24in

  • mysql -uroot -p 《d:xxx.sql


——————————————————————————————————

mysql预定义函数

  • sum(字段); 求和


  • max(字段) 最大值


  • min(字段) 最小值


  • avg(字段)平均值


  • count(字段)统计记录数