软件:mySQL
前言:内容为学习b站课程《【数据库】SQL 3小时快速入门》时的笔记,视频课程传送门:【数据库】SQL 3小时快速入门 #数据库教程 #SQL教程 #MySQL教程 #database#Python连接数据库_哔哩哔哩_bilibili课程主要内容是讲解SQL的安装、介绍、以及基本语言的使用。
资料库简介
资料库(database):存放数据资料的地方。
安装部分跳过。
直接从打开mySQL开始~
一、基础知识
1.1 tables and keys
以该表格为例,每一行代表一笔资料,每一列代表一个属性。
设置成主键(primary key)的数值可以唯一地表示每一笔资料,也就是说,表格中的‘2’就指的第二行资料,且只能表示第二行资料,不能去代表第四行(即使是一模一样的数据),同理,‘4’也只能指第四行。
对于多表格的信息查询问题——如何获取每个员工所在的部门?
答:新增foreign key属性对应部门表格的primary key(‘branch_id’)
此外,foreign key不仅可以对应其他的表格,还可以对应自身表格的内容,如表格中的sup_id列。
注意!primary key具有唯一性,但是当primary有两列或者多列的时候,只要他们的组合值不出现重复即可认为是唯一的。比如【206,400】和【208,400】虽然400出现了两次,但是他们还是可以唯一地表示两个不同的total_sales值。
此外,我们还可以将同一个属性同时设置为primary key和foreign key,也就是说,上图表格中的emp_id同时可以作为Works_with表格的primary key和foreign key(client_id同理)。
二、SQL基础语句
2.1创建资料库
CREATE DATABASE sql_tutorial;
点击右上角的图示即可收起/打开左边的Navigator,下面、右边同理。
第一步:创建资料库(名称为“sql_tutorial;”)
CREATE DATABASE sql_tutorial;
注意这里的分号一定要用英文输入。
选中代码块点击上方闪电图标即可执行。
执行后发现output窗口有成功运行的提示,但是这个时候它并不会展示创建好的资料库。还需要输入代码:
SHOW DATABASES;
执行后(此时只需选中SHOW行执行即可)
注意这时候如果选中两行一起执行则会报错,提示如下
即资料库无法重复create,即使关闭了页面再打开也是一样,后台会保存创建的资料库。
若想删除创建的资料库,则可以执行下面的语句。
DROP DATABASE sql_tutorial;
2.2 创建表格
CREATE DATABASE `sql_tutorial`;
SHOW DATABASES;
USE `sql_tutorial`;
通常对于使用的资料库需要用到 USE 关键字。(注:一般资料库名称会用一对反引号括起来防止和关键字混淆,反引号为英文输入状态下的esc键下方的“~`”键)
因为在创建表格的时候需要确定资料库的形态,下面列出基础的六种资料形态(可以定义大部分的状况):
其中,DECIMAL(m,n)中有两个参数,m指小数的数字个数(2.33对应m=3)n指小数的小数部分位数(2.33对应n=2)。
VARCHAR(n)中的参数n指存放字符串的最大位数(长度)。
下面,以下图中表格为例,写代码创建它!
代码如下:
CREATE TABLE `student`(
`student_id` INT PRIMARY KEY,
`name` VARCHAR(20),
`major` VARCHAR(20)
);
DESCRIBE `student`;
DESCRIBE 可以理解为SHOW或者print。
DROP TABLE `student`;
删除表格则可用于上条代码。
ALTER TABLE `student` ADD gpa DECIMAL(3,2)
ALTER TABLE `student` DROP COLUMN gpa;
添加新属性gap/删除gpa属性
2.3 储存资料(insert)
还是按照上述的表格例子,写代码输入资料内容:
添加第一行内容:
INSERT INTO `student` VALUES(1,'小白','历史');
查找(搜寻表格里的全部资料):
SELECT * FROM `student`;
2.4限制、约束
在创建表格的时候可以给表格的属性添加一些限制:
比如,‘name’属性后的‘NOT NULL’代表这个属性对应的值不可以是空值;
‘major’属性后的‘UNIQUE’代表这个属性对应的值不可以重复。
'DEFAULT' ‘历史’ 表示该属性的预设值为‘历史’,也就是说当我们没有输入的时候默认为历史。
2.5 修改、删除资料
首先,将SQL的预设更新方式关闭
SET SQL_SAFE_UPDATES = 0
代码含义:将student表格中的‘英语’更新成‘英语文学’
类似地,删除资料代码如上所示。
2.6 取得资料
获取student表格中的name和major两列资料:
如果 想要对表格数据进行排序则可输入以下代码:
即将表格数据按score排序,输出结果如下:
默认是升序排列(ASC),如需降序排列则可使用关键字(DESC):
此外,还可根据多个属性进行排序
如果只需要回传前3行数据,则可以输入:
LIMIT 3;
在获取资料时同样可以使用WHERE语句:
其中'<>'表示的是 ≠
这个语句是筛选包括‘历史’,‘英语’,‘生物’的资料。(下面5/6行代码等价)
2.7 创建公司资料库
首先创建employee表格:
接着是branch表格
创建好两个表格,就可以指定他们的primary key了
接着创建剩下的表格:
获取资料:
2.8 聚合函数
即employee中有sup_id属性的资料数目。
2.9 万用字源
这里的‘%’类似于excel中的通配符‘*’。
‘_____12%’ 有五个_,代表前面有5个字元,后边的%则可以是任意位。
UNION 联集的使用(将select的结果合并起来)
注意,使用union时,联合的两个搜索属性数目要一致,而且类型也要一致(即字符串只能对应字符串不能对应数字),不然会报错。
如果需要修改属性的名字,使用AS关键字即可,例如:
除此之外,连接表格可以使用JOIN关键字。
这里加上‘employee’. 说明‘emp_id’是来自employee表格的属性。
LEFT JOIN & RIGHT JOIN
JOIN左边的‘employee’就是左边的表格,JOIN右边的‘branch’就是右边的表格。
LEFT JOIN的意思就是左边的表格不管条件(ON语句)有没有成立,它都会回传所有的资料给我们,右边的表格则只回传条件成立的资料。
RIGHT JOIN 的意思则是右边的表格不管条件(ON语句)有没有成立,它都会回传所有的资料给我们,左边的表格则只回传条件成立的资料。
2.10 subquery子查询
即嵌套查询,括号里查询返回emp_id。
当子查询返回多个值的时候,将‘=’改成‘IN’即可,如:
2.11 ON DELETE
这个语句中的ON DELETE SET NULL意思就是当对应过去的值不存在(被删除)的时候,设为NULL。
ON DELETE CASCADE则是当对应过去的值不存在(被删除)的时候,将该行直接一起删掉。
primary key不可设为NULL!
3 通过python连接到mySQL
首先安装包mysql-connector-python
安装好后,引入包,创建连接
localhost代表位置,即安装在本机
创建资料库:
注意,改变资料的命令需要写connection.commit()