数据库多表联查等小知识

多表联查

从多张表中查询数据

表和表的关系

a vs b  1 vs 1 一对一 (a表的数据在b表里只有一条匹配)

a vs b  1 vs n 一对多 (a表数据在b表里有多条匹配)

a vs b  n vs n 多对多(a表数据在b表里有多条匹配,b表数据在a 表里也有多条匹配)

子查询

也就是把sql语句作为查询条件,(套娃)

例:查询id大于 小名的学生信息

SELECT * from student where id  > (SELECT id from student where sname = '小名')

括号里先查出小明的成绩为多少,再查大于小名的学生信息

注意点:

1、括号里面的sql只有一个字段,不能出现多个字段名

2、如果要找两张表之间的字段,就找一样的字段名就行了

多表联查

所有表之间的关联,都需要有关联字段,一般两张表之间相同的字段名,就是关联字段

内链接inner join

把两张表关联在一起形成一张新的表,并且只展示两张表之间共有部分

假如一张学生表(不包含成绩信息)和成绩表(不包含学生信息,如姓名)之间进行关联,如果没有参加考试,那么两张表关联是找不到这条记录的,或者有某位学生的考试成绩,但是没有这个学生的学生信息,也是不显示记录内容的

a表和b表通过匹配的字段id连接: select * from a inner join b on a.id = b.id ;

小明的考试成绩要求显示姓名和成绩 :select name,degree from student inner join score on student.id = score.id where sname = '小明' ;

左连接 left join on

以左表为主,右表为辅,显示全部的左表数据,右表匹配不上的内容显示为null

右连接 right join on

以右表为主,左表为辅,左表没有的数据显示为null

例:通过左连接查出小名的成绩 SELECT degree FROM student left join score on student.id = score.id where name = '小明'

union连接

刚刚的不管是内连接还是左连接,右连接都是左右拼在一起,该连接为上下拼

创建表

create table 表名(字段名称1 字段类型 约束条件, 字段名称2 字段类型 约束条件)

约束条件可以不写,约束条件比如加默认值default等,字段类型为字符串要记得加''

约束

not null

不允许为空

default 默认值

如果没有填写内容的时候,会自动带上具体的值-啥都没填默认写死的值

primary key 主键

不能为空不能重复的值:id、cno,(每一张表只会有一个主键,标识表中的每一行数据)

foreign key 外键

另外一张表的主键

unique key 唯一键

唯一的一条数据且不能重复的数据,可以为空

 添加数据insert into

添加单条数据 INSERT into 表名 VALUES (1,'zy','81')

添加多条数据 INSERT into 表名 VALUES (1,'zy','81'),(2,'zy1','82') 具体填什么根据自己的表判断

添加指定数据 INSERT into 表名 (id,name) VALUES (6,‘zy2’)

修改数据

update 表名 set 字段名称 = 值 where 条件

例:把class=81的数据中的姓名修改为111  找到你要该的数据,然后去改对应的值

UPDATE zy set name = '111'  where class = '81'

删除数据

delete from 表名 where 条件 ====指定数据删除

delete from zy where id = 12 删除表中id为12的数据

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值