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