【写MySQL语句中遇到的不熟练处记录】
按从 Z 到 A 的顺序显示结果
字符串默认就是按字典顺序
Z 到 A 的排序:order by cust_name desc
先按XX排序,再按XX排序
先按顾客 ID 对结果进行排序,再按订单日期倒序排列。直接在order by中写多个字段即可。
select cust_id,order_num from Orders order by cust_id, order_date desc;
order by 的使用在where 之后
包含 toy 一词
where prod_desc like '%toy%';
不包含 toy 一词
where prod_desc not like '%toy%';
包含 toy 和 carrots
where prod_desc like '%toy%' and prod_desc like '%carrots%' ;
返回大写字母 upper()
字母大写:upper(字符串)
取前n个字符并进行拼接
字符串的截取:substring(字符串,起始位置(从1开始),截取字符数)
字符串的拼接:concat(字符串1,字符串2,字符串3,...)
concat(substring(cust_name,1,2),substring(cust_city,1,3))
返回日期的一部分---date_format(日期,'%Y%m%d)
select order_num,order_date
from Orders
where date_format(order_date,'%Y-%m')='2020-01'
order by order_date
或者
where month(order_date) = 1 and year(order_date) = 2020
典型函数
最大值---max()
最小值---min()
平均值---avg()
总值 ---sum()
总数 ---count()
group by 和 having
where---过滤过滤指定的行
having--过滤分组,与group by连用
where条件语句后面不能加聚合函数(分组函数)
having 不能单独使用,必须和group by 联合使用
select order_num
from OrderItems
group by order_num
having sum(quantity)>=100
order by order_num
join 和 union
join---连接表,对列操作
union--连接表,对行操作。
union--将两个表做行拼接,同时自动删除重复的行。
union all---将两个表做行拼接,保留重复的行。
只用一条select语句,那就用or不用union了
插入语句
插入记录的方式汇总:
普通插入(全字段):INSERT INTO table_name VALUES (value1, value2, ...)
普通插入(限定字段):INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)
多条一次性插入:INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...), ...
从另一个表导入:INSERT INTO table_name SELECT * FROM table_name2 [WHERE key=value]
insert into exam_record
VALUES (null,1001,9001,'2021-09-01 22:11:12','2021-09-01 22:11:12' +INTERVAL 50 minute,90),
(null,1002,9002,'2021-09-04 07:01:02',null,NULL);
或
insert into exam_record(uid,exam_id,start_time,submit_time,score)
VALUES (1001,9001,'2021-09-01 22:11:12','2021-09-01 23:01:12' ,90),
(1002,9002,'2021-09-04 07:01:02',null,NULL);
注意如果省去某个字段让其自增,需要在表名后说明字段名
修改语句
修改记录的方式汇总:
设置为新值:UPDATE table_name SET column_name=new_value [, column_name2=new_value2] [WHERE column_name3=value3]
根据已有值替换:UPDATE table_name SET key1=replace(key1, '查找内容', '替换成内容') [WHERE column_name3=value3]
本题采用两种修改方式均可,语义为『当tag为PYTHON时,修改tag为Python』,先用第一种:
UPDATE examination_info
SET tag = "Python"
WHERE tag = "PYTHON";
如果采用第二种,写作:
UPDATE examination_info
SET tag = REPLACE(tag, "PYTHON", "Python")
WHERE tag = "PYTHON";
思维扩展:第二种方式不仅可用于整体替换,还能做子串替换,例如要实现将tag中所有的PYTHON替换为Python(如CPYTHON=>CPython),可写作:
UPDATE examination_info
SET tag = REPLACE(tag, "PYTHON", "Python")
WHERE tag LIKE "%PYTHON%";
删除语句
删除记录的方式汇总:
根据条件删除:DELETE FROM tb_name [WHERE options] [ [ ORDER BY fields ] LIMIT n ]
全部删除(表清空,包含自增计数器重置):TRUNCATE tb_name
判断是否为空:is null,不要用=
where submit_time is null
修改表
alter table user_info add school varchar(15) after level;
增加列在某列之后
alter table 增加的表格 add 增加列的名称 数据类型 位置(after level 在level 之后)
alter table user_info change job profession varchar(10);
更换列的名称及数据类型
alter table user_info change 原列名 修改列名 修改数据类型
alter table user_info modify achievement int(11) default 0;
更改数据类型
alter table 表名 modify 修改列名称 数据类型 默认值等
创建索引
CREATE
[UNIQUE -- 唯一索引
| FULLTEXT -- 全文索引
] INDEX index_name ON table_name -- 不指定唯一或全文时默认普通索引
(column1[(length) [DESC|ASC]] [,column2,...]) -- 可以对多列建立组合索引
-- 普通索引
CREATE INDEX idx_duration ON examination_info(duration);
-- 唯一索引
CREATE UNIQUE INDEX uniq_idx_exam_id ON examination_info(exam_id);
-- 全文索引
CREATE FULLTEXT INDEX full_idx_tag ON examination_info(tag);
删除索引
drop方式删除索引:
drop index uniq_idx_exam_id on examination_info;
drop index full_idx_tag on examination_info;
alter方式删除索引:ALTER TABLE <表名> DROP INDEX <索引名>
distinct 可以对多列的组合去重
DISTINCT需要放到所有列名的前面,否则会报错
DISTINCT其实是对后面所有列名的组合进行去重。
SELECT DISTINCT attack_range, name FROM heros
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本