欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL学习篇(4)

程序员文章站 2022-05-03 18:35:06
...

从关系代数到SQL

并:

select  * from R
union 
select * from S;

交:

select * from R
intersect 
select * from S;

差:

select * from R
except
select * from S;

笛卡尔积:

select * from R, S;
# 或者:
select * from R 
cross join 
s;

(选择)sigma_c®:

select * from R where c;

(投影)projection_L®:

select L from R;

projection_L(sigma_c®):

select L from R where c;

等值连接:

select * from R
join
S
on
R.A = S.B;

例如:现有两个关系pc和laptop如下:
MySQL学习篇(4)
MySQL学习篇(4)

发现pc的model1010和laptop的price1010值相等,下面我们将pc和laptop两个关系的属性model和price进行等值连接:
MySQL学习篇(4)

结果如下:

MySQL学习篇(4)

自然连接:

select * from R
join
S
on
R.A = S.A;

注意自然连接和等值连接的条件不同,自然连接必须要两个关系中相等的属性。
通过update语句将pc的第一个price改成2500之后,输入指令:
MySQL学习篇(4)

其实自然连接和等值连接很相似,它只是等值连接的一个特殊情况而已。

左外连接:

select * from R
left outer join 
S
on
c;

MySQL学习篇(4)

发现最终结果集的每个元组都是原来的pc各元组,只是属性增加了,增加的是laptop的各属性,如果两个元组的price相等,就将laptop的数据显示出来,不相等的设置为null

右外连接:

select * from R
right outer join 
S 
on
c;

MySQL学习篇(4)

全连接:

select * from
pc full join laptop;

去重操作:

select distinct * from R;

排序操作:

select * from R
order by
L;

MySQL学习篇(4)

可能你会问为什么price并不是从小到大排序的?因为这里的数据全部是字符型的,看每一个price的第一个数字,它是符合从小到大的。

聚集操作符:

count  # 计数
max  # 求最大值
min  # 求最小值
avg  # 求平均值
sum  # 求和

分组操作符:

select L, Fun from R
group by
L;

分组操作符常常和聚集操作符连用,这里的fun就是聚集操作符
如果想在分组操作符的前提下加前提条件,不能使用where关键字,只能使用having :

select L, Fun from R
group by 
L
having L > 200;

MySQL学习篇(4)

MySQL学习篇(4)

同样,这里因为数据类型是char类型,所以出来的是9开头的数据

删除操作:

delete from R where a > 20;

将R关系中,a属性大于20的值删除掉。

插入操作:

insert into R(a, b)
values(111, 222);

这里要注意的是,比如R有(a, b, c)三个属性,插入操作不用将所有的属性都赋值,比如上面就将a, b赋值,没有赋值的默认为NULL, 下面的values列表就要和上面的(a, b)对应。

更新操作:

update R set c=333 where a=111;

这里对插入的一个元组的属性c进行更新
现在我想使用update实现将如下的关系中的‘学院代号’属性前面加个‘3’:
MySQL学习篇(4)

这里每一个属性列的域如下:
MySQL学习篇(4)

可能你会这么玩:

update 学院 set 学院代号 = 学院代号 + '3';

可是MySQL中不支持+来连接字符型数据,这样操作不会报错,但是最终的结果与你想的不一样:

MySQL学习篇(4)

统统加3,其实我一开始看到这里挺兴奋的,能将字符型转换为数字,然后我试了一下减乘除,都是支持的:

MySQL学习篇(4)

MySQL学习篇(4)

这里的变化是从前面已经加了3之后变过来的
执行如下语句可以实现在“学院代号”属性后面加上3:
MySQL学习篇(4)MySQL学习篇(4)

还要补充一点的是不能使用update语句的时候,set后面的属性和where后面的属性相等:
MySQL学习篇(4)

我本来想通过这样将price改一下,但是报错了。
还有就是,如果在varchar类型的数据中,里面都是数字,引用的时候不加引号也是可以的(表中所有数据的类型是varchar类型的):
MySQL学习篇(4)

相关标签: MySQL学习 mysql