【写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
posted @   tootooquan  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示