表的增删查改(CRUD)—MySQL

文章目录

  • 0.本次原本的所有数据
  • 1.插入数据(Create)
    • 1.1全列插入
    • 1.2指定列插入
    • 1.3插入多行数据
  • 2.查询操作(Retrieve)
    • 2.1全列查询
    • 2.2指定列查询
    • 2.3查询字段为表达式
    • 2.4别名
    • 2.5去重(distinct)
    • 2.6排序(order by)
    • 2.7条件查询(where)
    • 2.8分页查询(limit)
  • 3.修改数据(Update)
  • 4.删除数据(Delete)

0.本次原本的所有数据

表的增删查改(CRUD)—MySQL_第1张图片

1.插入数据(Create)

1.1全列插入

(1)语法:

insert into 表名 values(
字段1要插入的值,-- 多个插入的值括号包裹
字段2要插入的值 – 多个值之间逗号隔开
);

insert into student values(1,'张三',0,'简历',10000,'2000-01-01','张同学');

(2)注意:
①如果后边修改了表的定义:如增加字段,修改字段的名称,就不能使用了
②全列插入,表示所有字段都要插入值,且插入的顺序,是表定义时候的顺序
③日期类型,使用字符串格式:yyyy-MM-dd HH:mm:ss

1.2指定列插入

(1)语法:

insert into 表名(要插入的字段1,要插入的字段2) values(要插入的字段1,要插入的字段2);

insert into student(name,amount,birthday) values('李四',200,'2001-01-01');

(2)注意:只插入我们需要的字段,其他没有插入的字段就是空(null)

1.3插入多行数据

(1)执行多条insert语句
(2)执行一条的语法:

– 全列插入
insert into 表名 values
(要插入的值1,要插入的值2),
(要插入的值1,要插入的值2);

insert into student values
(2,'小小',0,'简历',300,'2002-01-01','小同学'),
(3,'大大',0,'简历',600,'2003-01-01','大同学');

– 指定列插入
insert into 表名 (要插入的字段1,要插入的字段2) values
(要插入的值1,要插入的值2),
(要插入的值1,要插入的值2);

insert into student(id,name) values
(1,'李磊'),
(2,'韩梅梅');

注意:要插入的多行数据,每行用小括号包裹,多行之间也用逗号隔开

2.查询操作(Retrieve)

语法:

select
    -- 去重    所有字段      指定要查询的字段,多个字段逗号隔开
    [distinct] {* | {colum [,colum]} …}
    [from table]
    [where] -- 查询条件:把数据根据条件来过滤
    [order by colum [asc | desc],] -- 结果根据某个或多个字段来排序
    limit-- 使用分页查询:按照某个分页的方式,只查询到需要的一页数据

2.1全列查询

(1)语法:

select * from 表名;

select * from student;

表的增删查改(CRUD)—MySQL_第2张图片
(2)注意:
①直接查询某张表(二维表)所有数据(行)及所有字段(列)
A.表—类似于Java中类的定义;
B.表名 ≈ 类名;
C.字段名 ≈ 成员变量名
D.表的字段—类似于类中定义的成员变量;
E.二维表—Java中,使用一些集合框架(数据结构Java的实现),把多个数据(一般使用对象)保存起来;
F.每一行数据对应一个对象;
a:添加一行数据(insert):student.add(stu1) 添加一个对象
b.查询数据(select):遍历student,找所有对象,或者符合条件的对象
c.修改数据(update):先找到students中符合条件的对象,然后把属性修改了
d.删除数据(delete):student.remove()符合条件的对象
②自己查数据用,开发时不要用,原因:效率低(涉及索引优化的问题);以后如果开发使用框架,可以把数据转化为Java中的对象,如果表结构修改了,就会报错

2.2指定列查询

语法:

select 查询列1,查询列2 from 表名;

select id,name from student;

表的增删查改(CRUD)—MySQL_第3张图片

2.3查询字段为表达式

(1)查询的字段是数值型,可以进行计算
(2)查询出来的多行数据,也叫查询结果集,并不等于数据库表中原始的那张二维表,可以认为,数据集是一个虚拟表(并不存在)
(3)查询字段的表达式包含一个字段

select id,name,amount*2 from student;

表的增删查改(CRUD)—MySQL_第4张图片
(4)查询字段的表达式为字符串(注意:MySQL中,字符串的拼接,不能使用+,需要使用一个函数:concat(str1,str2,str3))

select id,concat(name,'学生') from student;

表的增删查改(CRUD)—MySQL_第5张图片
(5)查询的表达式为日期类:对于日期,不能使用运算符,要进行运算操作,就是要使用复杂的函数,如dateadd()

select id,name,year(birthday),month(birthday),day(birthday) from student;

表的增删查改(CRUD)—MySQL_第6张图片

2.4别名

(1)表或者字段别名:如果查询字段,进行了计算等操作,查询返回的字段,就不是数据库定义的字段名,此时就会使用别名
(2)字段别名:

字段名 [as] 别名

别名会最终为查询结果集(虚拟表)的字段名

select id as i,name as n,amount*2 as a from student;

表的增删查改(CRUD)—MySQL_第7张图片
(3)表的别名

select 表的别名.字段名1,表的别名.字段名1 from 表名 [as] 表的别名;

select s.id as i,s.name as n,s.amount*2 as a from student as s;

表的增删查改(CRUD)—MySQL_第8张图片
(4)别名的作用:
①简洁
②规则
③在查询多张表的数据,以及多张表的字段,有重复的数据和字段时别名就尤为重要

