MySQL數(shù)據(jù)庫學(xué)習(xí)筆記02_第1頁
MySQL數(shù)據(jù)庫學(xué)習(xí)筆記02_第2頁
MySQL數(shù)據(jù)庫學(xué)習(xí)筆記02_第3頁
MySQL數(shù)據(jù)庫學(xué)習(xí)筆記02_第4頁
MySQL數(shù)據(jù)庫學(xué)習(xí)筆記02_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

MySQLdayO2

1、關(guān)于查詢結(jié)果集的去重?

mysql>selectdistinctjobfromemp;//distinct關(guān)鍵字去除重復(fù)記錄。

Ijob

ICLERK|

|SALESMAN|

|MANAGER

|ANALYST|

|PRESIDENT|

++

mysql>selectename,distinctjobfromemp;

以上的sql語句是錯(cuò)誤的。

記?。篸istinct只能出現(xiàn)在所有字段的最前面。

mysql>selectdistinctdeptnojobfromemp;

+++

Ideptno|job|

+++

20CLERK|

30SALESMAN|

20MANAGER|

30MANAGER|

10MANAGER|

20ANALYST|

10PRESIDENT|

30CLERK|

10CLERKI

案例:統(tǒng)計(jì)崗位的數(shù)量?

selectcount(distinctjob)fromemp;

++

|count(distinctjob)|

++

I5|

++

2、連接查詢

2.1、什么是連接查詢?

在實(shí)際開發(fā)中,大部分的情況下都不是從單表中查詢數(shù)據(jù),一般都是多張表聯(lián)合查詢?nèi)?/p>

出最終的結(jié)果。

在實(shí)際開發(fā)中,一般一個(gè)業(yè)務(wù)都會(huì)對(duì)應(yīng)多張表,比如:學(xué)生和班級(jí),起碼兩張表。

stunostunameclassnoclassname

1zs1北京大興區(qū)亦莊經(jīng)濟(jì)技術(shù)

開發(fā)區(qū)第二中學(xué)高三1班

2Is1北京大興區(qū)亦莊經(jīng)濟(jì)技術(shù)

開發(fā)區(qū)第二中學(xué)高三1班

學(xué)生和班級(jí)信息存儲(chǔ)到一張表中,結(jié)果就像上面一樣,數(shù)據(jù)會(huì)存在大量的重復(fù),導(dǎo)

致數(shù)據(jù)的冗余。

2.2、連接查詢的分類?

根據(jù)語法出現(xiàn)的年代來劃分的話,包括:

SQL92(一些老的DBA可能還在使用這種語法。DBA:DataBaseAdministrator.數(shù)

據(jù)庫管理員)

SQL99(比較新的語法)

根據(jù)表的連接方式來劃分,包括:

內(nèi)連接:

等值連接

非等值連接

自連接

外連接:

左外連接(左連接)

右外連接(右連接)

全連接(這個(gè)不講,很少用!)

2.3、在表的連接查詢方面有一種現(xiàn)象被稱為:笛卡爾積現(xiàn)象。(笛卡爾乘積現(xiàn)象)

案例:找出每一個(gè)員工的部門名稱,要求顯示員工名和部門名。

EMP表

++-十

|ename|deptno|

|SMITH120|

|ALLEN130|

|WARD130

|JONES120|

|MARTIN130|

|BLAKE130|

|CLARK1io1

|SCOTT|20|

|KING|10|

|TURNER|30|

|ADAMS120I

|JAMES|30|

|FORD20I

|MILLER|10|

++--一一+

DEPT表

|DEPTNO|DNAME|LOC

++--+-+

1101ACCOUNTING|NEWYORK

1201RESEARCH|DALLAS

130|SALESCHICAGO

140|OPERATIONSBOSTON

++-一+?+

selectename,dnamefromemp,dept;

+++

Iename|dname

SMITHACCOUNTING

SMITHRESEARCH

SMITHSALES

SMITHOPERATIONS

ALLENACCOUNTING

ALLENRESEARCH

ALLENSALES|

ALLENOPERATIONSI

56rowsinset(0.00sec)

