书接上回。之前学习了数据库的创建表的创建等操作,今天学习数据插入等。
目录
简单查询即不含where的select语句。在此,我们讲解简单查询中最常用的两种查询:查询所有字段和查询指定字段。
2.5数据表插入数据
2.5.1表中所有字段插入数据。
事先准备一张学生表,通过上一节学习很简单就能创建出来。
create table student(id int ,name varchar(10),age int(100),gengder varchar(10));
在插入数据前如果要插入中文应该要检查编码格式,否则可能报错:插入一般将client\results修改为gbk;
mysql> set character_set_client=utf8;
mysql> set character_set_connection=utf8;
mysql> set character_set_database=utf8;
mysql> set character_set_results=utf8;
mysql> set character_set_server=utf8;
mysql> set character_set_system=utf8;
mysql> set collation_connection=utf8;
mysql> set collation_database=utf8;
mysql> set collation_server=utf8;
原文链接:https://blog.csdn.net/qq_40846862/article/details/121680266
插入数据:每个值、值的顺序、值的类型必须与对应的字段相匹配。但是,各字段也无须与其在表中定义的顺序一致,它们只要与 VALUES中值的顺序一致即可。
insert into 表名(字段1,字段2,。。。)values(值1,值2,。。。)
insert into student(id ,name,age,gender)value(1,'李明',18,'male');
也可以使用另外一种方法,不指定字段名:这样的话必须键值对数量要对的上。
2.5.2表中指定字段插入数据
insert into 表名(字段1,。。。)values(值1,。。。);
和全部插入一样,自己选字段名就行。
2.5.3同时插入多条数据
insert into 表名[(字段名1,字段名2,。。。)]values(值1,值2,。。。),(值1,值2,。。。),。。。;【中的不一定必须写,可以空着】
insert into student(id,name,age,gender)values(2,'aa',11,'male'),(2,'bb',11,'male');
2.6更新数据
mysql中使用update语句进行数据表中的更新。
2.6.1update的基本语法
update 表名 set 字段名1=值1【,字段名2=值2,。。。】【where条件表达式】;
2.6.2update部分数据更新
update student set age=18,gengder='male' where name ='tom';
将名为tom的age变为18,gender变为female
2.6.3update更新全部数据
将所有记录的age变为18;
update student set age=18;
2.7删除数据
使用delete语句删除数据表中的数据
如果没有合适的表,使用网络上的表如下可以快速创建:
-- 创建学生表 create table student( id int, name varchar(30), age int, gender varchar(30) ); -- 插入数据 insert into student (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male'),(5,'sal',19,'female'),(6,'sun',20,'male'),(7,'sad',13,'female'),(8,'sam',14,'male');
2.7.1delete基本语法
在该方法中,表名用于指定要删除的表,where条件表达式为可选参数,用于指定删除的条件。
delete from 表名 【where 条件表达式】
2.7.2delete删除部分数据
删除age=14的所有记录
delete from student where age=14;
2.7.3delete删除全部数据
delete from student;
2.7.4truncate和delete的区别
1、DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。
2、使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1
3、DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句
truncate语句后面会详细介绍。此处不过多展开。
2.8mysql简单查询
sql的查询是一个非常繁杂的知识点,这里不一定能介绍的全面,会面会再出一篇有关sql的语法。
2.8.1简单查询的概述
简单查询即不含where的select语句。在此,我们讲解简单查询中最常用的两种查询:查询所有字段和查询指定字段。
简单查询即不含where的select语句。在此,我们讲解简单查询中最常用的两种查询:查询所有字段和查询指定字段。
准备测试用例:在student表中插入数据:数据来源于网上
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');
2.8.2查询所有字段
select * from student;
2.8.3查询指定字段
查询sid、sname
select sid,sname from student;
2.8.4常数的查询
select sid,sname,‘2023-04-12’ from student;
常数查询的意义和作用:本文链接:查询常数 [数据库][MySQL]_sql常数_96岁对抗java的博客-CSDN博客
2.8.5从查询结果中过滤重复数据
使用distinct关键字。注意在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。
select distinct gender from student;
2.8.6算数运算符
查找年龄+10的学生
select sname ,age+10 from student;
2.9函数
2.9.1聚合函数
统计字段最大值,最小值,平均值。所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。
聚合函数使用规则:只有SELECT子句和HAVING子句、ORDER BY子句中能够使用聚合函数。例如,在WHERE子句中使用聚合函数是错误的。
1.1count()
统计表中数据的行数或者统计指定列其值不为NULL的数据个数
查询该表中有多少人
select count(*)from student;
1.2max()
计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算
查询年龄最大的学生:
select max(age) from student;
1.3min()
计算指定列的最小值,如果指定列是字符串类型则使用字符串排序运算
查询年级最小的学生
select sname ,min(age) from student;()(此处有bug不应该这样写标记1)
1.4sum()
计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0
select sum(age) from student;
1.5 avg()
计算指定列的平均值,如果指定列类型不是数值类型则计算结果为0.
select avg(age) from student;
2其他常用函数
以后详细说明
2.1时间函数
select now();select dat (now()); select date (now()); select time(now()); select year (now());
select month(now()); select current_time();这个函数看起来和select time(now());的效果一样。select current_date();select current_timestamp();select addtime('14:23:12','01:02:01');将两个时间加在一起。select date_add(now(),interval 1 day);加一天 select data_sub(now(),interval 1 day);减一天 select datediff('2023-4-12','2023-05-15');计算两天的天数差。
2.2字符串函数
--连接函数 select concat()--select instr();--统计长度select length();
2.3数学函数
--绝对值select abs(-136);--向上取整select floor(3.14);--向下取整select ceiling(3.14);
2.10条件查询
在查询语句中通过WHERE子句指定查询条件对查询结果进行过滤。
准备测试集如下:
-- 创建数据库DROP DATABASE IF EXISTS mydb;CREATE DATABASE mydb;USE mydb;-- 创建student表CREATE TABLE student ( sid CHAR(6), sname VARCHAR(50), age INT, gender VARCHAR(50) DEFAULT 'male');-- 向student表插入数据INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1012', 'lili', 14, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1013', 'wang', 15, 'female');
2.10.1使用关系运算符查询
在where中可使用关系运算符进行条件查询,常用关系运算符如下所示:
查询年龄大于17的学生信息mysql命令:
select * from student where age>=17;
2.10.2使用in关键字查询
IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。
查询sid为S_1002和S_1003的学生信息 MySQL命令:
select * from student where sid in ('S_1002','S_1003');
查询sid为S_1001以外的学生的信息 MySQL命令:
select * from student where sid not in ('S_1001');
2.10.3使用between and关键字查询。
BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则将所在的记录将查询出来。
查询15-18的学生信息mysql命令:
select * from student where age between 15 and 18;
查询不是15到18岁的学生信息 MySQL命令:
select * from student where age not between 15 and 18;
2.10.4使用空值查询
在MySQL中,使用 IS NULL关键字判断字段的值是否为空值。请注意:空值NULL不同于0,也不同于空字符串
查询sname不为空值的学生信息 MySQL命令
select * from student where sname is not null;
2.10.5使用and关键字查询
在MySQL中可使用AND关键字可以连接两个或者多个查询条件。
查询年纪大于15且性别为male的学生信息 MySQL命令:
select * from student where age>15 and gender='male';
2.10.6使用or关键字查询
在使用SELECT语句查询数据时可使用OR关键字连接多个査询条件。在使用OR关键字时,只要记录满足其中任意一个条件就会被查询出来
查询年纪大于15或者性别为male的学生信息 MySQL命令:
select * from student where age>15 or gender="male";