mysql-05

      
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
      
      
-- 外键(新增)
--创建表的时候增加外接:在所有的表字段之后使用
-- foreign key (外键字段)
-- references (主键字段)
在新增表之后 修改表结构
alter table 表名 add[constraint] foreign key(外键字段) references(主表 主键字段);
-- 删除外键
alter table 表名 drop foreign key 外键名;
-- desc 表名
-- show create table 表名
-- 外键(默认约束)
--默认的有俩点:一个对父表,一个对子表
对子表约束:如果对应的外键字段在父表找不到对应的匹配:那么操作会失败。
对父表约束:父表数据进行写操作(删和改:都必须涉及到主键本身)
-- 外键 条件
1.外键要存在:首先必须保证表的存储引擎是innodb。
如果不是innodb,能成功但是没有约束效果!
2. 外键字段的字段类型(列类型)必须与父表的主键类型完全一致
3.一张表的外接名字不能重复
4.增加外键的字段(数据已经存在),必须保证数据与附表主键要求对应
---- 外键约束 外键的作用!
外键约束有三种约束模式:都是对父表的约束
district :严格模式(默认的人)父表不能删除或者更新一个已经被子表数据的引用的记录
cascade : 级联模式 对应子表关联的数据也跟着呗删除
setnull :置空模式 对应的数据(外键字段)被置空
foreign key(外键字段)references 父表(主键字段) on delete 模式 update 模式;
------- 联合查询
将多次查询(多条 select 语句),在记录上进行拼接(字段不会增加)
--【基本语法】:
多条select 语句结构:每一条select 语句获取的字节数必须严格一致
select 语句1
union[union 选项]
select 语句2...
union 选项:
All:保留所有(不管重复)
Distinct:去重(整个重复) 默认的;
意义:
1.查询一张表,但是需求不同:
2.多张表的结果完全一样的,保存的数据(结构)也一样的。
-- 联合查询 order by 的使用
在联合查询中:order by 不能直接使用,需要对查询使用括号才行!
让order by生效 需要加 limit
(select 语句1 sex order limit 99999)
union
(select 语句2 sex order by sex desc limt 999999 );
-- 子查询
sub query
一条select邮件内部包含了另外一条select语句
两种分类繁琐:按位置分类 ;安结果没类;
From子查询: 跟在from 之后
where子查询: 出现在wehre 条件中
Exists: 在exists里面
按结果:
标量子查询:得到的结果是一行一列
列子查询:一行多列
行: 多列一行(多行多列)
上面几个出现的位置都是在where之后
表: 多行多列(出现的位置在from之后)
--表量子查询
1.确定数据:获取所有的学生
select * from 学生表名 wheere
2.获取班级id:
select id from 班级表 where 字段名=班级;
select * from 表名 where id=any(select id from 表名);
select * from 表名 where id=some(select id from 表名);
select * from 表名 where id=all(select id from 表名);
--行子查询
返回的结果可以是多行多列(一行多列)
1.确定数据源
select * from 表名 where 条件?
2.最大年龄和最高身高!
select max(age),max(height) from 表名;
-- mystudent 学生表
select * from mystudent where
--行元素(age,height)
(age,height)=(select max(age),max(height) from 学生表);
--表子查询
返回的结果是多行多列的二维表:子查询的结果可以当做二维表来使用!
需求:找出每个班最高的一个学生
1.确定数据源:先将学生按身高进行降序!
2.每个班选出第一个学生
select * from mystudent group by cid
Select * from (select * from mystudent order by heigfht desc )'身高'group by cid;
--EXISTS 查询
-- 所有的查询都需要先找到 数据源!;
Exists: 是否存在的意思,exists 子查询就是用来判断某些条件是否满足;
-- select exists(select * from 存在的表);
-- 返回 1;
select * from mystudent where
exists(select * from myclass)
-- 视图(创建)
view :有结构但是没结果的虚拟表!
基本语法:
create view 视图名字 as select语句;-- 可以是普通查询;
创建单表视图:基表
create view 视图名字 as select * from 表名;
创建多表视图:
create view 视图表名 as
select *(注意这里不能有重复的字段名出现) from
表名 as inner join 表名
on 相同条件!!
-- 视图查看 --- 的结构
--表的所有查看方式都适用
view 查看表
show create view 结构表名G;
--视图一旦创建:系统会在视图对应的数据库文档夹下创建一个对应的结构文档: fm 文档
-- 修改视图
alter view 视图名字 as 新的 select语句
-- 删除视图
Drop view 视图名字;
-- 视图操作(新增)
视图数据操作:
--多表视图不能删除数据
-- 单表视图可以删除
delete from 视图名 where 条件;
-- 视图更新
--第5天 25
????????????
-- 算法
undefined:未定义(默认的)
Temptable:零时表 先执行视图的select 语句;
merge:合并算法!
25------------- 没学...

oneNate笔记

原文链接 大专栏  https://www.dazhuanlan.com/2019/08/17/5d576b15f3bd4/

猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11417267.html