SQL实战初级技能+常用场景代码

1. SQL过滤 :

SQL1: =

select * from <表名>
where day=20200202
and temperature = 6
and province= '江苏'

很明显,这是查温度=6度,省=江苏的数据。注意,数据类型数字直接=,汉字或英文需要加半角单引号’’。

SQL2:BETWEEN

where day=20200202
and temperature between 0 and 5
and province= '江苏'

SQL3:Like
(Like模糊查询,可以用%代替模糊部分)

where day=20200202
and city_name like '%京'
-- 这样就会查询出XX京的城市,比如北京、南京等。

SQL4:IN

WHERE column_name IN (value1,value2,...)
--直接将数据放于括号中,字符要加上半角单引号,哥数据间用逗号相隔

SQL5:AND与OR
多个条件之间可以用与、或进行连接

SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
-- 或者
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
-- 或者
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
2. SQL分组与排序 :

SQL1:分组group by

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

-- 查询各性别人数
select
  gender,
  count(1) as cnt
from
  Person
where
  day = 20200211
group by
  gender
-- 查询天气情况
select
  temperature, -- 这里就只能有这一个字段,如果再加入一个 city_weather,就会出错
  count(city) as cnt
from
  Weather
where
  day = 20200202
  and province='江苏'
group by
  temperature

!!!使用group by注意点:
使用group by时,select部分字段只能包含有groupb by的字段和一些count、sum等聚合信息,不能加入其他的字段。

SQL2:排序order by
使用order by默认是升序(asc)

select
*
from
weather
where
day = 20200202
and province_name='江苏'
order by
temperature desc -- 这里是倒序

如果同时使用两个字段进行排序,例如

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
-- 则会先根据第一个字段进行升序排序,若第一个字段相同,则再根据第二个字段进行升序排序。
3. SQL常用函数 :
函数作用
AVG(column)返回某列的平均值
COUNT(column)返回某列的行数(不包括 NULL 值)
COUNT(*)返回被选行数
MAX(column)返回某列的最高值
MIN(column)返回某列的最低值
SUM(column)返回某列的总和
select
   max(day_temperature),
   min(day_temperature),
   avg(day_temperature)
from
  Weather
where  
  day = 20200202
4. SQL表关联 :

可以先看一下以下的图片:我们需要掌握,
left join、right join、inner join、full outer join
重点是left join、inner join
在这里插入图片描述
我们首先创建测试用表:

-- 表1 科目表
create table if not exists tmp.table_course
(
    course_id      int    comment '科目id',
    course         string comment '科目'
);
-- 表2 分数表
create table if not exists tmp.table_score
(
    course_id     int    comment '科目id',
    score         int    comment '分数'
);
-- 插入数据
insert overwrite table tmp.table_course values(1,'语文'),(2,'数学'),(3,'英语');
insert overwrite table tmp.table_score  values(2,70),(3,80),(4,90);

在这里插入图片描述
1、left join
顾名思义,就是“左连接”,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出查出表1所有数据以及表2和表1有交集的数据:

 select A.course_id, A.course,
       B.course_id, B.score
  from tmp.table_course A
  left join tmp.table_score B
    on A.course_id = B.course_id

在这里插入图片描述
2、right join
“右连接”,表1右连接表2,以右为主,表示以表2为主,关联查询表1的数据,查出表2所有数据以及表1和表2有交集的数据.

 select A.course_id, A.course,
       B.course_id, B.score
 from tmp.table_course A
 right join tmp.table_score B
    on A.course_id = B.course_id

在这里插入图片描述
3、inner join
“内连接”,简写为join,只查出两表有交集的数据,即两表取交集.

 select A.course_id, A.course,
       B.course_id, B.score
  from tmp.table_course A
  join tmp.table_score B
    on A.course_id = B.course_id

在这里插入图片描述

4、full outer join
“全外连接”,简写未full join,查出两表所有的数据,即两表取并集.

  select A.course_id, A.course,
       B.course_id, B.score
  from tmp.table_course A
  full join tmp.table_score B
    on A.course_id = B.course_id

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郝同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值