笛卡爾積現(xiàn)象:當(dāng)兩張表進(jìn)行連接查詢的時(shí)候,沒有任何條件進(jìn)行限制,最終的查詢結(jié)果條

數(shù)是兩張表記錄條數(shù)的乘積。

關(guān)于表的別名:

selecte.ename,d.dnamefromempe,deptd;

表的別名有什么好處?

第一:執(zhí)行效率高。

第二:可讀性好。

2.4、怎么避免笛卡爾積現(xiàn)象?當(dāng)然是加條件進(jìn)行過濾。

思考:避免了笛卡爾積現(xiàn)象,會(huì)減少記錄的匹配次數(shù)嗎?

不會(huì),次數(shù)還是56次。只不過顯示的是有效記錄。

案例:找出每一個(gè)員工的部門名稱,要求顯示員工名和部門名。

select

e.ename,d.dname

from

empe,deptd

where

e.deptno=d.deptno;//SQL92,以后不用。

+++

|ename|dname

+++

|CLARK|ACCOUNTING

|KING|ACCOUNTING

|MILLER|ACCOUNTING

|SMITH|RESEARCH

|JONES|RESEARCH

|SCOTT|RESEARCH

|ADAMS|RESEARCH

|FORD|RESEARCH

|ALLEN|SALES

|WARD|SALES

|MARTIN|SALES

|BLAKE|SALES

|TURNER|SALES

|JAMES|SALES

++—+

2.5、內(nèi)連接之等值連接:最大特點(diǎn)是:條件是等量關(guān)系。

案例:查詢每個(gè)員工的部門名稱,要求顯示員工名和部門名。

SQL92:(太老,不用了)

select

e.ename,d.dname

from

empe,deptd

where

e.deptno=d.deptno;

SQL99:(常用的)

select

e.enamezd.dname

from

empe

join

deptd

on

e.deptno=d.deptno;

“inner可以省略的,帶著inner目的是可讀性好一些。

select

e.ename,d.dname

from

empe

innerjoin

deptd

on

e.deptno=d.deptno;

語法:

A

join

B

on

連接條件

where

SQL99語法結(jié)構(gòu)更清晰一些:表的連接條件和后來的where條件分離了。

+++

|ename|dname|

+++

|CLARK|ACCOUNTING|

|KING|ACCOUNTING|

IMILLER|ACCOUNTING|

|SMITH|RESEARCH|

|JONES|RESEARCH|

|SCOTT|RESEARCH|

|ADAMS|RESEARCH|

|FORD|RESEARCH|

|ALLEN|SALES|

|WARD|SALES|

|MARTIN|SALES|

|BLAKE|SALES|

ITURNER|SALES|

|JAMES|SALES|

+++

2.6、內(nèi)連接之非等值連接:最大的特點(diǎn)是:連接條件中的關(guān)系是非等量關(guān)系。

案例:找出每個(gè)員工的工資等級(jí),要求顯示員工名、工資、工資等級(jí)。

mysql>selectename,salfromemp;e

++—+

|ename1sal|

++—+

|SMITH|800.00|

|ALLEN|1600.00|

|WARD|1250.00|

|JONES|2975.00|

|MARTIN|1250.00|

|BLAKE|2850.00|

|CLARK|2450.00|

|SCOTT|3000.00|

|KING|5000.00|

|TURNER|1500.00|

|ADAMS|1100.00|

|JAMES|950.00|

|FORD|3000.00|

|MILLER1300.00|

++-4.

mysql>select*fromsalgrade;s

++++

|GRADE|LOSAL|HISAL|

++—++

|1|700|1200|

|2|1201|1400|

|3|1401|2000|

|4|2001|3000|

|5|3001|9999|

++———++

select

e.ename,e.sal,s.grade

from

empe

join

salgrades

on

e.salbetweens.losalands.hisal;

11inner可以省略

select

e.ename,e.sal,s.grade

from

empe

innerjoin

salgrades

on

e.salbetweens.losalands.hisal;

■++

|enameIsal|grade|

++—++

|SMITH|800.00|1

|ALLEN|1600.00|3I

|WARD|1250.00|2

|JONES|2975.00|4|

|MARTIN|1250.00|2|

|BLAKE|2850.00|4|

|CLARK|2450.00|4|

