1. 程式人生 > >MySQL 高階查詢

MySQL 高階查詢

昨天寫了一篇關於MySQL的簡單單表查詢的文章,但對於一個程式設計師來說,那些都是很基礎的,單一的一個表在實際專案開發中基本上不會遇到。高階查詢雖說也是基礎,但相較於單表,高階查詢的邏輯性更高,語句也更為複雜,更容易出錯,在實際的開發中大量用到,由此掌握高階查詢尤為重要。

如果想從多個表查詢比較複雜的資訊,就會使用高階查詢實現。常見的高階查詢包括多表連線查詢、內連線查詢、外連線查詢與組合查詢等。這裡接上昨天的,使用2個表進行高階查詢。2個以上的表格只是比2個表格多點內容,連線的方法是一樣的,查詢的時候多加要查詢的欄位和連線表自己也可以摸索出來。

本篇文章所用到的2個表詳細:

1.內連線(INNER JOIN)

:

分為等值連線和非等值連線,使用等號"="、大於號">"或小於號"<"比較兩個表的連線列的值,相當於兩表執行笛卡爾後,取兩表連結列值相等或一個表大於或小於另一個表的連結列值的記錄。

eg.SELECT e.deptno,SUM(e.sal),d.dname FROM emp e INNER JOIN dept d ON e.deptno = d.deptno GROUP BY e.deptno;

SELECT e.*, d.*  FROM emp e innerjoin dept d  ON e.deptno < d.deptno; 

2.外聯結:

分為左外連線(LEFT OUTER JOIN)和右外連線(RIGHT OUTER JOIN)

左外連線:將左表的所有記錄與右表符合條件的記錄,返回的結果除內連線的結果,還有左表不符合條件的記錄,並在右表相應列中填NULL。

右外連線:左外連線相反,指將右表的所有記錄與左表符合條件的記錄,返回的結果除內連線的結果,還有右表不符合條件的記錄,並在左表相應列中填NULL。

eg,SELECT e.deptno,SUM(e.sal),d.dname FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno GROUP BY e.deptno;

SELECT e.deptno,SUM(e.sal),d.dname FROM emp e RIGHT JOIN dept d ON e.deptno = d.deptno GROUP BY e.deptno;


這裡要說明一下,INNER JOIN ... ON ...是99年的語法,還有一個也可以連線查詢,直接用WHERE,這是92年的 語法,這兩種在實際開發中都被大量使用 。查詢結果也一樣,相互轉改也很簡單,可根據自己的習慣來選擇使用。上面的語句也可以改為用WHERE,如下:

eg.SELECT e.deptno,d.dname,SUM(e.sal) FROM emp e,dept d WHERE e.deptno = d.deptno GROUP BY e.deptno;

3.組合查詢、子查詢:

簡單來說就是查詢裡面包含查詢,而被包含的查詢為子查詢,可作為外層查詢的條件或是 一個需要用到的連線表。不過一個查詢語句查出來的結果有多少(大於0才有意義),即便是一個,也可以看作是一個虛擬的表。可重新命名使用使之達到與本身存在的表相同的效果。

eg.SELECT ename,sal FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname="SALES");

SELECT xin.*,d.dname,d.loc FROM (SELECT deptno,SUM(sal),COUNT(*) FROM emp GROUP BY deptno) xin INNER JOIN

dept d ON xin.deptno = d.deptno;

順便提一下關於重新命名,這是在實際開發中經常會使用的,目的是為了讓查詢出的結果更容易被他人理解(因為建表的時候命名一般為英文,為了讓更多人理解查詢結果,一般重新命名為中文),下面是一個比較好的例子,附帶結果圖;

eg.SELECT xin.deptno 部門編號,xin.sal_S 工資總計,xin.sal_A 平均工資,xin.emp_co 人數,
d.dname 部門名稱,d.loc 部門所在 FROM (SELECT deptno,SUM(sal) sal_S,AVG(sal) sal_A ,COUNT(*) emp_co 
FROM emp GROUP BY deptno)xin,dept d WHERE xin.deptno = d.deptno;

效果圖:

關於having,簡單來說可對查詢結果進行過濾然後在顯示,下面的例子對deptno進行分組,再過濾掉平均工資(avg_sa)在2000~2500區間外的資料在顯示所要的結果。

eg.SELECT deptno,COUNT(*),SUM(sal),AVG(sal) avg_sal FROM emp GROUP BY deptno HAVING avg_sal 
BETWEEN 2000 AND 2500;

4.分頁查詢:

可自定義每頁顯示多少條資料。LIMIT x,y。x為起始條目下標,從0開始,y為所要顯示的條目數。

eg.SELECT * FROM emp ORDER BY deptno LIMIT 10,3;

從第11條資料開始,顯示3條。

相關推薦

Mysql高階查詢,約束,索引

1、高階查詢 (1)總結 3、select ... 聚合函式 from 表名 1、where ... 2

MySQL高階查詢和程式設計基礎

第一章 資料庫設計 一、資料需求分析:   資料需求分析是為後續概念設計和邏輯結構設計做準備。 結構:(1)對現實世界要處理的物件進行詳細的調查。      (2)收集基礎數、據。      

MySQL高階查詢筆記

SELECT 獨立欄位名,COUNT(*) FROM 表名 GROUP BY 獨立欄位名; 注意:分組查詢的結果集中只能包含兩種列 (1)分組條件列 (2)其他列的聚合函式 2.複雜查詢---子查詢 步驟1:到表中查詢出對於的編號 SELECT 欄位名 FROM 表名 WHE

人工智慧(mysql)—— mysql高階查詢(索引、多表、連線)

