5、增删查改

插入语句完整表示(方括号内的内容代表可以省略)

INSERT INTO `表名` ([`字段名1`, `字段名2`,......]) VALUES (11,12,...), (21,22,...),......;
INSERT INTO `account` (`id`, `name`, `money`)  VALUES (110, 'yuan', 500), (200, 'qi', 600);   -- account为表名,`id`, `name`, `money`为字段名,此语句同时插入了两行数据

插入语句可以省略所有的字段名,但是后面的值的顺序要和字段名一一配对

INSERT INTO `表名` VALUES (11,12,...), (21,22,...),......;
INSERT INTO `account` VALUES (150, 'yuan', 500);

插入语句可以省略主键,但其他的字段名要写全,后面的值也可以省略主键(例子中id为主键)

INSERT INTO `account` (`name`, `money`)  VALUES ('yuan', 500);

DELETE 命令

DELETE FROM `表名` [WHERE 条件];  -- 没有where条件时,默认全部删除
DELETE FROM `account` WHERE `id`=1;

TRUNCATE 命令

TRUNCATE `表名`   -- 完全清空一个数据库

DELETE(不加where条件,全删) 和 TRUNCATE 命令比较

相同点:都能删除数据,表的结构和索引约束不会变
不同点:1、对于自增列,TRUNCATE会重新设置将计数器归0,DELETE不会改变计数器(不重启服务器);2、TRUNCATE不会影响事务

补充:当用DELETE全删数据后,并重启数据库服务net stop mysql net start mysql,此时

  • INNODB引擎,自增列会重新从1开始。计数器归0(存在内存中,断电即失)
  • MYISAM引擎,自增列继续从上一个自增量开始(存在文件中,不会失去)

UPDATE `表名` SET `字段名1`=1, [`字段名2`=2]...... [WHERE 条件];
UPDATE `account` SET `money`='500' WHERE `id` = 1;

查询基础语法

查询表中所有数据

SELECT * FROM `表名`;

查询指定字段

SELECT `字段名1`, `字段名2`,...... FROM `表名`; 

给查询出来的列起别名,方便看

SELECT `字段1` AS `别名1`, `字段2` AS `别名2`,...... FROM `表名` AS `表的别名`;

对查询结果进行拼接,concat(a,b),可以不光是字符串拼接

SELECT CONCAT(字符串, `字段名`) FROM `表名`;
SELECT CONCAT('学生:', `studentname`) AS `学生` FROM `student`;

在这里插入图片描述
对查询结果进行去重,重复数据只显示一条,DISTINCT

SELECT DISTINCT `字段名` FROM `表名`;

对查询结果进行运算修改(对成绩进行加1修改)

SELECT  `studentresult`+1 AS `加一后的成绩` FROM `result`; 

可以查询:文本值、列、Null、函数、计算表达式、系统变量…

SELECT VERSION();  -- 函数,查询版本
SELECT 100+3 AS `计算结果`;   -- 数学表达式
SELECT @@auto_increment_increment;    -- 系统变量。查询自增的步长

WHERE条件子句

当不添加where条件时,默认选择所有的数据。where条件很灵活,相当于每一行数据都进行条件判断。满足条件的就进行操作

逻辑运算符:

运算符含义
AND &&
OR ||
NOT !
SELECT `studentno`, `studentresult` FROM `result`     
WHERE `studentno`>1000 AND `studentno`<=1001;    -- AND

SELECT `studentno`, `studentresult` FROM `result`
WHERE `studentno` BETWEEN 1000 AND 1001;     -- BETWEEN

SELECT `studentno`, `studentresult` FROM `result`
WHERE `studentno`!=1000;    -- !=

比较运算符:

运算符含义
IS NULL为空
IS NOT NULL非空
BETWEEN…AND…在某个范围内,闭区间
LIKESQL匹配,常搭配正则表达式
IN是否在某些备选值中
=等于
!= , <>不等于
>, <, <=, >=关系
 -- like  匹配
SELECT `studentno`, `studentname` FROM `student`
WHERE `studentname` LIKE '%强';    -- %代表0到任意个字符

SELECT `studentno`, `studentname` FROM `student`
WHERE `studentname` LIKE '__强';    -- _代表1个字符

 -- in  是否在备选值中
SELECT `studentno`, `studentname` FROM `student`
WHERE `studentno` IN (1001,1002,1005);  

SELECT `address` FROM `student`
WHERE `address` IN ('广东', '北京');

-- null 空 not null 非空
SELECT `studentno`, `studentname` FROM `student`
WHERE `address` IS NULL OR `address`='';

SELECT `studentno`, `studentname` FROM `student`
WHERE `address` IS NOT NULL;

联表查询JOINON、自连接 、子查询

https://blog.csdn.net/qq_39037116/article/details/119616526

排序和分页

排序:升序 ASC 降序 DESC

SELECT * FROM `` 
ORDER BY `字段名` DESC/ASC;

分页:
LIMIT 0, 5 代表从第一行开始展示五个数据
LIMIT 2, 6 代表从第三行开始展示六个数据

SELECT * FROM `` 
LIMIT 起始值, 页面的大小;

分组过滤

GROUP BY 指定结果按照哪几个字段来进行分组
HAVING 过滤分组后的结果必须满足的次要条件
(WHERE也可以进行条件判断,但WHERE语句在分组语句前,且WHERE不能搭配聚合函数)

按字段名2进行分组,求取分组后字段名1的平均值,之后再过滤得到平均分 >= 80的数据

SELECT AVG(`字段名1`) AS 平均分 
FROM `表名`
GROUP BY `字段名2`
HAVING 平均分 >= 80;

查询语法汇总

[ ]代表可选,{ }代表必选

SELECT [ALL | DISTINCT]
{* | 表名.* | 表名.字段1[AS 别名1][, 表名.字段2[AS 别名2]][,...]}   -- 此处表名是表名1或表名2,是为了区分这两个表
FROM 表名1 [AS 表别名1]
    [LEFT | RIGHT | INNER JOIN 表名2]   -- 联合查询
    [WHERE 条件1]  -- 指定结果需满足的条件
    [GROUP BY 字段名] -- 指定结果按照哪几个字段分组
    [HAVING 条件2]  -- 过滤分组后必须满足的次要条件
    [ORDER BY 字段名 ASC/DESC]  -- 指定结果按照某个字段进行排序
    [LIMIT {[起始行数,] 每页最大行数}]  -- 指定查询记录从哪条到哪条

参考:https://www.bilibili.com/video/BV1NJ411J79W?p=25

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值