MYSQL入门学习笔记
学习视频链接
MYSQL入门学习笔记
关联式数据库 => tables and keys
**primary key (主键)**:可以唯一区分资料
:heavy_exclamation_mark:当有重复时,可以设定多个主键来唯一区分资料
**foreign key(外键)**:实现table的互相关联(也可以和自己关联)
:heavy_exclamation_mark:但是只能关联table的主键
可以将一个属性同时设定为不同table的主键和外键
SQL基础语法
:heavy_exclamation_mark: 后文中的” <> “ 代表 “ ` “,同时SQL中遵循属性名用 ``包裹,值用 ‘’ 或者 “” 包裹的潜规则
数据库相关操作
创建数据库 CREATE DATABASE <name>
;
展示数据库 SHOW DATABASES;
关键字用大写,命名用``包裹
删除数据库 DROP DATABASE <db_name>;
数据库常见类型
INT –整数
DECYMAL(m,n) –有小数点的数,m=几个数字,n=几个小数
VARCHAR(n) –字串,n=最多可以容纳几个字
BLOB –(Binary Large Object) 图片 影片 档案等二进制资料
DATE –’YYYY-MM-DD’ 记录日期
TIMESTAMP –’YYYY-MM-DD HH:MM:SS’ 记录时间
表格操作
选择数据库 USE <db_name>;
创建表格
|
删除表格 DROP TABLE <table_name>;
新增属性 ALTER TABLE <name> ADD <属性名> 类型;
删除属性 ALTER TABLE <name> DROP <属性名> 类型;
查看表格属性 DECRIBE <table_name>;
加入内容 INSERT INTO <table_name> VALUES(属性1-内容,属性2-内容);
查找表格 SELECT * FROM <table_name>;
此条命令为查找当前数据库内所有名为table_name的表格,并完全展示出来
限制和限制的类型
- UNIQUE –不允许重名
- AUTO_INCREMENT –增加内容时自动加一,无需手动填写 (用于序号)
- DEFAULT –预设值,不填写内容时,按照预设的填写
修改资料
语法
|
示例
|
删除资料
语法
|
示例
|
不写WHERE语句时,代表删除表格的所有资料
搜寻资料
SELECT * FROM <table_name>;
=> *
代表取得所有属性的意思
SELECT * FROM <table_name> LIMIT n;
=> 仅仅显示前 n 笔资料
SELECT * FROM <table_name> WHERE <属性名> ;
=> 仅仅显示属性名为属性1的内容
WHERE <属性名> IN (‘1’,’2’) = WHERE <属性名> = ‘1’ OR <属性名> = ‘2’
SELECT <属性1> FROM <table_name>;
=> 代表取得属性名为属性1的内容,取得多个属性的时候用 ,
隔开
SELECT DISTINCT <属性1> FROM <table_name>;
=>去掉重复属性
SELECT * FROM <table_name> ORDER BY <属性1> DESC;
=>以属性1来排序表格
DESC
表示由高到低排序;不写时默认为ASC
,代表由低到高排序
示例
|
:heavy_exclamation_mark: 各种语句的条件可以混用
>SELECT *
>FROM `student`
>WHERE `major` = '英语' OR `score` <> 70
>LIMIT 2;
>//回传major为英语和score不等于70的前两个数据
增加外键
|
ON DELETE CASCADE 是当“table2对应属性名”被删除后,将table1中对应的值删掉
ON DELETE SET NULL 是当“table2对应属性名”被删除后,将table1中对应的值设置为NULL
当该键为其他表的主键时,不可以使用 ON DELETE SET NULL
基本逻辑
新建表格时,先创建各个表格,再添加外键的关联
增加资料时,先增加外键所在的表格的资料,再增加自己表格的资料
聚合函数 (aggregate functions)
取得成员数
SELECT COUNT(<属性名>) FROM <table_name>;
SELECT COUNT(*) FROM <table_name>;
在限制条件下取数 示例
SELECT COUNT(*) FROM `employee` WHERE `birth_date` > '1980-01-02' AND `sex` = 'F'; //在employee表中取得birth_date 大于1980-01-02的女性
取得员工的平均薪水 示例
-
SELECT AVG (<salary>) FROM <employee>;
取得所有员工的薪水总和 示例
SELECT SUM(<salary>) FROM <employee>;
取得最高薪水
SELECT MAX(<salary>) FROM <employee>;
取得最低薪水
SELECT MIN(<salary>) FROM <employee>;
万用字元 wildcards
% 代表多个字元,_代表一个字元
取得电话号码是335连续的客户
SELECT * FROM <cient> WHERE <phone> LIKE '%335%';
取得姓艾的客户
SELECT *FROM <client> WHERE <phone> LIKE '艾%';
取得生日在12月的员工 生日格式YYYY-MM-DD
SELECT * FROM <employee> WHERE <birth_data> LIKE '_________12%';
union 连接搜寻结果
:heavy_exclamation_mark: 连接的属性数目和资料类型必须相同
员工名字 连接 客户名字
SELECT <name> FROM <employee> UNION SELECT <client_name> FROM <client>;
员工id+员工名字 连接 客户id+客户名字
- ```sql
SELECT <employee_id>,<name>
FROM <employee>
UNION
SELECT <client_id>,<client_name>
FROM <client>;
//改名
SELECT <employee_id> AS <total_id>,<name> AS <total_name>
FROM <employee>
UNION
SELECT <client_id>,<client_name>
FROM <client>;
Join 连接表格
取得所有部门经理的资料
//返回结果包含两个表格的所有属性 SELECT * FROM <employee> JOIN <branch> ON <emp_id> = <manager_id> //条件
- ```sql
//返回结果只包含选中的属性
SELECT <emp_id>,<branch_name>,<name>
FROM <employee>
JOIN <branch>
ON <emp_id> = <manager_id>
可以用
<table_name>.<属性名>
来区分不同表格的相同属性名
left 关键字
不管条件是否成立,都会将JOIN左边的表格属性全部回传;右边的表格没有对应的属性时,就填写NULL
|
right 关键字
和left正好相反,不在此赘述
subquery 子查询
在一个查询语句中插入另外一个查询语句,对前一个查询的结果进行查询
示例 找出研发部门的经理名字
//从员工标准中查找其名字 SELECT `name` FROM `employee` WHERE `emp_id` = ( //得到 研发部门经理的id SELECT `manager_id` FROM `branch` WHERE `branch_name` = `研发` );
把 WHERE 后的第一个”=” 换为IN,可用于多个查询结果