自学内容网 自学内容网

MySQL:CRUD

MySQL表的增删改查(操作的是表中的记录)

CRUD(增删改查)

  • C-Create新增
  • R-Retrieve检查,查询
  • U-Update更新
  • D-Delete删除

新增(Create)

语法:

单行数据+全列插入 

insert into 表名[字段一,字段二] values(值一,值二);

 通过看表的结果,我们可以看出内容已经写好

注:列和值的数据类型一定要匹配,如果不匹配,则无法写入数据表中

简写方式(可以将表后的字段进行省略)

指定列插入

只写一个name的值,那么其他的值则会默认为null

多行插入

 show databases;
  create database u;
  use u;
  create table student(
    id bigint,
     name varchar(50),
     math int,
    english int,
    chinese int
    );
   insert into  student(id,name,math,english,chinese)  values(1,'zhangsan',88,86,74);
  insert into  student(id,name,math,english,chinese)  values(2,'lisi',85,76,94);
  insert into  student(id,name,math,english,chinese)  values(3,'xiaoliu',65,96,84);
insert into  student  values(4,'xiaohe',95,76,89);
  insert into student(name) values('daliu');
  insert into student(id,name) values(5,'ni'),(6,'wo'),(7,'hao');

查询(Retrieve)

全列查询

select * from 表名

注:查询表中所有的元素是一个很危险的事情,有些数据库的表很大,如果要一次性全部查询,会导致服务器崩塌,所以在查询的时候要加许多的限制条件。

指定列查询

select 字段 +from 表名

查询的结果是一个表达式

1.在字段名后加一个10后,会在临时创建的表上添加一个全为10的新列。

2.在某一列成绩加10,会使临时创建的表整个列的成绩都加10

3.将三个成绩的相加可以求成绩之和

表达式的别名

1.select 字段名 as +别名+from 表名

2.select 字段名  +'别名'+from 表名

3.select 字段名  别名  from 表名

注:最简单的方法是select 字段名  别名  from 表名,最标准的方法是select 字段名 as  '别名'  from 表名

如果在别名中有空格等符号必须用  ' 别名 '的形式。

否则会报错

注:所以查询出来的表都是一个临时表,返回给我们,执行完就自动删除了。

 show databases;
  create database u;
  use u;
  create table student(
    id bigint,
     name varchar(50),
     math int,
    english int,
    chinese int
    );
   insert into  student(id,name,math,english,chinese)  values(1,'zhangsan',88,86,74);
  insert into  student(id,name,math,english,chinese)  values(2,'lisi',85,76,94);
  insert into  student(id,name,math,english,chinese)  values(3,'xiaoliu',65,96,84);
insert into  student  values(4,'xiaohe',95,76,89);
  insert into student(name) values('daliu');
  insert into student(id,name) values(5,'ni'),(6,'wo'),(7,'hao');
   select * from student;
   select name from student;
  select id,name,10 from student;
  select id,name,math+10 from student;
  select id,name,math+chinese+english from student;
  select id,name,math+chinese+english as 总分 from student;
   select id,name,math+chinese+english as '总分' from student;
  select id,name,math+chinese+english  '总分' from student;
  select id,name,math+chinese+english  总分 from student;
  select id,name,math+chinese+english  '总  分' from student;
  select id 编号,name 姓名,math 数学 ,chinese 语文,english 英语,math+chinese+english  总分 from student;

去重(distinct)

select 列名 from 表名

单独去重某一个列

去重好几个列

注:去重时所有的列都相同才会被认为是可以去重的

   select * from student;
  insert into  student  values(8,'xiaohai',88,76,89);
  select * from student;
   select distinct * from student;
    select distinct math from student;
    select math from student;
   select distinct math,chinese,english from student;
    insert into  student  values(9,'zhu',88,76,89);
   select distinct math,chinese,english from student;

排序

select 列名 from 表名 order by 列名[ASC/DESC ]

ASC(降序)

DESC(升序)

注:如果既不写ASC或者DESC的话,则会默认为ASC

注:NuLL数据排序,视为比任何的数据都小,包括负数,比负数都小,升序出现在最上面,降序出现在最下面。

可以使用表达式及别名进行排序

对多个字段进行排序的时候,排序的顺序与出现的先后顺序有关

先对数学按逆序排序,在数学排序的基础上对语文按顺序排序,再对英语按逆序进行排序。

注:MySQL中的null比较特殊

  • 无论和什么值进行运算,返回的值都是null。
  • null始值被判定为false。
  • null的值不是我们学习的其他语言中的0,在MySQL就是null。
  select chinese from student order by chinese asc;
   select math from student order by math desc;
    select math from student order by math ;
    select id 编号,name 姓名,math+chinese+english total from student order by total desc;
   select id 编号,name 姓名,math,chinese,english total from student order by math desc,chinese asc,english desc;

条件查询(where) 

可以通过条件查询,过滤掉一些不符合条件的记录,将符合条件的记录返回给用户

比较运算符

运算符

说明

>, >=, <, <=
大于,大于等于,小于,小于等于
=
等于, NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>
等于, NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>
不等于
BETWEEN a0ANDa1
范围匹配, [a0, a1] ,如果 a0 <= value <= a1 ,返回 TRUE(1)
IN (option, ...)
如果是 option 中的任意一个,返回 TRUE(1)
IS NULL
是NULL
IS NOT NULL
不是NULL
LIKE
模糊匹配。 % 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字符 

 注:

