小墨の博客

梦想需要付诸行动,否则只能是梦

SQL常用语句词典

整理:张博凯

Word版下载:SQL常用语句词典.zip

PDF版下载:SQL常用语句词典.pdf


SQL常用语句词典

参考:https://zhuanlan.zhihu.com/p/113941048


一、查SELECT

[检索单个列]

SELECT [列名] FROM [表名];

[检索多个列]

SELECT [列名1], [列名2] FROM [表名];

[检索所有列]

SELECT *   FROM [表名];

[剔除重复行]

SELECT DISTINCT   [列名1][列名2] FROM [表名];

# DISTINCT作用于其后面的所有列

[限制显示的行]

SELECT [列名]

FROM [表名]

LIMIT 5 OFFSET 5;

#LIMIT限制5行、OFFSET从第6行起,即6-10行

#第一个被检索的行是第0行

[按列排序数据]

SELECT [列名1],[列名 2]

FROM [表名]

ORDER BY [列名1],[列名2];

#可用非检索列排序,如[列名3]

[指定排序方向]

SELECT [列名1],[列名2]

FROM [表名]

ORDER BY [列名1],[列名2] DESC;

#按列1升序、列2降序排序

#默认升序ASC,降序DESC, ASC和DESC只作用于前一列

[单条件查找数据]

SELECT [列名]

FROM [表名]

WHERE条件

#一般条件表达: [列名][操作符][条件值],如price= 10

#操作符及说明(NOT位置不同于其他操作符)

=等于>大于

<>或!=不等于>=大于等于

<小于BETWEEN AND两值之间

<=小于等于IS NULL空值检查

IN指定条件范围NOT否定全部条件,WHERE NOT条件

#条件值为字符是需要用单引号括起来,如'helloworld'

[多条件查找数据]

SELECT [列名]

FROM [表名]

WHERE条件1 AND/OR条件2

#AND表示同时满足, OR表示满足其一即可

#优先级:括号 > AND > OR

[通配符查找文本数据]

SELECT [列名]

FROM [表名]

WHERE [列名] LIKE [文本+通配符]

#通配符唯一操作符LIKE

#通配符仅用于文本搜索

百分号% 表示任意字符出现任意次数'Fish%':以Fish开头的文本

下划线_ 表示任意单个字符

方括号[]指定字符集'[JM]%':以J或M开头的文本

前缀^表否定'[^JM]%':不以J或M开头的文本

[拼接文本字段]

SELECT [列名1]+[列名2]

    AS列名1_列名2

FROM [表名];

#拼接列1和列2的值,并取别名:列名1_列名2

[算术运算]

SELECT [列名1] *或+或-或/ [列名2]

    AS列名1_列名2

FROM [表名];

[汇总数据]

SELECT COUNT   (列名1) AS count列名1,   #计算行数

AVG(列名1) AS avg_列名1,             #计算均值

MAX(列名I) AS MAX_列名1,             #计算最大值

MIN(列名1) AS MIN_列名1,             #计算最小值

SUM(列名1) AS SUM_列名1,             #求和

FROM [表名];

#使用聚集函数对数据进行汇总,可单独或组合使用聚集函数

[数据分组汇总]

SELECT [列名1],[列名2],COUNT(*)     #可用其他函数

FROM [表名]

GROUP BY [列名1],[列名2];

#GROUP BY可包含任意数目的列。如果为多列,数据将在最后指定的分组上进行汇总

[过滤分组]

SELECT [列名1],COUNT(*)                 #可用其他函数

FROM [表名]

GROUP BY [列名1]

HAVING条件;     #如COUNT(*)>2

下面是稍微复杂的一些语句介绍

[子查询过滤]

SELECT [列名1]

FROM [表名1]

WHERE [列名1] IN (SELECT [列名1] FROM [表名2] WHERE条件);

#子查询的SELECT只能查询单列

#子查询可作为条件值放在WHERE子句后,也可以作为计算字段放在SELECT后

#相较于之前的查询,子查询可用于跨表操作

[子查询过滤]

SELECT [列名1],

    (SELECT COUNT(*)

    FROM [表名2]

    WHERE [表名2].[列名1]=[表名1].[列名1])

    FROM [表名1];

#列名1是两个表共有的列

[拓展]

这部分内容有助于子查询的理解

数据库通常使用关系表,表只存储同类信息,表通过外键与主键相关联。

举例来说:

Order表         存储订单编号顾客ID、订单日期;

OrderItems表   存储物品ID、物品名、订单编号;

Customers表     存储顾客ID、顾客姓名、顾客年龄;

#下划直线表示主键、下滑波浪线表示外键

