-- DML语句之修改表记录
语法一:一般实际开发中修改:都是带条件修改 (推荐)-- update 表名 set 字段名称 = 值 where 条件 ;-- 需求:将name为张佳宁的学生id改为8UPDATE student SET id =8WHERE NAME ='张佳宁';-- 需求: 修改id为6的学生的姓名为 '姚笛' (id字段在实际开发中:都是非业务字段,以后唯一的)UPDATE student SET NAME ='姚笛'WHERE id =6;
语法二:一次性修改多个字段
-- update 表名 set 字段名称1 = 值 ,字段名称2 =值2.... where 条件;-- 需求:将id为6的学生 的年龄改为25,性别改为女,地址改为上海UPDATE student SET age =25,gender ='女',address='上海市'WHERE id =6;
语法三:不带条件 属于批量修改 (部分场景可以用的)-- update 表名 set 字段名称= 值,字段名称2 =值2....UPDATE student SET address ='鄠邑区';
DML语句之删除表记录
-- delete from 表名 where 条件 ; 带条件删除记录 (使用的非业务字段id删除)-- 需求:删除id为7的学生信息DELETEFROM student WHERE id =7;-- delete from 表名 :删除全表数据DELETEFROM student ;-- truncate table 表名; 删除全表数据TRUNCATETABLE student;
DQL语句之查询表记录
-- * 代表所有字段,仅仅是自己玩的时候可以用,实际开发中不能用*,需要写上全部的字段名称SELECT*FROM student ;-- 创建student3表CREATETABLE student3 (
id INT,-- 编号
NAME VARCHAR(20),-- 姓名
age INT,-- 年龄
sex VARCHAR(5),-- 性别
address VARCHAR(100),-- 地址
math INT,-- 数学
english INT-- 英语);-- 给student3表中添加数据INSERTINTO student3(id,NAME,age,sex,address,math,english)VALUES(1,'马云',55,'男',' 杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩 ',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港 ',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
DQL语句:数据库的查询语句
1)最基本的查询语句select
语法:查询全表数据:select*from 表名;SELECT*FROM student3 ;-- 实际开发中查询全部字段,把字段名称全部写上SELECT
id,
NAME,
age,
sex,
address,
math,
english
FROM
student3;-- 查询全部字段的时候,给字段起一个别名 as '别名名称' ,as省略SELECT
id AS'编号',
NAME AS'姓名',
age AS'年龄',
sex AS'性别',
address AS'地址',
math AS'数学成绩',
english AS'英语成绩'FROM
student3 ;-- as 可以省略的SELECT
id '编号',
NAME '姓名',
age '年龄',
sex '性别',
address '地址',
math '数学成绩',
english '英语成绩'FROM
student3 ;-- 当表的名称比较长的时候,可以给表名起一个别名;SELECT
s.`id`'学生编号',
s.`name`'学生姓名',
s.`age`'学生年龄',
s.`sex`'学生性别',
s.`address`'学生地址',
s.`math`'数学成绩',
s.`english`'英语成绩'FROM
student3 s ;-- 起了一个别名s -- 可以查询部分字段-- 需求:查询学生的姓名以及数学和英语成绩SELECT
NAME '姓名',
math '数学成绩',
english '英语成绩'FROM
student3 ;-- 需求:查询学生的地址信息SELECT
address
FROM
student3;-- 发现:字段冗余(重复度大) 字段去重 DISTINCT 后面跟上字段名称 SELECTDISTINCT address FROM student3;
2)DQL语句之条件查询 where 关键字
比较运算符
说明
>、<、<=、>=、=、<>
<>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有=
BETWEEN…AND
在一个范围之内,如:between 100 and 200 相当于条件在 100 到 200 之间,包头又包尾
IN(集合)
集合表示多个值,使用逗号分隔
LIKE ‘张%’
模糊查询
IS NULL
查询某一列为 NULL 的值,注:不能写=NULL
2.1)使用 赋值运算符=,比较运算符 <,<=,>=,>,!=, mysql中的不等于 <> 2.2)Java中逻辑运算符:&&,|| mysql推荐使用 and , or 2.2)针对两个范围查询: 可以使用&&,可以使用and, 也可以 “字段名称 between 值1 and 值2”
-- 需求:查询年龄大于20岁的学生所有信息 SELECT*FROM
student3
WHERE
age >20;-- 需求:查询年龄在20到30之间的学生的姓名,年龄,住址 ,数学和英语成绩信息SELECT
NAME '姓名',
age '年龄',
address '住址',
math '数学成绩',
english '英语成绩'FROM
student3
WHERE age >=20&& age <=30;-- && 逻辑双与-- mysql中使用and 并列关系SELECT
NAME '姓名',
age '年龄',
address '住址',
math '数学成绩',
english '英语成绩'FROM
student3
WHERE age >=20AND age <=30;-- and 连接-- 使用的between 值1 and 值2SELECT
NAME '姓名',
age '年龄',
address '住址',
math '数学成绩',
english '英语成绩'FROM
student3
WHERE age BETWEEN20AND30;-- 需求:查询年龄是20岁学生的所有信息SELECT*FROM student3 WHERE age =20;-- 需求:查询年龄不是20岁的学生的所有信息SELECT*FROM student3 WHERE age !=20;-- != Java中 的用法SELECT*FROM student3 WHERE age <>20;-- mysql中的不等于 <>-- 需求:查询年龄是18岁或者是20或者是45岁的学生的所有信息-- Java中逻辑双或||SELECT*FROM
student3
WHERE
age =18|| age =20|| age =45;-- Mysql中的or这个表示 或(并集) SELECT*FROM
student3
WHERE
age =18OR age =20OR age =45;-- 上面这个格式优化为 in(值1,值2,值3..值n) ;in集合语句 SELECT*FROM
student3
WHERE age IN(18,20,45);-- Java语言中:去判断某个条件的内容为null ,mysql语言不支持这个格式 ==null-- 需求:查询学生的英语成绩为null的学生所有信息-- select * from student3 where english == null ;-- mysql中判断某个字段为null,使用的语法是 is null -- 判断某个字段不为null,使用的语法是 is not nullSELECT*FROM student3 WHERE english ISNULL;-- 需求:查询学生的英语成绩不为null的学生的所有信息SELECT*FROM student3 WHERE english ISNOTNULL;-- 关于int类型字段求和的时候,注意: int类型的值 + null 值 = null;-- 查询学生的姓名以及英语和数学总分SELECT
NAME '姓名',(math+english)'总分'FROM
student3 ;-- 上面这种情况:不太友好,数学成绩有值,但是结果求和是null-- mysql提供函数 ifnull(字段名称,值); 如果字段名称是null,给一个默认值SELECT
NAME '姓名',(math+IFNULL(english,0))'总分'FROM
student3 ;
3)DQL语句之where条件后面加入模糊查询-----关键字 like
SHOW VARIABLES LIKE'%character%';-- 语法:select 字段列表 from 表名 where 字段名称 like '%xxx%' ;-- %:代表任何多个字符或者某个字符 (使用居多):网站门户系统---"搜索商品" ,模糊搜索-- _:代表某个单个字符-- 需求:查询所有姓马的学生信息SELECT*FROM
student3
WHERE NAME LIKE'%马%'-- 查询学生姓名三个字符并且第二个字符是化的人SELECT*FROM
student3
WHERE NAME LIKE'_化_';-- 查询姓名为三个字符的学生信息SELECT*FROM
student3
WHERE NAME LIKE'___';
4)聚合函数查询:针对int类型:单行单列数据
SQL中的聚合函数
作用
max(列名)
求这一列的最大值
min(列名)
求这一列的最小值
avg(列名)
求这一列的平均值
count(列名)
统计这一列有多少条记录
sum(列名)
对这一列求总和
-- select 聚合函数 from 表名 where 还可以指定条件;-- count(字段名称):查询表中记录 ,字段名称使用都是id,非业务字段-- avg(字段名称): 查询这个字段中平均值 -- sum(字段列表):求和函数-- max(字段名称):最大值-- min(字段名称):最小值-- 需求:查询表的总记录数-- select count(english) '总记录数' from student3; -- 前提条件使用业务字段查询,不能有null值-- select count(ifnull(english,0)) '总记录数' from student3; SELECTCOUNT(id)'总条数'FROM student3 ;-- 查询数学平均分 avg(字段名称)SELECTAVG(math)'数学平均分'FROM student3;-- 数学和英语成绩求和的学生信息(姓名,和总分)SELECTSUM(math+IFNULL(english,0))'总分'--数学成绩中含有null值FROM
student3;-- max()和min()SELECTMAX(math)'数学最高分'FROM student3 ;-- select语句嵌套select语句 --- 子查询-- 需求:查询出学生数学成绩大于 数学平均分的学生所有信息;-- 使用where 条件 后面带上 比较运算符...-- Java中-- int x =10,y ;-- y = y+x ; 将10代入-- 1)查询数学平均分是多少SELECTAVG(math)FROM student3;-- 79.5000-- 2)查询大于数学平均分的学生信息SELECT*FROM
student3
WHERE
math >79.5000;-- 一步完成SELECT*FROM
student3
WHERE
math >(SELECTAVG(math)FROM student3);-- 查询数学成绩最高分的学生的姓名,年龄,地址以及数学成绩;-- 1)查询最高分是多少SELECTMAX(math)FROM student3;-- 99-- 2)查询最高分是这个成绩的学生信息SELECT
NAME '姓名',
age '年龄',
address '地址',
math '数学成绩'FROM
student3
WHERE
math =99;-- 一步完成SELECT
NAME '姓名',
age '年龄',
address '地址',
math '数学成绩'FROM
student3
WHERE
math =(SELECTMAX(math)FROM student3);
5)DQL之排序查询 order by
通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
ASC: 升序,默认值
DESC: 降序
-- select 字段列表 from 表名 order by 字段名称 排序规则(asc(默认值就是升序)或者desc 降序)UPDATE student3 SET english =88WHERE id =5;UPDATE student3 SET english =94WHERE id =6;-- 需求:按照数学成绩升序排序 单个字段SELECT*FROM
student3
ORDERBY
math ASC;-- 默认不写排序规则,就是asc 升序-- 同时条件和order by,order by在where的后面-- 需求:数学成绩大于56分的学生进行数学的降序排序SELECT
NAME ,
math
FROM
student3
WHERE math >56-- 先满足条件,才能排序!where 必须order by之前ORDERBY math DESC;-- 多个字段要同时排序,首先第一个字段排序规则,然后才是第二个字段-- 需求:数学成绩降序,英语成绩升序排序SELECT*FROM
student3
ORDERBY
math DESC, english ASC;SELECT*FROM student3 ;
DML语句:数据库操作语句DML语句之插入表记录插入数据的语法1:insert into 表名 values(值1,值2,值3,值4...值n); 插入全部数据INSERT INTO student VALUES(1,'高圆圆',42,'女','西安市') ;-- 插入表的数据支持 :一次插入多条数据-- insert into 表名 values(值1,值2,值3,值4...值n),(值1,值2,值3,值4...值n),(值1,值2,值3,值4...值n);INSERT INTO stude