什么是CRUD?MySQL的增删改查可以简单记忆成四个单词的首字母“ C R U D”;create创建retrieve读取update更新delete删除create 新增create table表SQL中的关键字users(自定义表名) -- 具体实现内容-- 创建一个表 create table users( -- 注意这里的comment相当于给这部分的SQL进行解释类似于注释 id int comment 学生编号, -- SQl中先把变量的名字写在前面再写变量的类型 name varchar(20) comment 用户名 );选中运行这一块代码提示运行成功就表示我们第一个表就创建好了。数据的插入在我们创建表格之后我们不难发现我们创建的只有表中的数据列本质上还是一个空表想让表格变得有意义我就必须给这个表格插入一些数据。在SQL中数据的插入我们通常使用insert into的关键字来对数据进行操作单行数据全列插入#单行数据的全列插入 #写法1 可以省略users内部的写法 insert into users values(1,张三); #写法2 不省略但是需要把users包含的变量全部写清楚 insert into users(id,name) values(2,李四);查询操作后得到的表单行数据指定列的插入在数据的插入中有些比较冗余的数据我们并不像插入数据这个时候我们就可以使用指定的列进行插入#单行数据指定列的插入 # users只有id和name 我这里只指定了对name进行插入操作 insert into users(name) values(王五);查询操作后得到的数据表长这个样子name列新增了王五但是id列并没有增加id编号自动填充为null多行数据指定列的插入#多行数据指定列插入 本质上和单行列的插入差不多 insert into users(id,name) values(4,赵六),(5,田七);新增了两行数据信息Retrieve 检索操作在SQL中我们通常使用select进行对数据库的查询操作但是数据库的查询本身是一个十分复杂的操作在MySQL中的联合查询操作我们会进一步讲解数据库的查询。select的语法select #查询关键字 [distinct] #可选去重操作删掉重复的行 [from] #可选表示查询是从那张表进行操作 [where] #可选表示行过滤在分组之前筛选原始数据 [group by] #可选分组表示把相同的字段值的行归一一般配合聚合查询 [having] #可选分组后的过滤筛选group by 产生的分组结果 [order by] #可选排序是从大到小还是从小到大 [limit] #可选限制返回行数全列查询在查询之前我们可以先创建一个足够量的数据# 创建一个新表eaam create table exam( id int comment 学生编号, name varchar(20) comment学生姓名, chinese float comment 学生语文成绩, math float comment 学生数学成绩, english float comment 学生英语成绩 ); #对新表查询数据 insert into exam values (1,张三,67,98,56), (2,李四,87,78,77), (3,王五,88,98,90), (4,赵六,82,84,67), (5,田七,55,85,45), (6,孙八,70,73,78), (7,周九,75,65,30);如果我们呀查询新表的所有数据我们可以用 * 表示全列信息#select 表示查询关键字from exam 表示从exam这整张表进行查询 select * from exam;结果显示指定列查询表示查询表中的某些列数据这个时候我们可以不用 * 来表示#查询所有人的编号姓名和语文成绩 select id,name,chinese from exam;结果显示查询字段为表达式#表达式本身就是一个常量 select idname,10 from exam; #表达式也可以是常量的运算 select id,name,101 from exam;结果显示把所有学生的语文成绩加10分#把所有学生的语文加十分 select id,name,chinese10 from exam; #这里只是在语文成绩面前加上10并不会影响数据库内部的成绩结果显示计算所有学生的语文数学英语成绩总分#计算所有学生的语文数学英语成绩的总分 select id,name,chinesemathenglish from exam;结果显示用as为查询结果指定别名在SQL中我们面对查询结果可以定义别名以便可以更加清晰明了的查看数据列的含义一般使用as 关键字as 可以省略但是一般不建议因为在阅读SQL语句的时候会不太清晰#定义别名 select id as 学号, name as 姓名,chinesemathenglish as 总分 from exam; #省略as后的写法 select id 学号,name 姓名,chinesemathenglish 总分 from exam;结果显示对结果去重查询去重查询在SQL中一般用distinct的操作在原表中我们不难发现张三的数学成绩和王五的成绩重复当我们想统计数学成绩的成绩分布时我们可以使用去重操作#对数学成绩进行去重操作 select distinct math from exam;结果显示【注意】使用distinct去重时只有查询列表中所有列的值相同才会判定重复select查询时的注意事项查询时不加限制条件会返回表中所有结果如果表中的数据量大会把服务器的资源消耗殆尽生产环境不要使用不加限制条件的查询Where条件查询基本查询#查询英语成绩不及格的同学以及英语成绩 select name,english from exam where english60;结果显示#查询语文成绩高于英语成绩的同学 select name,chinese,english from exam where chineseenglish;结果显示and和or#查询语文成绩大于80分且英语成绩大于80分的同学 select * from exam where chinese80 and english80; #注意在where中有多个条件存在不能简单的只写逗号需要使用SQL中的关键字结果显示#查询语文成绩大于80分或者英语成绩大于80分的同学 select * from exam where chinese80 or english80;结果显示【注意】在MySQL中and的优先级高于or范围查询在SQL中可以使用between and或者and来实现范围1查询#语文成绩在[80,90]分的同学以及语文成绩 #用between and的写法 select id,name,chinese from exam where chinese between 80 and 90; #用and的写法 select id,name,chinese from exam where chinese 80 and chinese90;结果显示#数学成绩是78或者79或者98或者99的同学以及数学成绩 #使用or方法 select name,math from exam where math78 or math79 or math98 or math99; #也可以使用in方法 select name,math from exam where math in(78,79,98,99);结果显示模糊查询查询所有姓张的同学不论字数#查询所有姓张的同学 #插入一些数据确保查询的准确性 insert into exam values (8,张小丽,90,80,70),(9,张明,98,68,77); select * from exam where name like 张%;结果显示查询姓张且姓名只有两个字的同学#查询姓张且名字共两个字的同学 select * from exam where name like 张_;结果显示【注意】注意模糊查询用的是like不是 NULL的查询查询英语成绩为null的记录#查询英语成绩为null的记录 #因为没有这样的数据我们可以插入新的数据以满足需求 -- 插入数据 insert into exam values(10,刘以飞,69,87,null); -- 查询 select * from exam where english is null; #注意这里的‘是’用的是is 同样也不是‘’结果显示查询英语成绩不为null的记录#查询英语成绩不为null的记录 select * from exam where english is not null;结果显示【注意】null与其他值进行运算结果null#null与其他值进行结果结果为null select name,chinesemathenglish from exam;结果显示order by排序asc 为升序排序从小到大desc 为降序排序从大到小MySQL中默认是升序排序#按数学成绩从低到高排序 select id,name,math from exam order by math asc;结果显示#按语文成绩从高到低排序降序 select id,name,chinese from exam order by chinese desc;结果显示#查询同学各门成绩依次按数学降序英语升序语文升序的方式显示 select * from exam order by math desc,chinese asc,english asc;结果显示【注意】null可以看作比任何值都要小分页查询分页查询就是把大量数据分成一页一页的显示不要依次性把大量的数据全部查出来会很卡很耗时间#语法 select 字段 from 表名 limit 偏移量,每页的条数 #偏移量跳过多少条数据从0开始 #每页的条数一页显示多少行 #显示第一页的数据 select * from exam limit 0,3;结果显示