SQL语法入门

一:介绍

SQL全称为结构化查询语言

RDBMS全称为关系数据库管理系统,如SQL SERVER, MYSQL,ORACLE等

SQL的关键字对大小写并不敏感,所以select与SELECT在SQL 中的意思是一样的

二:SELECT

SELECT column 

FROM table;

考虑到一列中的数据往往有很多重复值,如果希望挑选出来的数据不含重复值,则可以:

SELECT DISTINCT column 

FROM table;

三:WHERE

WHERE用来提取满足特定条件的记录,

SELECT column 

FROM table

WHERE condition;

四:AND, OR, NOT

根据一个或多个条件来提取记录,

SELECT column

FROM table

WHERE condition1 AND condition2 AND condition3 ...;

五:ORDER

对提取的数据按照某一列或几列的值排序,

SELECT column1, column2, ...

FROM table_name

ORDER BY column1, column2, ... ASC|DESC;

六:INSERT

插入新的数据

INSERT INTO table_name (column1, column2, column3, ...)

VALUES (value1, value2, value3, ...);

七:NULL

判断记录是否为空

SELECT column_names

FROM table_name

WHERE column_name IS (NOT) NULL;

八:UPDATE

更新满足特定条件的记录的某些值,注意不能忘记WHERE,否则所有所有记录更将被更改

UPDATE table_name

SET column1 = value1, column2 = value2, ...

WHERE condition;

九:DELETE

删除满足特定条件的记录

DELETE FROM table_name 

WHERE condition;

十:LIMIT for MYSQL

限定返回的记录的数量

SELECT column_name(s)

FROM table_name

WHERE condition

LIMIT parameter 1,parameter 2;

第一个参数表示从哪一行开始查,默认为0, 即第一行;第二个参数表示取多少行数据

十一:描述统计函数

MIN(), MAX(), COUNT(), AVG(), SUM()

SELECT FUNCTION(column_name)

FROM table_name

WHERE condition;

补充:AVG()忽略NULL值,而不是将其作为“0”参与计算;

COUNT(*),对表中行数进行计数不管是否有NULL;

COUNT(字段名),对特定列有数据的行进行计数忽略NULL值;

SUM(),可以对单个列求和,也可以对多个列运算后求和忽略NULL值,且当对多个列运算求和时,如果运算的列中任意一列的值为NULL,则忽略这行的记录。

十二:LIKE

% ----表示0+个character

_ -----表示一个character

SELECT column1, column2, ...

FROM table_name

WHERE columnN LIKE pattern;


十三:IN

指定多个值,只要符合其中一个值,就将记录提取出来

SELECT column_name(s)

FROM table_name

WHERE column_name IN (value1, value2, ...);

十四:BETWEEN

指定一个范围,可以是数字范围,日期范围和文本范围

SELECT column_name(s)

FROM table_name

WHERE column_name BETWEEN value1 AND value2;

十五:AS

给table或者column指定一个别名,若别名中有空格,需要用[]括起来

SELECT column_name(s)

FROM table_name AS alias_name;

SELECT column_name AS alias_name

FROM table_name;

十六:JOIN

根据两个表之间的某些关系进行连接,有(INNER) JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate

FROM Orders

INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

十七:Self JOIN

自己与自己连接

SELECT column_name(s)

FROM table1 T1, table1 T2

WHERE condition;

十八:UNION

将两个SELECT的结果合并,要求:两个结果具有相同的行数,行顺序和行数据类型;

重复的records只保留其中一个,若要保留所有重复的records则改用UNION ALL

十九:GROUP BY

按照一列或多列的值分类,

SELECT column_name(s)

FROM table_name

WHERE condition

GROUP BY column_name(s)

ORDER BY column_name(s);

二十:HAVING

根据某个整合函数的值对records进行过滤,而WHERE并不能与整合函数连用,

SELECT column_name(s)

FROM table_name

WHERE condition

GROUP BY column_name(s)

HAVING condition

ORDER BY column_name(s);

二十一:EXIST

