千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > mysql當(dāng)數(shù)據(jù)同時(shí)屬于多個(gè)分類時(shí),該怎么查詢?

mysql當(dāng)數(shù)據(jù)同時(shí)屬于多個(gè)分類時(shí),該怎么查詢?

來(lái)源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-10-13 13:23:03 1697174583

一、mysql當(dāng)數(shù)據(jù)同時(shí)屬于多個(gè)分類時(shí),該怎么查詢

1、使用 AND 連接符

可以將多個(gè)分類條件使用 AND 連接符連接起來(lái),下面是代碼示例:

SELECT * FROM table_name WHERE category_id = 1 AND category_id = 2 AND category_id = 3;

但是,上述 SQL 語(yǔ)句可能無(wú)法正常工作,因?yàn)橐粭l記錄的 category_id 列值無(wú)法同時(shí)為 1、2 和 3。

2、使用 OR 連接符

可以將多個(gè)分類條件使用 OR 連接符連接起來(lái),下面是代碼示例:

SELECT * FROM table_name WHERE category_id = 1 OR category_id = 2 OR category_id = 3;

但是,這種方法會(huì)返回所有具有 category_id 為 1、2 或者 3 的記錄,而非同時(shí)具有這些分類的記錄。

3、使用 IN 操作符

可以使用 IN 操作符來(lái)指定多個(gè)分類值,下面是代碼示例:

SELECT * FROM table_name WHERE category_id IN (1, 2, 3);

這將返回同時(shí)具有分類 ID 為 1、2 和 3 的記錄。

4、使用 HAVING 和 COUNT

可以使用 HAVING 和 COUNT 函數(shù)來(lái)確保每個(gè)記錄同時(shí)具有多個(gè)分類,下面是代碼示例:

SELECT item_id FROM table_name WHERE category_id IN (1, 2, 3) GROUP BY item_id HAVING COUNT(DISTINCT category_id) = 3;

這會(huì)查找每個(gè)分類 ID 為 1、2 和 3 的分類,然后對(duì) item_id 進(jìn)行分組。HAVING 和 COUNT 函數(shù)將確保每個(gè) item_id 同時(shí)具有三個(gè)分類 ID,然后返回匹配的 item_id。

二、mysql介紹

1、簡(jiǎn)介

MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB公司開(kāi)發(fā),屬于?Oracle?旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,在?WEB?應(yīng)用方面,MySQL是較好的?RDBMS(Relational Database Management System,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))應(yīng)用軟件之一。

MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性。

MySQL所使用的 SQL 語(yǔ)言是用于訪問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型和大型網(wǎng)站的開(kāi)發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)。

2、應(yīng)用環(huán)境

與其他的大型數(shù)據(jù)庫(kù)例如?Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,但是這絲毫也沒(méi)有減少它受歡迎的程度。對(duì)于一般的個(gè)人使用者和中小型企業(yè)來(lái)說(shuō),MySQL提供的功能已經(jīng)綽綽有余,而且由于 MySQL是開(kāi)放源碼軟件,因此可以大大降低總體擁有成本。

Linux作為操作系統(tǒng),Apache?或Nginx作為?Web?服務(wù)器,MySQL 作為數(shù)據(jù)庫(kù),PHP/Perl/Python作為服務(wù)器端腳本解釋器。由于這四個(gè)軟件都是免費(fèi)或開(kāi)放源碼軟件(FLOSS),因此使用這種方式不用花一分錢(qián)(除開(kāi)人工成本)就可以建立起一個(gè)穩(wěn)定、免費(fèi)的網(wǎng)站系統(tǒng),被業(yè)界稱為“LAMP”或“LNMP”組合。

3、索引類別

