前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Day6 | 数据库操作-索引补充、非空表达式、CASE WHEN函数

Day6 | 数据库操作-索引补充、非空表达式、CASE WHEN函数

作者头像
DataScience
发布2020-07-02 14:45:44
5490
发布2020-07-02 14:45:44
举报
文章被收录于专栏:A2DataA2DataA2Data

背景介绍

本篇针对索引进行展开介绍,以及补充对非空表达式和CASE WHEN函数的介绍。

索引

复习一下

唯一索引&主键索引

唯一索引要求作为索引的字段列值唯一;主键索引是特殊的唯一索引,要求作为索引的字段唯一且不为空。

案例:对用户列表创建主键索引和唯一索引。

alter table 用户列表 add PRIMARY key (编号);

create unique index i1 on 用户列表(编号);

使用explain查询来查看索引的使用情况,当使用“编号”列查询时,type为const,同时使用了唯一索引i1和主键索引primary,而使用其他字段查询时则未使用到索引:

组合索引

组合索引即多列索引,用多个字段创建索引。

最左原则:创建组合索引(a,b,c)后,可以支持a|(a,b)|(a,b,c)三种索引,但不支持(b,c)。

案例:组合索引的创建

create index i2 on 用户列表(用户名,公司,性别);

全文索引

全文索引只为CHAR、VARCHAR、TEXT列服务。

创建数据表时添加全文索引:

CREATE TABLE table_name(
id INT NOT NULL,
name CHAR(30) NOT NULL,
age INT NOT NULL,
info VARCHAR(255),
FULLTEXT INDEX index_name(name,info)
);

在现有数据表中添加全文索引:

ALTER TABLE table_name ADD FULLTEXT INDEX index_name (column1,column2,...);

删除全文索引:

DROP INDEX index_name ON table_name;
或
ALTER TABLE table_name DROP INDEX index_name;

全文索引的使用:

select * from table_name where MATCH (column_name) AGAINST ('关键字')

注意:在使用全文搜索时,需要借助 MATCH 函数,搜索的关键字默认至少要4个字符,如果搜索的关键字太短就会被忽略掉。

案例:

1、在用户列表中添加全文索引:

2、删除全文索引:

3、使用全文索引:

注意当关键字小于4个字符时,未查询到相应结果。

非空表达式:COALESCE

非空表达式coalesce(),其作用是返回括号内参数中的第一个非空表达式,顺序为括号内从左向右依次类推。若括号内所有参数均为NULL,则返回NULL值。

coalesce括号内参数只有两个时,相当于IFNULL函数。

SELECT COALESCE(column_name1,column_name2,自定义值,...);

案例:

原数据失效时间列为null值

简单查询 VS coalesce查询

CASE WHEN查询

case when函数可以有简单函数和搜索函数两种用法,结构大致相同:

case column_name when 条件/取值 then 结果1 else 结果2 end

case when函数可以与聚合函数结合使用,在搜索函数中when后可以使用and连接多个条件。

案例:

简单查询

搜索查询(用CASE WHEN实现数据透视)

今日小练习

练习一:关于索引的选择题

Q1: 下面创建索引的语句正确的是(多选):

A. CREATE INDEX T1_ind1,T1_ind2 ON T1(f1,f2).

B. CREATE INDEX T1_ind ON T1(f1 ASC,f2);

C. CREATE UNIQUE INDEX T1_ind ON T1(f1, f2);

D. CREATE INDEX T1_ind ON T1(f1);

Q2: UNIQUE惟一索引的作用是(单选):

A.保证各行在该索引上的值都不得重复

B.保证各行在该索引上的值不得为NULL

C.保证参加惟一索引的各列,不得再参加其他的索引

D.保证惟一索引不能被删除

练习二:MYSQL实际操作(做完就是case when最强者!)

继续我们熟悉的练习场景:学生、课程、教师、成绩表。公众号后台回复“DML练习”,获取练习题所需源数据。

今日练习如下:

Q3: 查询所有学生在每门课程中的分数、以及每个学生的总分

Q4: 查询各学生的年龄(Tips: 可使用NOW()函数得到当前查询日期与时间,使用DATE_FORMAT()函数对日期格式进行加工)

Q5: (附加题)查询各门课程的课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率注:及格为>=60,中等为70-80,优良为80-90,优秀为>=90

还未构造练习场景的同学,和未完成作业的同学,你真的需要好好温习课程的历史文章内容了哦!坚持,加油鸭!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • 索引
    • 复习一下
    • 唯一索引&主键索引
    • 组合索引
    • 全文索引
    • 非空表达式:COALESCE
    • CASE WHEN查询
    • 今日小练习
    相关产品与服务
    Elasticsearch Service
    腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档