#便于理解,用中文命名

Order表与Customers表通过顾客ID关联,OrderItems 表与Order表通过订单编号关联。在这样的关系表基础上,使用子查询就可以通过一个语句实现跨表查询。

查询订购物品 泡芙 的所有顾客信息,可以用子查询实现:

SELECT 顾客姓名,顾客年龄

    FROM Customers

    WHERE顾客ID IN

        (SELECT顾客ID

        FROM   Order

        WHERE订单编号IN

            (SELECT订单编号

            FROM OrderItems

            WHERE 物品名 = 泡芙);

[联结两个表]

结合上面的关系表介绍

一次查询 顾客姓名、顾客年龄、订单日期:

SELECT 顾客姓名,顾客年龄,订单日期

FROM   Customers INNER JOIN Order

ON Customers.顾客ID = Order.顾客ID;

SELECT顾客姓名,顾客年龄,订单日期

FROM   Customers,Order

WHERE Customers.顾客ID = Order.顾客ID;

[联结多个表]

结合上面的关系表介绍

一次查询 顾客姓名、顾客年龄、订单编号、订单日期、物品名:

SELECT顾客姓名,顾客年龄,订单编号,订单日期,物品名

FROM   Customers,Order,OrderItems

WHERE   Customers.顾客ID =   Order.顾客ID

    AND Order.订单编号 = OrderItems.订单编号;

[自联结]

结合上面的关系表介绍

一次查询 与小王年龄相同的所有顾客:

SELECT c1.顾客姓名

FROM   Customers AS c1,Customers AS c2

WHERE c1.顾客年龄 = c2.顾客年龄

    AND c2.顾客姓名 = 小王;

[外联结]

结合上面的关系表介绍

检索没有下过订单的顾客信息:

SELECT 顾客姓名,顾客年龄,订单编号

FROM   Customers LEFT OUTER JOIN Order

ON Customers.顾客ID = Order.顾客ID;

#不用于内联结,外联结还包括没有关联的行

#LEFT表示左边的表显示所有行,RIGHT表示右边的表显示

[组合查询]

SELECT [列名1],[列名2],[列名3]

FROM [表名1]

WHERE条件1

UNION

SELECT [列名1],[列名2],[列名3]

FROM [表名1]

WHERE条件2

ORDER BY [列名1];

#UNION会自动删除重复行,不想删除用UNION ALL

#两个SELECT子句要包括相同的列、表达式或聚集函数

 

二、增INSERT、删DELETE、改UPDATE

[插入数据]

INSERT   INTO [表名]

    ([列名1],

    [列名2],

    [列名3],

    [列名4])

VALUES('列1值',

    '列2值',

    '列3值',

    '列4值');

#可插入全部列或部分列,省略的列要满足:允许NULL或给出默认值

[插入检索数据]

INSERT   INTO [表名1]

    ([列名1],

    [列名2]

    [列名3],

    [列名4])

SELECT [列名1],

    [列名2],

    [列名3],

    [列名4]

FROM [表名2];

#SELECT列名不要求与INSERT列名匹配,看返回列的位置,SELCET返回第1列填充指定表第1列。

[表复制]

SELECT *

INTO [新表名]

FROM [表名];

#创建新表,并把原表内容全部复制到新表

[更改数据]

UPDATE [表名]

SET [列名1]='文本'

    [列名2]=数值

WHERE条件;

[删除数据]

DELETE   FROM [表名]

WHERE条件;

 

三、 创建、操作表

[创建表]

CREATE TABLE   [表名]

(

[列名]      数据类型        是否允许空值(选填)  默认值(选填),

order_num   INTEGER         NOT   NULL,

order_date  DATETIME        NOT NULL        DEFAULT GETDATE(),

cust_id     CHAR(1O)        NOT   NULL,

order_price DECIMAL(8,2)    NOT NULL,

);

[更新表]

ALTER TABLE [表名]

ADD [列名1] 数据类型 是否允许空值 默认值

DROP   COLUMN [列名2];

[删除表]

DROP TABLE [表名];

 

四、辅助工具

[创建视图]

CREATE VIEW   [视图名] AS

SELECT *

FROM [列名],

WHERE条件;

[使用视图]

SELECT *

FROM [视图名];

 


张小弟之家

本文链接:
文章标题:

本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work

尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。

    发表评论:

    搜索
    本文二维码
    标签列表
    站点信息
    • 文章总数:547
    • 页面总数:20
    • 分类总数:96
    • 标签总数:213
    • 评论总数:63
    • 浏览总数:287025

    | | |
    | |  Z-Blog PHP