首頁 資料庫 mysql教程 mysql資料庫操作

mysql資料庫操作

Nov 05, 2016 pm 05:18 PM
mysql

.在查詢結果中不顯示重複記錄

查詢時不顯示重複記錄主要應用了 DISTINCT 關鍵字,該關鍵字用於刪除重複記錄。

在實現查詢操作時,如果查詢的選擇清單中包含一個表的主鍵,那麼每個查詢中的記錄都將是唯一的(因為主鍵在每一筆記錄中有一個不同的值);如果主鍵不包含在查詢結果中,就可能出現重複記錄。使用 DISTINCT 關鍵字以後即可刪除重複記錄。

DISTINCT 的語法如下:

SELECT DISTINCT select_list;
登入後複製

 注意:DISTINCT 關鍵字並不是指某一行,而是指不重複 SELECT 輸出的所有欄位。這點十分重要,其作用是防止相同的行出現在一個查詢結果的輸出中。

例如:

select distinct name,price,date,address,quality from tb;
登入後複製

 

2.使用 NOT 查詢不符合條件的記錄

使用 NOT 與謂詞組合所形成的條件進行查詢。

NOT 與謂詞組合所形成的表達式分別是 [NOT] BETWEEN、IS [NOT] NULL 和 [NOT] IN 。

(1)[NOT] BETWEEN

此條件指定值的包含範圍,使用 AND 將開始值和結束值分開。

其語法如下:

test_expression [NOT] BETWEEN begin_expression AND end_expression
登入後複製

 結果型別為 boolean ,傳回值為:若 test_expression 的值小於等於 begin_expression 的值或大於等於 end_expression 的值,則 NOT BETWEEN 傳回 true。

注意:若要指定排除範圍,也可以使用大於(>)和小於(<)運算子來取代 BETWEEN。 <)运算符代替 BETWEEN。

(2)IS [NOT] NULL

根據所使用的關鍵字指定對空值或非空值進行查詢,如果有任何操作數是 null, 表達式取值為 null 。

(3)[NOT] IN

根據所使用的關鍵字是包含在清單內還是排除在清單外,指定對表達式進行查詢。查詢表達式可以使用常亮或列名,而列表可以是一組常亮或子查詢(更多的情況下)。如果列表為一組常數,則應放置在一對圓括號內。

其語法如下:

test_expression [NOT] in( subquery   expression[,...n] )
登入後複製


參數說明:
①test_expression:SQL 表達式

   ②subquery:包含某列結果集的子查詢,該列必須與 test_expression ②subquery:包含某列結果集的子查詢,該列必須與 test_expression。

   ③expression[,...n]:一個表達式列表,用來測試是否符合。所有的表達式必須和 test_expression  j有相同的資料型別。

例如:

select * from tb where selldate not between &#39;2016-10-30&#39; and &#39;2016-12-12&#39;;
登入後複製

 

 3.將子查詢作為表達式

將子查詢應用在 SELECT 子句中,其查詢結構就可以以表達式的形式出現。在應用子查詢有一些控制規則,了解這些規則有助於更好的掌握子查詢的應用。

①由比較運算子引入的內層查詢 SELECT 清單或 IN 只包括一個表達式或列名。在外層語句的 WHERE 子句中所命名的資料列必須能與查詢 SELECT 清單中命名的資料列連線相容。

②由不可更改的比較運算子引入的子查詢 (比較運算子後面不跟關鍵字ANY 和 ALL)不能包括 GROUP BY 子句或 HAVING 子句,除非預先確定了群組或單一的值。

③由 EXISTS 引入的SELECT 列表一般都由星號(*)組成,而不必指定特定的列名,也可以嵌套子查詢 WHERE 子句中限定行。

④子查詢不能在內部處理它們的結果,也就是說,子查詢不能包括 ORDER BY 子句。可選擇的 DISTINCT 關鍵字可有效的對子查詢結果進行排序,因為某些系統會透過先將結果排序來消除重複記錄。

例如:顯示全部學生總成績及學生總成績與全校平均總成績之差。