模糊查询(LIKE):

字符后加 % 意思为只要是开头为xiao的,无论后面是什么,有多少个都符合条件。

 

字符后加 _ 意思为有几个 _ ,则在xiao后就有多少个字符。

small后有两个字符

small后有三个字符 

IS NULL

 

IS NOT NULL

 

逻辑运算符

运算符说明
AND
多个条件必须都为 TRUE(1) ,结果才是 TRUE(1)
OR
任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT
条件为 TRUE(1) ,结果为 FALSE(0)

注:

AND类似于Java中的 && ,OR类似于Java中的 || ,NOT类似于Java中的 !  

使用where的语法:select * from 表名 where 列名/表达式  运算符  条件

练习:

1.查询英语成绩<80分的同学及英语成绩

修改后:

select name,english from student where english<80;

注:自动过滤掉了值为null的列

2.查询语文成绩好于英语成绩的同学
 select name,english,chinese from student where chinese>english;

注 :在一行数据的不同列的同种数据类型是可以进行比较的,如果是不同行的数据,就算是数据类型相同也是无法比较数据的大小

3.查询总分在 260 分以下的同学

 select name,english+chinese+math total from student where (chinese+math+english)<260;

注:where中的语句不能用别名去当过滤的条件,使用了表达式就不能使用别名。

错误的示范:

为什么会出现这种情况呢?

出现这种情况跟MySQL中的SQL语句的执行顺序有关

  1. 如果在数据中查询某些条件,首先要确定表,执行from
  2. 在查询的过程中要根据查询的条件把符合条件的数据取出来,执行where子句
  3. 执行select后面指定的列,要把这些列加入到最终的结果中
  4. 排序操作,根据order by 将指定的列按排序规则进行最后的排序

4.查询语文成绩大于80分,且英语成绩大于80分的同学 

 select name,chinese,english from student where chinese>80 and english>80;

 

5.查询语文成绩大于80分或英语成绩大于80分的同学 

 select name,chinese,english from student where chinese>80 or english>80;

注:

优先级:NOT>AND>OR,我们不需要记,只需要在使用的时候加括号。

6.查询语文成绩在 [80, 90] 分的同学及语文成绩

select name,chinese from student where chinese between 80 and 90;
select name,chinese from student where chinese<=90 and chinese>=80;

也可以使用AND

 

 

7.查询语文成绩是74 或者 84分的同学及数学成绩 

mysql> select name,chinese from student where chinese in(84,74);
select name,chinese from student where chinese=74 or chinese =84;

也可以使用OR 

 

 分页查询(Limit

分页查询可以有效的控制一次性查询出来的条数,可以减小数据库服务器的压力,是一个非常友好的行为。

1.从 0 开始,筛选 n 条结果

select ... from   表名  [where ...]   [order  by ...]  limit n;

 n表示一次性查询出的条数

2.从 s 开始,筛选 n 条结果

select... from   表名   [where...]  [order  by...] limit s, n;
从0开始,限制两条
从2开始,限制两条

3.从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用

select... from   表名  [where...]  [order  by...] limit  n  offset  s;

 从0开始,限制两条

从2开始,限制两条 

练习:

按 id 进行分页,每页条记录,分别显示第 123

按顺序

select * from student where math order by id asc limit 2 offset 0;
select * from student where math order by id asc limit 2 offset 2;
select * from student where math order by id asc limit 2 offset 4;

按逆序

select * from student where math order by id desc limit 2 offset 0;
select * from student where math order by id desc limit 2 offset 2;
select * from student where math order by id desc limit 2 offset 4;

 

注:因为id为5,6,7都是NULL,所以默认不会读入。 

 修改(update)

UPDATE   表名  SET  column = expr [, column = expr ...]   [WHERE ...] [ORDERBY ...] [LIMIT ...]

 

练习

1.将xiaohe同学的数学成绩变更为 80 分

update student set math='80' where name='xiaohe' ;

 注:

2.将xiaoliu同学的数学成绩变更为 60 分,语文成绩变更为 70 分

update  表名  set  列=?,列=? where  限制的条件

update student set math=60 and chinese=70 where name='xiaoliu' ;

 

 

3.将总成绩倒数前三的 3 位同学的数学成绩加上3分 

原本成绩

select * from student;

进行修改

update student set math=math+3 where math order by math+english+chinese desc limit 3;

 修改后成绩

select * from student;

4.将所有同学的数学成绩更新为原来的 二分之一倍

原来的成绩

select * from student;

进行修改

update student set math =math*2 where math;

修改后的成绩

select * from student;

 

删除(delete)

delete   from   表名 [where ...] [order  by ...] [limit ...]

练习

1.将名字叫daliu的人删除
删除前
select * from student;
进行删除
delete from student where name='daliu';

删除后
select * from student;

 

2.将数学成绩倒数三名的人删除

删除前

select * from student order by math asc;

 

进行删除

 delete from student order by math asc limit 3;

删除后

select * from student;

 

注:在删除时如果不加where条件会怎么样?

会导致整张表全部被删除,所以一定要慎重!!!!

希望能对大家有所帮助!!!!!


原文地址:https://blog.csdn.net/blamep/article/details/143679725

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!