常用SQL语句和语法汇总

近几年数据库发挥了越来越重要的作用,这其中和大数据、数据科学的兴起有不可分割的联系。学习数据库,可以说是每个从事IT行业的必修课。你学或不学,它就在那里;你想或不想,你都得学。

大一的时候,我选了一门名为《Android应用程序开发》的选修课。那个时候啥都不懂,就感觉这个名字比较高端,然后就去了。学习一学期,也就是在电脑上装上了Android应用程序的开发环境。由于我的笔记本太撇,每次运行Android虚拟机就会卡的要死。好吧,我承认最后期末考试我挂了,很悲痛的经历,选修课竟然也会挂(其实主要是我太菜,没有认真学)。

那个老师其实挺好的,教得很认真,只是我没有认真听(悔恨中…)。我记得有次一个同学提问,问他如果报考计算机三级的话,建议报考哪一门?(当时计算机三级一共有5个种类)。那个老师就说建议报考三级数据库技术,因为数据库技术最有前景。我现在是相当的佩服那个老师,他自己从事的Android开发,让学生学数据库。那应该算是我第一次接触数据库这种东西,从此对它念念不忘(论一个老师对学生的影响力!)

扯远了,飞回来~~~

创建数据库

CREATE DATABASE <数据库名>;

SQL常用规则0

  • 数据库的名称只能使用小写字母
  • 关系数据库以行为单位读写数据
  • SQL根据功能不同可以分为三类,其中使用最多的是DML(数据操纵语言)
  • SQL语句以分号(;)结尾
  • SQL不区分关键字的大小写,但是约定俗成的写法是:关键字大写、表名的首字母大写、其余(列名等)小写
  • 字符串和日期常数需要使用单引号(’)括起来
  • 数字常数无需加注单引号
  • SQL语句的单词之间需要使用半角空格或换行符来进行分割

表的创建

CREATE TABLE  <表名> 
( <列名1> <数据类型> <约束条件>,   
  <列名2> <数据类型> <约束条件>,   
  <列名3> <数据类型> <约束条件>,   
  <列名4> <数据类型> <约束条件>,   
  ....   
  <该表的的约束条件1>  <该表的的约束条件2>...);

SQL常用规则1

  • 数据库名称、表名和列名由字母、数字和下划线组成
  • 名称必须以字母开头
  • 名称不能重复

表的删除

DROP TABLE <表名>;

表定义的更新(添加列)

ALTER TABLE <表名> ADD COLUMN <列的定义>;

表定义的更新(删除列)

ALTER TABLE <表名> DROP TABLE <列名>;

列的查询

SELECT <列名>,...  
  FROM <表名>;

查询出表中的所有列

SELECT *  
  FROM <表名>;

根据WHERE语句来选择记录

SELECT <列名>,...  
  FROM <表名> 
 WHERE <条件表达式>;

SQL常用规则2

  • SQL语句可以使用AS关键字为列设定别名,设定汉字别名时需要使用双引号(’’)括起来
  • 在SELECT语句中可以使用DISTINCT来删除重复行
  • WHERE子句要紧跟在FROM子句之后
  • SQL语句的注释分为单行注释和多行注释,单行注释书写在“—”之后,多行注释书写在“/”和“/”之间
  • SELECT 子句中可以使用常数或者表达式
  • 字符串类型的数据原则上按照字典顺序进行排列,不能与数字的大小顺序混淆
  • 希望选取NULL的记录时,需要在条件表达式中使用IS NULL运算符。希望选取不是NULL时,需要在条件表达式中使用IS NOT NULL运算符。
  • NOT 运算符用来否定某一条件,但是不能滥用
  • 多个查询条件进行组合时,需要使用AND运算符或者OR运算符。AND运算符的优先级高于OR运算符,想要优先执行OR运算符可以使用括号。
  • SQL中的逻辑运算被称为三值逻辑(真、假、不确定)

使用GROUP BY 子句对表进行分组

SELECT <列名1>, <列名2>,...     
  FROM <表名>   
 GROUP BY <列名1>, <列名2>,...;

使用WHERE子句和GROUP BY子句进行汇总处理

SELECT <列名1>, <列名2>, <列名3>,...  
  FROM <表名> 
 WHERE <条件表达式> 
 GROUP BY <列名1>, <列名2>, <列名3>,...;

使用HAVING来指定分组的条件