select stuId , stuName, (Math+Language+English)  Total , round((select avg(Math+Language+English) from tb),0)  Averages,
 round(((Math+Language+English)-(select avg(Math+Language+English) from tb)),0) Average  from tb;
登入後複製

 

4.用子查詢作為派生表

在實際 應用中,經常使用子查詢作為派生表,就是將查詢的結果集作為一個表使用。

子查詢是一個用來處理多表運算的附加方法。語法架構如下:

(SELECT [ALL|DISTINCT]<select item list> From <table list>
[WHERE <search condition>]   [GROUP BY<group item list>  [HAVING <group by search condition>]]   )
登入後複製

例如:

將銷售單按商品名稱統計分組後查詢銷售數量大於14的商品(將分組統計數據作為派生表)

select *  from (select proname ,COUNT(*) as sl  from td GROUP BY proname) WHERE (sl > 14) ;
登入後複製

 對商品銷售表中銷售數量前100名進行分組統計(將過濾資料作為派生表)

select sl,count(*)  from ( select * from tb ORDER BY zdbh LIMIT 0,100) GROUP BY sl;
登入後複製

 統計客戶關係表中未結帳客戶的欠款金額(將過濾資料作為派生表)

select name,sum(xsje) from  (select * from tb  where NOT pay) GROUP BY name;
登入後複製

 查詢所有戰士訓練資訊和查詢第三次射擊成績大於8環的戰士資訊(將一個查詢結果作為另一個查詢所操作的表)

select T.soldId, T.soldName, T.FrirstGun, T.SecondGun, T.ArtideGun from (select * from tb where ArtideGun>8) as T;
登入後複製

 備註:必須為派生表起別名。

 

5.透過子查詢關聯資料

利用 EXISTS 謂詞引入子查詢。在某些情況下,只要子查詢傳回一個真值或假值,只考慮是否滿足謂詞條件,資料內容本身並不重要。此時可以使用 EXISTS 謂詞來定義子查詢。如果子查詢傳回一行或多行,EXISTS 謂詞為真,否則為假。要使 EXISTS 謂詞起作用,應該在子查詢中建立查詢條件以符合子查詢連接起來的兩個表中的值。

文法如下:

EXISTS subquery
登入後複製

 參數說明:

subquery:一个受限的 SQL 语句(不允许有 COMPUTE 子句和 INTO 关键字) 。
登入後複製

例如:获取英语成绩大于90分的学生信息

select name,college,address from tb_Stu where exists (select name from tb_grades M where M.name=I.name and English>90) ;
登入後複製

备注:EXISTS 谓词子查询中的 SELECT 子句中可使用任何列名,也可以使用任何多个列。这种谓词值只注重是否返回行,而不注重行的内容,用户可以指定列名或者只使用一个“*”。

6.实现笛卡尔乘积查询

笛卡尔乘积查询实现了两张表之间的交叉连接,在查询语句中没有 WHERE 查询条件,返回到结果集中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合条件的数据行数。

笛卡尔乘积的关键字是 CROSS JOIN 。例如,用户信息表中有2条数据,职工信息表中有4条数据,当这两张表应用笛卡尔乘积进行查询时,查询的结果就是2×4=8条。

例如:

select EmpId,EmpName,Depatment,JobTitle,Wages from tb_employees a cross join tb_position b;

备注:在进行多表查询时需要主注意,由于多表可能会出现相同的字段,因此在指定查询字段时,最好为重复的字段起别名,以方便区分。

7.使用 UNION 并运算

UINON 指的是并运算,即从两个或多个类似的结果集中选择行,并将其组合在一起形成一个单独的结果集。

UINON 运算符主要用于将两个或更多查询结果组合为单个结果集,该结果集包含联合查询中所有查询的全部行。在使用 UNION 运算符时应遵循以下准则:

①在使用 UNION 运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚集函数等)。

②在使用 UNION 运算符组合的结果集中的相应列或个别查询中使用的任意列的子集必须具有相同的数据类型,并且两者数据类型之间必须存在可能的隐性转换或提供了显式转换。

