SQL基本教程

SQL SELECT 语句

SELECT 语句用于从数据库中选取数据。

  1. SELECT column_name,column_name
  2. FROM table_name;
  3. SELECT * FROM table_name;

SQL SELECT DISTINCT 语句

SELECT DISTINCT 语句用于返回唯一不同的值(去重查询)

  1. select DISTINCT Receivename FROM SellerCube..ProfitReportBill where SendDate>='2022-10-1 00:00:00' and SendDate<'2022-10-02 00:00:00'
  2. AND warehouseTypeStr='国内仓'

SQL WHERE 子句

WHERE 子句用于过滤记录,提取那些满足指定条件的记录。

  1. SELECT * FROM Websites WHERE country='CN';
  2. 下面的运算符可以在 WHERE 子句中使用:
  3. 运算符 描述
  4. = 等于
  5. <> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
  6. > 大于
  7. < 小于
  8. >= 大于等于
  9. <= 小于等于
  10. BETWEEN 在某个范围内
  11. LIKE 搜索某种模式
  12. IN 指定针对某个列的多个可能值

SQL AND & OR 运算符

AND & OR 运算符用于基于一个以上的条件对记录进行过滤。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

  1. SELECT * FROM Websites
  2. WHERE country='CN'
  3. AND alexa > 50;
  4. SELECT * FROM Websites
  5. WHERE country='USA'
  6. OR country='CN';

SQL ORDER BY 关键字

ORDER BY 关键字用于对结果集进行排序。
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

  1. SELECT column_name
  2. FROM table_name
  3. ORDER BY column_name ASC|DESC;
  4. -- desc 是【 describe v.描述】 和【descend v.下降】 的缩写
  5. -- asc 是【ascend 升序意思】

SQL INSERT INTO 语句

INSERT INTO 语句用于向表中插入新记录。

  1. -- 第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
  2. INSERT INTO table_name
  3. VALUES (value1,value2,value3,...);
  4. -- 第二种形式需要指定列名及被插入的值:
  5. INSERT INTO table_name (column1,column2,column3,...)
  6. VALUES (value1,value2,value3,...);

SQL UPDATE 语句

UPDATE 语句用于更新表中已存在的记录。

  1. UPDATE table_name
  2. SET column1=value1,column2=value2,...
  3. WHERE some_column=some_value;
  4. -- 更新XXX
  5. -- 设置什么列什么值
  6. -- 确定哪一条件(那一列)

SQL DELETE 语句

DELETE 语句用于删除表中的记录。

  1. DELETE FROM table_name
  2. WHERE some_column=some_value;

SQL 高级教程

SQL SELECT TOP 子句

SELECT TOP 子句用于规定要返回的记录的数目。
SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。

  1. select TOP 10 * FROM SellerCube..ProfitReportBill where SendDate>='2022-10-1 00:00:00' and SendDate<'2022-10-02 00:00:00'
  2. AND warehouseTypeStr='国内仓'
  3. -- 得加*号,表示拉取所有字段,不然那就得制定字段
  4. -- 注意:并非所有的数据库系统都支持 SELECT TOP 语句。
  5. -- MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。

SQL LIKE 操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

  1. SELECT * FROM Websites
  2. WHERE name LIKE '%k
  1. SELECT * FROM Websites
  2. WHERE name NOT LIKE '%oo%';

SQL 通配符

通配符可用于替代字符串中的任何其他字符。

SQL 通配符

在 SQL 中,通配符与 SQL LIKE 操作符一起使用。SQL 通配符用于搜索表中的数据。
在 SQL 中,可使用以下通配符:

通配符 描述
% 替代 0 个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist] 或 [!charlist] 不在字
  1. select * FROM SellerCube..ProfitReportBill where SendDate>='2022-10-1 00:00:00' and SendDate<'2022-10-02 00:00:00'
  2. AND warehouseTypeStr LIKE'国%'
  3. --%在前在后替代的位置不同

下面的 SQL 语句选取 name 以一个任意字符开始,然后是 “oogle” 的所有客户:

  1. SELECT * FROM Websites
  2. WHERE name LIKE '_oogle';

MySQL 中使用 REGEXPNOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
下面的 SQL 语句选取 name 以 “G”、”F” 或 “s” 开始的所有网站:

  1. SELECT * FROM Websites
  2. WHERE name REGEXP '^[A-H]';

SQL IN 操作符

IN 操作符允许您在 WHERE 子句中规定多个值。

  1. SELECT column_name(s)
  2. FROM table_name
  3. WHERE column_name IN (value1,value2,...);

SQL BETWEEN 操作符

BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。

  1. SELECT * FROM Websites
  2. WHERE alexa BETWEEN 1 AND 20;

SQL 别名

