+2020年1月13日学習内容
+关系数据库概述 - 廖雪峰的官方网站
+安装 mySQL
+从 MySQL 官方网站下载最新的 MySQL Community Server 版本:
+https://dev.mysql.com/downloads/mysql/
+运行 MySQL
+Mac:
+cd /usr/local/mysql/bin
+./mysql -u root -p
+
+mysql的可执行命令在/usr/local/mysql/bin目录下,而这个目录不在普通用户的环境路径下,因此每次执行时都需要输入完整路径,比较麻烦。因此需要将这个路径添加到环境变量中。首先我们需要创建一个 .bash_profile 文件(不要掉了文件名前面的 . 号),命令如下:
+touch .bash_profile
+
+创建完成后,用编辑器打开这个文件,添加下面的内容:
+export PATH=/usr/local/mysql/bin:$PATH
+
+保存后退出
+准备数据
+下载 SQL 脚本,在命令行运行:
+$ mysql -u root -p < init-test-data.sql
+
+就可以自动创建 test 数据库,并且在 test 数据库下创建 students 表和
+classes 表,以及必要的初始化数据。
+使用数据库
+mysql> USE test;
+
+基本查询
+SELECT * FROM <表名>
+
+条件查询
+SELECT * FROM <表名> WHERE <条件表达式>
+SELECT * FROM <表名> WHERE <条件1> AND/OR <条件2>
+SELECT * FROM <表名> WHERE NOT <条件>
+SELECT * FROM <表名> WHERE score BETWEEN 60 AND 90
+
+要组合三个或者更多的条件,就需要用小括号()表示如何进行条件运算。
+如果不加括号,条件运算按照 NOT、AND、OR 的优先级进行。
+投影查询
+SELECT 列1, 列2, 列3 FROM …
+SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM …
+
+排序
+SELECT id, name, gender, score FROM students ORDER BY score (DESC);
+
+分页查询
+LIMIT <M> OFFSET <N>
+
+在 MySQL 中,
+LIMIT 15 OFFSET 30
+
+还可以简写成
+LIMIT 30, 15
+
+聚合查询
+SELECT COUNT(*) num FROM <表名>
+
+除了 COUNT() 函数外,SQL 还提供了如下聚合函数:
+
+- SUM
+计算某一列的合计值,该列必须为数值类型
+- AVG
+计算某一列的平均值,该列必须为数值类型
+- MAX
+计算某一列的最大值
+- MIN
+计算某一列的最小值
+
+通过聚合查询获得总页数:
+ SELECT CEILING(COUNT(*) / 3) FROM students;
+
+分组
+SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
+SELECT class_id, gender, COUNT(*) num FROM students GROUP BY class_id, gender;
+
+多表查询
+SELECT
+ s.id sid,
+ s.name,
+ s.gender,
+ s.score,
+ c.id cid,
+ c.name cname
+FROM students s, classes c
+WHERE s.gender = 'M' AND c.id = 1;
+
+连接查询
+SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
+FROM students s
+INNER JOIN classes c
+ON s.class_id = c.id;
+
+注意 INNER JOIN 查询的写法是:
+
+- 先确定主表,仍然使用 FROM <表1> 的语法;
+- 再确定需要连接的表,使用 INNER JOIN <表2> 的语法;
+- 然后确定连接条件,使用 ON <条件…>,这里的条件是 s.class_id = c.id,表示 students 表的 class_id 列与 classes 表的 id 列相同的行需要连接;
+- 可选:加上 WHERE 子句、ORDER BY 等子句。
+
+INNER JOIN、RIGHT OUTER JOIN、LEFT OUTER JOIN、FULL OUTER JOIN 的区别:
+
+- INNER JOIN 只返回同时存在于两张表的行数据,由于 students 表的 class_id 包含 1,2,3,classes 表的 id 包含 1,2,3,4,所以,INNER JOIN 根据条件 s.class_id = c.id 返回的结果集仅包含 1,2,3。
+- RIGHT OUTER JOIN 返回右表都存在的行。如果某一行仅在右表存在,那么结果集就会以 NULL 填充剩下的字段。
+- LEFT OUTER JOIN 则返回左表都存在的行。
+- FULL OUTER JOIN 会把两张表的所有记录全部选择出来,并且,自动把对方不存在的列填充为 NULL。
+
+
+参考:
+如何在 Macbook 上安装 MySQL-百度经验
+bash - .bash_profile: bad assignment - Stack Overflow
+
+
+
+