連接查詢
當進行多表連接查詢時需要指定字段所屬的表, 可以提高查詢效率, 如果不指定字段所屬的表,資料庫會從每個表中都找一下該欄位
e .欄位名稱: 表示取 emp 表的某個欄位
emp as e : 表的別名機制, 可以省略as 直接寫成emp e
#連接查詢:也可以叫跨表查詢,需要關聯多張表聯合起來查詢資料
#emp表和dept表聯合起來查詢數據,從emp表中取員工名字,從dept表中取部門名字
注意: 做連接查詢的時候一定要寫上關聯條件避免笛卡爾積現象
#連接查詢的分類
根據語法的年代分類
#SQL92:1992年的時候出現的語法
#sql92的缺點:結構不清晰,表的連接條件,和後期進一步篩選的條件,都放到了where後面
SQL99:1999年的時候出現的語法(重點學習)
sql99優點:表的連接條件和查詢條件分離,連接之後如果還需要進一步篩選,再往後繼續添加where , 多個表進行連接的時候更清晰
根據表連接的方式分類
內連接:等值連接, 非等值連接, 自連接, inner 可以省略一般不加
表A inner join 表B on 關聯條件
外連接:左外連接(左連接), 右外連接(右連接), outer 可以省略一般不加
-
表A left outer join 表B on 關聯條件
表B right outer join 表A on 關聯條件
#左連接以左面的表為準和右邊的表比較,和左表相等的不相等都會顯示出來,而右表符合條件的顯示,不符合條件的不顯示(右連接恰恰相反)
左連接能完成的功能右連接一定可以完成
全連接, 連接的兩張表都是主表, 都能查詢出來
#笛卡爾積現象
當兩張表進行連接查詢,沒有指定連接條件的時候,最終查詢結果條數是兩張表條數的乘積,這種現象稱為:笛卡爾積現象(笛卡爾發現的,這是一個數學現象)
避免笛卡爾積現象:連接多個表格時加連接條件,將滿足這個條件的記錄被篩選出來
-
#匹配的過程中匹配的次數沒有減少, 但是最終查詢的結果條數是變少了, 因為根據連接條件進行了篩選
通過笛卡爾積現象得出,表的連接次數越多效率越低,盡量避免表的連接次數
內連接之等值連接
因為條件是等量關係,所以被稱為等值連接(連接條件相等的資料)
查詢每個員工所在部門名稱,顯示員工名稱和部門
emp e和dept d表進行連接, 連接條件是:e.deptno = d.deptno
--sql92的缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面 select e.ename,d.dname from emp e, dept d where e.deptno = d.deptno; --sql99优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where select e.ename,d.dname from emp e --inner可以省略(带着inner可读性更好) (inner) join dept d on e.deptno = d.deptno;
內連接之自連接
因為只有一張表連接,具體的查詢方法是把一張表看作兩張表自己連接自己, 所以成為自連接
查詢員工的上級領導,要求顯示員工名和對應的領導名
一張表看成兩張表, emp e 代表了員工表,emp m 也代表了領導表
連接條件: e.mgr = m.empno 員工的領導編號= 領導的員工編號
--SQL92 select e.ename, m.ename from emp e, emp m where e.mgr=m.empno; --SQL99 select a.ename as '员工名', b.ename as '领导名' from emp e join emp m on e.mgr = m.empno;
內連接之非等值連接
因為連接條件不是等量關係,所以稱為非等值連接
顯示薪水大於2000 的員工信息,並顯示所屬的部門名稱
--采用 SQL92 语法 select e.ename, e.sal, d.dname from emp e, dept d where e.deptno=d.deptno and e.sal > 2000; --采用 SQL99 语法 select e.ename, e.sal, d.dname from emp e (inner) join dept d on e.deptno=d.deptno where e.sal>2000;
找出每位員工的薪資等級,要求顯示員工名稱、薪資、薪資等級
select e.ename, e.sal, s.grade from emp e (inner) join salgrade s on e.sal between s.losal and s.hisal;
外部連線
外連接: 在外連接當中,兩張表連接產生了主次關係, 主要查詢的是主表的數據, 捎帶著關聯查詢次表, 即如果對方沒有記錄和我主表匹配, 那麼默認對方是null , outer關鍵字可以省略
右外連接: 帶有right 的是右外連接,表示將join關鍵字右邊的這張表看成主表,主要是為了將這張表的資料全部查詢出來,捎帶著關聯查詢左邊的表
左外連接: 帶有lef t的是左外連接, 表示將join關鍵字左邊的這張表看成主表,主要是為了將這張表的資料全部查詢出來,捎帶著關聯查詢右邊的表
**注意: 任何一個右連接都有左連接的寫法, 任何一個左連接都有右連接的寫法**
查询每个员工的上级领导,要求显示所有员工的名字和领导名 , 如果某个员工没有领导 , 那么该员工也必须显示出来
--左连接 select a.ename as '员工名', b.ename as '领导名' from emp a left (outer) join emp b on a.mgr = b.empno; --右连接 select a.ename as '员工名', b.ename as '领导名' from emp b right (outer) join emp a on a.mgr = b.empno;
内连接和外连接的特点
内连接:A表和B表连接,A和B两张表没有主次关系是平等的 , 查询时只是将能够匹配上连接条件的数据查询出来 , 即如果没有匹配的就查询不出来 , inner关键字可以省略
外连接: 在外连接当中,两张表连接产生了主次关系 , 主要查询的是主表的数据 , 捎带着关联查询次表 , 即如果对方没有记录和我主表匹配 , 那么默认对方是null , outer关键字可以省略
注意: 区分内外连接的办法是通过 right 和 left 关键字 , 不是通过 inner 和 outer 因为它们都可以省略 , 并且外连接的查询结果条数一定是大于等于内连接的查询结果条数
显示员工信息,并显示所属的部门名称
select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;
显示员工信息,并显示所属的部门名称,如果某一个部门没有员工,那么该部门也必须显示出来
--外连接(右外连接) select e.ename,d.dname from emp e --outer是可以省略的,带着可读性强 --right代表什么:表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询左边的表 right (outer) join dept d on e.deptno = d.deptno; --外连接(左外连接) select e.ename,d.dname from dept d --outer是可以省略的,带着可读性强 left (outer) join emp e on e.deptno = d.deptno;
多表连接
一条SQL中内连接和外连接可以混合 , 都可以出现
--表示一: a 和 b 进行内连接 , a 和 c 进行内连接 , a 和 d 进行右外连接(推荐) --表示二: a 和 b 的内连接结果去内连接 c 的结果再去右外连接 d select ... from a join b on a和b的连接条件 join c on a和c的连接条件 right join d on a和d的连接条件
找出每个员工的部门名称以及工资等级,要求显示员工名、部门名、薪资、薪资等级
select e.ename,e.sal,d.dname,s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal;
查询结果
+--------+---------+------------+-------+ | ename | sal | dname | grade | +--------+---------+------------+-------+ | SMITH | 800.00 | RESEARCH | 1 | | ALLEN | 1600.00 | SALES | 3 | | WARD | 1250.00 | SALES | 2 | | JONES | 2975.00 | RESEARCH | 4 | | MARTIN | 1250.00 | SALES | 2 | | BLAKE | 2850.00 | SALES | 4 | | CLARK | 2450.00 | ACCOUNTING | 4 | | SCOTT | 3000.00 | RESEARCH | 4 | | KING | 5000.00 | ACCOUNTING | 5 | | TURNER | 1500.00 | SALES | 3 | | ADAMS | 1100.00 | RESEARCH | 1 | | JAMES | 950.00 | SALES | 1 | | FORD | 3000.00 | RESEARCH | 4 | | MILLER | 1300.00 | ACCOUNTING | 2 | +--------+---------+------------+-------+
找出每个员工的部门名称以及工资等级,还有上级领导,要求显示员工名、领导名、部门名、薪资、薪资等级
select e.ename,e.sal,d.dname,s.grade,l.ename from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal left join emp l on e.mgr = l.empno;
查询结果
+--------+---------+------------+-------+-------+ | ename | sal | dname | grade | ename | +--------+---------+------------+-------+-------+ | SMITH | 800.00 | RESEARCH | 1 | FORD | | ALLEN | 1600.00 | SALES | 3 | BLAKE | | WARD | 1250.00 | SALES | 2 | BLAKE | | JONES | 2975.00 | RESEARCH | 4 | KING | | MARTIN | 1250.00 | SALES | 2 | BLAKE | | BLAKE | 2850.00 | SALES | 4 | KING | | CLARK | 2450.00 | ACCOUNTING | 4 | KING | | SCOTT | 3000.00 | RESEARCH | 4 | JONES | | KING | 5000.00 | ACCOUNTING | 5 | NULL | | TURNER | 1500.00 | SALES | 3 | BLAKE | | ADAMS | 1100.00 | RESEARCH | 1 | SCOTT | | JAMES | 950.00 | SALES | 1 | BLAKE | | FORD | 3000.00 | RESEARCH | 4 | JONES | | MILLER | 1300.00 | ACCOUNTING | 2 | CLARK | +--------+---------+------------+-------+-------+
以上是MySql中的連線查詢問題怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

