开发工具:
- mysql-8.0
- DataGrip
数据源:chapter5.csv
id,name,class,age,score E001,张通,一班,18,"{""语文"":98,""数学"":79,""英语"":80}" E002,李谷,一班,22,"{""语文"":73,""数学"":99,""英语"":92}" E003,孙凤,一班,22,"{""语文"":99,""数学"":87,""英语"":79}" E004,赵恒,二班,19,"{""语文"":93,""数学"":94,""英语"":75}" E005,王娜,二班,17,"{""语文"":75,""数学"":74,""英语"":99}" E006,李伟,二班,19,"{""语文"":89,""数学"":98,""英语"":92}" E007,刘杰,三班,18,"{""语文"":99,""数学"":77,""英语"":77}" E008,薛李,三班,17,"{""语文"":91,""数学"":79,""英语"":73}" E009,裴军,三班,21,"{""语文"":82,""数学"":94,""英语"":72}"
(1)获取列
(1.1)获取全部列
我们想要获取SQL的chapter5表中的全部列,则可以通过如下代码实现:
-- 获取全部行 select * from demo.chapter5;
(1.2)获取特定的列
我们要获取chapter5表中的id列和class列,可以通过如下代码实现:
-- 获取特定的列 select id,name from demo.chapter5;
(2)获取想要的行
(2.1)获取全部行
如果只指定了要获取哪些列,对行没有指定,则默认获取的是这些列的全部行。
(2.1)获取前几行
在SQL中,我们可以利用limit来对获取的行数进行限制,比如,我们要获取chapter5表中全部列的前5行,可以通过如下代码实现:
-- 获取前几行 select * from demo.chapter5 limit 5;
limit除了可以限制前几行,还可以写为limit x,y的形式,表示获取第x行(不包括第x行)
以后的y行数据。
select * from demo.chapter5 limit 2,3;
(2.1)获取满足单一条件的行
我们要获取chapter5表中age列等于18对应的行,可以通过如下代码实现:
-- 获取满足单一条件的行 select * from demo.chapter5 where age = 18;
(2.1)获取满足多个条件的行
我们要获取chapter5表中age列等于18且class列等于、或者一班的所有行,可以通过如下代码实现:
-- 获取满足多个条件的行 select * from demo.chapter5 where age = 18 and class = '一班'; select * from demo.chapter5 where age = 18 or class = '一班';
(3)行列同时获取
们要获取chapter5表中age列等于18且class列等于一班的id列和name列,具体实现代码如下:
-- 行列同时获取 select id,name from demo.chapter5 where age = 18 and class = '一班';
(4)插入一列固定值
我们要从chapter5表中获取age列小于20的id列和name列,并希望用一列标签列来标识这些人的年龄情况:
-- 插入一列固定值:chapter5表中获取age列小于20的id列和name列,并希望用一列标签列来标识这些人的年龄情况。 select id,name,'age < 20' as label from demo.chapter5 where age < 20;
(5)JSON列解析
chapter5表中的score列就是JSON格式,比如,我们要获取每个id对应的数学成绩,可以通过如下代码实现:
-- JSON列解析 -- 我们要获取每个id对应的数学成绩 select id,json_extract(score,'$.数学') as '数学成绩' from demo.chapter5;
json_extract()主要有两个参数,第一个参数需要说明JSON格式的列名,此处是score列;第二个参数需要说明你要获取JSON中具体哪个key对应的value值,注意key前面的$符号不可少。此处是要获取“数学”这个key对应的数学成绩这个value值。
json_extract()用于获取JSON中key对应的value值,如果我们想要查看JSON中都有哪些key,则可以通过json_keys()来实现。比如,我们要查看每个id对应的score列中都有哪些key,就可以通过如下代码实现:
-- 我们要查看每个id对应的score列中都有哪些key select id,json_keys(score) as '科目' from demo.chapter5;
(6)对结果进行排序
我们要将chapter5表按照age列进行升序排列,具体实现代码如下:
-- 对结果进行排序 -- 我们要将chapter5表按照age列进行升序排列 select * from demo.chapter5 order by age ;
如果我们想按照age列进行降序排列,则可以在age后面加一个desc,表明降序排列,具体实现代码如下:
-- 我们要将chapter5表按照age列进行降序排列 select * from demo.chapter5 order by age desc ;
我们要对chapter5表中的class列进行升序排列,对age列进行降序排列,具体实现代码如下:
-- 对chapter5表中的class列进行升序排列,对age列进行降序排列 select * from demo.chapter5 order by class asc , age desc ;