SELECT <列名1>, <列名2>, <列名3>,...  
  FROM <表名> 
 GROUP BY <列名1>, <列名2>, <列名3>,...
HAVING <分组结果对应的条件>;

ORDER BY子句

SELECT <列名1>, <列名2>, <列名3>,...  
  FROM <表名> 
 ORDER BY <排序基准列1>, <排序基准列2>, ...;

SQL常用规则3

  • COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数
  • 聚合函数会将NULL排除在外,但是COUNT(*)例外。
  • MAX/MIN函数几乎适用于所有数据类型的列,SUM/AVG只适用于数值类型的列
  • 想要计算值得种类时,可以在COUNT函数前使用关键字DISTINCT
  • 聚合键中包含NULL时,在结果中会以不确定(空行)的形式表现出来
  • 使用GROUP BY 子句时,SELECT子句中不能出现聚合键之外的列名
  • 在GROUP BY子句中不能使用SELECT子句中定义的别名
  • 只有在SELECT子句、ORDER BY子句和HAVING 子句中能够使用聚合函数,WHERE子句中不能使用聚合函数
  • HAVING子句要写在GROUP BY 子句后面
  • 通常情况下,为了得到相同的结果,将条件写在WHERE子句中要比写在HAVING子句中的处理速度更快
  • ORDER BY子句通常写在SELECT语句的末尾
  • 排序键包含NULL时,会在开头或者末尾进行汇总
  • 在ORDER BY子句中可以使用SELECT子句中定义的别名
  • 在ORDER BY子句中可以使用SELECT子句未使用的列和聚合函数

SQL语句的书写顺序(重点!!!)

1.SELECT子句→2.FROM子句→3.WHERE子句→4.GROUP BY子句→5.HAVING子句→6.ORDER BY子句

INSERT 语句

INSERT INTO <表名> (列名1, 列名2,...) 
  VALUES (值1, 值2,...);

保留数据表,仅删除全部数据行的DELETE语句

DELETE FROM <表名>;

删除部分数据行的搜索型DELETE语句

DELETE FROM <表名> 
 WHERE <条件>;

改变表中数据的UPDATE语句

UPDATE <表名>   
  SET <列名> = <表达式>;

更新部分数据行的搜索型UPDATE

UPDATE <表名>    
  SET <列名> = <表达式> 
 WHERE <条件>;

事务的语法

事务开始语句;       

    DML语句1;     
    DML语句2;      
    DML语句3; 
    ... 
事务结束语句(COMMIT或者ROLLBACK);

SQL常用规则4

  • 原则上,执行一次INSERT语句会插入一行数据
  • 省略INSERT语句中的列名,就会自动设定为该列的默认值(没有默认值会设定为NULL)
  • DELETE语句到的删除对象时记录(行)
  • 可以通过WHERE子句指定对象条件来删除部分数据
  • 事务是需要在同一处理单元中执行的一系列更新处理的集合

创建视图

CREATE VIEW 视图名称 (<视图列名1>, <视图列名2>,...) 
 AS
<SELECT语句>

删除视图

DROP VIEW 视图名称(<视图列名1>, <视图列名2>,...)

SQL常用规则5

  • 表中存储的是实际数据,而视图中保存的是从表中提取数据所使用的SELECT语句
  • 应该将经常使用的SELECT语句做成视图
  • 定义视图时不要使用ORDER BY子句
  • 视图和表需要同时进行更新,因此通过汇总得到的视图无法进行更新
  • 子查询作为内层查询会首先执行
  • 标量字查询就是返回单一值的子查询
  • 在细分的组内进行比较时,需要使用关联子查询

ABS函数(求绝对值)

ABS(数值)

MOD函数(求余)

MOD(被除数, 除数)

ROUND函数(四舍五入)

ROUND(对象数值, 保留小数的位数)

||函数(拼接)

字符串1 || 字符串2

LENGTH函数(求字符串长度)

LENGTH(字符串)

LOWER函数(小写转换)

LOWER(字符串)

REPLACE函数(字符串的替换)

REPLACE(对象字符串, 替换前的字符串, 替换后的字符串)

SUBSTRING函数(字符串的截取)

SUBSTRING (对象字符串 FRMO 截取的起始位置 FOR 截取的字符数)

UPPER函数(大写转换)

UPPER(字符串)

CURRENT_DATE函数(当前日期)

CURRENT_DATE

CURRENT_TIME函数(当前时间)

CURRENT_TIME