检测某个subquery是否有返回records

SELECT column_name(s)

FROM table_name

WHERE EXISTS

(SELECT column_name FROM table_name WHERE condition);

二十二:ANY 和 AND

如果subquery中有任何一个record满足条件,ANY返回TRUE

如果subquery中所有records满足条件,ALL返回TRUE

二十三:INTO

将SELECT返回的结果复制到一个表中,

SELECT *

INTO newtable [IN externaldb]

FROM oldtable

WHERE condition;

或者

Create table new_table_name (Select * from old_table_name);

二十四:INSERT INTO

将SELECT返回的结果复制到另一个表中,

INSERT INTO table2

SELECT * FROM table1

WHERE condition;

二十五:CASE

CASE里面列有各种条件,若满足哪种条件,则返回相应的结果,不满足任一种条件,则返回ELSE后的结果,

CASE

     WHEN condition1 THEN result1

     WHEN condition2 THEN result2

     WHEN conditionN THEN resultN

     ELSE result

END

二十六:COMMENT

单行注释用:--any text

多行注释用:/*any text*/

二十七:字符串连接函数

CONCAT()函数用于将多个字符串连接成一个字符串

CONCAT(str1,str2,…)   

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。

CONCAT_WS(separator,str1,str2,…)

GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成

GROUP_CONCAT([DISTINCT] expr [,expr ...]

[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]

[SEPARATOR str_val])

二十八:窗口函数

窗口函数的基本语法如下:

    <窗口函数> over (partition by <用于分组的列名>

                                 order by <用于排序的列名>)

窗口函数有两种:

1) 专用窗口函数,包括后面要讲到的rank, dense_rank, row_number等专用窗口函数。

2) 聚合函数,如sum. avg, count, max, min等

举例1:

select *,

  rank() over (order by 成绩 desc) as ranking,

  dense_rank() over (order by 成绩 desc) as dese_rank,

  row_number() over (order by 成绩 desc) as row_num

from 班级表

举例2:

select *,

  sum(成绩) over (order by 学号) as current_sum,

  avg(成绩) over (order by 学号) as current_avg,

  count(成绩) over (order by 学号) as current_count,

  max(成绩) over (order by 学号) as current_max,

  min(成绩) over (order by 学号) as current_min

from 班级表

如上图,聚合函数sum在窗口函数中,是对自身记录、及位于自身记录以上的数据进行求和的结果。比如0004号,在使用sum窗口函数后的结果,是对0001,0002,0003,0004号的成绩求和,若是0005号,则结果是0001号~0005号成绩的求和,以此类推。不仅是sum求和,平均、计数、最大最小值,也是同理,都是针对自身记录、以及自身记录之上的所有数据进行计算。

二十九:索引

提升搜索效率

常用于索引的数据结构:B-tree,哈希表

创建索引:

    CREATE INDEX name_index ON TABLE (col1, [col2, ...])

查询:

    SELECT *** FROM TABLE [{USE|IGNORE|FORCE} INDEX (key_list)] WHERE ……

三十:条件计数

使用count()函数实现条件统计的基础是对于值为NULL的记录不计数,常用的有以下三种方式,假设统计num大于200的记录

select count(num > 200 or null) from a;

select count(if(num > 200, 1, null)) from a

select count(case when num > 200 then 1 end) from a

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

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,446评论 0 13
  • 前言 读《sql必知必会 第四版》随手做的笔记,写的比较乱,可读性并不好,读的是中文版,翻译过来的感觉有点怪怪的。...
    _老徐_阅读 622评论 0 0
  • SQL是结构化查询语言,在数据分析工作中,可用于提取数据和查询数据。 1.预备知识 1.1什么是SQL 结构化查询...
    PaulGao阅读 473评论 0 0
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,225评论 0 7
  • “父亲,再给我讲一个故事吧。” “不行,云儿,”孟良说,他把故事书放到桌子上,把被子掖过儿子的双肩。 “已经...
    迷路的沙丁鱼阅读 457评论 0 7