2.5去重(distinct)

(1)按照单列进行去重

select distinct id from student;

表的增删查改(CRUD)—MySQL_第9张图片
(2)按照多列进行去重:必须是所有的列全部相同才会去重

select distinct id,name from student;

表的增删查改(CRUD)—MySQL_第10张图片
(3)去重查询结果集(虚拟表)也是一个二维表,类似于Java中的List,结果集中的每行数据,类似于List中的对象,去重,其实就相当于,把List(有序,可重复)中的所有对象放到set(无序,不重复)中

2.6排序(order by)

(1)语法:

– asc为升序,desc为降序
order by 字段1 [asc|desc],[asc|desc]

(2)一个字段的排序:可能出现字段的值相同时,顺序可能不是我们希望的

select id,name,amount from student order by id asc;

表的增删查改(CRUD)—MySQL_第11张图片
(3)多个字段排序:按照多个字段来排序时,先按照第一个字段来排序,如果第一个字段相同才会按照第二个字段来排序,后面依次类推,也就是说如果第一个字段没有相同的,后面的字段就没有用了

select id,name,amount from student order by id ,amount asc;

表的增删查改(CRUD)—MySQL_第12张图片
(4)注意:
①排序是可以多个字段的,但是需要前面的字段相同的时候,后面的字段才会排序
②对null,升序最前,降序在最后
③排序的字段也可以使用表达式计算或者是别名

2.7条件查询(where)

(1)比较运算符(可以使用在数值型和日期型):<、>、<=、>=、!=(<>)、=(<=>)

-- 条件查询birthday字段小于'2001-01-01'的数据
select * from student where birthday < '2001-01-01';

表的增删查改(CRUD)—MySQL_第13张图片
(2)null不能使用比较运算符(使用不会报错,只会返回空的结果集),只能使用is/is not null

-- 条件查询birthday字段是空的数据
select * from student where birthday is null;

表的增删查改(CRUD)—MySQL_第14张图片
在这里插入图片描述
(3)范围匹配(可以使用在数值型和日期型):between…and…
语法:

字段名 between 起始值 and终止值

-- 条件查询id字段在2和4之间的数据
-- id between 2 and 4 等价于 where id >= 2 and id <= 4
select * from student where id between 2 and 4;

表的增删查改(CRUD)—MySQL_第15张图片
(4)逻辑运算符:and(与,类似于Java中的&&)、or(或,类似于java中的!)

-- 条件查询id字段在2和4之间的数据
select * from student where id >= 2 and id <= 4;

表的增删查改(CRUD)—MySQL_第16张图片
注意:和Java中逻辑运算一样,需要考虑执行顺序的问题,其中与的顺序先于或
(5)in(值1,值2):匹配()中任意一个,就返回

-- 条件查询id为1或3的数据
select * from student where id in(1,3);

表的增删查改(CRUD)—MySQL_第17张图片
执行过程:先遍历表的所有数据,in in(1,3) 返回true,否则返回false
(6)like(模糊匹配):%(匹配任意多个字符)、_(匹配一个字符)

-- 匹配‘张’开头的学生
select * from student where name like '张%';

表的增删查改(CRUD)—MySQL_第18张图片

-- 匹配学生姓名含有‘梅’
select * from student where name like '%梅%';

表的增删查改(CRUD)—MySQL_第19张图片

-- 匹配张x的学生
select * from student where name like '张_';

表的增删查改(CRUD)—MySQL_第20张图片

2.8分页查询(limit)

(1)limit分页查询(limit是MySQL的关键字,不是标椎sql)
(2)一般来说,一个查询结果集行数是确定的,给定每页的数量进行分页,就可以确定页数,数据库中的实现,不是按照页数来查询的,是按照起始的索引+每页的数量
(3)语法:

– s:起始索引;n:每页数量
limit s,n
表的增删查改(CRUD)—MySQL_第21张图片

(4)从整个结果集进行过滤(每行数据下标从0开始),找下标s,s+n:

-- 查找2-4下标的数据
select * from student limit 2,3;

表的增删查改(CRUD)—MySQL_第22张图片
(5)结果顺序不同,分页的结果可能不同:

select * from student order by id desc limit 2,3;

表的增删查改(CRUD)—MySQL_第23张图片
(6)分页是按照最终的结果集进行分页,如果有条件过滤,那是以条件过滤后的结果集再进行分页:

select * from student where id between 2 and 4 limit 2,3;

表的增删查改(CRUD)—MySQL_第24张图片

3.修改数据(Update)

(1)语法:

update 表名 set 字段1 = 要修改的值1,字段2 = 要修改的值2 where 条件 order by

(2)update修改操作,可以修改多行数据,如果只希望修改某一条,一定要给定一定的条件

-- 将id = 3 的数据中字段name都修改为‘张三’
update student set name = '张三' where id = 3;

表的增删查改(CRUD)—MySQL_第25张图片
(3)修改是一个需要谨慎操作的事情,一不小心就可能修改不希望修改的数据,建议先把update替换为select语句,看看结果集是不是都是希望修改的数据

4.删除数据(Delete)

(1)语法:

delete from 表名 where条件 order by

(2)删除和修改类似,也建议先把delete替换为select语句,看看结果集是不是都是希望删除的数据

-- 删除id = 1的数据
delete from student where id = 1;

表的增删查改(CRUD)—MySQL_第26张图片

你可能感兴趣的:(MySQL,java,数据库)