MySQL中投影怎么用 sql投影操作

mysql的 四種關(guān)系運(yùn)算?

關(guān)系運(yùn)算包括四種:投影、選擇、連接、除。

為信宜等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及信宜網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、信宜網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

在任何一種數(shù)據(jù)庫管理系統(tǒng)中(包括MySQL),投影對應(yīng)于SELECT子句,選擇對應(yīng)于WHERE子句,連接對應(yīng)于JOIN子句,但除沒有直接的對應(yīng)語句,需要根據(jù)題目的實(shí)際含義書寫復(fù)雜的SQL,通常都會包含子查詢。

Mysql的工作原理是什么

Mysql?工作原理圖

Mysql是由SQL接口,解析器,優(yōu)化器,緩存,存儲引擎組成的。

mysql原理圖各個(gè)組件說明:

1. connectors

與其他編程語言中的sql?語句進(jìn)行交互,如php、java等。

2. Management Serveices Utilities

系統(tǒng)管理和控制工具

3. Connection Pool (連接池)

管理緩沖用戶連接,線程處理等需要緩存的需求

4. SQL Interface (SQL接口)

接受用戶的SQL命令,并且返回用戶需要查詢的結(jié)果。比如select from就是調(diào)用SQL Interface

5. Parser?(解析器)

SQL命令傳遞到解析器的時(shí)候會被解析器驗(yàn)證和解析。

主要功能:

a .?將SQL語句分解成數(shù)據(jù)結(jié)構(gòu),并將這個(gè)結(jié)構(gòu)傳遞到后續(xù)步驟,后面SQL語句的傳遞和處理就是基于這個(gè)結(jié)構(gòu)的

b. ?如果在分解構(gòu)成中遇到錯(cuò)誤,那么就說明這個(gè)sql語句是不合理的,語句將不會繼續(xù)執(zhí)行下去

6. Optimizer (查詢優(yōu)化器)

SQL語句在查詢之前會使用查詢優(yōu)化器對查詢進(jìn)行優(yōu)化(產(chǎn)生多種執(zhí)行計(jì)劃,最終數(shù)據(jù)庫會選擇最優(yōu)化的方案去執(zhí)行,盡快返會結(jié)果)?他使用的是“選取-投影-聯(lián)接”策略進(jìn)行查詢。

用一個(gè)例子就可以理解:?select uid,name from user where gender = 1;

這個(gè)select?查詢先根據(jù)where?語句進(jìn)行選取,而不是先將表全部查詢出來以后再進(jìn)行g(shù)ender過濾

這個(gè)select查詢先根據(jù)uid和name進(jìn)行屬性投影,而不是將屬性全部取出以后再進(jìn)行過濾

將這兩個(gè)查詢條件聯(lián)接起來生成最終查詢結(jié)果.

7. Cache和Buffer (查詢緩存)

如果查詢緩存有命中的查詢結(jié)果,查詢語句就可以直接去查詢緩存中取數(shù)據(jù)。

這個(gè)緩存機(jī)制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,權(quán)限緩存等

8.Engine (存儲引擎)

存儲引擎是MySql中具體的與文件打交道的子系統(tǒng)。也是Mysql最具有特色的一個(gè)地方。

Mysql的存儲引擎是插件式的。它根據(jù)MySql AB公司提供的文件訪問層的一個(gè)抽象接口來定制一種文件訪問機(jī)制(這種訪問機(jī)制就叫存儲引擎)

SQL?語句執(zhí)行過程

數(shù)據(jù)庫通常不會被直接使用,而是由其他編程語言通過SQL語句調(diào)用mysql,由mysql處理并返回執(zhí)行結(jié)果。那么Mysql接受到SQL語句后,又是如何處理

首先程序的請求會通過mysql的connectors與其進(jìn)行交互,請求到處后,會暫時(shí)存放在連接池(connection pool)中并由處理器(Management Serveices Utilities)管理。當(dāng)該請求從等待隊(duì)列進(jìn)入到處理隊(duì)列,管理器會將該請求丟給SQL接口(SQL Interface)。SQL接口接收到請求后,它會將請求進(jìn)行hash處理并與緩存中的結(jié)果進(jìn)行對比,如果完全匹配則通過緩存直接返回處理結(jié)果;否則,需要完整的走一趟流程:

(1)由SQL接口丟給后面的解釋器(Parser),解釋器會判斷SQL語句正確與否,若正確則將其轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)。

(2)解釋器處理完,便來到后面的優(yōu)化器(Optimizer),它會產(chǎn)生多種執(zhí)行計(jì)劃,最終數(shù)據(jù)庫會選擇最優(yōu)化的方案去執(zhí)行,盡快返會結(jié)果。

(3)確定最優(yōu)執(zhí)行計(jì)劃后,SQL語句此時(shí)便可以交由存儲引擎(Engine)處理,存儲引擎將會到后端的存儲設(shè)備中取得相應(yīng)的數(shù)據(jù),并原路返回給程序。

注意點(diǎn)

(1)如何緩存查詢數(shù)據(jù)

存儲引擎處理完數(shù)據(jù),并將其返回給程序的同時(shí),它還會將一份數(shù)據(jù)保留在緩存中,以便更快速的處理下一次相同的請求。具體情況是,mysql會將查詢的語句、執(zhí)行結(jié)果等進(jìn)行hash,并保留在cache中,等待下次查詢。

(2)buffer與cache的區(qū)別

從mysql原理圖可以看到,緩存那里實(shí)際上有buffer和cache兩個(gè),那它們之間的區(qū)別:簡單的說就是,buffer是寫緩存,cache是讀緩存。

(3)如何判斷緩存中是否已緩存需要的數(shù)據(jù)

這里可能有一個(gè)誤區(qū),覺得處理SQL語句的時(shí)候,為了判斷是否已緩存查詢結(jié)果,會將整個(gè)流程走一遍,取得執(zhí)行結(jié)果后再與需要的進(jìn)行對比,看看是否命中,并以此說,既然不管緩存中有沒有緩存到查詢內(nèi)容,都要整個(gè)流程走一遍,那緩存的優(yōu)勢在哪?

其實(shí)并不是這樣,在第一次查詢后,mysql便將查詢語句以及查詢結(jié)果進(jìn)行hash處理并保留在緩存中,SQL查詢到達(dá)之后,對其進(jìn)行同樣的hash處理后,將兩個(gè)hash值進(jìn)行對照,如果一樣,則命中,從緩存中返回查詢結(jié)果;否則,需要整個(gè)流程走一遍。

MySQL筆記1select基礎(chǔ)

查詢語句:select 語句

三種能力:投影、選擇、連接

投影:在一張二維表中根據(jù)所需要的條件選出所需要的列

選擇:在二維表中根據(jù)所需的條件選擇合適的行

連接:從一張或者多張表中獲取所需要的行,并且把這個(gè)行結(jié)合在一起的查詢

SQL語句大小寫不敏感。

select語句是可以計(jì)算的

算術(shù)表達(dá)式和運(yùn)算符優(yōu)先級

舉例:select ename,sal 12*sal+100 from emp

計(jì)算出年薪+100塊

NULL值是不可用,且未分配的,未知并且不適用的值,可以當(dāng)成是保留值

AS其實(shí)可以省略

例如:select ename as name,sal salary from emp;

查詢出的字段會自動(dòng)換成別名

例子:select ename "Name",sal*12 "Annual Salary" from emp;

級聯(lián)操作是將列或字符串和其他列串聯(lián),由兩條豎線(||)表示

select ename,job,ename || job as "Employees" from emp;

可以看出Employees就將ENAME和JOB進(jìn)行結(jié)合的一個(gè)操作

在select句子中適用DISTINCT 關(guān)鍵字消除重復(fù)行

select distinct deptnp from emp;

限制選擇的行:

where關(guān)鍵字

如果where后面查的數(shù)據(jù)是字符串類型或者日期類型的要加''號

#######比較條件

舉幾個(gè)例子:

select ename,job,sal,deptno from emp where sal between 5000 and 10000;

這個(gè)是包含了5000和10000的

in的表達(dá):

select empno,ename,mgr,deptno from emp where mgr in (7788,7782,7000);

只要mgr有括號里面的值都顯示出來。

通配符:%通配的是多個(gè)字符,_通配的是一個(gè)字符

IS NULL是查詢某個(gè)字段為空的顯示出來

and、or、not

例子:

查詢sal=2000和job的內(nèi)容是包括MAN字符串的,當(dāng)同時(shí)滿足兩個(gè)條件時(shí)候才返回結(jié)果。