CURRENT_TIMESTAMP函数(当前日期和时间)

CURRENT_TIMESTAMP

EXTRACT函数(截取日期元素)

EXTRACT(日期元素 FROM 日期)

CAST函数(类型转换)

CAST(转换前的值 AS 想要转换的数据类型)

COALESCE函数(将NULL转换为其他值)

COALESCE(数据1, 数据2, 数据3....)

CASE 表达式

CASE WHEN <求值表达式> THEN <表达式>            
     WHEN <求值表达式> THEN <表达式>            
     WHEN <求值表达式> THEN <表达式> 
     .....            
     ELSE <表达式> 
 END

SQL常用规则6

  • 谓词就是返回值为真值的函数
  • 通常指定关联子查询作为EXIST的参数
  • 作为EXIST参数的子查询中经常会使用SELECT *
  • CASE表达式中的END不能省略

SQL常用规则7

  • 集合运算会除去重复的记录,但可以使用ALL选项,保留重复行
  • 进行联结时需要在FROM子句中使用多张表
  • 进行内联结时必须使用ON子句,并且要书写在FROM 和WHERE之间
  • 使用联结时SELECT子句中的列需要按照“<表的别名>.<列名>”的格式进行书写
  • 外联结使用LEFT、RIGHT来指定主表,使用两者所得到的结果完全相同

窗口函数

<窗口函数> OVER ( [PARTITION BY <列清单>]                       
                      ORDER BY <排序用列清单>)

SQL常用规则8

  • 窗口函数兼具分组和排序两种功能
  • 通过PARTITION BY 分组后的记录集合称为“窗口”
  • 专用窗口函数无需使用参数
  • 原则上,窗口函数只能在SELECT子句中使用
  • 超级分组记录默认使用NULL作为聚合键
  • ROLLUP可以同时得出合计和小计
  • 使用GROUPING函数能够简单分辨出原始数据中的NULL和超级分组记录中的NULL
  • 可以把CUBE理解为将使用聚合键进行切割的模块堆积成的一个立方体

每天学习一点点,每天进步一点点。

原文发布于微信公众号 - 小白客(youcoding)

原文发表时间:2017-12-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

如何理解并正确使用MySql索引

索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,本文主要介绍在MySql数据库中索引类型,以及如何创建出更加合...

36660
来自专栏Jackson0714

基础很重要~~04.表表达式-上篇

353120
来自专栏me的随笔

T-SQL基础(一)之简单查询

SQL: Structured Query Language,结构化查询语言,是一种在关系型数据库中用于管理数据的标准语言。SQL是一种声明式编程语言,即只需表...

22820
来自专栏乐沙弥的世界

SQL基础-->分组与分组函数

使用group by column1,column2,..按columm1,column2进行分组,即column1,column2组合相同的值为一个组

19020
来自专栏数说戏聊

09-10章 汇总分组数据第9章

如果需要汇总数据而不是检索,SQL 提供专用函数,可用于检索数据,以便分析和报表生成。这种类型的检索例子有:

9610
来自专栏个人随笔

MySQL常用函数

聚合函数  统计和分析 数据  使用场景:会和分组结合使用 -- 一旦启用分组,只能获取组的信息,组中成员不能出现在select后 count() 查询某个字...

36170
来自专栏数据科学学习手札

(数据科学学习手册28)SQL server 2012中的查询语句汇总

  数据库管理系统(DBMS)最重要的功能就是提供数据查询,即用户根据实际需求对数据进行筛选,并以特定形式进行显示。在Microsoft SQL Serve 2...

496120
来自专栏数据库

常用SQL语句和语法汇总

近几年数据库发挥了越来越重要的作用,这其中和大数据、数据科学的兴起有不可分割的联系。学习数据库,可以说是每个从事IT行业的必修课。你学或不学,它就在那里;你想或...

26550
来自专栏熊二哥

那些年我们写过的T-SQL(上篇)

在当今这个多种不同数据库混用,各种不同语言不同框架融合的年代(一切为了降低成本并高效的提供服务),知识点多如牛毛。虽然大部分SQL脚本可以使用标准SQL来写,但...

216100
来自专栏battcn

MySQL - RANGE优化篇

对于单列索引,索引值区间可以方便地用WHERE语句中的相应范围条件表示。优化器在常量传播阶段,会将一些非常量值转换为常量。

24630

扫码关注云+社区

领取腾讯云代金券