SQL数据库学习笔记
- 学习视频链接:【【SQL数据库】SQL两小时半快速入门到精通 建议反复观看 学不会自我反省】 https://www.bilibili.com/video/BV1yw4m1S7Be/?share_source=copy_web&vd_source=fb850db820b823205dfea926dc8f484d
- github笔记地址:https://github.com/anwei85/study_note
视频里用到的表格代码也敲了放到github里了
一、基础知识
- rdbms关联式资料库:mysql,SQLserver,oracle,postgresql
- nrdbms其他非关联资料库:mogodb,Redis,dynamodb,elaticsearch
- 通过外键对应另一张表的主键,从而进行关联
- 视频网站–>sql链接<–管理系统–>关联式资料库
二、软件命令
1.基础命令
ctrl +/ 注释
ctrl +shfit+k 快速删除
ctrl +enter 不断行回车
shift +alt +向下箭头 向下复制一行(向上复制同理)
<> 不等于
add 添加
not null 非空
unique 唯一,不允许相同
2.标准命令
命令不区分大小写
eg.create table client(
client_id int primary key,
client_name varchar(20),
phone varchar(20));
电话号码选用字符串而非整数,用于数值计算时才用INT,不然以0开头的电话号码的0会被吞掉
| 整数 | int |
| 图片/视频 | blob |
| 日期 | date |
| 时间 | timestamp |
| 有小数点的数 | decimal(x,x) |
| 字串 | varchar(x) |
向表格存入数据
insert into `` values(‘数据’,‘数据2’,‘数据3’);
可以进行属性顺序的调整–insert into ``(属性,属性3,属性2) values(‘数据’,‘数据3’,‘数据2’);
(*号)可以换成单个属性
(*号)前面加distinct,可以让结果不重复
update student
set name=‘小灰’,major = ‘物理’
where student_id = 1;
将student表中的name属性小灰,major属性的物理对应的student_id属性换成1
delete from student
where student_id = 1;
没用条件(where)删所有,有条件按条件,如本例删除表中的student_id属性对应的1
where筛选条件时可以使用in
where xx=‘a’ or xx=‘b’;
——>where xx in (‘a’,‘b’)
order by ``【属性】
默认由低到高,后面加dese换成由高到低
linit x 只要前x笔资料
ALTER TABLE ``【表格】
ADD PRIMARY KEY (xx, yy);【属性】
ALTER TABLE ``【表格】
ADD FOREIGN KEY (bb) 【属性】
REFERENCES xx【表格】(zz) 【属性】
ON DELETE CASCADE;
主键没有设置,外键的值无法录入
当该键同时为主键和外键时,将不能set null
cascade 直接删掉外键资料;set null 如果主键被删了,外键就设null
三、进阶命令
aggregate functions
select 【量词】 (*) from ``【属性】;
| 数量 | count |
| 平均 | avg |
| 最大 | max |
| 最小 | min |
| 总和 | sum |
同上*代表所有,可以单独设置属性
wildcards
%代表多个字元,_代表一个字元
例子:
– 1.取得电话尾数是335的客户
select * from client where phone like ‘%335’;
– 2.取得姓艾的客户
select * from client where client_name like ‘艾%’;
– 3.取得生日在十二月的员工
select * from empioyee where birth_date like ‘_____12%’;
where 属性 like 要求——包含要求的数据
where 属性 = 要求——等于要求的数据
subquery
例子:
– 找出研发部门的经理名字
select name from empioyee
where emp_id = (
select manager_id
from branch
where branch_name = ‘研发’);
– 找出对单一位客户销售金额超50000的员工的名字
select name from empioyee where emp_id in(
select emp_id
from works_with
where total_sales > 50000);
= 单个搜索,in 多个搜索
join链接两个表格,可以在两个表格内搜寻
例子:
– 取得所有部门经理的名字
select * from empioyee join branch on emp_id = manager_id;
union操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合,并去除重复的行。
union操作符必须由两个或多个 SELECT 语句组成
例子:
–员工id + 员工名字 union 客户id + 客户名字
select emp_id,name from empioyee
union
select client_id,client_name from client;