|SCOTT|3000.00|4|

|KING|5000.00|5|

|TURNER|1500.00|3|

|ADAMS|1100.00|1

|JAMES|950.00|1

|FORD|3000.00|4

|MILLER1300.00|2I

+++

2.7、自連接:最大的特點(diǎn)是:一張表看做兩張表。自己連接自己。

案例:找出每個(gè)員工的上級(jí)領(lǐng)導(dǎo),要求顯示員工名和對(duì)應(yīng)的領(lǐng)導(dǎo)名。

mysql>selectempno,ename,mgrfromemp;

empa員工表

++--++

|empno|ename|mgr|

++--++

|7369|SMITH|7902|

|7499|ALLEN|7698|

|乃21|WARD|7698|

|7566|JONES|7839|

17654|MARTIN|7698|

17698|BLAKE|7839|

17782|CLARK|7839|

17788|SCOTT|7566|

17839|KING|NULL|

17844|TURNER|7698|

17876|ADAMS|7788

17900|JAMES|7698|

17902|FORD|7566|

17934|MILLER17782|

+-+

empb領(lǐng)導(dǎo)表

++一+

|empno|ename1

++一+

17566|JONES1

17698|BLAKE1

17782|CLARK1

17788|SCOTT1

17839|KING1

17902|FORD1

+-+-+

員工的領(lǐng)導(dǎo)編號(hào)=領(lǐng)導(dǎo)的員工編號(hào)

select

a.enameas,員工名,b.enameas,領(lǐng)導(dǎo)名,

from

empa

innerjoin

empb

on

a.mgr=b.empno;

+++

I員工名I領(lǐng)導(dǎo)名I

+++

|SMITH|FORD|

|ALLEN|BLAKE|

|WARD|BLAKE|

|JONES|KING|

|MARTIN|BLAKE|

|BLAKE|KING|

|CLARK|KING|

ISCOTT|JONES|

|TURNER|BLAKE|

|ADAMS|SCOTT|

|JAMES|BLAKE|

|FORD|JONES|

|MILLER|CLARK|

+++

2.8、外連接?

什么是外連接,和內(nèi)連接有什么區(qū)別?

內(nèi)連接:

假設(shè)A和B表進(jìn)行連接,使用內(nèi)連接的話,凡是A表和B表能夠匹配上的記錄查

詢出來,這就是內(nèi)連接。

AB兩張表沒有主副之分,兩張表是平等的。

外連接:

假設(shè)A和B表進(jìn)行連接,使用外連接的話,AB兩張表中有一張表是主表,一張表

是副表,主要查詢主表中

的數(shù)據(jù),捎帶著查詢副表,當(dāng)副表中的數(shù)據(jù)沒有和主表中的數(shù)據(jù)匹配上,副表自動(dòng)

模擬出NULL與之匹配。

外連接的分類?

左外連接(左連接):表示左邊的這張表是主表。

右外連接(右連接):表示右邊的這張表是主表。

左連接有右連接的寫法,右連接也會(huì)有對(duì)應(yīng)的左連接的寫法。

案例:找出每個(gè)員工的上級(jí)領(lǐng)導(dǎo)?(所有員工必須全部查詢出來。)

口—r*

empa貝工表

++++

|empno|ename|mgr|

++一++

|7369|SMITH|7902|

|7499|ALLEN|7698|

|7521|WARD|7698|

|7566|JONES|7839|

|7654|MARTIN|7698|

|7698|BLAKE|7839|

|7782|CLARK|7839|

|7788|SCOTT|7566|

|7839|KING|NULL|

|7844|TURNER:|7698|

|7876|ADAMS|7788|

|7900|JAMES|7698|

|7902|FORD|7566|

|7934|MILLER|7782|

++++

empb領(lǐng)導(dǎo)表

+++

|empno|ename|

+++

7566JONES

7698BLAKE

7782CLARK

7788SCOTT

7839KING

7902FORD

+++

內(nèi)連接:

select

a.ename'員工b.ename'領(lǐng)導(dǎo)’

from

empa

join

empb

on

a.mgr=b.empno;

外連接:(左外連接/左連接)

select

a.ename'員工',b.ename'領(lǐng)導(dǎo)’

