sql技能学习与项目实战
2024-10-10 11:30:17 0 举报
AI智能生成
sql速成笔记
作者其他创作
大纲/内容
进阶的创建公司资料库
创建并连接多个表格
用外键连接两个表
在创建的时候,就直接连接(第二个表连接第一个表)
foreign key (`manager_id`) references `employee`(`emp_id`) on delete set null
foreign key(`emp_id`) references `employee`(`emp_id`) on delete cascade,
子主题
在创建很多个表以后,用alter table,add foreign key来连接
子主题
新增公司资料
要考虑先后顺序,如果先建好外键的话
可以先把共有的列,用null填充,然后全部录入完以后,再update,set,where更改这一列
update `employee` <br>set `name`='green' where `emp_id`=206;
update `employee` <br>set `salary`=4000 where `emp_id`=206;
如果需要修改的是数值(数字),那么不需要加''
查找公司资料
查找、排序、只需前三名
select * from `employee` order by `salary` desc limit 1;
查找,只要特定属性
查找,避免重复(一个样子的只需一个)<br>
不加去重的时候
加上distinct的时候,就会去重
聚合函数
select count
select count(*) from `baioge`
表格里面一共有几笔资料(有多少行)
select count(`attribute`) from `baioge`
有sup_id(某个属性)的,一共有多少行
count+where条件筛选
子主题<br>
数学计算
总和select sum
平均数select avg
最大的 select max
<br>
最小的 select min
通用字元(模糊搜索)
%代表多个字元,可以用在结尾,开头,中间
以335结尾,where`phone` like '%335'
以254开头
中间有354
子主题
_代表一个字元,如果是2个_就代表两个字元__
联集union(把两个搜寻的结果合并在一起)
一个属性
把union加在两个搜寻的中间
如果用union的话,搜寻的属性数量、属性类型,都要是一样的(这样会报错)
两个属性
两列
可以发现,呈现结果与搜寻的第一个属性名称一样
搜寻结果的属性名称可以修改,用as
一列
子主题
join 连接(连接两个表格在一起)
需求:取得所有部门的经理的名字
对策:连接branch和employee两个表
连接以后的属性数量
用*连接了以后,属性的数量就是两个表格的简单相加
这个表格有7列,那个表格有3列,所以连接以后就会有10列
不用连接所有的属性
如果有这几个表格里面,都有名称相同的属性怎么办
表格名称.属性
以某个表格为主,进行连接
left join不管条件成立不成立,都会回传左边的信息,右边有空缺的,就会用null
以左边的数据为标准,做表格
right join
多重查询,<br>就是两个select和where罢了
如果子查询的结果只有一个,就可以用=
先算括号里面的,然后再算大的查询
如果子查询结果不止一个,就用in
子主题
在一个查询结果里面,嵌入另一个查询的结果
on delete(如果数据被删除)
on delete set null(对应不到,就填充成null)<br>
就是员工离职了、员工id空缺,那么manage_id就会空着,于是就设置成null
如果一个属性,同时是主键和外键的话,那么就不能被设置成null
on delete cascade(对应不到,就删掉组数据)
将Python连接到数据库
mysql-connector-python
面向实际需求
提取老表的属性形成新表,降序排列<br>creat table as select xx属性 from xx表的名字
时间最早的属性内容,就按照min(属性名称)
跟练复现:基于100万真实电商用户的1亿条行为数据分析
https://www.bilibili.com/video/BV1S94y1Z7xc/?p=2&vd_source=bd9367426c226d528d29c4dd45b432c3
什么是资料库、什么是SQL
什么是资料库
资料库管理系统<br>(DBMS,Database Management System)<br>
子主题
资料库的分类
关联式资料库,SQL(用一个一个表格储存资料,然后关联表格)
关联式资料库管理系统(RDBMS)
非关联式资料库,no SQL
非关联式资料管理系统
跟他们做沟通需要用各自资料库的语言
什么是SQL
结构性询问语言<br>Structured Query Language(SQL)<br>
SQL是一个语言,用来跟关联式资料管理系统进行沟通
MySQL最出名
资料库的理论知识
主键
储存资料的第一步,设置属性,设置主键
设置成主键的属性,可以唯一表示每一个资料
区分每一个资料,不会重复
依据主键来查询
保证唯一性
主键的数量:1个、2个及以上
主键是1个
id是主键
主键是2个及以上
有的时候,1个属性当不了主键,因为可能重复
外键
这个表的主键,链接另一个表的主键
用处
用来连接两个表格
就是两个表格都有的一个属性(一个列)
也可以对应回自己的表格
这个外键,对应自己表格的主键
简单的增删改查
创建资料库
create database `sql_nx`;
`sql_nx`
创建表格
6种数据类型
int
整数
decimal(m,n)
有小数点的数
(3,2)总共有三位数,小数点的部分占了两位
varchar(n)
字串
n表示最多能存储多少个字串
BLOB
存放二进制的资料
DATE
2023-12-09
TIMESTAMP
记录时间,包括几分几秒
存入资料
注意变量名字要对应哈
INSERT INTO`branch` VALUES(3,'资讯',NULL);
自己的字符串的外面用,''(英文输入法的单引号)
创建的变量名的外面用,``(英文输入法的esc下面的)
限制与约束
unique 唯一
not null
default 预设值/默认值
如果没写这个属性,默认值是xxx
auto_increment自增主键
不用写1/2/3这些的序号了,他会自动帮你加上
修改删除资料
delete from`表格`<br>where
取得资料 where(这个sql里面没有if,where的作用与if一样)<br>
取得所有属性
select *
只要一两个属性
排序 order by
desc 由高到低,降序
默认是升序 asc,由低到高
依据两个排序
限制回传资料的笔数limit
只要排序的前三个(用desc和asc,可以取得前三名或者倒数三名)
可以结合where,and,or使用
这两个是一个意思,in就是在其中的之一,与or一个意思
收藏
0 条评论
下一页