300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql关联查询去重_MySQL外键和高级查询(连接查询 联合查询 子查询 去重查询)...

mysql关联查询去重_MySQL外键和高级查询(连接查询 联合查询 子查询 去重查询)...

时间:2018-07-20 05:50:23

相关推荐

mysql关联查询去重_MySQL外键和高级查询(连接查询 联合查询 子查询 去重查询)...

MySQL的外键

什么是外键,很简单保持数据一致性的一个约束键。如果你有两张表,第一张是学生表,第二张表是一个成绩表,我们来看看保持数据一致性,其实在Django等框架的模型中中也能做关联获取对象。

第一张表 成绩表

第二张表 学生表

保持数据一致性

我们来看看,当键不一致的时候,数据是插不进去的哦,保证了数据一致性。

mysql> insert into student(sid,name) values("A0004","Tom");

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`school`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `score` (`sid`))

mysql> insert into student(sid,name) values("A0001","Tom");

Query OK, 1 row affected (0.00 sec)

mysql> insert into student(sid,name) values("A0002","Bill");

Query OK, 1 row affected (0.01 sec)

mysql> insert into student(sid,name) values("A0003","Jill");

Query OK, 1 row affected (0.00 sec)

高级查询

还是用上面两张表做例子

连接查询

内连接

没有on条件的时候就是笛卡尔积,有条件的时候按照条件执行,条件关键字on,使用where也可以,但是效率会低很多;

select * from student join score on student.sid=score.sid;

外链接

与内连接相似,但是条件不匹配的项会保留,不匹配字段填写NULL,左和右指得的是以谁为主表 我们做个测试,为了体现不匹配的样子,先向score插入一条数据

insert into score(sid,value) values("A0004",90);

内连接的状态的

左连接

左表为主

select * from score left join student on student.sid=score.sid;

右连接

右表为主

select * from student right join score on student.sid=score.sid;

交叉连接

循环去每一条数据进行匹配,结果是笛卡尔积

select * from student cross join score;

#或者

select * from student,score;

自然连接

联合查询

将多次查询(多条select语句), 在记录上进行拼接(字段不会增加),就是这么简单,但是注意,字段数量要一致,字段数量要一致,字段数量要一致,重要的事情说三遍。一般用于相同结构的多表查询。

select id,name from student union select * from score;

子查询

一般的from where exists后面都是子查询 重点是from 后面可以接select语句、where后面也可以跟select语句,举几个例子

select * from (select sid from score) as a;

select * from score where sid in (select sid from student);

exists可以理解为一个函数,里面是一个条件,如果存在就是返回1,否则是0,exists放在where后面

去重查询

SELECT DISTINCT column1,column2,... FROM table-name;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。