from

empa

leftjoin

empb

on

a.mgr=b.empno;

〃。仇er是可以省略的。

select

a.ename'員工b.ename'領(lǐng)導(dǎo)'

from

empa

leftouterjoin

empb

on

a.mgr=b.empno;

外連接:(右外連接/右連接)

select

a.ename'員工b.ename'領(lǐng)導(dǎo)’

from

empb

rightjoin

empa

on

a.mgr=b.empno;

//outer可以省略。

select

a.ename'員工b.ename'領(lǐng)導(dǎo)'

from

empb

rightouterjoin

empa

on

a.mgr=b.empno;

++-十

1員工1領(lǐng)導(dǎo)

++—+

|SMITH|FORD|

|ALLEN|BLAKE|

|WARD|BLAKE|

|JONES|KING|

|MARTIN|BLAKE|

|BLAKE|KING|

|CLARK|KING|

|SCOTT|JONES|

|KING|NULL|

|TURNER|BLAKE|

|ADAMS|SCOTT|

|JAMES|BLAKE|

|FORD|JONES|

|MILLERCLARK|

++-+

外連接最重要的特點(diǎn)是:主表的數(shù)據(jù)無條件的全部查詢出來。

案例:找出哪個(gè)部門沒有員工?

EMP表

+++++-一++++

|EMPNO|ENAME|JOB|MGR|HIREDATE|SAL|COMM|DEPTNO|

+-++++-一++++

7369|SMITH|CLERK|7902|1980-12-17|800.00|NULL|20|

7499|ALLEN|SALESMAN|7698|1981-02-20|1600.00|300.00|30|

7521|WARD|SALESMAN|7698|1981-02-22|1250.00|500.00|30|

7566|JONES|MANAGER|7839|1981-04-02|2975.00|NULL|20|

7654|MARTIN|SALESMAN|7698|1981-09-28|1250.00|1400.00|30|

7698|BLAKE|MANAGER|7839|1981-05-01|2850.00|NULL|30|

7782|CLARK|MANAGER|7839|1981-06-09|2450.00|NULL|10|

7788|SCOTT|ANALYST|7566|1987-04-19|3000.00|NULL|20|

7839|KING|PRESIDENT|NULL|1981-11-17|5000.00|NULL|10|

7844|TURNER|SALESMAN|7698|1981-09-08|1500.00|0.00|30|

7876|ADAMS|CLERK|7788|1987-05-23|1100.00|NULL|20|

7900|JAMES|CLERK|7698|1981-12-03|950.00|NULL|30|

7902|FORD|ANALYST|7566|1981-12-03|3000.00|NULL|20|

7934|MILLERCLERK|7782|1982-01-23|1300.00|NULL|10|

++++-++++

DEPT

++++

|DEPTNO|DNAME|LOC

++++

|10|ACCOUNTING|NEWYORK|

|20|RESEARCH|DALLAS|

|30|SALES|CHICAGO|

|40|OPERATIONS|BOSTON|

select

d.*

from

empe

rightjoin

deptd

on

e.deptno=d.deptno

where

e.empnoisnull;

++++

|DEPTNO|DNAME|LOC

-+++

40|OPERATIONS|BOSTON|

■+++

2.9、三張表怎么連接查詢?

案例:找出每一個(gè)員工的部門名稱以及工資等級(jí)。

EMPe

++-+…++

|empno|ename|sal|deptno|

|7369|SMITH|800.00|20|

|7499|ALLEN|1600.00|30|

|7521|WARD|1250.00|30|

|7566|JONES|2975.00|20|

|7654|MARTIN|1250.00|30|

|7698|BLAKE|2850.00|30|

|7782|CLARK|2450.00|10|

|7788|SCOTT|3000.00|20|

|7839|KING|5000.00|10|

|7844|TURNER|1500.00|30|

|7876|ADAMS|1100.00|20|

|7900|JAMES|950.00|30|

|7902|FORD|3000.00|20|

|7934|MILLER1300.00|10|

++--+一++

DEPTd

++-+-+

|DEPTNO|DNAME|LOC|

++-+?十

10|ACCOUNTING|NEWYORK|

20|RESEARCH|DALLAS|

