(1)语法:
insert into 表名 values(
字段1要插入的值,-- 多个插入的值括号包裹
字段2要插入的值 – 多个值之间逗号隔开
);
insert into student values(1,'张三',0,'简历',10000,'2000-01-01','张同学');
(2)注意:
①如果后边修改了表的定义:如增加字段,修改字段的名称,就不能使用了
②全列插入,表示所有字段都要插入值,且插入的顺序,是表定义时候的顺序
③日期类型,使用字符串格式:yyyy-MM-dd HH:mm:ss
(1)语法:
insert into 表名(要插入的字段1,要插入的字段2) values(要插入的字段1,要插入的字段2);
insert into student(name,amount,birthday) values('李四',200,'2001-01-01');
(2)注意:只插入我们需要的字段,其他没有插入的字段就是空(null)
(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,'韩梅梅');
注意:要插入的多行数据,每行用小括号包裹,多行之间也用逗号隔开
语法:
select
-- 去重 所有字段 指定要查询的字段,多个字段逗号隔开
[distinct] {* | {colum [,colum]} …}
[from table]
[where …] -- 查询条件:把数据根据条件来过滤
[order by colum [asc | desc],…] -- 结果根据某个或多个字段来排序
limit … -- 使用分页查询:按照某个分页的方式,只查询到需要的一页数据
(1)语法:
select * from 表名;
select * from student;
(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中的对象,如果表结构修改了,就会报错
语法:
select 查询列1,查询列2 from 表名;
select id,name from student;
(1)查询的字段是数值型,可以进行计算
(2)查询出来的多行数据,也叫查询结果集,并不等于数据库表中原始的那张二维表,可以认为,数据集是一个虚拟表(并不存在)
(3)查询字段的表达式包含一个字段
select id,name,amount*2 from student;
(4)查询字段的表达式为字符串(注意:MySQL中,字符串的拼接,不能使用+,需要使用一个函数:concat(str1,str2,str3))
select id,concat(name,'学生') from student;
(5)查询的表达式为日期类:对于日期,不能使用运算符,要进行运算操作,就是要使用复杂的函数,如dateadd()
select id,name,year(birthday),month(birthday),day(birthday) from student;
(1)表或者字段别名:如果查询字段,进行了计算等操作,查询返回的字段,就不是数据库定义的字段名,此时就会使用别名
(2)字段别名:
字段名 [as] 别名
别名会最终为查询结果集(虚拟表)的字段名
select id as i,name as n,amount*2 as a from student;
select 表的别名.字段名1,表的别名.字段名1 from 表名 [as] 表的别名;
select s.id as i,s.name as n,s.amount*2 as a from student as s;
(4)别名的作用:
①简洁
②规则
③在查询多张表的数据,以及多张表的字段,有重复的数据和字段时别名就尤为重要
(1)按照单列进行去重
select distinct id from student;
select distinct id,name from student;
(3)去重查询结果集(虚拟表)也是一个二维表,类似于Java中的List,结果集中的每行数据,类似于List中的对象,去重,其实就相当于,把List(有序,可重复)中的所有对象放到set(无序,不重复)中
(1)语法:
– asc为升序,desc为降序
order by 字段1 [asc|desc],[asc|desc]
(2)一个字段的排序:可能出现字段的值相同时,顺序可能不是我们希望的
select id,name,amount from student order by id asc;
(3)多个字段排序:按照多个字段来排序时,先按照第一个字段来排序,如果第一个字段相同才会按照第二个字段来排序,后面依次类推,也就是说如果第一个字段没有相同的,后面的字段就没有用了
select id,name,amount from student order by id ,amount asc;
(4)注意:
①排序是可以多个字段的,但是需要前面的字段相同的时候,后面的字段才会排序
②对null,升序最前,降序在最后
③排序的字段也可以使用表达式计算或者是别名
(1)比较运算符(可以使用在数值型和日期型):<、>、<=、>=、!=(<>)、=(<=>)
-- 条件查询birthday字段小于'2001-01-01'的数据
select * from student where birthday < '2001-01-01';
(2)null不能使用比较运算符(使用不会报错,只会返回空的结果集),只能使用is/is not null
-- 条件查询birthday字段是空的数据
select * from student where birthday is null;
(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;
(4)逻辑运算符:and(与,类似于Java中的&&)、or(或,类似于java中的!)
-- 条件查询id字段在2和4之间的数据
select * from student where id >= 2 and id <= 4;
注意:和Java中逻辑运算一样,需要考虑执行顺序的问题,其中与的顺序先于或
(5)in(值1,值2):匹配()中任意一个,就返回
-- 条件查询id为1或3的数据
select * from student where id in(1,3);
执行过程:先遍历表的所有数据,in in(1,3) 返回true,否则返回false
(6)like(模糊匹配):%(匹配任意多个字符)、_(匹配一个字符)
-- 匹配‘张’开头的学生
select * from student where name like '张%';
-- 匹配学生姓名含有‘梅’
select * from student where name like '%梅%';
-- 匹配张x的学生
select * from student where name like '张_';
(1)limit分页查询(limit是MySQL的关键字,不是标椎sql)
(2)一般来说,一个查询结果集行数是确定的,给定每页的数量进行分页,就可以确定页数,数据库中的实现,不是按照页数来查询的,是按照起始的索引+每页的数量
(3)语法:
(4)从整个结果集进行过滤(每行数据下标从0开始),找下标s,s+n:
-- 查找2-4下标的数据
select * from student limit 2,3;
select * from student order by id desc limit 2,3;
(6)分页是按照最终的结果集进行分页,如果有条件过滤,那是以条件过滤后的结果集再进行分页:
select * from student where id between 2 and 4 limit 2,3;
(1)语法:
update 表名 set 字段1 = 要修改的值1,字段2 = 要修改的值2 where 条件 order by
(2)update修改操作,可以修改多行数据,如果只希望修改某一条,一定要给定一定的条件
-- 将id = 3 的数据中字段name都修改为‘张三’
update student set name = '张三' where id = 3;
(3)修改是一个需要谨慎操作的事情,一不小心就可能修改不希望修改的数据,建议先把update替换为select语句,看看结果集是不是都是希望修改的数据
(1)语法:
delete from 表名 where条件 order by
(2)删除和修改类似,也建议先把delete替换为select语句,看看结果集是不是都是希望删除的数据
-- 删除id = 1的数据
delete from student where id = 1;