版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年甲乙雙方關(guān)于虛擬現(xiàn)實(shí)旅游項(xiàng)目投資與合作協(xié)議
- 2024年版:解除婚約財(cái)產(chǎn)補(bǔ)償協(xié)議
- 銷售合同范文匯編9篇
- 超細(xì)磨剝機(jī)行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報(bào)告
- 銷售工作計(jì)劃范文合集7篇
- 中國襯套閥項(xiàng)目投資可行性研究報(bào)告
- 小學(xué)生演講稿范文【6篇】
- 漫畫漢服課程設(shè)計(jì)教案
- 六年級(jí)安全教育第一課教案
- 幼兒教育隨筆小班15篇
- 急性腎損傷患者的護(hù)理措施
- 小學(xué)學(xué)校發(fā)展三年規(guī)劃:傾力打造紅色品牌 努力構(gòu)建和諧學(xué)校
- 2024年全國網(wǎng)絡(luò)安全職工職業(yè)技能競賽備賽試題庫(含答案)
- 2020年會(huì)計(jì)繼續(xù)教育完整考試題庫1000題(答案)
- 2024年湖北省公務(wù)員錄用考試《行測》真題及答案解析
- 自然辯證法習(xí)題及答案
- 特色農(nóng)產(chǎn)品超市方案
- 2024國有企業(yè)與民營企業(yè)之間的混合所有制改革合同
- 2024年醫(yī)院食堂餐飲獨(dú)家承包協(xié)議
- 2025年蛇年年會(huì)匯報(bào)年終總結(jié)大會(huì)模板
- 《稻草人》閱讀題及答案
評(píng)論
0/150
提交評(píng)論