前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常用SQL语句和语法汇总

常用SQL语句和语法汇总

作者头像
爱吃西瓜的番茄酱
发布2018-04-04 11:24:46
3K0
发布2018-04-04 11:24:46
举报

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

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

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

扯远了,飞回来~~~

创建数据库

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

表的创建

代码语言:javascript
复制
CREATE TABLE  <表名> 
( <列名1> <数据类型> <约束条件>,   
  <列名2> <数据类型> <约束条件>,   
  <列名3> <数据类型> <约束条件>,   
  <列名4> <数据类型> <约束条件>,   
  ....   
  <该表的的约束条件1>  <该表的的约束条件2>...);
SQL常用规则1
  • 数据库名称、表名和列名由字母、数字和下划线组成
  • 名称必须以字母开头
  • 名称不能重复

表的删除

代码语言:javascript
复制
DROP TABLE <表名>;

表定义的更新(添加列)

代码语言:javascript
复制
ALTER TABLE <表名> ADD COLUMN <列的定义>;

表定义的更新(删除列)

代码语言:javascript
复制
ALTER TABLE <表名> DROP TABLE <列名>;

列的查询

代码语言:javascript
复制
SELECT <列名>,...  
  FROM <表名>;

查询出表中的所有列

代码语言:javascript
复制
SELECT *  
  FROM <表名>;

根据WHERE语句来选择记录

代码语言:javascript
复制
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 子句对表进行分组

代码语言:javascript
复制
SELECT <列名1>, <列名2>,...     
  FROM <表名>   
 GROUP BY <列名1>, <列名2>,...;

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

代码语言:javascript
复制
SELECT <列名1>, <列名2>, <列名3>,...  
  FROM <表名> 
 WHERE <条件表达式> 
 GROUP BY <列名1>, <列名2>, <列名3>,...;

使用HAVING来指定分组的条件

代码语言:javascript
复制
SELECT <列名1>, <列名2>, <列名3>,...  
  FROM <表名> 
 GROUP BY <列名1>, <列名2>, <列名3>,...
HAVING <分组结果对应的条件>;

ORDER BY子句

代码语言:javascript
复制
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 语句

代码语言:javascript
复制
INSERT INTO <表名> (列名1, 列名2,...) 
  VALUES (值1, 值2,...);

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

代码语言:javascript
复制
DELETE FROM <表名>;

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

代码语言:javascript
复制
DELETE FROM <表名> 
 WHERE <条件>;

改变表中数据的UPDATE语句

代码语言:javascript
复制
UPDATE <表名>   
  SET <列名> = <表达式>;

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

代码语言:javascript
复制
UPDATE <表名>    
  SET <列名> = <表达式> 
 WHERE <条件>;

事务的语法

代码语言:javascript
复制
事务开始语句;       

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

创建视图

代码语言:javascript
复制
CREATE VIEW 视图名称 (<视图列名1>, <视图列名2>,...) 
 AS
<SELECT语句>

删除视图

代码语言:javascript
复制
DROP VIEW 视图名称(<视图列名1>, <视图列名2>,...)
SQL常用规则5
  • 表中存储的是实际数据,而视图中保存的是从表中提取数据所使用的SELECT语句
  • 应该将经常使用的SELECT语句做成视图
  • 定义视图时不要使用ORDER BY子句
  • 视图和表需要同时进行更新,因此通过汇总得到的视图无法进行更新
  • 子查询作为内层查询会首先执行
  • 标量字查询就是返回单一值的子查询
  • 在细分的组内进行比较时,需要使用关联子查询

ABS函数(求绝对值)

代码语言:javascript
复制
ABS(数值)

MOD函数(求余)

代码语言:javascript
复制
MOD(被除数, 除数)

ROUND函数(四舍五入)

代码语言:javascript
复制
ROUND(对象数值, 保留小数的位数)

||函数(拼接)

代码语言:javascript
复制
字符串1 || 字符串2

LENGTH函数(求字符串长度)

代码语言:javascript
复制
LENGTH(字符串)

LOWER函数(小写转换)

代码语言:javascript
复制
LOWER(字符串)

REPLACE函数(字符串的替换)

代码语言:javascript
复制
REPLACE(对象字符串, 替换前的字符串, 替换后的字符串)

SUBSTRING函数(字符串的截取)

代码语言:javascript
复制
SUBSTRING (对象字符串 FRMO 截取的起始位置 FOR 截取的字符数)

UPPER函数(大写转换)

代码语言:javascript
复制
UPPER(字符串)

CURRENT_DATE函数(当前日期)

代码语言:javascript
复制
CURRENT_DATE

CURRENT_TIME函数(当前时间)

代码语言:javascript
复制
CURRENT_TIME

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

代码语言:javascript
复制
CURRENT_TIMESTAMP

EXTRACT函数(截取日期元素)

代码语言:javascript
复制
EXTRACT(日期元素 FROM 日期)

CAST函数(类型转换)

代码语言:javascript
复制
CAST(转换前的值 AS 想要转换的数据类型)

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

代码语言:javascript
复制
COALESCE(数据1, 数据2, 数据3....)

CASE 表达式

代码语言:javascript
复制
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来指定主表,使用两者所得到的结果完全相同

窗口函数

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建数据库
    • SQL常用规则0
    • 表的创建
      • SQL常用规则1
      • 表的删除
      • 表定义的更新(添加列)
      • 表定义的更新(删除列)
      • 列的查询
      • 查询出表中的所有列
      • 根据WHERE语句来选择记录
        • SQL常用规则2
        • 使用GROUP BY 子句对表进行分组
        • 使用WHERE子句和GROUP BY子句进行汇总处理
        • 使用HAVING来指定分组的条件
        • ORDER BY子句
          • SQL常用规则3
            • SQL语句的书写顺序(重点!!!)
            • INSERT 语句
            • 保留数据表,仅删除全部数据行的DELETE语句
            • 删除部分数据行的搜索型DELETE语句
            • 改变表中数据的UPDATE语句
            • 更新部分数据行的搜索型UPDATE
            • 事务的语法
              • SQL常用规则4
              • 创建视图
              • 删除视图
                • SQL常用规则5
                • ABS函数(求绝对值)
                • MOD函数(求余)
                • ROUND函数(四舍五入)
                • ||函数(拼接)
                • LENGTH函数(求字符串长度)
                • LOWER函数(小写转换)
                • REPLACE函数(字符串的替换)
                • SUBSTRING函数(字符串的截取)
                • UPPER函数(大写转换)
                • CURRENT_DATE函数(当前日期)
                • CURRENT_TIME函数(当前时间)
                • CURRENT_TIMESTAMP函数(当前日期和时间)
                • EXTRACT函数(截取日期元素)
                • CAST函数(类型转换)
                • COALESCE函数(将NULL转换为其他值)
                • CASE 表达式
                  • SQL常用规则6
                    • SQL常用规则7
                    • 窗口函数
                      • SQL常用规则8
                      相关产品与服务
                      数据库
                      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档