【第2天】SQL快速入门-条件查询(SQL 小虚竹)

x33g5p2x  于2022-08-17 转载在 其他  
字(5.6k)|赞(0)|评价(0)|浏览(556)

回城传送–》《32天SQL筑基》

零、前言

今天是学习 SQL 打卡的第 2 天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 )。

希望大家先自己思考,如果实在没有想法,再看下面的解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了,养成每天学习打卡的好习惯。

​ 虚竹哥会组织大家一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。

​ 我的学习策略很简单,题海策略+ 费曼学习法。如果能把这些题都认认真真自己实现一遍,那意味着 SQL 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。

今天的学习内容是:条件查询

一、练习题目

题目链接难度
基础排序:SQL36 查找后排序★☆☆☆☆
基础排序:SQL37 查找后多列排序★★☆☆☆
基础操作符:SQL6 查找学校是北大的学生信息★☆☆☆☆
基础操作符:SQL9 查找除复旦大学的用户信息★★☆☆☆
高级操作符:SQL13 Where in 和Not in★☆☆☆☆
高级操作符:SQL14 操作符混合运用★★★☆☆

二、SQL思路

基础排序:SQL36 查找后排序

初始化数据

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4);
INSERT INTO user_profile VALUES(2,3214,'male',23,'复旦大学',4.0);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8);
INSERT INTO user_profile VALUES(6,2131,'male',28,'北京师范大学',3.3);

解法

1、第一种解法:要按用户的年龄升序排序,要用到关键词:order by
默认是升序

select  device_id,age 
from user_profile
order by age

2、第二种解法:
要按用户的年龄升序排序,要用到关键词:order by asc | desc

asc代表升序
desc代表降序

select  device_id,age 
from user_profile
order by age asc

基础排序:SQL37 查找后多列排序

初始化数据

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4);
INSERT INTO user_profile VALUES(2,3214,'male',23,'复旦大学',4.0);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8);
INSERT INTO user_profile VALUES(6,2131,'male',28,'北京师范大学',3.3);

解法

要求:按照gpa升序排序,再按照年龄升序排序输出
1、第一种解法:要用到关键词:order by
多个字段用“ , ”隔开,默认是升序

select device_id,gpa,age
 from user_profile
 order by gpa,age;

2、第二种解法:要用到关键词:order by asc | desc
多个字段用“ , ”隔开,

asc代表升序
desc代表降序

select device_id,gpa,age
from user_profile
order by gpa asc,age asc;

基础操作符:SQL6 查找学校是北大的学生信息

初始化数据

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`province` varchar(32)  NOT NULL);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing');
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai');
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing');
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang');
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong');
create index university_index on user_profile(university);

解法

第一种解法:在where 条件后,添加条件,university字段的值等于 北京大学

select device_id,university from user_profile where university='北京大学';

第一种解法:在where 条件后,添加条件,使用 like 关键字进行匹配。

select device_id,university from user_profile where university like '北京大学';

基础操作符:SQL9 查找除复旦大学的用户信息

初始化数据

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`province` varchar(32)  NOT NULL);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing');
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai');
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing');
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang');
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong');

解法

第一种解法:在where 条件后,添加条件,使用 != 不等于的条件
注:这个只能添加一个值

select device_id,gender,age,university
from user_profile
where university !='复旦大学';

第二种解法:在where 条件后,添加条件,使用 not in 的条件
注:这个可以添加多个值,像这样

not in(‘A’,‘B’,‘C’)

select device_id,gender,age,university
from user_profile
where university not in('复旦大学');

第三种解法:在where 条件后,添加条件,使用 not like 的条件

select device_id,gender,age,university
from user_profile
where university not like '复旦大学'

第四种解法:在where 条件后,添加条件,使用 not like 的条件

select device_id,gender,age,university
from user_profile
where university not like '复旦大学'

第五种解法:在where 条件后,添加条件,使用 <> 的条件
注: sql中有两种方式表示不等于,一种是"<>“(不含引号),另一种是”!="(不含引号),用法是一样的

select device_id,gender,age,university
from user_profile
where  university <> '复旦大学'

高级操作符:SQL13 Where in 和Not in

初始化数据

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`province` varchar(32)  NOT NULL,
`gpa` float);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing',3.4);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai',4.0);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing',3.2);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang',3.6);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong',3.8);

解法

使用in 条件,可添加多个值,符合in里的值,会被搜索出来

select device_id,gender,age,university,gpa
from user_profile
where university in('北京大学','复旦大学','山东大学');

高级操作符:SQL14 操作符混合运用

初始化数据

drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`province` varchar(32)  NOT NULL,
`gpa` float);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing',3.4);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai',4.0);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing',3.2);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang',3.6);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong',3.8);

解法

这题包含了多个条件的混用:

  • gpa在3.5以上(不包括3.5)的山东大学用户,这是一个大条件
  • gpa在3.8以上(不包括3.8)的复旦大学同学,这也是一个大条件
  • 多个大条件的话,可以用括号包起来
  • 中间有要求用或,这里要用关键字:OR
select  device_id,gender,age,university,gpa
from user_profile
where (gpa>3.5 and university='山东大学') or (gpa>3.8 and university='复旦大学')

相关文章