sql 基础学习

本文介绍了SQL中的基础概念,如distinct去重、逻辑运算、排序方法(包括limit和casewhen)、时间函数、字符串处理、聚合函数以及各种JOIN类型(如innerjoin、outerjoin),还涵盖了子查询、exists用法和组合查询(UNION和UNIONALL)。
摘要由CSDN通过智能技术生成

null

null比较只能使用 is null 或者 is not null
sql是三值逻辑,任何值和null比较时(包括null和null比较时)都会用 unknown进行比较导致错误
LeetCode 584 寻找用户推荐人这个题

like

like可以模糊查找
% 表示任意长度字符串
_ 表示任意单个长度字符串
如name like"%张%",表示任意名字里有张, 同样也有 not like

distinct

逻辑运算

和其他的语言的与或非差别不大

DISTINCT

distinct 相当于一个去重的操作,可以接多个变量,表示对多个变量的组合去重,但是在hive里尽量少用,因为会只有一个reduce很慢

select DISTINCT name from student; --对名字去重相同名字的只会出现一次
select DISTINCT name,class from student; --名字和班级都相同的数据只会出现一次

排序

order by 字段1 [升序/降序], 字段2 [升序/降序], ...

默认是asc(升序排列),需要降序排列可以加 desc

limit

-- LIMIT 后只跟一个整数,表示要截断的数据条数(一次获取几条)
select task_name, due_date from tasks limit 2;

-- LIMIT 后跟 2 个整数,依次表示从第几条数据开始、一次获取几条
select task_name, due_date from tasks limit 2, 2;

注意:标号从0开始

case when

select 
name,
case
when(age>60) then "老同学"
when(age>20) then "年轻"
else
"小同学"
end as age_level 
from student order by name

注意每个列间要加逗号(,)

sql获取时间函数

-- 获取当前日期
SELECT DATE() AS current_date;

-- 获取当前日期时间
SELECT DATETIME() AS current_datetime;

-- 获取当前时间
SELECT TIME() AS current_time;

字符串处理

-- 将姓名转换为大写
SELECT name, UPPER(name) AS upper_name
FROM employees;
-- 计算姓名长度
SELECT name, LENGTH(name) AS name_length
FROM employees;
-- 将姓名转换为小写并进行条件筛选
SELECT name, LOWER(name) AS lower_name
FROM employees;

聚合函数

一般先用 group by分组,之后使用下面的函数在,这些函数每一个组内运用,如果没有group by 就在全部属于用

COUNT:计算指定列的行数或非空值的数量。
SUM:计算指定列的数值之和。
AVG:计算指定列的数值平均值。
MAX:找出指定列的最大值。
MIN:找出指定列的最小值。

和distinct配合可以查比如每个班级学生有多少()

join

cross join

直接笛卡尔积

inner join(join)

返回匹配的行,用 on表示匹配条件

outer join

left join和right join
返回左(右)表里的所有行和另外一个表里匹配的行,同样用on加匹配条件

子查询

-- 主查询
SELECT name, total_amount
FROM customers
WHERE customer_id IN (
    -- 子查询
    SELECT DISTINCT customer_id
    FROM orders
    WHERE total_amount > 200
);

使用in关键字和另外一个完整的表可以选择查询特定的信息,当然select的子查询也可以用作join

exists

可以使用

-- 主查询
SELECT name, total_amount
FROM customers
WHERE EXISTS (
    -- 子查询
    SELECT 1
    FROM orders
    WHERE orders.customer_id = customers.customer_id
);

查询特定的信息

组合查询

UNION 操作:它用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行。

UNION ALL 操作:它也用于将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留。

可以把多个select的结果合并

-- UNION ALL操作
SELECT name, age, department
FROM table1
UNION ALL
SELECT name, age, department
FROM table2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值