目录

  • 1 第一单元  SQL基本命令
    • 1.1 学习系统环境搭建
    • 1.2 新建课程目录
    • 1.3 第一课时   SQL 简介
    • 1.4 第二课时  ​SQL 语法
    • 1.5 第三课时 MySQL 列的约束
    • 1.6 第四课时  SQL SELECT 语句
    • 1.7 第五课时  SQL WHERE 子句(1)
    • 1.8 第六课时  ​SQL WHERE 子句(2)
    • 1.9 第七课时  SQL AND & OR 运算符
    • 1.10 第八课时  ​SQL ORDER BY 关键字
    • 1.11 第九课时  SQL INSERT INTO 语句
    • 1.12 第十课时  SQL DELETE 语句
    • 1.13 第十一课时  SQL UPDATE 语句
  • 2 第二单元  SQL进阶
    • 2.1 第一课时  ​SQL SELECT TOP 子句
    • 2.2 第二课时  SQL LIKE 操作符
    • 2.3 第三课时 SQL 通配符
    • 2.4 第四课时 SQL IN 操作符
    • 2.5 第五课时 SQL BETWEEN 操作符
    • 2.6 第六课时 SQL 别名
    • 2.7 第七课时 SQL 连接(JOIN)
    • 2.8 第八课时 SQL INNER JOIN 关键字
    • 2.9 第九课时 SQL LEFT JOIN 关键字
    • 2.10 第十课时 SQL RIGHT JOIN 关键字
    • 2.11 第十一课时 ​SQL FULL OUTER JOIN 关键字
    • 2.12 第十二课时 SQL UNION 操作符
    • 2.13 第十三课时 SQL SELECT INTO 语句
    • 2.14 第十四课时 SQL INSERT INTO SELECT 语句
    • 2.15 第十五课时 SQL CREATE DATABASE 语句
    • 2.16 第十六课时 SQL CREATE TABLE 语句
    • 2.17 第十七课时 SQL 约束(Constraints)​
    • 2.18 第十八课时 SQL NOT NULL 约束
    • 2.19 第十九课时 ​SQL UNIQUE 约束
    • 2.20 第二十课时 SQL PRIMARY KEY 约束
    • 2.21 第二十一课时 SQL FOREIGN KEY 约束
    • 2.22 第二十二课时 SQL CHECK 约束
    • 2.23 第二十三课时 SQL DEFAULT 约束
    • 2.24 第二十四课时 SQL CREATE INDEX 语句
    • 2.25 第二十五课 SQL 撤销索引、撤销表以及撤销数据库
    • 2.26 第二十六课时 SQL ALTER TABLE 语句
    • 2.27 第二十七课时 SQL AUTO INCREMENT 字段
    • 2.28 第二十八课时 SQL 视图(Views)
    • 2.29 第二十九课时 SQL Date 函数
    • 2.30 第三十课时 SQL NULL 值
    • 2.31 第三十一课时 SQL NULL 函数
    • 2.32 第三十二课时 ​SQL 通用数据类型
    • 2.33 第三十三课时 SQL 用于各种数据库的数据类型
  • 3 第三单元  SQL函数
    • 3.1 第一课时 SQL 函数
    • 3.2 第二课时 SQL AVG() 函数
    • 3.3 第三课时 SQL COUNT() 函数
    • 3.4 第四课时 SQL FIRST() 函数
    • 3.5 第五课时 SQL LAST() 函数
    • 3.6 第六课时 SQL MAX() 函数
    • 3.7 第七课时 SQL MIN() Function
    • 3.8 第八课时 SQL SUM() 函数
    • 3.9 第九课时 SQL GROUP BY 语句
    • 3.10 第十课时 SQL HAVING 子句
    • 3.11 第十一课时 SQL EXISTS 运算符
    • 3.12 第十二课时 SQL UCASE() 函数
    • 3.13 第十三课时 SQL LCASE() 函数
    • 3.14 第十四课时 SQL MID() 函数
    • 3.15 第十五课时 SQL LEN() 函数
    • 3.16 第十六课时 SQL ROUND() 函数
    • 3.17 第十七课时 SQL NOW() 函数
    • 3.18 第十八课时 SQL FORMAT() 函数
  • 4 附录
    • 4.1 SQL 命令速查
    • 4.2 SQL 主机
    • 4.3 MySQL 导出数据
    • 4.4 MySQL 导入数据
    • 4.5 MySQL 函数速查
    • 4.6 MySQL 运算符速查
  • 5 学生论坛
    • 5.1 杨汶茜带我们学SQL
    • 5.2 冯凯教我们学技术
    • 5.3 闫心羽的普通话很标准
    • 5.4 我也来试试
  • 6 基于SQL的会计核算流程
    • 6.1 会计核算流程梳理
      • 6.1.1 传统会计核算流程分析
      • 6.1.2 基于SQL的会计核算流程分析
    • 6.2 基于SQL的会计核算案例
      • 6.2.1 案例企业经济业务资料
      • 6.2.2 SQL会计核算流程实现
  • 7 基于SQL的财务分析案例
    • 7.1 收集整理企业财报数据
    • 7.2 创建数据库及财报数据表
      • 7.2.1 创建财报数据库
      • 7.2.2 创建资产负债表
      • 7.2.3 创建利润表
      • 7.2.4 企业财务效率分析
    • 7.3 企业财务效率分析
      • 7.3.1 偿债能力分析
      • 7.3.2 营运能力分析
      • 7.3.3 盈利能力分析
      • 7.3.4 发展能力分析
      • 7.3.5 财务效率综合评价
    • 7.4 企业财务综合分析
      • 7.4.1 销售净利率
      • 7.4.2 总资产周转率
      • 7.4.3 总资产净利率
      • 7.4.4 权益乘数
      • 7.4.5 净资产收益率
      • 7.4.6 杜邦体系综合分析
  • 8 视图
    • 8.1 创建与使用视图
    • 8.2 更新视图
      • 8.2.1 在视图中插入数据
      • 8.2.2 利用视图更新数据
      • 8.2.3 利用视图删除数据
    • 8.3 删除视图
  • 9 数据库规范化
    • 9.1 数据库规范化的基本原理及方法
      • 9.1.1 数据库设计规范化级别
      • 9.1.2 规范化的步骤及其实现
      • 9.1.3 规范化的优点与应用考量
      • 9.1.4 关于反规范化
    • 9.2 数据库规范化应用案例
      • 9.2.1 存货管理库建表规范化
      • 9.2.2 计算发出存货单价
      • 9.2.3 查询存货本期出库完整信息
      • 9.2.4 规范化案例分析
