## * 第一题-查询所有列 题目:现在运营想要查看用户信息表中所有的数据,请你取出相应结果 示例:user_profile | id | device_id | gender | age | university | province | | -- | --------- | ------ | --- | ---------- | -------- | | 1 | 2138 | male | 21 | 北京大学 | Beijing | | 2 | 3214 | male | | 复旦大学 | Shanghai | | 3 | 6543 | female | 20 | 北京大学 | Beijing | | 4 | 2315 | female | 23 | 浙江大学 | ZheJiang | | 5 | 5432 | male | 25 | 山东大学 | Shandong | 根据示例,你的查询应返回以下结果: | id | device_id | gender | age | university | province | | -- | --------- | ------ | --- | ---------- | -------- | | 1 | 2138 | male | 21 | 北京大学 | Beijing | | 2 | 3214 | male | | 复旦大学 | Shanghai | | 3 | 6543 | female | 20 | 北京大学 | Beijing | | 4 | 2315 | female | 23 | 浙江大学 | Zhejiang | | 5 | 5432 | male | 25 | 山东大学 | Shandong | 答: 第一种 ```sql SELECT * FROM user_profile; ``` 第二种 ``` SELECT id,device_id,gender,age,university,province FROM user_profile; ``` 第一种适用于表中数据量不大的情况全表扫描查询,全表扫描会导致数据路性能下降,速度慢; 第二种适用于数据量庞大,知晓列名的情况下,直接对列数据抽取,速度快; 总的来说,直接检索列数据效率比扫描全表获取列数据要高的多。 --- ## * 第二题-查询结果去重 题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。 示例:user_profile | id | device_id | gender | age | university | province | | -- | --------- | ------ | --- | ---------- | -------- | | 1 | 2138 | male | 21 | 北京大学 | Beijing | | 2 | 3214 | male | | 复旦大学 | Shanghai | | 3 | 6543 | female | 20 | 北京大学 | Beijing | | 4 | 2315 | female | 23 | 浙江大学 | ZheJiang | | 5 | 5432 | male | 25 | 山东大学 | Shandong | 根据示例,你的查询应返回以下结果: | university | | ---------- | | 北京大学 | | 复旦大学 | | 浙江大学 | | 山东大学 | 答: 第一种 ```sql SELECT DISTINCT university FROM user_profile; ``` 第二种 ```sql SELECT university FROM user_profile GROUP BY university; ``` 第一种 DISTINCT 只能放在查询字段的最前面,不能放在查询字段的中间或者后面。 distinct 对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 distinct 后面连接的单个字段重复的数据。要查询多个字段,但只针对一个字段去重,使用distinct去重的话是无法实现的。 第二种GROUP BY 一般与聚类函数使用(如count()/sum()等),也可单独使用。 group by 也对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 group by后面连接的单个字段重复的数据。查询的字段与group by 后面分组的字段没有限制。(在oracle中使用group by时,查询的字段必须是group by 分组的字段和聚类函数。如select name,sex from tb\_students group by name这个sql) --- ## 第三题-查询结果限制返回行数 题目:现在运营只需要查看前2个用户明细设备ID数据,请你从用户信息表 user_profile 中取出相应结果。 示例: | id | device_id | gender | age | university | province | | -- | --------- | ------ | --- | ---------- | -------- | | 1 | 2138 | male | 21 | 北京大学 | Beijing | | 2 | 3214 | male | | 复旦大学 | Shanghai | | 3 | 6543 | female | 20 | 北京大学 | Beijing | | 4 | 2315 | female | 23 | 浙江大学 | ZheJiang | | 5 | 5432 | male | 25 | 山东大学 | Shandong | 根据输入,你的查询应返回以下结果: | device_id | | --------- | | 2138 | | 3214 | 答 第一种,效率低 ```sql SELECT device_id FROM user_profile LIMIT 2; ``` 第二种,效率中 ```sql SELECT device_id FROM user_profile LIMIT 2 OFFSET 0; ``` 第三种,效率高 ```sql SELECT device_id FROM user_profile LIMIT 0,2; ``` LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。 LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。 如果只给定一个参数,它表示返回最大的记录行数目。 如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。 为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。 初始记录行的偏移量是 0(而不是 1)。 例.检索记录行 6-10 ```sql SELECT * FROM table LIMIT 5,5; ``` 例.检索记录行 11-last ```sql SELECT * FROM table LIMIT 10,-1; ``` 例.检索前 5 个记录行 ```sql SELECT * FROM table LIMIT 5; ``` --- ## 第四题-将查询后的列重新命名 题目:现在你需要查看前2个用户明细设备ID数据,并将列名改为 'user\_infos\_example',,请你从用户信息表取出相应结果。 表数据参照-题目3 根据示例,你的查询应返回以下结果: | user_infos_example | | ------------------ | | 2138 | | 3214 | ```sql SELECT device_id AS user_infos_example from user_profile limit 2; ``` 注意: `//1.as 写不写都可` `//2.别名加不加引号(单双)都可` ` ``//加引号:别名就是引号内的内容。` ` ``//不加引号:别名如果为小写,会解析为大写,别名实际为大写。` `//以上两点在调用别名时要注意,易报错:找不到对应的列(大小写对应的是不同的列)` ## 第五题-查找学校是北大的学生信息 题目:现在运营想要筛选出所有北京大学的学生进行用户调研,请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。 表数据参照-题目3 根据示例,你的查询应返回以下结果: | device_id | university | | --------- | ---------- | | 2138 | 北京大学 | | 6543 | 北京大学 | 答: ```sql select device_id ,university from user_profile where university = '北京大学'; ``` ```sql SELECT device_id ,university FROM user_profile WHERE university IN '北京大学'; ``` | 查询条件 | 谓词 | | ---------- | --------------------------------- | | 比较运算符 | =,>,>=,<,<=,<>或!=,NOT+比较运算符 | | 确定范围 | BETWEEN...AND,NOT BETWEEN...AND | | 确定集合 | IN,NOT IN | | 字符匹配 | LIKE,NOT LIKE | | 空值 | IS NULL,IS NOT NULL | | 谓词 | ESXISTS,ALL,SOME(ANY),UNIQUE | | 逻辑谓词 | AND,OR | --- ## 第六题-用where过滤空值练习 现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。 表数据参照-题目3 根据输入,你的 查询应返回以下结果: | device\_id | gender | age | university | | ---------- | ------ | --- | ---------- | | 2138 | male | 21 | 北京大学 | | 6543 | female | 20 | 北京大学 | | 2315 | female | 23 | 浙江大学 | | 5432 | male | 25 | 山东大学 | 答: ```sql SELECT device_id,gender,age,university FROM user_profile WHERE age IS NOT NULL AND age <> ''; ``` **在实际工作中**,空字符串也会导致空值,所以在常规操作中 ```sql is not null and 列 <> "" 基本同时出现 ``` 使用count()函数进行统计时,会过滤掉NULL值,但不会过滤掉空字符串 Loading... ## * 第一题-查询所有列 题目:现在运营想要查看用户信息表中所有的数据,请你取出相应结果 示例:user_profile | id | device_id | gender | age | university | province | | -- | --------- | ------ | --- | ---------- | -------- | | 1 | 2138 | male | 21 | 北京大学 | Beijing | | 2 | 3214 | male | | 复旦大学 | Shanghai | | 3 | 6543 | female | 20 | 北京大学 | Beijing | | 4 | 2315 | female | 23 | 浙江大学 | ZheJiang | | 5 | 5432 | male | 25 | 山东大学 | Shandong | 根据示例,你的查询应返回以下结果: | id | device_id | gender | age | university | province | | -- | --------- | ------ | --- | ---------- | -------- | | 1 | 2138 | male | 21 | 北京大学 | Beijing | | 2 | 3214 | male | | 复旦大学 | Shanghai | | 3 | 6543 | female | 20 | 北京大学 | Beijing | | 4 | 2315 | female | 23 | 浙江大学 | Zhejiang | | 5 | 5432 | male | 25 | 山东大学 | Shandong | 答: 第一种 ```sql SELECT * FROM user_profile; ``` 第二种 ``` SELECT id,device_id,gender,age,university,province FROM user_profile; ``` 第一种适用于表中数据量不大的情况全表扫描查询,全表扫描会导致数据路性能下降,速度慢; 第二种适用于数据量庞大,知晓列名的情况下,直接对列数据抽取,速度快; 总的来说,直接检索列数据效率比扫描全表获取列数据要高的多。 --- ## * 第二题-查询结果去重 题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。 示例:user_profile | id | device_id | gender | age | university | province | | -- | --------- | ------ | --- | ---------- | -------- | | 1 | 2138 | male | 21 | 北京大学 | Beijing | | 2 | 3214 | male | | 复旦大学 | Shanghai | | 3 | 6543 | female | 20 | 北京大学 | Beijing | | 4 | 2315 | female | 23 | 浙江大学 | ZheJiang | | 5 | 5432 | male | 25 | 山东大学 | Shandong | 根据示例,你的查询应返回以下结果: | university | | ---------- | | 北京大学 | | 复旦大学 | | 浙江大学 | | 山东大学 | 答: 第一种 ```sql SELECT DISTINCT university FROM user_profile; ``` 第二种 ```sql SELECT university FROM user_profile GROUP BY university; ``` 第一种 DISTINCT 只能放在查询字段的最前面,不能放在查询字段的中间或者后面。 distinct 对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 distinct 后面连接的单个字段重复的数据。要查询多个字段,但只针对一个字段去重,使用distinct去重的话是无法实现的。 第二种GROUP BY 一般与聚类函数使用(如count()/sum()等),也可单独使用。 group by 也对后面所有的字段均起作用,即 去重是查询的所有字段完全重复的数据,而不是只对 group by后面连接的单个字段重复的数据。查询的字段与group by 后面分组的字段没有限制。(在oracle中使用group by时,查询的字段必须是group by 分组的字段和聚类函数。如select name,sex from tb\_students group by name这个sql) --- ## 第三题-查询结果限制返回行数 题目:现在运营只需要查看前2个用户明细设备ID数据,请你从用户信息表 user_profile 中取出相应结果。 示例: | id | device_id | gender | age | university | province | | -- | --------- | ------ | --- | ---------- | -------- | | 1 | 2138 | male | 21 | 北京大学 | Beijing | | 2 | 3214 | male | | 复旦大学 | Shanghai | | 3 | 6543 | female | 20 | 北京大学 | Beijing | | 4 | 2315 | female | 23 | 浙江大学 | ZheJiang | | 5 | 5432 | male | 25 | 山东大学 | Shandong | 根据输入,你的查询应返回以下结果: | device_id | | --------- | | 2138 | | 3214 | 答 第一种,效率低 ```sql SELECT device_id FROM user_profile LIMIT 2; ``` 第二种,效率中 ```sql SELECT device_id FROM user_profile LIMIT 2 OFFSET 0; ``` 第三种,效率高 ```sql SELECT device_id FROM user_profile LIMIT 0,2; ``` LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。 LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。 如果只给定一个参数,它表示返回最大的记录行数目。 如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。 为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。 初始记录行的偏移量是 0(而不是 1)。 例.检索记录行 6-10 ```sql SELECT * FROM table LIMIT 5,5; ``` 例.检索记录行 11-last ```sql SELECT * FROM table LIMIT 10,-1; ``` 例.检索前 5 个记录行 ```sql SELECT * FROM table LIMIT 5; ``` --- ## 第四题-将查询后的列重新命名 题目:现在你需要查看前2个用户明细设备ID数据,并将列名改为 'user\_infos\_example',,请你从用户信息表取出相应结果。 表数据参照-题目3 根据示例,你的查询应返回以下结果: | user_infos_example | | ------------------ | | 2138 | | 3214 | ```sql SELECT device_id AS user_infos_example from user_profile limit 2; ``` 注意: `//1.as 写不写都可` `//2.别名加不加引号(单双)都可` ` ``//加引号:别名就是引号内的内容。` ` ``//不加引号:别名如果为小写,会解析为大写,别名实际为大写。` `//以上两点在调用别名时要注意,易报错:找不到对应的列(大小写对应的是不同的列)` ## 第五题-查找学校是北大的学生信息 题目:现在运营想要筛选出所有北京大学的学生进行用户调研,请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。 表数据参照-题目3 根据示例,你的查询应返回以下结果: | device_id | university | | --------- | ---------- | | 2138 | 北京大学 | | 6543 | 北京大学 | 答: ```sql select device_id ,university from user_profile where university = '北京大学'; ``` ```sql SELECT device_id ,university FROM user_profile WHERE university IN '北京大学'; ``` | 查询条件 | 谓词 | | ---------- | --------------------------------- | | 比较运算符 | =,>,>=,<,<=,<>或!=,NOT+比较运算符 | | 确定范围 | BETWEEN...AND,NOT BETWEEN...AND | | 确定集合 | IN,NOT IN | | 字符匹配 | LIKE,NOT LIKE | | 空值 | IS NULL,IS NOT NULL | | 谓词 | ESXISTS,ALL,SOME(ANY),UNIQUE | | 逻辑谓词 | AND,OR | --- ## 第六题-用where过滤空值练习 现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。 表数据参照-题目3 根据输入,你的 查询应返回以下结果: | device\_id | gender | age | university | | ---------- | ------ | --- | ---------- | | 2138 | male | 21 | 北京大学 | | 6543 | female | 20 | 北京大学 | | 2315 | female | 23 | 浙江大学 | | 5432 | male | 25 | 山东大学 | 答: ```sql SELECT device_id,gender,age,university FROM user_profile WHERE age IS NOT NULL AND age <> ''; ``` **在实际工作中**,空字符串也会导致空值,所以在常规操作中 ```sql is not null and 列 <> "" 基本同时出现 ``` 使用count()函数进行统计时,会过滤掉NULL值,但不会过滤掉空字符串 最后修改:2024 年 10 月 12 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