1、基础查询(1):查询表中的所有列
题目:要查看用户信息表中所有的信息,编写 SQL 语句取出相应结果。
示例: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 |
表结构及数据如下:
/*
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');
*/
解答:
-- 使用 *
mysql> select * from user_profile;
+----+-----------+--------+------+--------------+----------+
| id | device_id | gender | age | university | province |
+----+-----------+--------+------+--------------+----------+
| 1 | 2138 | male | 21 | 北京大学 | BeiJing |
| 2 | 3214 | male | NULL | 复旦大学 | Shanghai |
| 3 | 6543 | female | 20 | 北京大学 | BeiJing |
| 4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
| 5 | 5432 | male | 25 | 山东大学 | Shandong |
+----+-----------+--------+------+--------------+----------+
5 rows in set (0.00 sec)
-- 使用字段列表
mysql> select id, device_id, gender, age, university, province from user_profile;
+----+-----------+--------+------+--------------+----------+
| id | device_id | gender | age | university | province |
+----+-----------+--------+------+--------------+----------+
| 1 | 2138 | male | 21 | 北京大学 | BeiJing |
| 2 | 3214 | male | NULL | 复旦大学 | Shanghai |
| 3 | 6543 | female | 20 | 北京大学 | BeiJing |
| 4 | 2315 | female | 23 | 浙江大学 | ZheJiang |
| 5 | 5432 | male | 25 | 山东大学 | Shandong |
+----+-----------+--------+------+--------------+----------+
5 rows in set (0.00 sec)
2、基础查询(2):查询多列
题目:要查询用户的设备 id 对应的性别、年龄和学校信息,请你取出相应数据,编写 SQL 语句取出相应结果。
示例: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 | gender | age | university |
|---|---|---|---|
| 2138 | male | 21 | 北京大学 |
| 3214 | male | 复旦大学 | |
| 6543 | female | 20 | 北京大学 |
| 2315 | female | 23 | 浙江大学 |
| 5432 | male | 25 | 山东大学 |
解答:
mysql> select device_id, gender, age, university from user_profile;
+-----------+--------+------+--------------+
| device_id | gender | age | university |
+-----------+--------+------+--------------+
| 2138 | male | 21 | 北京大学 |
| 3214 | male | NULL | 复旦大学 |
| 6543 | female | 20 | 北京大学 |
| 2315 | female | 23 | 浙江大学 |
| 5432 | male | 25 | 山东大学 |
+-----------+--------+------+--------------+
5 rows in set (0.00 sec)
3、基础查询(3):查询结果去重
题目:要查看用户来自于哪些学校,从用户信息表中取出学校的去重数据。
示例: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 |
|---|
| 北京大学 |
| 复旦大学 |
| 浙江大学 |
| 山东大学 |
解答:
mysql> select distinct university from user_profile;
+--------------+
| university |
+--------------+
| 北京大学 |
| 复旦大学 |
| 浙江大学 |
| 山东大学 |
+--------------+
4 rows in set (0.00 sec)
4、基础查询(4):限制查询结果返回的行数
题目:要查看前 2 个用户的设备ID数据,从用户信息表 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 |
查询应返回以下结果:
| device_id |
|---|
| 2138 |
| 3214 |
解答:
mysql> select device_id from user_profile limit 2;
+-----------+
| device_id |
+-----------+
| 2138 |
| 3214 |
+-----------+
2 rows in set (0.00 sec)
5、基础查询(5):为查询到的列指定别名
题目:要查看前 2 个用户的设备 ID,并将列名改为 ‘user_infos_example’,从用户信息表取出相应结果。
示例: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 |
查询应返回以下结果:
| user_infos_example |
|---|
| 2138 |
| 3214 |
解答:
-- 不使用 as
mysql> select device_id user_infos_example from user_profile limit 2;
+--------------------+
| user_infos_example |
+--------------------+
| 2138 |
| 3214 |
+--------------------+
2 rows in set (0.01 sec)
-- 使用 as
mysql> select device_id as user_infos_example from user_profile limit 2;
+--------------------+
| user_infos_example |
+--------------------+
| 2138 |
| 3214 |
+--------------------+
2 rows in set (0.00 sec)
6、比较运算符(1):查询学校是【北京大学】的学生信息
题目:要筛选出所有北京大学的学生信息,从用户信息表中取出满足条件的数据,返回设备 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 | university |
|---|---|
| 2138 | 北京大学 |
| 6543 | 北京大学 |
解答:
mysql> select device_id, university from user_profile where university = '北京大学';
+-----------+--------------+
| device_id | university |
+-----------+--------------+
| 2138 | 北京大学 |
| 6543 | 北京大学 |
+-----------+--------------+
2 rows in set (0.00 sec)
7、比较运算符(2):查询年龄大于 24 岁的用户信息
题目:要查询 24 岁以上的用户信息,取出满足条件的设备 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 | gender | age | university |
|---|---|---|---|
| 5432 | male | 25 | 山东大学 |
解答:
mysql> select device_id, gender, age, university from user_profile where age > 24;
+-----------+--------+------+--------------+
| device_id | gender | age | university |
+-----------+--------+------+--------------+
| 5432 | male | 25 | 山东大学 |
+-----------+--------+------+--------------+
1 row in set (0.01 sec)
8、比较运算符(3):查找某个年龄段的用户信息
题目:要查询 20 岁及以上且 23 岁及以下的用户信息,取出满足条件的 设备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 | gender | age |
|---|---|---|
| 2138 | male | 21 |
| 6543 | female | 20 |
| 2315 | female | 23 |
解答:
-- 使用 between ... and ...
mysql> select device_id, gender, age from user_profile where age between 20 and 23;
+-----------+--------+------+
| device_id | gender | age |
+-----------+--------+------+
| 2138 | male | 21 |
| 6543 | female | 20 |
| 2315 | female | 23 |
+-----------+--------+------+
3 rows in set (0.01 sec)
-- 使用比较运算符和逻辑运算符
mysql> select device_id, gender, age from user_profile where age >= 20 and age <= 23;
+-----------+--------+------+
| device_id | gender | age |
+-----------+--------+------+
| 2138 | male | 21 |
| 6543 | female | 20 |
| 2315 | female | 23 |
+-----------+--------+------+
3 rows in set (0.00 sec)
9、比较运算符(4):查找除复旦大学以外的用户信息
题目:要查看除复旦大学以外的所有用户信息,取出设备 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 | gender | age | university |
|---|---|---|---|
| 2138 | male | 21 | 北京大学 |
| 6543 | female | 20 | 北京大学 |
| 2315 | female | 23 | 浙江大学 |
| 5432 | male | 25 | 山东大学 |
解答:
-- 使用 <>
mysql> select device_id, gender, age, university from user_profile where university <> '复旦大学';
+-----------+--------+------+--------------+
| device_id | gender | age | university |
+-----------+--------+------+--------------+
| 2138 | male | 21 | 北京大学 |
| 6543 | female | 20 | 北京大学 |
| 2315 | female | 23 | 浙江大学 |
| 5432 | male | 25 | 山东大学 |
+-----------+--------+------+--------------+
4 rows in set (0.00 sec)
-- 使用 not
mysql> select device_id, gender, age, university from user_profile where not university = '复旦大学';
+-----------+--------+------+--------------+
| device_id | gender | age | university |
+-----------+--------+------+--------------+
| 2138 | male | 21 | 北京大学 |
| 6543 | female | 20 | 北京大学 |
| 2315 | female | 23 | 浙江大学 |
| 5432 | male | 25 | 山东大学 |
+-----------+--------+------+--------------+
4 rows in set (0.00 sec)
10、比较运算符(5):过滤空值
题目:要查看年龄不为空的用户,取出用户的设备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 | gender | age | university |
|---|---|---|---|
| 2138 | male | 21 | 北京大学 |
| 6543 | female | 20 | 北京大学 |
| 2315 | female | 23 | 浙江大学 |
| 5432 | male | 25 | 山东大学 |
解答:
-- 使用 age is not null
mysql> select device_id, gender, age, university from user_profile where age is not null;
+-----------+--------+------+--------------+
| device_id | gender | age | university |
+-----------+--------+------+--------------+
| 2138 | male | 21 | 北京大学 |
| 6543 | female | 20 | 北京大学 |
| 2315 | female | 23 | 浙江大学 |
| 5432 | male | 25 | 山东大学 |
+-----------+--------+------+--------------+
4 rows in set (0.00 sec)
-- 使用 not age is null
mysql> select device_id, gender, age, university from user_profile where not age is null;
+-----------+--------+------+--------------+
| device_id | gender | age | university |
+-----------+--------+------+--------------+
| 2138 | male | 21 | 北京大学 |
| 6543 | female | 20 | 北京大学 |
| 2315 | female | 23 | 浙江大学 |
| 5432 | male | 25 | 山东大学 |
+-----------+--------+------+--------------+
4 rows in set (0.00 sec)