and就是兩邊同時(shí)為真,or的話是有一邊為真就行,not就是不等于

ASC 升序,默認(rèn)升序

DESC 降序

例子:

將deptno中進(jìn)行升序排列,排列出來后,在將sal進(jìn)行降序排列。

單行函數(shù):就是對單行數(shù)據(jù)進(jìn)行處理的函數(shù),只針對這一條數(shù)據(jù)得出一個(gè)結(jié)果

函數(shù)工作的過程

ROUND(45.926,2)是將45.926這個(gè)數(shù)字的小數(shù)點(diǎn)后兩位進(jìn)行四舍五入操作得到45.93

TRUNC(45.926,2) 是將45.926這個(gè)數(shù)字的小數(shù)點(diǎn)后兩位后面的進(jìn)行丟掉。

返回當(dāng)前系統(tǒng)日期

經(jīng)常是不同類型之間的轉(zhuǎn)換

TO_CHAR就是將日期型數(shù)字型轉(zhuǎn)換成字符型

例子:

數(shù)字型的轉(zhuǎn)換

把字符轉(zhuǎn)換成數(shù)字:

把字符轉(zhuǎn)換成日期:

什么是分組函數(shù)?

另外的名字叫多行函數(shù),針對于多行數(shù)據(jù)進(jìn)行一個(gè)匯總處理的一類函數(shù),最后會得到一個(gè)匯總的結(jié)果。

例子:

其實(shí)就是對一系列數(shù)據(jù)找最大值

基本格式:select group_function(column),... from table [where condition];

首先對一個(gè)數(shù)據(jù)進(jìn)行分類匯總把每一組的數(shù)據(jù)單獨(dú)的拿出來。就是對每一列數(shù)據(jù)的相同數(shù)據(jù)進(jìn)行一個(gè)分組,然后在將分組后的結(jié)果再去執(zhí)行select后面跟的一個(gè)分組函數(shù)的操作。

例子:

那下面這樣的怎么操作呢?

其實(shí)就是對分組以后的結(jié)果再次進(jìn)行一個(gè)限制篩選

where和Having的區(qū)別?

where是針對于整體的一個(gè)查詢結(jié)果

Having是針對于分組后的查詢結(jié)果的一個(gè)條件限制,它是不能單獨(dú)存在的,它只能夠在group by后面

下面是它的表達(dá)式:

顯示部門的最大平均薪水是多少

select max(avg(sal))

是這樣的一個(gè)嵌套

當(dāng)我們查的數(shù)據(jù)存在于多個(gè)表的時(shí)候就需要多表查詢

下面是用到的表

一個(gè)是EMP的職員表、一個(gè)是DEPT的部分表

表連接的三種方式:

從總類上來看:自連接、等值連接、外連接(又可以分為三類:左連接、右連接、全連接)

自連接:一個(gè)表自己與自己建立連接成為自連接或自身連接。

在查詢的時(shí)候多表,這兩張表是同一張表,所以在查詢前我們需要對這個(gè)表進(jìn)行一個(gè)別名的重命名。

舉例:查詢出員工編號、名字及其經(jīng)理名字

MGR對應(yīng)的是經(jīng)理的ID號,這個(gè)對應(yīng)的就是另一張經(jīng)理表中的名字

表示比較連接列的值顯示出最終的一個(gè)結(jié)果,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。

查詢員工的姓名 工作 部門號 部門名稱

左連接就是返回左邊的匹配行,不考慮右邊的表是否有相應(yīng)的行

(+)的意思就是dept是個(gè)匹配表,左邊是一個(gè)基礎(chǔ)表,基礎(chǔ)表優(yōu)先,如果右邊這個(gè)表找不到對應(yīng)的值去匹配,會自動(dòng)填空

右連接就是返回右邊的匹配行,不考慮左邊的表是否有相應(yīng)的行,如果沒有會自動(dòng)填空

左表右表都不做限制,所有的記錄都顯示,不足的地方用null填充

FULL JOIN表示emp和dept做一個(gè)全連接

ON表示觸發(fā)條件 。

網(wǎng)頁名稱:MySQL中投影怎么用 sql投影操作
文章來源:http://muchs.cn/article6/dosceog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)、云服務(wù)器、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司