SQL(入门)查询篇

本篇主要讲述SQL语句中查询技能。(实用的具体数据库PostgreSQL)

主要内容

  • 基础查询
  • JOIN操作和UNION操作
  • 聚合操作
  • 子查询&临时表格
  • 清理操作

基础查询

SELECT column1, column2
FROM table1
WHERE column3  > 2 AND column4 LIKE '%tm%'
ORDER BY column5
LIMIT 5;

其他常用关键词:

关键词 含义 用法
IN 枚举范围 WHERE column3 > IN ('NY','CA')
AND column3 > 2 AND column4 LIKE '%tm%'
NOT NOT column3 == 1
OR column3 > 2 OR column4 LIKE '%tm%'
BETWEEN…AND… 在…和…之间 column1 BETWEEN 2 AND 3
IS NULL 是空值 column1 IS NULL

JOIN操作

  • JOIN
SELECT r.name region, s.name rep, a.name account
FROM sales_reps s
JOIN region r
ON s.region_id = r.id
JOIN accounts a
ON a.sales_rep_id = s.id
WHERE r.name = 'Midwest'
ORDER BY a.name;

r.name region代表将r.name 取别名region,中间省略了AS,
即:r.name AS region)

  • LEFT JOIN & RIGHT JOIN
SELECT DISTINCT a.id, w.channel
FROM accounts a
RIGHT JOIN web_events w
ON a.id = w.account_id
WHERE a.id = '1001';

(DISTINCT 取唯一值)

  • FULL OUTER JOIN
SELECT column1
FROM table1
FULL OUTER JOIN table2 ON table1.column1 = table2.column2;
  • Self JOIN !!!
SELECT column1
FROM table1 T1, table1 T2
WHERE condition;
  • UNION
SELECT column1 FROM table1
UNION
SELECT column2 FROM table2;

聚合操作

  • GROUP BY
    分组,常与聚合函数搭配
SELECT a.name, SUM(total_amt_usd) total_sales
FROM orders o
JOIN accounts a
ON a.id = o.account_id
GROUP BY a.name;
  • HAVING
    配合GROUP BY ,后接聚合函数
SELECT column1, column2
FROM table1, table2
WHERE column1==1
GROUP BY column1, column2
HAVING  SUM(column1)>2
ORDER BY column1, column2
  • 聚合函数

SQL Aggregate 函数:

关键词 含义 用法
MAX 最大值 MAX(column1)
MIN 最小值 MIN(column1)
COUNT 计数(不计NULL) COUNT(column1)
AVG 平均值 AVG(column1)
SUM 总值 SUM(column1)
FIRST 第一个值 FIRST(column1)
LAST 最后一个值 LAST(column1)

SQL Scalar 函数:

关键词 含义 用法
UCASE() / UPPER() 将某个字段转换为大写 UPPER(column1)
LCASE() / LOWER() 将某个字段转换为小写 LOWER(column1)
MID() 从某个文本字段提取字符(length可选) MID(column1,start,length)
LEN() 返回某个文本字段的长度 LEN(column1)
ROUND() 对某个数值字段进行指定小数位数的四舍五入 ROUND(column1,2)
NOW() 返回当前的系统日期和时间 NOW()
FORMAT() 格式化某个字段的显示方式 FORMAT(Now(),'YYYY-MM-DD')
  • DATE 函数

DATE_TRUNC
将日期截取到日期时间列的特定部分,常见的截取依据包括日期、月份 和 年份。

 DATE_TRUNC('month', column1)

DATE_PART
获取日期的特定部分,但是注意获取 month 或 dow 意味着无法让年份按顺序排列。而是按照特定的部分分组,无论它们属于哪个年份。

DATE_PART('year', column1)

事实上,日期函数是一块非常大的内容,详细情况请看这里:其他日期函数的用法

  • CASE
    将数据按照不同的标准分成不同的类别
CASE WHEN SUM(column1) > 1000 THEN 'top'
     WHEN  SUM(column1) > 666 THEN 'middle'
     ELSE 'low' END AS customer_level

子查询&临时表格

  • 子查询
    主要将一个完整的查询语句作为表格或者条件值使用
SELECT column1 [, column2 ]
FROM   table1 [, table2 ]
WHERE  column1 OPERATOR
      (SELECT column1 [,2 ]
      FROM table1 [, table2 ]
      [WHERE])
SELECT t1.col1, t1.col2, t1
FROM(SELECT语句) t1
  • 临时表格
    WITH 语句
WITH t1 AS(SELECT语句),
t2 AS(SELECT语句)
SELECT ……

数据清理

  • LEFT&RIGHT
LEFT(col1,2)
RIGHT(col1,3)
  • 位置函数(POSITION 和 STRPOS 都区分大小写)
POSITION(',' IN city_state) 
STRPOS(city_state, ‘,’)
  • 连接(CONCAT)
CONCAT(first_name, ' ', last_name)

=

first_name || ' ' || last_name
  • REPLACE
REPLACE(original_string,search_string,replace_string)
  • TRIM
    移除头尾空格
  • CAST (类型转换)
CAST(date_column AS DATE) 

=

 date_column::DATE

注意

  • SQL 不区分大小写
  • 但关键词的顺序非常重要!
  • 一个好的习惯:关键词大写

虽然SQL可以进行简单的数据清理工作,但python中pandas工具也是一个非常棒的数据工具包:
5天10分钟,学会数据清洗!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279

推荐阅读更多精彩内容