整理:张博凯
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
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。