③利用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。

④ UNION 运算符组合不同的数据类型时,这些数据类型将使用数据类型优先级的规则进行转换。

⑤通过 UNION 运算符生产的表中列名来自 UNION 语句中的第一个单独的查询。若要用新名称引用结果集中的某列,必须按第一个 SELECT 语句中的方式引用该列。

例如:

select filenumuber,name,juior,address  from tb union select filenumuber,name,senior,address from tk;
登入後複製

8.内外连接查询

1)内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。

内连接可以分为等值连接、自然连接和不等值连接。

等值连接使用等号运算符比较被连接列的值,在查询结果中将列出连接表中的所有列,包括重复列。等值连接返回所有连接表中具有匹配值的行。

等值连接查询的语法如下:

select fildList from  table1 inner join table2 on table1.column = table2.column;
登入後複製

参数说明:

fildList:要查询的字段列表。

2)外联接。外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:

1)LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

2)RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。例如 ,表 A 右外连接表 B,结果为公共部分 C 加表 B 的结果集。如果表 A 中没有与表 B 匹配的项,就是用 NULL 进行连接。
3)FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

3)交叉联接
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。

例子:

-------------------------------------------------

 a表     id   name       b表     id   job   parent_id   
      1   张3                     1     23     1   
              2   李四                   2     34     2   
              3   王武                   3     34     4       
  a.id同parent_id 存在关系
登入後複製

--------------------------------------------------
1) 内连接

select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id       
  结果是 :   
  1   张3                   1     23     1   
  2   李四                  2     34     2
登入後複製

-------------------------------------------------
2)左连接

 select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id       
  结果是     
 1   张3                   1     23     1   
  2   李四                  2     34     2   
  3   王武                  null
登入後複製

-------------------------------------------------

3) 右连接

 select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id       
  结果是     
  1   张3                   1     23     1   
  2   李四                  2     34     2   
  null                     3     34     4
登入後複製

-------------------------------------------------
4) 完全连接

select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id   

  结果是     
  张3                1     23     1   
  李四              2     34     2   
     null                  3     34     4   
  王武                 nul
登入後複製


-------------------------------------------------

备注:内连接与外连接区别?

内连接只返回两张表相匹配的数据;而外连接是对内连接的扩展,可以使查询更具完整性,不会丢失数据。下面举例说明两者区别。

假设有两张表,分别为表A 与 表B,两张表公共部分为 C 。

内连接的连接结果是两个表都存在记录,可以说 A 内连 B 得到的是 C。

表 A 左外连接B,那么A不受影响,查询结果为公共部分C 加表A的记录集。

表A右外连接B,那么B不受影响,查询结果为公共部分C加表B的记录集。

全外连接表示两张表都不加限制。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

phpmyadmin怎麼打開 phpmyadmin怎麼打開 Apr 10, 2025 pm 10:51 PM

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

navicat premium怎麼創建 navicat premium怎麼創建 Apr 09, 2025 am 07:09 AM

使用 Navicat Premium 創建數據庫:連接到數據庫服務器並輸入連接參數。右鍵單擊服務器並選擇“創建數據庫”。輸入新數據庫的名稱和指定字符集和排序規則。連接到新數據庫並在“對象瀏覽器”中創建表。右鍵單擊表並選擇“插入數據”來插入數據。

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

navicat怎麼新建連接mysql navicat怎麼新建連接mysql Apr 09, 2025 am 07:21 AM

可在 Navicat 中通過以下步驟新建 MySQL 連接:打開應用程序並選擇“新建連接”(Ctrl N)。選擇“MySQL”作為連接類型。輸入主機名/IP 地址、端口、用戶名和密碼。 (可選)配置高級選項。保存連接並輸入連接名稱。

redis怎麼使用單線程 redis怎麼使用單線程 Apr 10, 2025 pm 07:12 PM

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

MySQL和SQL:開發人員的基本技能 MySQL和SQL:開發人員的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

See all articles