普通索引:普通索引(由關(guān)鍵字 KEY 或 INDEX 定義的索引)的任務(wù)是加快對(duì)數(shù)據(jù)的訪問(wèn)速度。因此,應(yīng)該只為那些最經(jīng)常出現(xiàn)查詢條件(WHERE column =)或排序條件(ORDER BY column)中的數(shù)據(jù)列創(chuàng)建索引。只要有可能,就應(yīng)該選擇一個(gè)數(shù)據(jù)最整齊、最緊湊的數(shù)據(jù)列(如一個(gè)整數(shù)類型的數(shù)據(jù)列)來(lái)創(chuàng)建索引。索引:普通索引允許被索引的數(shù)據(jù)列包含重復(fù)的值。比如說(shuō),因?yàn)槿擞锌赡芡酝粋€(gè)姓名在同一個(gè)“員工個(gè)人資料”數(shù)據(jù)表里可能出現(xiàn)兩次或更多次。如果能確定某個(gè)數(shù)據(jù)列將只包含彼此各不相同的值,在為這個(gè)數(shù)據(jù)列創(chuàng)建索引的時(shí)候就應(yīng)該用關(guān)鍵字UNIQUE 把它定義為一個(gè)索引。這么做的好處:一是簡(jiǎn)化了 MySQL 對(duì)這個(gè)索引的管理工作,這個(gè)索引也因此而變得更有效率;二是 MySQL 會(huì)在有新記錄插入數(shù)據(jù)表時(shí),自動(dòng)檢查新記錄的這個(gè)字段的值是否已經(jīng)在某個(gè)記錄的這個(gè)字段里出現(xiàn)過(guò)了;如果是,MySQL 將拒絕插入那條新記錄。也就是說(shuō),索引可以保證數(shù)據(jù)記錄的獨(dú)特性。事實(shí)上,在許多場(chǎng)合,人們創(chuàng)建索引的目的往往不是為了提高訪問(wèn)速度,而只是為了避免數(shù)據(jù)出現(xiàn)重復(fù)。主索引:在前面已經(jīng)反復(fù)多次強(qiáng)調(diào)過(guò):必須為主鍵字段創(chuàng)建一個(gè)索引,這個(gè)索引就是所謂的“主索引”。主索引區(qū)別是:前者在定義時(shí)使用的關(guān)鍵字是 PRIMARY 而不是 UNIQUE。外鍵索引:如果為某個(gè)外鍵字段定義了一個(gè)外鍵約束條件,MySQL 就會(huì)定義一個(gè)內(nèi)部索引來(lái)幫助自己以最有效率的方式去管理和使用外鍵約束條件。復(fù)合索引:索引可以覆蓋多個(gè)數(shù)據(jù)列,如像 INDEX(columnA,columnB)索引。這種索引的特點(diǎn)是 MySQL 可以有選擇地使用一個(gè)這樣的索引。如果查詢操作只需要用到 columnA 數(shù)據(jù)列上的一個(gè)索引,就可以使用復(fù)合索引 INDEX(columnA,columnB)。不過(guò),這種用法僅適用于在復(fù)合索引中排列在前的數(shù)據(jù)列組合。比如說(shuō),INDEX(A,B,C)可以當(dāng)做 A 或 (A,B)的索引來(lái)使用,但不能當(dāng)做 B、C 或(B,C)的索引來(lái)使用。

4、查詢與索引

只有當(dāng)數(shù)據(jù)庫(kù)里已經(jīng)有了足夠多的測(cè)試數(shù)據(jù)時(shí),它的性能測(cè)試結(jié)果才有實(shí)際參考價(jià)值。如果在測(cè)試數(shù)據(jù)庫(kù)里只有幾百條數(shù)據(jù)記錄,它們往往在執(zhí)行完名列前茅條查詢命令之后就被全部加載到內(nèi)存里,這將使后續(xù)的查詢命令都執(zhí)行得非常快–不管有沒(méi)有使用索引。只有當(dāng)數(shù)據(jù)庫(kù)里的記錄超過(guò)了 1000 條、數(shù)據(jù)總量也超過(guò)了 MySQL 服務(wù)器上的內(nèi)存總量時(shí),數(shù)據(jù)庫(kù)的性能測(cè)試結(jié)果才有意義。

在不確定應(yīng)該在哪些數(shù)據(jù)列上創(chuàng)建索引的時(shí)候,人們從 EXPLAIN SELECT 命令那里往往可以獲得一些幫助。這其實(shí)只是簡(jiǎn)單地給一條普通的 SELECT 命令加一個(gè) EXPLAIN 關(guān)鍵字作為前綴而已。有了這個(gè)關(guān)鍵字,MySQL 將不是去執(zhí)行那條 SELECT 命令,而是去對(duì)它進(jìn)行分析。MySQL 將以表格的形式把查詢的執(zhí)行過(guò)程和用到的索引等信息列出來(lái)。

在 EXPLAIN 命令的輸出結(jié)果里,第1列是從數(shù)據(jù)庫(kù)讀取的數(shù)據(jù)表的名字,它們按被讀取的先后順序排列。type列指定了本數(shù)據(jù)表與其它數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系(JOIN)。在各種類型的關(guān)聯(lián)關(guān)系當(dāng)中,效率較高的是 system,然后依次是 const、eq_ref、ref、range、index 和 All(All 的意思是:對(duì)應(yīng)于上一級(jí)數(shù)據(jù)表里的每一條記錄,這個(gè)數(shù)據(jù)表里的所有記錄都必須被讀取一遍——這種情況往往可以用一索引來(lái)避免)。

possible_keys 數(shù)據(jù)列給出了 MySQL 在搜索數(shù)據(jù)記錄時(shí)可選用的各個(gè)索引。key 數(shù)據(jù)列是 MySQL 實(shí)際選用的索引,這個(gè)索引按字節(jié)計(jì)算的長(zhǎng)度在 key_len 數(shù)據(jù)列里給出。比如說(shuō),對(duì)于一個(gè) INTEGER 數(shù)據(jù)列的索引,這個(gè)字節(jié)長(zhǎng)度將是4。如果用到了復(fù)合索引,在 key_len 數(shù)據(jù)列里還可以看到 MySQL 具體使用了它的哪些部分。作為一般規(guī)律,key_len 數(shù)據(jù)列里的值越小越好。