30|SALES|CHICAGO|

40|OPERATIONS|BOSTON|

SALGRADEs

++++

|GRADE|LOSAL|HISAL|

111700|1200|

|2|1201|1400|

|3|1401|2000|

|4|2001|3000|

|5|3001|9999|

++-++

注意,解釋一下:

A

join

B

join

C

on

表示:A表和B表先進(jìn)行表連接,連接之后A表繼續(xù)和C表進(jìn)行連接。

select

e.ename,d.dname,s.grade

from

empe

join

deptd

on

e.deptno=d.deptno

join

salgrades

on

e.salbetweens.losalands.hisal;

++++

ename|dname1grade|

+-.++

SMITH|RESEARCH111

ALLEN|SALES|3I

WARD|SALES12

JONES|RESEARCH14|

MARTIN|SALES|2|

BLAKE|SALES|4I

CLARK|ACCOUNTING14|

SCOTT|RESEARCH14|

KING|ACCOUNTING15|

TURNER|SALES|3I

ADAMS|RESEARCH11

JAMES|SALES|11

FORD|RESEARCH14

MILLER|ACCOUNTING|2I

?++

案例:找出每一個(gè)員工的部門名稱、工資等級(jí)、以及上級(jí)領(lǐng)導(dǎo)。

select

e.enameI*,d.dname,s.grade,el.ename'領(lǐng)導(dǎo)'

from

empe

join

deptd

on

e.deptno=d.deptno

join

salgrades

on

e.salbetweens.losalands.hisal

leftjoin

empel

on

e.mgr=el.empno;

++—++--——+

1員工|dname1grade|領(lǐng)導(dǎo)

|SMITH|RESEARCH|1|FORD|

|ALLEN|SALES|3|BLAKE|

|WARD|SALES|2|BLAKE|

|JONES|RESEARCH|4|KING|

|MARTIN|SALES|2|BLAKE|

|BLAKE|SALES|4|KING|

|CLARK|ACCOUNTING|4|KING|

|SCOTT|RESEARCH|4|JONES|

|KING|ACCOUNTING|5|NULL|

|TURNER|SALES|3|BLAKE|

|ADAMS|RESEARCH1|SCOTT|

|JAMES|SALES|1|BLAKE|

|FORD|RESEARCH|4|JONES|

|MILLERACCOUNTING|2|CLARK|

+.++■一+

3、子查詢

3.1、什么是子查詢?子查詢都可以出現(xiàn)在哪里?

select語句當(dāng)中嵌套select語句,被嵌套的select語句是子查詢。

子查詢可以出現(xiàn)在哪里?

select

..(select).

from

..(select).

where

..(select).

3.2、where子句中使用子查詢

案例:找出高于平均薪資的員工信息。

select*fromempwheresal>avg(sal);〃錯(cuò)誤的寫法,where后面不能直接使用分組函數(shù)。

第一步:找出平均薪資

selectavg(sal)fromemp;

++

Iavg(sal)|

++

|2073.214286|

第二步:where過濾

select*fromempwheresal>2073.214286;

+++++++++

|EMPNO|ENAME|JOB|MGR|HIREDATE|SAL|COMM|DEPTNO|

+++++++++

|7566|JONES|MANAGER|7839|1981-04-02|2975.00|NULL|20|

|7698|BLAKE|MANAGER|7839|1981-05-01|2850.00|NULL|30|

|7782|CLARK|MANAGER|7839|1981-06-09|2450.00|NULL|10|

|7788|SCOTT|ANALYST|7566|1987-04-19|3000.00|NULL|20|

|7839|KING|PRESIDENT|NULL|1981-11-17|5000.00|NULL|10|

|7902|FORD|ANALYST|7566|1981-12-03|3000.00|NULL|20|

+++++++++

第一步和第二步合并:

select*fromempwheresal>(selectavg(sal)fromemp);

3.3>from后面嵌套子查詢

案例:找出每個(gè)部門平均薪水的等級(jí)。

第一步:找出每個(gè)部門平均薪水(按照部門編號(hào)分組,求sal的平均值)

selectdeptno,avg(sal)asavgsalfromempgroupbydeptno;

+++

Ideptno|avgsal|

