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;
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的mysql关联查询去重_MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: crtsiii型无砟轨道板_为什么高铁轨
- 下一篇: ktor框架用到了netty吗_如何使用