mysqloffersvariousStorageengines,每個suitedfordferentusecases:1)InnodBisidealForapplicationsNeedingingAcidComplianCeanDhighConcurncurnency,supportingtransactionsancions and foreignkeys.2)myisamisbestforread-Heavy-Heavywyworks,lackingtransactionsactionsacupport.3)記憶

MySQL中常見的安全漏洞包括SQL注入、弱密碼、權限配置不當和未更新的軟件。 1.SQL注入可以通過使用預處理語句防止。 2.弱密碼可以通過強制使用強密碼策略避免。 3.權限配置不當可以通過定期審查和調整用戶權限解決。 4.未更新的軟件可以通過定期檢查和更新MySQL版本來修補。

在MySQL中識別慢查詢可以通過啟用慢查詢日誌並設置閾值來實現。 1.啟用慢查詢日誌並設置閾值。 2.查看和分析慢查詢日誌文件,使用工具如mysqldumpslow或pt-query-digest進行深入分析。 3.優化慢查詢可以通過索引優化、查詢重寫和避免使用SELECT*來實現。

要監控MySQL服務器的健康和性能,應關注系統健康、性能指標和查詢執行。 1)監控系統健康:使用top、htop或SHOWGLOBALSTATUS命令查看CPU、內存、磁盤I/O和網絡活動。 2)追踪性能指標:監控查詢每秒數、平均查詢時間和緩存命中率等關鍵指標。 3)確保查詢執行優化:啟用慢查詢日誌,記錄並優化執行時間超過設定閾值的查詢。

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

WebStorm Mac版
好用的JavaScript開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。