一、索引    1、索引的定義                對資料庫中表的一列或者多列的值進行排序的一種結構(MySQL中索引用Btree方式)    2、索引的優點                加快資料的檢索速度    3、索引的缺點                a、

MySQL高階查詢簡例

多表查詢 1,內連線 1.1 等值連線 方式一:= 查詢所有員工的員工和部門資訊(查詢員工和部門的資訊) select * from emp,dept 產生一個笛卡爾集 下面就是避免笛卡爾集的方式:等值條件 select * from emp,dept where emp.deptn

MySQL 高階查詢

昨天寫了一篇關於MySQL的簡單單表查詢的文章,但對於一個程式設計師來說,那些都是很基礎的,單一的一個表在實際專案開發中基本上不會遇到。高階查詢雖說也是基礎,但相較於單表,高階查詢的邏輯性更高,語句也

MySQL進階之高階查詢,真的高階啊!

高階查詢 1.多表查詢(關聯查詢,連線查詢) 內連線 沒有主從表之分。 與連線順序無關 內連接出現在結果集中的資料必須出現在每一個關聯表中。 select * from em

MySQL 高階操作——新增資料、更新資料、刪除資料、查詢資料

新增資料 多資料插入 只要寫一次insert指令,但是可以插入多條記錄 語法:insert into 表名 [(欄位列表)] values (值列表1),(值列表2),(值列表3); 主鍵衝突 主鍵衝突,在有的表中,使用的是業務主鍵(欄位有業務含義),但是往往在進行

MySQL 單表查詢高階查詢

一、聚合函式 聚合函式 函式名稱 作用 count() 返回某列的行數 sum() 返回某列值的和 avg() 返回某列的平均值 max() 返回某列的最大值 min() 返回某列的最小值 上面聚合函式的使用語法

資料庫:mysql基礎(四)---高階查詢

子查詢(巢狀查詢) 將一個查詢結果作為另一個查詢的條件或者組成繼續進行檢索 分類 #先看一個例子 #查詢20號部門所有員工及其所在部門資訊 #用關聯查詢來做 select * from emp,dept where emp.deptno = dep

MySQL查詢過程和高階查詢

通過中篇的介紹,你會了解到: MySQL查詢過程 高階查詢相關概念 explain命令詳細介紹 索引優化建議 MySQL查詢過程 想要更好的優化查詢,首先要了解其整體查詢過程,從客戶端傳送查詢請求,到接收到查詢結果,MySQL伺

MYSQL高階查詢:Group By,Order by, having子句

1. Group by就是分組的意思,根據某個欄位進行分組。Group By 與 Count()函式  基本語法:group by 欄位名; 使用前面的學生表,我們來進行練習 舉例:根據性別分組 根據上面顯示,我們使用了分組語句,結果出現了資料丟失的情況。分組之後男和女只顯示一

mysql資料表,其中一列是json陣列進行高階查詢

1、首先我們看到資料表中,Form_Value_一列是josn格式存在的,又想通過其中的一組或者幾組鍵值對來進行查詢。2、SELECT * FROM core_process where Form_Value_ -> '$.attendancer' = '馬立新'   

MySql資料庫使用經驗)MySql高階查詢之內連線,外連線,交叉連線以及on,exists,order by,union關鍵字

連線查詢: 將兩張表或者兩張以上的表進行記錄的連線(按照某個指定的條件進行資料拼接)。 連線查詢的使用: 在使用者檢視資料的時候,需要顯示的資料來自多張表. 連線查詢語法: 需要使用join 關鍵字。 使用方式為: 左表 join 右表,左表: 在join關鍵字左邊的表

python資料庫-MySQL資料庫高階查詢操作(51)

一、什麼是關係? 1、分析:有這麼一組資料關於學生的資料 學號、姓名、年齡、住址、成績、學科、學科(語文、數學、英語) 我們應該怎麼去設計儲存這些資料呢? 2、先考慮第一正規化:列不可在拆分原則   這裡面學科包含了三個學科,所以學科拆分為:語文學科、數學學科、英語學科,同樣的成績也要拆分為

MySQL快速回顧:高階查詢操作

8.1 排序資料 檢索出的資料並不是以純粹的隨機順序顯示的。如果不排序,資料一般將以它在底層表中出現的順序顯示。這可以是資料最初新增到表中的順序。但是,如果資料後來進行過更新或刪除,則此順序將會受到MySQL重用回收儲存空間的影響。因此,如果不明確控制的話,不能依賴該排序順序。 關係資料庫設計理論認為,如果不

mysql查詢

mysq sql classname sna name from use lec mysql 1.標量子查詢 select *from myuser where classid=( select classid from myclass where classname=‘

Mysql聯合查詢UNION和UNION ALL的使用介紹

組合 ans per ext 輸入 and nbsp 理解 des 一、UNION和UNION ALL的作用和語法 UNION 用於合並兩個或多個 SELECT 語句的結果集,並消去表中任何重復行。UNION 內部的 SELECT 語句必須擁有相同數量的列,列也必須擁有

MySQL:子查詢

where lin 寫到 emp alt 量子 允許 lun 位置 對於下表, 1. 場景:查詢代課天數最多的老師的信息。 方法一:select % from teacher order by days desc limit 1 ; 該方法有漏洞:授課天數最多的老師

MySQL範圍查詢(日期)

查詢 舉例 jpg 結構 datetime 日期 span mes sta MySQL的時間和日期類型 數據類型 字節數 數據格式 year 1 YYYY date 4 YYYY-MM-DD time 3 HH:MM:SS datetime 8 YY