+++

|10|2916.666667|

|20|2175.000000|

|30|1566.666667|

+++

第二步:將以上的查詢結(jié)果當(dāng)做臨時(shí)表3讓t表和salgrades表連接,條件是:t.avgsalbetween

s.losalands.hisal

select

t.*,s.grade

from

(selectdeptno,avg(sal)asavgsalfromempgroupbydeptno)t

join

salgrades

on

t.avgsalbetweens.losalands.hisal;

++++

Ideptno|avgsal|grade|

++++

|30|1566.666667|3|

|10|2916.666667|4|

|20|2175.000000|4|

++++

案例:找出每個(gè)部門平均的薪水等級(jí)。

第一步:找出每個(gè)員工的薪水等級(jí)。

selecte.ename,e.sal,e.deptno,s.gradefromempejoinsalgradesone.salbetweens.losaland

s.hisal;

+++++

|ename|sal|deptno|grade|

++—++—+

|SMITH|800.00|20|1

|ALLEN|1600.00|30|3I

|WARD|1250.00|30|2

|JONES|2975.00|20|4|

|MARTIN|1250.00|30|2|

|BLAKE|2850.00|30|4|

|CLARK|2450.00|10|4|

|SCOTT|3000.00|20I4|

|KING|5000.00|10|5|

|TURNER|1500.00|30|3|

|ADAMS|1100.00|20|1

|JAMES|950.00|30|1

|FORD|3000.00|20|4

|MILLER1300.00|10|2I

+4十

第二步:基于以上結(jié)果,繼續(xù)按照deptno分組,求grade平均值。

select

e.deptno,avg(s.grade)

from

empe

join

salgrades

on

e.salbetweens.losalands.hisal

groupby

e.deptno;

|deptno|avg(s.grade)|

1013.6667|

20|2.8000|

30|2.5000|

+++

3.4^在select后面嵌套子查詢。

案例:找出每個(gè)員工所在的部門名稱,要求顯示員工名和部門名。

select

e.ename,d.dname

from

empe

join

deptd

on

e.deptno=d.deptno;

select

e.ename,(selectd.dnamefromdeptdwheree.deptno=d.deptno)asdname

from

empe;

+++

Iename|dname|

+++

|SMITH|RESEARCH|

|ALLEN|SALES|

|WARD|SALES|

|JONES|RESEARCH|

|MARTIN|SALES|

IBLAKE|SALES|

|CLARK|ACCOUNTING|

|SCOTT|RESEARCH|

|KING|ACCOUNTING|

|TURNER|SALES|

|ADAMS|RESEARCH|

|JAMES|SALES|

|FORD|RESEARCH|

|MILLER|ACCOUNTING|

+++

4、union(可以將查詢結(jié)果集相加)

案例:找出工作崗位是SALESMAN和MANAGER的員工?

第一種:selectenamejobfromempwherejob='MANAGER'orjob='SALESMAN';

第二種:selectenamejobfromempwherejobin('MANAGER','SALESMAN');

|ename|job|

+++

|ALLEN|SALESMAN|

|WARD|SALESMAN|

|JONES|MANAGER|

|MARTIN|SALESMAN|

|BLAKE|MANAGER|

|CLARK|MANAGER|

|TURNER|SALESMAN|

+++

第三種:union

selectenamejobfromempwherejob='MANAGER'

union

selectenamejobfromempwherejob='SALESMAN';

|ename|job

|JONES|MANAGER|

|BLAKE|MANAGER|

|CLARK|MANAGER|

|ALLEN|SALESMAN|

|WARD|SALESMAN|

|MARTIN|SALESMAN|

|TURNER|SALESMAN|

+++

兩張不相干的表中的數(shù)據(jù)拼接在一起顯示?

selectenamefromemp

union

selectdnamefromdept;

++

Iename|

++

ISMITH|

|ALLEN|

|WARD

|JONES|

|MARTIN|

|BLAKE|

|CLARK|

|SCOTT|

|KING|

|TURNER|

|ADAMS

|JAMES|

|FORD|

|MILLER|

|ACCOUNTING|

|RESEARCH|

|SALES|

|OPERATIONS|

mysql>selectename,salfromemp

