DML(数据库操作数据)语句
语句1:---插入数据
插入数据:INSERT INTO 表名 VALUES(值1,值2,...);
插入多条数据:INSERT INTO 表名 VALUES(值1,值2,...),
VALUES(值1,值2,...), VALUES(值1,值2,...);
插入部分数据:INSERT INTO 表名(字段名1,字段名2,...)VALUES(值1,值2,...);
一次插入多条部分数据:INSERT INTO 表名(字段名1,字段名2,...)
VALUES(值1,值2,...),
VALUES(值1,值2,...),
VALUES(值1,值2,...);
注意事项:
1)插入的这些值必须要和表中的字段对应上; 先后顺序保证一致!
2)目前没有加入"数据库约束",可以插入非法数据,举例:id重复 ,
后期需要使用数据库约束来限定用户的操作表的行为!
语句2:---修改数据
一次修改一个数据:update 表名 set 字段名称 = 值 where 条件 ;
一次修改多个数据:update 表名 set 字段名称1 = 值 ,字段名称2 =值2.... where 条件;
不带条件批量修改:update 表名 set 字段名称 = 值
语句3:-----删除数据
带条件删除记录:delete from 表名 where 条件 ;
删除全表数据:delete from 表名 ;
truncate table 表名;
面试题:
delete from 表名 和 truncate table 表名两个的区别?
共同点:都是可以删除全表的记录的;
不同点:delete from 表名 ;
仅仅只是将表的全部记录删除了,表还在!
针对id(非业务字段:设置主键并且自增长),它不影响自增长主键的这个值;
truncat table 表名; 将表所有数据删除,而且还会把删除之后,
自动创建一个张一模一样的表,影响自增主键的值!
创建一个学生表,id 加入主键(非空且唯一)和自增长(不断的自增1)约束
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT , -- id主键并且自增长
NAME VARCHAR(20),-- 姓名
age INT
);
DQL语句:
排序查询
ORDER BY
字段名 ASC --默认不写排序规则asc就是升序
ORDER BY
字段名 DESC --默认不写排序规则desc就是降序
注意:WHERE必须在ORDER BY之前
多个字段同时排序,谁在前谁优先
聚合函数查询:
针对int类型:单行单列数据
COUNT:查询表中记录
语法:SELECT COUNT(字段) "代号" FROM 表名;--字段名中无null值
SELECT COUNT(IFNULL(字段,0)) "代号" FROM 表名;--字段名中有NULL值
AVG:查询这个字段中的平均值
语法:SELECT AVG(字段) "代号" FROM 表名;
SUM:求和函数
语法:SELECT SUM(字段1 + 字段2) "代号" FROM 表名;
注意:NULL值
MAX:最大值
语法:SELECT MAX(字段) "代号" FROM 表名;
MIN:最小值
语法:SELECT MIN(字段) "代号" FROM 表名;
注意:int类型的值 + NULL = NULL
SELECT语句嵌套SELECT语句---子查询
语法:
SELECT
字段1,
字段2
FROM
表名
WHERE
字段 > (SELECT AVG(字段) FROM 表名) ;
WHERE条件后面加模糊查询
LIKE:
语法:
SELECT 字段列表
FROM 表名
WHERE 字段 LIKE '%xxx%';
%:代表任何多个字符或者某个字符
_:代表某个单个字符
判断字段是否为NULL的信息
语法:
RELECT 字段列表 FROM 表名 WHERE 字段 IS NOT NULL;
RELECT 字段列表 FROM 表名 WHERE 字段 NOT NULL;
条件查询
WHERE
语法:
SELECT
字段列
FROM
表名
WHERE
判断条件;
赋值运算符;=
比较运算符:< , > , <= , >= , != ,<>(mysql中的不等于)
逻辑运算符;&& || and or (mysql中推荐使用)
字段 BETWEEN 范围1 AND 范围2
字段范围1 AND 字段范围2
字段值1 OR 字段值2
字段 IN(值1,值2,...);
字段冗余(重复度大) 字段去重
语法:
SELECT
DISTINCT 字段名1,字段名2...
FROM
USE myee_2203;
SHOW TABLES;
CREATE TABLE student(
id INT, -- id编号
NAME VARCHAR(20), -- 姓名
chinese INT, -- 语文
english INT, -- 英语
math INT -- 数学
);
/*
增加数据
*/
DESC student;
INSERT INTO student VALUES(1,'行哥',89,78,90),(2,'潘金莲',67,53,95),
(3,'凤姐',87,78,77),(4,'旺财',88,98,92),(5,'白小黑',82,84,67),
(6,'白小黄',55,85,45),(7,'范蹦蹦',75,65,30);
/*
统计学生总成绩
*/
SELECT
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)) "总分"
FROM
student;
/*
统计学生总成绩并增加10分特长分
*/
SELECT
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)+ 10) "总分"
FROM
student;
/*
使拥别名表示学生分数
*/
SELECT
id ,
NAME AS "姓名",
chinese AS "语文成绩",
English AS "英语成绩",
math AS "数学成绩"
FROM
student;
/*
查询姓名为航哥的学习成绩
*/
SELECT
NAME,
chinese,
english,
math
FROM
student
WHERE
NAME = "行哥";
/*
查询英语成绩大于90分的同学
*/
SELECT
NAME,
english
FROM
student
WHERE
english > 90;
/*
查询总分成绩大于200分的所有同学
*/
SELECT
NAME,
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)) "总分"
FROM
student
WHERE
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)) > 200;
/*
查询英语分数在80-90之间的同学
*/
SELECT
NAME,
English
FROM
student
WHERE
english BETWEEN 80 AND 90;
/*
查询数学分数为89,90,91的同学
*/
SELECT
NAME,
math
FROM
student
WHERE
math IN(89,90,91);
/*
查询学生姓名和英语成绩
*/
SELECT
NAME,
english
FROM
student;
/*
查询所有姓白的学生英语成绩
*/
SELECT
NAME,
english
FROM
student
WHERE
NAME LIKE "%白%";
/*
查询数学分>80并且语文分>80的同学
*/
SELECT
NAME,
math,
Chinese
FROM
student
WHERE
math > 80 AND Chinese > 80;
/*
查询英语>80或者总分>200的同学
*/
SELECT
NAME,
english ,
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)) "总分"
FROM
student
WHERE
english > 80 AND
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)) > 200;
/*
对数学成绩升序排序
*/
SELECT
NAME,
math
FROM
student
ORDER BY
math ASC;
//*
对总分降序排序,然后再按数学从高到低的顺序输出
*/
SELECT
NAME,
math,
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)) "总分"
FROM
student
ORDER BY
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)) DESC,
math DESC;
/*
对姓白的学生成绩排序输出(排序规则自己定义)
*/
SELECT
NAME,
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)) "总分"
FROM
student
WHERE
NAME LIKE "%白%"
ORDER BY
(IFNULL(chinese,0) + IFNULL(english,0) + IFNULL(math,0)) ASC;
/*
数学平均分
*/
SELECT
AVG(math) "数学平均分"
FROM
student;
/*
查询数学成绩大于等于平均分的所有学生信息
*/
SELECT
NAME ,
math
FROM
student
WHERE
math > (SELECT
AVG(math) "数学平均分"
FROM
student);
/*
查询出英语成绩最高分的学生信息
*/
SELECT
MAX(english)
FROM
student;
/*
模糊查询出学生姓名中第二个字是金的学生信息
*/
SELECT
NAME
FROM
student
WHERE
NAME LIKE "_金%";
/*
查询出英语成绩平均分是多少
*/
SELECT
AVG(english) "英语平均分"
FROM
student;
/*
查询出数学总分是多少
*/
SELECT
SUM(math) "数学总分"
FROM
student;
/*
查询学生表中有多少条记录
*/
SELECT
COUNT(math) "总记录数"
FROM
student;
/*
过滤表中重复数据
*/
SELECT
DISTINCT id,
NAME,
chinese,
english,
math
FROM
student;
/*
查询学生信息
*/
SELECT * FROM student;
student3;