通过使用 SQL,可以为表名称或列名称指定别名。
基本上,创建别名是为了让列名称的可读性更强。

  1. --- 表别名
  2. SELECT w.name, w.url, a.count, a.date
  3. FROM Websites AS w, access_log AS a
  4. WHERE a.site_id=w.id and w.name="菜鸟教程";
  5. --列别名
  6. SELECT name AS n, country AS c
  7. FROM Websites;
  8. SELECT w.platformName, w.country, a.*
  9. FROM SellerCube..ProfitReportBillExtend AS w, SellerCube..ProfitReportBill AS a
  10. WHERE a.billid=w.billid and a.billid='A00031220420004F';

SQL JOIN

在我们继续讲解实例之前,我们先列出您可以使用的不同的 SQL JOIN 类型:

  • INNER JOIN:如果表中有至少一个匹配,则返回行()
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行(join前面是哪个方向,就代表以哪边的数据为基准,也就是全获取过来)
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行 (join前面是哪个方向,就代表以哪边的数据为基准,也就是全获取过来)
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

图片.png图片.png图片.png图片.png

  1. --"Websites" 表中的 "id" 列指向 "access_log" 表中的字段 "site_id"
  2. --上面这两个表是通过 "site_id" 列联系起来的。
  3. SELECT Websites.id, Websites.name, access_log.count, access_log.date
  4. FROM Websites
  5. INNER JOIN access_log
  6. ON Websites.id=access_log.site_id;

SQL UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

  1. SELECT column_name(s) FROM table1
  2. UNION
  3. SELECT column_name(s) FROM table2;

PS:和full join 有异曲同工之处。

SQL 通用数据类型

数据库表中的每个列都要求有名称和数据类型。Each column in a database table is required to have a name and a data type.
SQL 开发人员必须在创建 SQL 表时决定表中的每个列将要存储的数据的类型。数据类型是一个标签,是便于 SQL 了解每个列期望存储什么类型的数据的指南,它也标识了 SQL 如何与存储的数据进行交互。
下面的表格列出了 SQL 中通用的数据类型:

数据类型 描述
CHARACTER(n) 字符/字符串。固定长度 n。
VARCHAR(n) 或
CHARACTER VARYING(n)
字符/字符串。可变长度。最大长度 n。
BINARY(n) 二进制串。固定长度 n。
BOOLEAN 存储 TRUE 或 FALSE 值
VARBINARY(n) 或
BINARY VARYING(n)
二进制串。可变长度。最大长度 n。
INTEGER(p) 整数值(没有小数点)。精度 p。
SMALLINT 整数值(没有小数点)。精度 5。
INTEGER 整数值(没有小数点)。精度 10。
BIGINT 整数值(没有小数点)。精度 19。
DECIMAL(p,s) 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数,小数点后有 2 位数的数字。
NUMERIC(p,s) 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同)
FLOAT(p) 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。
REAL 近似数值,尾数精度 7。
FLOAT 近似数值,尾数精度 16。
DOUBLE PRECISION 近似数值,尾数精度 16。
DATE 存储年、月、日的值。
TIME 存储小时、分、秒的值。
TIMESTAMP 存储年、月、日、小时、分、秒的值。
INTERVAL 由一些整数字段组成,代表一段时间,取决于区间的类型。
ARRAY 元素的固定长度的有序集合
MULTISET 元素的可变长度的无序集合
XML 存储 XML 数据

SQL 函数

  • AVG() - 返回平均值
  • COUNT() - 返回行数
  • FIRST() - 返回第一个记录的值
  • LAST() - 返回最后一个记录的值
  • MAX() - 返回最大值
  • MIN() - 返回最小值
  • SUM() - 返回总和

    SQL SUM() 函数

    SUM() 函数返回数值列的总数。 ```plsql SELECT SUM(column_name) FROM table_name; mysql> SELECT * FROM access_log; +——-+————-+———-+——————+ | aid | site_id | count | date | +——-+————-+———-+——————+ | 1 | 1 | 45 | 2016-05-10 | | 2 | 3 | 100 | 2016-05-13 | | 3 | 1 | 230 | 2016-05-14 | | 4 | 2 | 10 | 2016-05-14 | | 5 | 5 | 205 | 2016-05-14 | | 6 | 4 | 13 | 2016-05-15 | | 7 | 3 | 220 | 2016-05-15 | | 8 | 5 | 545 | 2016-05-16 | | 9 | 3 | 201 | 2016-05-17 | +——-+————-+———-+——————+ 9 rows in set (0.00 sec)

SELECT COUNT(*) FROM access_log; —计数

select
sum(CAST (OrderTotal as Decimal(10,2))) as ‘订单金额’, sum(storagePrice) as ‘仓储费’, sum(extendPriceField1) as ‘集成供应链成本’, sum(operatingCosts) as ‘集团运营成本’ , sum(storagePrice)/sum(CAST (OrderTotal as Decimal(10,2))) as ‘仓储费/订单金额’, sum(operatingCosts)/sum(CAST (OrderTotal as Decimal(10,2))) as ‘集团运营成本/订单金额’, sum(extendPriceField1)/sum(CAST (OrderTotal as Decimal(10,2))) as ‘集成供应链成本/订单金额’ FROM SellerCube..ProfitReportBill where SendDate>=’2022-10-1 00:00:00’ and SendDate<’2022-10-2 00:00:00’
AND warehouseTypeStr=’国内仓’

  1. <a name="UgE3e"></a>
  2. #### SQL AVG() 函数
  3. AVG() 函数返回数值列的平均值。
  4. ```plsql
  5. SELECT AVG(column_name) FROM table_name

