標籤:代碼 type cti 分享 單位 分析 com 查詢語句 distinct
這個補充知識有一個點很有必要,視屏上的老師提出一點:
內連結關聯查詢:
如果表A和表B有一個外部索引鍵關聯 ,可以通過外鍵進行內連結查詢
select dictinfo.*, dicttype.typename
from dictinfo, dicttype
where dictinfo.typecode = dicttype.typecode
--不通過外鍵,通過groupid查詢使用者類型的代碼結果集,只能查詢出一條記錄,可以使用內連結
select sysuser.*, dictinfo.info
from sysuser,
(select dictcode, typecode, info from dictinfo where typecode = ‘s01‘) dictinfo
where sysuser.groupid = dictinfo.dictcode
小結:如果主查詢表欄位從關聯表只查詢出一條記錄,這個欄位就可以作為內連結關聯欄位
--內連結的錯誤的例子,通過關聯查詢出重複記錄
--使用groupid從select dictcode, typecode, info from dictinfo可以找到多個記錄,不能使用內連結,可能會出現重複記錄
select sysuser.*
from sysuser, (select dictcode, typecode, info from dictinfo) dictinfo
where sysuser.groupid = dictinfo.dictcode
注意:如果使用內連結查詢出現重複記錄,首先去思考是否是sql寫錯了,不能直接去使用distinct去除重複記錄。
有一些特殊情況下還是需要使用distinct去除重複記錄,比如複雜的統計分析sql。
看這個項目視屏的時候我剛好也在看50個查詢系列,寫那裡的sql查詢語句我就碰到了這個問題。我也用了Distinct函數,原來是不能用的啊。
外連結關聯查詢:
表A,表B中只有一部分資料和表A匹配,不能使用內連結。
主查詢是表A,只能使用外連結。
--查詢使用者所屬單位,sysid對應三張表的id
select sysuser.*,useryy.mc from sysuser left join useryy on sysuser.sysid = useryy.id
select * from useryy right join sysuser on sysuser.sysid = useryy.id
--以上的需要不能使用內連結
select sysuser.*,useryy.mc from sysuser, useryy where sysuser.sysid = useryy.id
小結:
表A中從表B中只能關聯查詢一部分資料,只能使用外連結
子查詢
select sysuser.*,
(select * from useryy where id = sysuser.sysid)
from sysuser
子查詢只能返回一列,否則 :
子查詢只允許返回一行,否則 :
正確的sql:
--子查詢
--根據sysid取出單位名稱
--根據groupid查詢使用者類型代碼對應的名稱
select sysuser.*,
(select mc from useryy where id = sysuser.sysid)sysmc,
(select info from dictinfo where dictcode = sysuser.groupid and typecode = ‘s01‘)groupname
from sysuser
巢狀表格
可以將一個sql查詢結果組成一個虛表,查詢方式和查詢一個實體表相同的。
組成的虛擬表欄位是不允許重複的,否則 :
031醫學項目-模組三:藥品供應商目錄模組——sql補充知識