第七课时 SQL 连接(JOIN)

SQL 连接(JOIN)

SQL join 用于把来自两个或多个表的行结合起来。

下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种情况。


最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 

SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。

演示数据

下面是选自 "Websites" 表的数据:

id name          url                                      alexa   country

1  Google       https://www.google.cn/       1        USA

2  淘宝            https://www.taobao.com/   13      CN 

3  菜鸟教程     http://www.runoob.com/    4689  CN 

4  微博            http://weibo.com/                20      CN 

5  Facebook   https://www.facebook.com/ 3    USA

7stackoverflow http://stackoverflow.com/ 0      IND



下面是 "access_log" 网站访问记录表的数据:

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)

请注意,"Websites" 表中的 "id" 列指向 "access_log" 表中的字段 "site_id"。上面这两个表是通过 "site_id" 列联系起来的。

然后,如果我们运行下面的 SQL 语句(包含 INNER JOIN):

命令:

SELECT Websites.id, 

Websites.name, 

access_log.count, 

access_log.date

FROM Websites

INNER JOIN access_log

ON Websites.id=access_log.site_id;

返回:

id   name                 country     date

1    Google              45             2016-05-10  

1    Google              230           2016-05-14

2    淘宝                  10             2016-05-14

3   菜鸟教程            100           2016-05-13

3   菜鸟教程            220           2016-05-15

3   菜鸟教程            201           2016-05-17

4   微博                    13            2016-05-15

5   Facebook          205           2016-05-14

7   stackoverflow   545           2016-05-16


不同的 SQL JOIN

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

INNER JOIN:如果表中有至少一个匹配,则返回行;

LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行;

RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行;

FULL JOIN:只要其中一个表中存在匹配,则返回行。

首先,连接的结果可以在逻辑上看作是由SELECT语句指定的列组成的新表。

左连接与右连接的左右指的是以两张表中的哪一张为基准,它们都是外连接。

外连接就好像是为非基准表添加了一行全为空值的万能行,用来与基准表中找不到匹配的行进行匹配。假设两个没有空值的表进行左连接,左表是基准表,左表的所有行都出现在结果中,右表则可能因为无法与基准表匹配而出现是空值的字段。

这部分主要涉及的是表连接的逻辑问题,教程主讲语法的话这部分确实需要自己再去搜资料

如:

inner join <= min(left join, right join)
full join >= max(left join, right join)
当 inner join < min(left join, right join) 时, full join > max(left join, right join)