->union

->selectdnamefromdept;

ERROR1222(21000):TheusedSELECTstatementshaveadifferentnumberofcolumns

5、limit(重點(diǎn)中的重點(diǎn),以后分頁查詢?nèi)克?。?/p>

5.1、limit是mysql特有的,其他數(shù)據(jù)庫中沒有,不通用。(Oracle中有一個(gè)相同的機(jī)制,叫

做rownum)

5.2、limit取結(jié)果集中的部分?jǐn)?shù)據(jù),這時(shí)它的作用。

5.3、語法機(jī)制:

limitstartindex,length

startindex表示起始位置,從0開始,。表示第一條數(shù)據(jù)。

length表示取幾個(gè)

案例:取出工資前5名的員工(思路:降序取前5個(gè))

selectename,salfromemporderbysaldesc;

取前5個(gè):

selectename,salfromemporderbysaldesclimit0,5;

selectename,salfromemporderbysaldesclimit5;

5.4、limit是sql語句最后執(zhí)行的一個(gè)環(huán)節(jié):

select5

from1

where2

groupby3

having4

orderby6

limit7

5.5、案例:找出工資排名在第4到第9名的員工?

selectename,salfromemporderbysaldesclimit3,6;

+++

|ename|sal

++—+

|JONES|2975.00|

|BLAKE|2850.00|

|CLARK|2450.00|

|ALLEN|1600.00|

|TURNER|1500.00|

|MILLER1300.00|

++

5.6、通用的標(biāo)準(zhǔn)分頁sql?

每頁顯示3條記錄:

第1頁:0,3

第2頁:3,3

第3頁:6,3

第4頁:9,3

第5頁:12,3

每頁顯示pageSize條記錄:

第pageNo頁:(pageNo-1)*pageSize,pageSize

pageSize是什么?是每頁顯示多少條記錄

pageNo是什么?顯示第幾頁

java代碼{

intpageNo=2;//頁碼是2

intpageSize=10;//每頁顯示10條

limit(pageNo-1)*pageSize,pageSize

6、創(chuàng)建表:

建表語句的語法格式:

createtable表名(

字段名1數(shù)據(jù)類型,

字段名2數(shù)據(jù)類型,

字段名3數(shù)據(jù)類型,

);

關(guān)于MySQL當(dāng)中字段的數(shù)據(jù)類型?以下只說常見的

int整數(shù)型(java中的int)

bigint長整型(java中的long)

float浮點(diǎn)型(java中的floatdouble)

char定長字符串(String)

varchar可變長字符串(StringBuffer/StringBuilder)

date日期類型(對(duì)應(yīng)Java中的java.sql.Date類型)

BLOB二進(jìn)制大對(duì)象(存儲(chǔ)圖片、視頻等流媒體信息)BinaryLargeOBject

(對(duì)應(yīng)java中的Object)

CLOB字符大對(duì)象(存儲(chǔ)較大文本,比如,可以存儲(chǔ)4G的字符串。)Character

LargeOBject(對(duì)應(yīng)java中的Object)

char和varchar怎么選擇?

在實(shí)際的開發(fā)中,當(dāng)某個(gè)字段中的數(shù)據(jù)長度不發(fā)生改變的時(shí)候,是定長的,例如:

性別、生日等都是采用char。

當(dāng)一個(gè)字段的數(shù)據(jù)長度不確定,例如:簡介、姓名等都是采用varchar。

BLOB和CLOB類型的使用?

電影表:t_movie

id(int)name(varchar)playtime(date/char)haibao(BLOB)

history(CLOB)

1蜘蛛俠

2

3

表名在數(shù)據(jù)庫當(dāng)中一般建議以:t_或者tbl_開始。

創(chuàng)建學(xué)生表:

學(xué)生信息包括:

學(xué)號(hào)、姓名、性別、班級(jí)編號(hào)、生日

學(xué)號(hào):bigint

姓名:varchar

性別:char

班級(jí)編號(hào):int

生日:char

createtablet_student(

nobigint,

namevarchar(255),

sexchar(l),

classnovarchar(255),

birthchar(10)

);

7、insert語句插入數(shù)據(jù)

語法格式:

insertinto表名(字段名1,字段名2,字段名3,…Jvalues(值1,值2,值3,?…)

要求:字段的數(shù)量和值的數(shù)量相同,并且數(shù)據(jù)類型要對(duì)應(yīng)相同。

insertintot_student(no,name,sex,classno,birth)valuesfl/zhangsan'/l'/gaosanlban*);

ERROR1136(21S01):Columncountdoesn'tmatchvaluecountatrow1

,

insertintot_student(no,name,sex,classno,birth)values(l/zhangsan'/l','gaosanlban'/

'1950-10-12');

mysql>select*fromt_student;

|no|name|sex|classno|birth

|1|zhangsan|1|gaosanlban|1950-10-12|

++++++

insertintot_student(name,sex,classno,birth,no)valuesClisi'/l'/'gaosanlban,,

'1950-10-12',2);

