日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL高级(二)

發(fā)布時(shí)間:2024/10/6 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL高级(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.連接查詢:將多張表聯(lián)合查詢(按照某個(gè)指定的條件進(jìn)行拼接)

???????????? 1.連接查詢的分類:交叉連接

??????????????????????? 1):交叉連接:從一張表中循環(huán)取出每一條記錄,然后去另一張表中匹配(無(wú)條件匹配)

????????????????????????????? select * from student cross join class; ????select * from student,my_class;

??????????????????????? 2):內(nèi)連接:從左表中取出每一條記錄去匹配右表中的數(shù)據(jù)

????????????????????????????? select * from student inner join my_class on student.id=my_class.id;

????????????????????????????? 給標(biāo)起別名進(jìn)行查詢:select * from student as s inner join my_class as my on s.id=my.id;

????????????????????????????? select s.id,s.name,s.sex,s.age,my.room,my.teacher from student as s inner join my_class as my where s.id=my.id;

?????????????????????? 3):外連接:以某張表為主取出里面每一條記錄,去匹配另一張表不管是否匹配成功都會(huì)保留,能正確匹配保留,不能正確匹配至空。

??????????????????????????????? 1.left join:左外連接以左表為主

??????????????????????????????? 2.right join:右連接以右表為主

??????????????????????????????? 3.基本語(yǔ)法:左表?? left/right?? join? 右表?? on 左表.字段=右表.字段;

????????????????????????????????????select s.id,s.name,s.sex,s.age,my.room,my.teacher from student as s left/right join my_class as my on s.id=my.id;

??????????????????????????????????? select * from student? left join my_class using(id);//使用using關(guān)鍵字可以將左右兩表相同字段作為連接條件。

?????????????????????? 4):自然內(nèi)連接:natural join,系統(tǒng)以字段自動(dòng)匹配連接條件(如果有多個(gè)同名字段,那都將作為匹配條件),連接后會(huì)合并同名字段。

????????????????????????????????? 1.自然內(nèi)鏈接 左表 natural join 右表;

????????????????????????????????? 2.自然外聯(lián)結(jié) 左表 natural left/right 右表;

????????????????????????????????? select * from student natural left join my_class;

二.外鍵:一張表的非主鍵關(guān)聯(lián)另一張表的主鍵,外鍵在子表中

??????????????? 1.在創(chuàng)建表時(shí)增加外鍵:create table test_foreign(
??????????????????????????????? -> id int(4) primary key auto_increment,
??? ????????????????????????????-> name char(8) comment '學(xué)生姓名',
??????????????????????????????? -> c_id int(4) not null,
??????????????????????????????? -> foreign key(c_id) references my_class(id)
??????????????????????????????? -> );

???????????????? 2.在創(chuàng)建表之后增加外鍵:alter table test_foreign add constraint c_id foreign key (c_id) references my_class (id);

???????????????? 3.刪除外鍵:alter table test_foreign drop foreign key test_foreign_ibfk_1;

???????????????? 4.總結(jié):對(duì)子表對(duì)父表(子表外鍵所在的表)

?????????????????????????????? 1):對(duì)子表進(jìn)行約束,子表對(duì)數(shù)據(jù)進(jìn)行(增改時(shí)),如果對(duì)應(yīng)的外鍵字段在不到父表中找不到對(duì)應(yīng)的匹配,操作會(huì)失敗

????????????????????????????????????(約束對(duì)子表的數(shù)據(jù)操作)

?????????????????????????????? 2):對(duì)父表的約束進(jìn)行讀寫操作時(shí)(刪改涉及主鍵操作),如果對(duì)應(yīng)的主鍵在子表中已經(jīng)被引用,那么操作會(huì)失敗

?????????????????????????????? 3):外鍵類型必須和父表中主鍵類型一致如果不一致外鍵不會(huì)創(chuàng)建成功 ?????????????????

?????????????????????????????? 4):增加外鍵的字段(數(shù)據(jù)以存在),必須保證于主鍵數(shù)據(jù)相互對(duì)應(yīng)。

?????????????????????????????? 5):外鍵的三種約束模式(針對(duì)父表約束)

?????????????????????????????????????????????? 1.distract嚴(yán)格模式(默認(rèn)約束):父表不能對(duì)刪除或更新一個(gè)對(duì)子表已經(jīng)引用的的數(shù)據(jù)

??????????????????????????????????????????????? 2.cascade 級(jí)聯(lián)模式:父表的操作子表也跟著操作,指標(biāo)關(guān)聯(lián)性數(shù)據(jù)被刪除

??????????????????????????????????????????????? 3.set null(制空模式):父表操作之后子表對(duì)應(yīng)的數(shù)據(jù)被制空

??????????????????????????????????????? 通常一個(gè)合理的做法(約束模式):刪除時(shí)子表制空,更新時(shí)子表級(jí)聯(lián)操作

??????????????????????????????????????? 指定模式的語(yǔ)法:

?????????????????????????????????????????????????? foreign key(子表字段) reference 父表(主鍵字段) on delete 模式 update 模式; ??????

????????????????????????????????

總結(jié)

以上是生活随笔為你收集整理的SQL高级(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。