牛客网在线编程_SQL篇_非技术快速入门
-- 直接 select 所有的列就行,可以用 * ,但一般不建议直接用select *
-- 查询 user_profile 表中的所有记录和所有字段
SELECT *
FROM user_profile; -- 从用户资料表(user_profile)中选择所有数据
## 从用户资料表中查询设备ID、性别、年龄和大学信息
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university -- 用户所在的大学
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
; -- 选择user_profile表中的device_id, gender, age, university字段的所有记录
# 方法一
-- 从用户资料表中查询所有不同的大学信息
SELECT DISTINCT
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
; -- 选择user_profile表中的university字段,并去除重复项,仅保留不同的值
# 方法二
-- 从用户资料表中按第一个SELECT表达式(即university字段)分组,查询所有大学信息
SELECT
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
GROUP BY 1 -- 根据SELECT子句中的第一个字段(即university)对结果进行分组。这里的"1"是对SELECT列表中第一项的引用
; -- 这个查询会返回每个大学的一条记录,类似于使用DISTINCT的效果
# 其中 1 代表 select 后的第一个字段
## 从用户资料表中查询设备ID,并限制结果从第1行开始的2行记录
SELECT
device_id -- 用户的设备ID
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
LIMIT 0, 2 -- 从第1条记录开始(索引为0),获取2条记录
; -- 这个查询会返回user_profile表中device_id字段的前两条记录
## 从用户资料表中查询设备ID,并将结果列命名为user_infos_example,限制结果为前2行记录
SELECT
device_id AS user_infos_example -- 用户的设备ID,并将此列重命名为user_infos_example
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
LIMIT 2 -- 仅获取查询结果的前2条记录
; -- 这个查询会返回user_profile表中device_id字段的前两条记录,并将其显示为user_infos_example列
## 从用户资料表中查询设备ID和大学信息,并筛选出大学为北京大学的记录
SELECT
device_id, -- 用户的设备ID
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university = '北京大学' -- 筛选条件:仅选择university字段值为'北京大学'的记录
; -- 这个查询会返回user_profile表中所有属于北京大学的用户的设备ID和大学名称
## 从用户资料表中查询设备ID、性别、年龄和大学信息,并筛选出年龄大于24岁的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE age > 24 -- 筛选条件:仅选择age字段值大于24的记录
; -- 这个查询会返回user_profile表中所有年龄大于24岁的用户的设备ID、性别、年龄及大学名称
## 从用户资料表中查询设备ID、性别和年龄,并筛选出年龄在20到23岁之间的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age -- 用户的年龄
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE age >= 20 AND age <= 23 -- 筛选条件:仅选择age字段值在20至23岁(包括20和23岁)之间的记录
; -- 这个查询会返回user_profile表中所有年龄介于20到23岁之间的用户的设备ID、性别及年龄
## 从用户资料表中查询设备ID、性别、年龄和大学信息,并筛选出大学不是复旦大学的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university != '复旦大学' -- 筛选条件:仅选择university字段值不等于'复旦大学'的记录
; -- 这个查询会返回user_profile表中所有不属于复旦大学的用户的设备ID、性别、年龄及大学名称
## 从用户资料表中查询设备ID、性别、年龄和大学信息,并筛选出年龄字段非空的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE age IS NOT NULL -- 筛选条件:仅选择age字段值非空(即已填写年龄信息)的记录
; -- 这个查询会返回user_profile表中所有有提供年龄信息的用户的设备ID、性别、年龄及大学名称
## 从用户资料表中查询设备ID、性别、年龄、大学和GPA信息,并筛选出GPA大于3.5且性别为男性的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university, -- 用户所在的大学名称
gpa -- 用户的平均成绩点数(GPA)
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE gpa > 3.5 AND gender = 'male' -- 筛选条件:仅选择gpa字段值大于3.5且gender字段值为'male'的记录
; -- 这个查询会返回user_profile表中所有GPA大于3.5并且性别为男性的用户的设备ID、性别、年龄、大学名称及GPA
-- 从用户资料表中查询设备ID、性别、年龄、大学和GPA信息,并筛选出大学为北京大学或GPA大于3.7的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university, -- 用户所在的大学名称
gpa -- 用户的平均成绩点数(GPA)
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university = '北京大学' OR gpa > 3.7 -- 筛选条件:选择university字段值为'北京大学'或者gpa字段值大于3.7的记录
; -- 这个查询会返回user_profile表中所有大学为北京大学或者GPA大于3.7的用户的设备ID、性别、年龄、大学名称及GPA
-- 从用户资料表中查询设备ID、性别、年龄、大学和GPA信息,并筛选出特定大学(北京大学、复旦大学、山东大学)的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university, -- 用户所在的大学名称
gpa -- 用户的平均成绩点数(GPA)
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university IN ('北京大学', '复旦大学', '山东大学') -- 筛选条件:仅选择university字段值在指定列表内的记录,即'北京大学', '复旦大学', 或'山东大学'
; -- 这个查询会返回user_profile表中所有属于北京大学、复旦大学或山东大学的用户的设备ID、性别、年龄、大学名称及GPA
-- 查询符合条件的学生信息,包括设备ID、性别、年龄、大学和GPA
SELECT
device_id -- 设备ID
,gender -- 性别
,age -- 年龄
,university -- 大学
,gpa -- GPA(平均成绩)
FROM user_profile
WHERE
-- 筛选条件:对于山东大学的学生,要求GPA大于3.5
(gpa > 3.5 AND university = '山东大学')
OR
-- 对于复旦大学的学生,要求GPA大于3.8
(gpa > 3.8 AND university = '复旦大学')
-- 结果按照设备ID升序排列
ORDER BY device_id ASC;
-- 查询学校名称中包含“北京”的用户设备ID、年龄和学校名称
SELECT
device_id, -- 设备ID
age, -- 年龄
university -- 学校名称
FROM user_profile -- 从用户信息表中获取数据
WHERE university LIKE '%北京%'; -- 筛选出学校名称中包含“北京”的用户
# _:匹配任意一个字符;
# %:匹配 0 个或多个字符;
# [ ]:匹配 [ ] 中的任意一个字符(若要比较的字符是连续的,则可以用连字符 “-” 表达 );
# [^ ]:不匹配 [ ] 中的任意一个字符。
# 方法一
## 查询复旦大学学生的最高GPA,并将结果四舍五入保留1位小数
SELECT
ROUND(MAX(gpa), 1) AS gpa -- 计算并格式化最高GPA
FROM user_profile -- 从用户信息表中获取数据
WHERE university = '复旦大学'; -- 筛选出复旦大学的学生
# 方法二
## 查询复旦大学学生的GPA信息,并获取GPA最高的学生
SELECT
gpa -- 平均成绩(GPA)
FROM user_profile -- 来自用户资料表
WHERE
university = '复旦大学' -- 筛选条件:仅选择大学为复旦大学的学生记录
ORDER BY gpa DESC -- 根据GPA成绩从高到低排序
LIMIT 1 -- 限制结果数量为1条,即只返回GPA最高的那一条记录
;
# 先筛选后排序,显示1列
# 方法三
## 查询复旦大学 GPA 最高的学生的 GPA
SELECT gpa
FROM (
-- 子查询:为每个复旦大学的学生按 GPA 降序排名
SELECT gpa,
ROW_NUMBER() OVER (PARTITION BY university ORDER BY gpa DESC) AS ranking
FROM user_profile
WHERE university = '复旦大学' -- 筛选出复旦大学的学生
) AS t -- 将子查询结果命名为 t