mysql>select*fromt_student;

++++++

|no|name|sex|classno|birth

|1|zhangsan|1|gaosanlban|1950-10-12|

|2|lisi|1|gaosanlban|1950-10-12|

++++++

insertintot_student(name)values('wangwu');//除name字段之外,剩下的所有字段自動(dòng)

插入NULLc

mysql>select*fromt_student;

+++++

|no|name|sex|classno|birth

++++++

|1|zhangsan|1|gaosanlban|1950-10-12|

|2|lisi|1|gaosanlban|1950-10-12|

|NULL|wangwu|NULL|NULL|NULL

insertintot_student(no)values(3);

mysql>select*fromt_student;

++++++

|no|name|sex|classno|birth|

++++++

|1|zhangsan|1|gaosanlban|1950-10-12|

|2|lisi|1|gaosanlban|1950-10-12|

|NULL|wangwu|NULL|NULL|NULL

|3|NULL|NULL|NULL|NULL

++++++

droptableifexistst_student;//當(dāng)這個(gè)表存在的話刪除。

createtablet_student(

nobigint,

namevarchar(255),

sexchar(l)default1,

classnovarchar(255),

birthchar(10)

);

insertintot_student(name)values('zhangsan');

mysql>select*fromt_student;

Ino|name|sex|classno|birth|

|NULL|zhangsan|1|NULL|NULL|

++++++

需要注意的地方:

當(dāng)一條insert語句執(zhí)行成功之后,表格當(dāng)中必然會(huì)多一行記錄。

即使多的這一行記錄當(dāng)中某些字段是NULL,后期也沒有辦法在執(zhí)行

insert語句插入數(shù)據(jù)了,只能使用update進(jìn)行更新。

//字段可以省略不寫,但是后面的value對(duì)數(shù)量和順序都有要求。

insertintot_studentvalues(l,,jack',,07gaosan2ban71986-10-23,);

mysql>select*fromt_student;

++++++

|no|name|sex|classno|birth|

++++++

|NULL|zhangsan|1|NULL|NULL|

|1|jack|0|gaosan2ban|1986-10-23|

++++++

insertintot__studentvalues(l/jack707gaosan2ban');

ERROR1136(21S01):Columncountdoesn'tmatchvaluecountatrow1

//一次插入多行數(shù)據(jù)

insertintot_student

(no,name,sex,classno,birth)

values

,;,;,;,,,;,

(37rose'lgaosi2ban1952-12-14),(4zlaotiel,^3051263071955-12-14');

mysql>select*fromt_student;

+++一一+++

|no|name|sex|classno|birth

+++一一十++

|NULL|zhangsan|1|NULL|NULL

|1|jack|0|gaosan2ban|1986-10-23

|3|rose11|gaosi2ban|1952-12-14

|4|laotie11|gaosi2ban|1955-12-14|

8、表的復(fù)制

語法:

createtable表名asselect語句;

將查詢結(jié)果當(dāng)做表創(chuàng)建出來。

9、將查詢結(jié)果插入到一張表中?

mysql>insertintodeptlselect*fromdept;

mysql>select*fromdeptl;

++++

IDEPTNO|DNAME|LOC

+-■+—++

110|ACCOUNTING|NEWYORK

120|RESEARCH|DALLAS

130|SALES|CHICAGO

140|OPERATIONS|BOSTON

11

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論