SQL COUNT() 函数

COUNT() 函数返回匹配指定条件的行数。

  1. SELECT count(column_name) FROM table_name
  2. SELECT COUNT(DISTINCT site_id) AS nums FROM access_log;--不同siteid

SQL MAX() 函数

MAX() 函数返回指定列的最大值。

  1. SELECT MAX(column_name) FROM table_name;

SQL MIN() 函数

MAX() 函数返回指定列的最小值。

  1. SELECT MIN(column_name) FROM table_name;

SQL GROUP BY 语句

GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

  1. SELECT column_name, aggregate_function(column_name)
  2. FROM table_name
  3. WHERE column_name operator value
  4. GROUP BY column_name;

随堂小考

  1. select
  2. sp.processcenter_id as "处理中心ID",
  3. case
  4. sp.enable
  5. when 0 then '不可用'
  6. when 1 then '可用'
  7. end as "是否可用",
  8. sp.name as "中文名称",
  9. sp.en_name as "英文名称",
  10. sp.abbr_name as "中文简称",
  11. pr.cn_name as "大区",
  12. pri1.cn_name as "区域",
  13. pri2.cn_name as "库销比区域",
  14. sp.country_id,
  15. scs.cn_name as "国家",
  16. scs.ct_name,
  17. scs.en_shorting as "国家简码",
  18. CASE
  19. sp.operation_mode
  20. when 0 THEN
  21. '自营'
  22. when 1 THEN
  23. '三方运营'
  24. WHEN 2 THEN
  25. '平台运营'
  26. WHEN 3 THEN
  27. '代销运营'
  28. END as "运营模式",
  29. CASE
  30. sp.wms_type
  31. when 0 then
  32. 'EWMS'
  33. WHEN 1 THEN
  34. '三方系统'
  35. when 2 then
  36. 'TWMS'
  37. WHEN 3 THEN
  38. 'WMS'
  39. end AS "系统类型",
  40. CASE
  41. spe.is_open
  42. when 0 then
  43. '非社会化'
  44. when 1 then
  45. '社会化'
  46. end as "是否社会化",
  47. (select reserve from wsp.sys_dict_details where dict_type ='处理中心平台类型' and dict_key = cast(spe.platform as varchar)) as "处理中心运营方",
  48. CASE
  49. sp.is_china
  50. when 0 then '海外仓'
  51. when 1 then '国内仓'
  52. end as "是否国内仓"
  53. from wsp.sys_processcenter sp
  54. left join wsp.pm_processcenter_management ppm on sp.processcenter_id=ppm.processcenter_id
  55. left join wsp.pm_region pr on ppm.region_id=pr.id
  56. left join wsp.pm_region_item pri1 on ppm.region_item_id=pri1.id
  57. left join wsp.pm_region_item pri2 on ppm.ks_region_item_id=pri2.id
  58. left join wsp.sys_countrys scs on scs.id=sp.country_id
  59. left join wsp.sys_processcenter_expand spe on spe.sys_processcenter_id=sp.id
  60. where ppm.is_deleted=0

Matebase语法

  1. select
  2. sum(CAST (OrderTotal as Decimal(10,2))) as "订单金额",
  3. sum(storagePrice) as "仓储费",
  4. sum(extendPriceField1) as "集成供应链成本",
  5. sum(operatingCosts) as "集团运营成本" ,
  6. sum(storagePrice)/sum(CAST (OrderTotal as Decimal(10,2))) as "仓储费/订单金额",
  7. sum(operatingCosts)/sum(CAST (OrderTotal as Decimal(10,2))) as "集团运营成本/订单金额",
  8. sum(extendPriceField1)/sum(CAST (OrderTotal as Decimal(10,2))) as "集成供应链成本/订单金额"
  9. FROM SellerCube.ProfitReportBill
  10. where SendDate>='2022-10-1' and SendDate<'2022-10-22'
  11. AND warehouseTypeStr='国内仓'