之前我们对数据库的环境以及对数据库的一些操作有了更进一步的认识,今天我们来更
进一步的了解对数据库中表的一些操作。
1、基本操作
需要操作数据库中表的时候,首先要需要使用该数据库:use db_test
例:use mysql;
1.1显示当前数据库表
show tables;
例:
1.2查看表的结构
desc 表名;
例:desc user;
1.3创建表
create table table_name(
field1 datatype,
field1 datatype,
field1 datatype
);
注意:1.field 是字段名,datatype是字段的数据类型;
2.小括号把字段括起来,多个字段间用逗号隔开,最后一个字段不加逗号
例:创建一个学生表
注意:
1.在创建表的时候,建议先删除再创建 ,
2.数据库名,表名,字段名,不能是数据库关键字,
3.如果非要使用关键字,那么可以在关键字前后加 ` ,
1.4删除表
drop table [if exists] table_name;
1.5注释
1.在SQL中可以使用“-- 空格”来注释(数据库忽略这种注释),
2.表和字段可以加comment注释(数据保存表定义的时候,就会保存这个数据)
2、新增(插入)数据
2.1全列插入
insert into 表名 values(字段1要插入的数据,字段2要插入的数据)
注意:全列插入,表示所有字段都要插入值,且插入的顺序,是表定义时候的顺序
例:
-- 全列插入
insert into student values(1,'张三',0,'简历',1000,'2000-01-01' , '张同学');
2.2指定列插入
insert into 表名(要插入的字段1,要插入的字段2)values(要插入的值1,插入的值2)
注意:直插入我们需要的字段,其他没有插入的字段就是空
例:
-- 指定列插入
insert into student(id,name) values(2,'李四');
插入多条语句:
1.多执行几次insert 语句,
2.执行一条:insert into 表名(ID,name)values(1,'张三‘’),(2,'李四’);
3、查询语句
3.1全列查询
select * from table_name;
直接查询某张表所有数据,及所有字段
3.2指定列查询
select 查询列1,查询列2 from student;
查询某字段
缺点(全列查询和指定列查询):
1.效率低,涉及索引优化问题,
2.若开发使用框架,可以把数据转化为Java中的对象
3.3查询字段为表达式
select id,name,amount*2 from student;
注意:
字符串拼接,不能使用+,需要使用concat(str1,str2.....)函数,
日期的操作,也需要函数
-- 日期操作
-- year(日期的值),month(日期的值),day(日期的值)
select id,name,year(birthday),day(birthday) from student;
3.4别名
如果查询字段进行了计算操作,查询返回的字段就不是数据库定义的字段名了,这时就要用到别名。
返回字段名 [as] 别名
别名作用:
1.简洁;
2.规则一点;
3.可能需要查询多张表的字段及多张表的字段(可能有重复字段,若重复,程序在获取时就不知道是哪个)
3.5去重 distinct
select distinct 字段名1,字段名2 from student;
3.6排序 order by
select 字段1, 字段2,...from 表名 order by 字段1[desc],字段2[asc];
注意:
1.asc 为按升序排列,
2.desc 为按降序排列,
3.默认为asc,
4.null数据排序,视为比任何数小,升序在最上面,降序在最下面,
5.多个字段排序,按多字段顺序排列,先按第一个字段排序,若第一个字段相同,则按第二个字段排序,以此类推;若第一个字段不相同,则后边字段就没有用,会按照第一个字段排序,
6.排序也可以使用表达式及别名
例:-- 排序:order by 字段名
select id,name,amount from student order by id;-- 排序:order by 字段名
select id,name,amount from student order by id asc;-- 排序:order by 字段名
select id,name,amount from student order by id desc;-- 插入几条数据
insert into student(id,name,amount)values
(1,'小刘',300),
(2,'小华',200),
(3,'小马',400);
3.7条件查询:where
比较运算符:
运算符
说明
>, >=, <, <=
大于,大于等于,小于,小于等于
=
等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>
等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>
不等于
BETWEEN a0 AND
a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...)
如果是 option 中的任意一个,返回 TRUE(1)
IS NULL
是 NULL
IS NOT NULL
不是 NULL
LIKE
模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字
符
注意:1.in匹配()中任意一个,就返回true/false,
2.null不能使用比较运算符,要用is/is not null
逻辑运算符:
运算符
说明
AND
多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR
任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT
条件为 TRUE(1),结果为 FALSE(0)
注意:1.where条件可以使用表达式,但不能使用别名
2.and的优先级高于or,在同时使用时,需要使用小括号包裹优先执行的部分
例:新建一个表
-- 创建考试成绩表
DROP TABLE IF EXISTS exam_result;
CREATE TABLE exam_result (
id INT,
name VARCHAR(20),
chinese DECIMAL(3,1),
math DECIMAL(3,1),
english DECIMAL(3,1)
);
-- 插入测试数据
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);
-- 基本查询 select name, english from exam_result where english<60;-- and与or
-- 查询语文成绩大于80或英语成绩大于80的同学
select *from exam_result where chinese>80 or english>80;-- 查询语文成绩大于80且英语成绩大于80的同学
select *from exam_result where chinese>80 and english>80;-- between....and
-- 查询语文成绩在[80,90]的同学以及成绩
select name,chinese from exam_result where chinese between 80 and 90;-- 查询语文成绩在[80,90]的同学以及成绩
select name,chinese from exam_result where chinese >= 80 and chinese<=90;-- in
-- 查询数学成绩是58或者59或者99的同学以及成绩
select name,math from exam_result where math in(58,59,98);-- 模糊查询:like
-- %匹配任意多个字符
select name from exam_result where name like '孙%';-- _匹配到严格一个任意字符
select name from exam_result where name like '孙_';-- null的查询 is[not] null
-- 查询生日不知道的同学的姓名
select name, birthday from student where birthday is null;-- 查询生日以知道的同学的姓名
select name, birthday from student where birthday is not null;
3.8分页查询 limit
-- 起始下标为0
-- 从0开始,查询n 条结果
select ...from table_name limit n;
-- 从s开始,查询n条结果
select ....from table_name limit s,n;
-- 分页查询
select*from exam_result limit 2,3;
4、修改update
update 表名 set 字段1=要修改的值1,字段2=要修改的值2,...where 条件 order by...
例:-- 将孙悟空的数学成绩改为88
-- 将孙悟空的数学成绩改为88 update exam_result set math=80 where name='孙悟空';
注意:update修改操作,可以修改多行数据,如果希望只修改对应的,一定要给定条件,where语句过滤后再修改
5、删除 delete
delete from 表名 where 条件 order by....
注意:删除和修改类似,也会按照条件过滤后的结果删除,如果没用条件,则就是删除整张表
例:-- 删除孙悟空的考试成绩
delete from exam_result where name='孙悟空';