ref 數(shù)據(jù)列給出了關(guān)聯(lián)關(guān)系中另一個(gè)數(shù)據(jù)表里的數(shù)據(jù)列的名字。row 數(shù)據(jù)列是 MySQL 在執(zhí)行這個(gè)查詢時(shí)預(yù)計(jì)會(huì)從這個(gè)數(shù)據(jù)表里讀出的數(shù)據(jù)行的個(gè)數(shù)。row 數(shù)據(jù)列里的所有數(shù)字的乘積可以大致了解這個(gè)查詢需要處理多少組合。

最后,extra 數(shù)據(jù)列提供了與 JOIN 操作有關(guān)的更多信息,比如說(shuō),如果 MySQL 在執(zhí)行這個(gè)查詢時(shí)必須創(chuàng)建一個(gè)臨時(shí)數(shù)據(jù)表,就會(huì)在 extra 列看到 usingtemporary 字樣。

延伸閱讀1:mysql的管理工具

可以使用命令行工具管理 MySQL 數(shù)據(jù)庫(kù)(命令 mysql 和 mysqladmin),也可以從 MySQL 的網(wǎng)站下載圖形管理工具 MySQL Administrator,MySQL Query Browser 和 MySQL Workbench。phpMyAdmin是由 php 寫(xiě)成的 MySQL資料庫(kù)系統(tǒng)管理程程序,讓管理者可用 Web 界面管理 MySQL 資料庫(kù)。phpMyBackupPro也是由 PHP 寫(xiě)成的,可以透過(guò) Web 界面創(chuàng)建和管理數(shù)據(jù)庫(kù)。它可以創(chuàng)建偽 cronjobs,可以用來(lái)自動(dòng)在某個(gè)時(shí)間或周期備份 MySQL 數(shù)據(jù)庫(kù)。另外,還有其他的 GUI 管理工具,例如 mysql-front 以及 ems mysql manager,navicat等等。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
數(shù)據(jù)庫(kù)Union連接兩張表之前,怎么判斷要連接的另一張表是否存在?

一、Union連接兩張表之前,怎么判斷要連接的另一張表是否存在那你這個(gè)必須通過(guò)程序判斷 或者存儲(chǔ)過(guò)程去實(shí)現(xiàn),只用一條SQL是解決不了的。若是MyS...詳情>>

2023-10-13 15:20:02
mysql 不加條件查詢速度挺快,加上過(guò)濾條件就特別慢是為什么?

一、mysql 不加條件查詢速度挺快,加上過(guò)濾條件就特別慢是為什么不加條件查詢,如果是自增主鍵的話,會(huì)順序讀盤(pán),順序讀取磁盤(pán)數(shù)據(jù)的話,速度可...詳情>>

2023-10-13 15:18:26
mysql中,replace into后怎么連接where子句?

一、mysql中,replace into后怎么連接where子句REPLACE INTO?語(yǔ)法完全?與?INSERT INTO?一樣工作,只是在新行已插入。這意味著您應(yīng)該將主鍵...詳情>>

2023-10-13 15:13:31
什么是數(shù)據(jù)庫(kù)表結(jié)構(gòu)?

一、什么是數(shù)據(jù)庫(kù)表結(jié)構(gòu)數(shù)據(jù)庫(kù)表結(jié)構(gòu)是指數(shù)據(jù)庫(kù)中表的組織和定義方式。它描述了表的名稱、列(字段)的定義和屬性,以及表與其他表之間的關(guān)系。...詳情>>

2023-10-13 14:52:13
MySQL日均10萬(wàn)數(shù)據(jù)永久保存實(shí)現(xiàn)高可用可以采用什么方案?

一、MySQL日均10萬(wàn)數(shù)據(jù)永久保存實(shí)現(xiàn)高可用可以采用的方案1、數(shù)據(jù)庫(kù)集群使用MySQL數(shù)據(jù)庫(kù)集群來(lái)實(shí)現(xiàn)高可用性和負(fù)載均衡。可以使用主從復(fù)制(Maste...詳情>>

2023-10-13 14:47:04
快速通道
久久亚洲中文字幕精品一区四,亚洲日本另类欧美一区二区,久久久久久久这里只有免费费精品,高清国产激情视频在线观看
五月婷婷亚洲综合色色 | 亚洲综合精品一二三区在线 | 在线观看免费不打码 | 天堂网亚洲综合在线 | 亚洲午夜国内自产拍在线观看 | 最新国自产在线播放 |