【牛客网】非技术快速入门题库 SQL 篇

【牛客网】非技术快速入门题库 SQL 篇

牛客网在线编程_SQL篇_非技术快速入门

1.查询所有列

-- 直接 select 所有的列就行,可以用 * ,但一般不建议直接用select *
-- 查询 user_profile 表中的所有记录和所有字段
SELECT * 
FROM user_profile;  -- 从用户资料表(user_profile)中选择所有数据

2.查询多

## 从用户资料表中查询设备ID、性别、年龄和大学信息
SELECT 
    device_id,  -- 用户的设备ID
    gender,     -- 用户的性别
    age,        -- 用户的年龄
    university  -- 用户所在的大学
FROM user_profile  -- 数据来源于user_profile表,该表存储了用户的个人信息
;  -- 选择user_profile表中的device_id, gender, age, university字段的所有记录

3.查询结果去重

# 方法一
-- 从用户资料表中查询所有不同的大学信息
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 后的第一个字段

4.查询结果限制返回行数

## 从用户资料表中查询设备ID,并限制结果从第1行开始的2行记录
SELECT 
    device_id  -- 用户的设备ID
FROM user_profile  -- 数据来源于user_profile表,该表存储了用户的个人信息
LIMIT 0, 2  -- 从第1条记录开始(索引为0),获取2条记录
;  -- 这个查询会返回user_profile表中device_id字段的前两条记录

5.将查询后的列重新命名

## 从用户资料表中查询设备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列

6.查找学校是北大的学生信息

## 从用户资料表中查询设备ID和大学信息,并筛选出大学为北京大学的记录
SELECT 
    device_id,      -- 用户的设备ID
    university      -- 用户所在的大学名称
FROM user_profile  -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university = '北京大学'  -- 筛选条件:仅选择university字段值为'北京大学'的记录
;  -- 这个查询会返回user_profile表中所有属于北京大学的用户的设备ID和大学名称

7.查找年龄大于24岁的用户信息

## 从用户资料表中查询设备ID、性别、年龄和大学信息,并筛选出年龄大于24岁的用户记录
SELECT 
    device_id,      -- 用户的设备ID
    gender,         -- 用户的性别
    age,            -- 用户的年龄
    university      -- 用户所在的大学名称
FROM user_profile  -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE age > 24  -- 筛选条件:仅选择age字段值大于24的记录
;  -- 这个查询会返回user_profile表中所有年龄大于24岁的用户的设备ID、性别、年龄及大学名称

8.查找某个年龄段的用户信息

## 从用户资料表中查询设备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、性别及年龄

9.查找除复旦大学的用户信息

## 从用户资料表中查询设备ID、性别、年龄和大学信息,并筛选出大学不是复旦大学的用户记录
SELECT 
    device_id,      -- 用户的设备ID
    gender,         -- 用户的性别
    age,            -- 用户的年龄
    university      -- 用户所在的大学名称
FROM user_profile  -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university != '复旦大学'  -- 筛选条件:仅选择university字段值不等于'复旦大学'的记录
;  -- 这个查询会返回user_profile表中所有不属于复旦大学的用户的设备ID、性别、年龄及大学名称

10.用where过滤空值练习

## 从用户资料表中查询设备ID、性别、年龄和大学信息,并筛选出年龄字段非空的用户记录
SELECT 
    device_id,      -- 用户的设备ID
    gender,         -- 用户的性别
    age,            -- 用户的年龄
    university      -- 用户所在的大学名称
FROM user_profile  -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE age IS NOT NULL  -- 筛选条件:仅选择age字段值非空(即已填写年龄信息)的记录
;  -- 这个查询会返回user_profile表中所有有提供年龄信息的用户的设备ID、性别、年龄及大学名称

11.高级操作符练习(1)

## 从用户资料表中查询设备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

12.高级操作符练习(2)

-- 从用户资料表中查询设备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

13.Where in 和 Not in

-- 从用户资料表中查询设备ID、性别、年龄、大学和GPA信息,并筛选出特定大学(北京大学、复旦大学、山东大学)的用户记录
SELECT 
    device_id,      -- 用户的设备ID
    gender,         -- 用户的性别
    age,            -- 用户的年龄
    university,     -- 用户所在的大学名称
    gpa             -- 用户的平均成绩点数(GPA)
FROM user_profile  -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university IN ('北京大学', '复旦大学', '山东大学')  -- 筛选条件:仅选择university字段值在指定列表内的记录,即'北京大学', '复旦大学', 或'山东大学'
;  -- 这个查询会返回user_profile表中所有属于北京大学、复旦大学或山东大学的用户的设备ID、性别、年龄、大学名称及GPA

14.操作符混合运用

-- 查询符合条件的学生信息,包括设备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;

15.查看学校名称中含北京的用户

-- 查询学校名称中包含“北京”的用户设备ID、年龄和学校名称
SELECT
    device_id,  -- 设备ID
    age,        -- 年龄
    university  -- 学校名称
FROM user_profile  -- 从用户信息表中获取数据
WHERE university LIKE '%北京%';  -- 筛选出学校名称中包含“北京”的用户

# _:匹配任意一个字符;  
# %:匹配 0 个或多个字符;  
# [ ]:匹配 [ ] 中的任意一个字符(若要比较的字符是连续的,则可以用连字符 “-” 表达 );  
# [^ ]:不匹配 [ ] 中的任意一个字符。

16.查找GPA最高值

# 方法一
## 查询复旦大学学生的最高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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值