第四章 簡(jiǎn)單查詢(5課時(shí) 0913)

基本SELECT語(yǔ)句語(yǔ)法


SELECT子句 表示所需檢索的數(shù)據(jù)列坛芽。

FROM子句 表示檢索的數(shù)據(jù)來(lái)自哪個(gè)表冠蒋。

語(yǔ)句(statement):一條完整的SQL命令如:

select * from emp;

–子句(clause):部分的SQL語(yǔ)句亡资,通常是由關(guān)鍵字加上其它語(yǔ)法元素構(gòu)成疚俱,例如渴杆,SELECT

* 是一個(gè)子句挠羔,F(xiàn)ROM table也是一個(gè)子句墓陈。

SQL語(yǔ)句的書寫規(guī)則

–不區(qū)分大小寫恶守,也就是說(shuō)SELECT,select贡必,Select兔港,執(zhí)行時(shí)效果是一樣的。

–可以單行來(lái)書寫仔拟,也可以書寫多行衫樊,建議分多行書寫,增強(qiáng)代碼可讀性利花,通常以子句為單位進(jìn)行分行科侈。

–關(guān)鍵字不可以縮寫、分開(kāi)以及跨行書寫炒事,如SELECT不可以寫成SEL或SELE

CT等形式兑徘。

–關(guān)鍵字最好使用大寫,其它語(yǔ)法元素(如列名羡洛、表名等)小寫挂脑。

–Tab和縮進(jìn)的使用可以提高程序的可讀性藕漱。

?選擇所有列的兩種方式

select * from 表名;

select deptno,dname,loc from dept;

練習(xí):

用兩種方式查詢salgrade表數(shù)據(jù)

選擇指定列

select 語(yǔ)句后列出要選擇的列的列表

如:select deptno,dname from dept;

練習(xí)1

?1.使用兩種方式查詢所有員工(EMP)信息

?2.查詢(EMP)員工編號(hào)、員工姓名崭闲、員工職位肋联、員工月薪、工作部門編號(hào)刁俭。

算術(shù)運(yùn)算符(+-*/)

算術(shù)運(yùn)算符優(yōu)先級(jí)

–乘除優(yōu)先于加減

–相同優(yōu)先權(quán)的表達(dá)式按照從左至右的順序依次計(jì)算

–括弧可以提高優(yōu)先權(quán)橄仍,并使表達(dá)式的描述更為清晰

例:SELECT ename, sal, 12*sal+100? FROM?? emp;

SELECT ename, sal, 12*(sal+100);

練習(xí)2


?1.員工轉(zhuǎn)正后,月薪上調(diào)20%牍戚,請(qǐng)查詢出所有員工轉(zhuǎn)正后的月薪侮繁。


?2.員工試用期6個(gè)月,轉(zhuǎn)正后月薪上調(diào)20%如孝,請(qǐng)查詢出所有員工工作第一年的年薪所得(不考慮獎(jiǎng)金部分,年薪的試用期6個(gè)月的月薪+轉(zhuǎn)正后6個(gè)月的月薪)


空值NULL

?空值NULL

–空值是指一種無(wú)效的宪哩、未賦值、未知的或不可用的值第晰。

–空值不同于零或者空格锁孟。

注意:任何包含空值的算術(shù)表達(dá)式運(yùn)算后的結(jié)果都為空值NULL。

1 select ename, 12*sal+comm

? 2? from?? emp

? 3? WHERE? ename='KING';

解決空值的方法

IFNULL函數(shù)

ifnull(expr1,expr2) ifnull函數(shù)如果第一個(gè)參數(shù)為空茁瘦,則返回expr2,否則返回expr1

上面語(yǔ)句改寫:

select ename,12*sal+ifnull(comm,0)

from emp

where ename='KING';

列別名

兩種寫法:

列名 as 列別名

列名 列別名

例:SELECT ename AS 姓名, sal 月薪

? FROM?? emp;

練習(xí)3

?員工試用期6個(gè)月品抽,轉(zhuǎn)正后月薪上調(diào)20%,請(qǐng)查詢出所有員工工作第一年的所有收入(需考慮獎(jiǎng)金部分)甜熔,要求顯示列標(biāo)題為員工姓名圆恤,工資收入,獎(jiǎng)金收入腔稀,總收入盆昙。

消除重復(fù)行

distinct關(guān)鍵字,在select 子句中使用

select distinct job from emp;

練習(xí)4

查詢員工表中一共有哪幾種崗位類型。

顯示表結(jié)構(gòu)兩種方式

desc 表名:

describe 表名:

練習(xí)5

分別查看員工表烧颖、部門表弱左、薪資等級(jí)表的表結(jié)構(gòu)窄陡。

*where子句

作用:指定查詢條件炕淮,限制顯示的數(shù)據(jù)行

語(yǔ)法:

SELECT [DISTINCT] {*| column | expression [alias], ...}

FROM ??table

[WHERE condition(s)];

?WHERE子句緊跟在FROM子句之后

?condition(s)表示條件表達(dá)式,

–通常格式為:列名 比較操作符 要比較的值

?比較操作符(> = <? ? > =? <= != <>)

比較數(shù)字相等

SELECT ename, job, deptno

? ?FROM?? emp

? WHERE? deptno=20;

比較字符或日期相等

字符串值需要加單引號(hào)

SELECT ename, job, deptno

? ?FROM?? emp

?WHERE?job='CLERK';

日期可以加單引也可以不加跳夭,不加單引時(shí)涂圆,合法的日期格式是yyyyMMdd/yyMMdd

-- 查詢1981-05-01之前入職的員工

select *

from emp

where HIREDATE<'1981-05-01'

select *

from emp

where HIREDATE<'19810501'

select *

from emp

where HIREDATE<19810501


特殊比較運(yùn)算符

?BETWEEN..AND..

值介于兩者之章,包括臨界值

如:查詢工資在1000到1500之間的員工信息

SELECT? *

? ?FROM? emp

? WHERE? sal BETWEEN 1000 AND 1500;

查詢1981年入職的員工信息

select *

from emp

where hiredate?BETWEEN? ‘1981-01-01’ AND ‘1981-12-31’

?IN運(yùn)算符

滿足條件的值比較多币叹,圈定一個(gè)范圍润歉,用in

如:查詢經(jīng)理編號(hào)為7902,7566,7788的員工信息

SELECT? empno, ename, sal, mgr

? ? FROM? emp

? ?WHERE? mgr IN (7902, 7566, 7788);

查詢?cè)?0,20,30號(hào)部門工作的員工信息

select *

from emp

where deptno in(10,20,30);

練習(xí)7

-- 1.查詢?nèi)肼毴掌谠?2年至85年的員工姓名,入職日期颈抚。

SELECT ename,hiredate FROM emp WHERE HIREDATE BETWEEN '1982-01-01' AND '1985-12-31'

-- ?2.查詢?cè)滦皆?000到5000的員工姓名踩衩,月薪。

SELECT ename,sal

from emp

where sal BETWEEN 3000 and 5000

-- ?3.查詢部門編號(hào)為10或者20的員工姓名,部門編號(hào)驱富。

SELECT ename,deptno

FROM emp

WHERE DEPTNO IN(10,20)

-- ?4.查詢經(jīng)理編號(hào)為7902, 7566, 7788的員工姓名锚赤,經(jīng)理編號(hào)。

SELECT ENAME,MGR

FROM emp

WHERE MGR in(7902,7566,7788)

特殊比較運(yùn)算符

?LIKE運(yùn)算符*

重要褐鸥,用于模糊查詢

–模糊查詢中兩個(gè)通配符:

–%代表零或任意更多的字符

–_代表一個(gè)字符

%與_可混用

可以使用ESCAPE標(biāo)識(shí)符實(shí)現(xiàn)對(duì)“%”和“_”的查找线脚。

–例:查詢JOB 以“MAN_”開(kāi)頭的雇員信息。

1 )查詢指定字符開(kāi)頭的用‘s%’

2)查詢指定字符結(jié)尾的用'%s'

3)查詢包含指定字符的用'%S%'

SELECT? ename,job

? ?FROM? emp

? WHERE? jobLIKE 'MAN@_%' ESCAPE '@';


查詢姓名倒數(shù)第三個(gè)字母為M的并且正數(shù)第三個(gè)也是M員工信息

SELECT *

FROM emp

WHERE ENAME LIKE '__M__'

OR ENAME LIKE '__M%M__';

SELECT *

FROM emp

WHERE ENAME LIKE '__M%' AND ENAME LIKE '%M__';

?IS NULL 運(yùn)算符

判斷要比較的值是否為空值NULL

如:查詢沒(méi)有經(jīng)理的員工

SELECT? ename, mgr

? ? FROM???emp

? ? WHERE??mgr IS NULL;

練習(xí)8

?1.查詢員工姓名以W開(kāi)頭的員工姓名叫榕。

select ename from emp where ename like 'w%';

?2.查詢員工姓名倒數(shù)第2個(gè)字符為T的員工姓名浑侥。

select ename from emp where ename like '%t_';

?3.查詢獎(jiǎng)金為空的員工姓名,獎(jiǎng)金晰绎。

SELECT ename, comm

FROM emp

WHERE comm is NULL;

邏輯運(yùn)算符

用于連接多個(gè)查詢條件

邏輯運(yùn)算符包括AND寓落、OR、NOT

?and (和,多個(gè)條件需要同時(shí)滿足)? ?

or(或者 多個(gè)條件滿足其中一個(gè))??

not(不是 反選 )


查詢部門編號(hào)為10或者20寒匙,并且姓名以w開(kāi)頭的員工信息

select *

from emp

where deptno in(10,20) and ename like 'w%';

查詢工資大于1000并且工作崗位為CLERK的員工信息

SELECT empno, ename, job, sal

? ? FROM?? emp

? ?WHERE? sal>=1000

? ? AND???job='CLERK';

查詢工資大于1000或者工作崗位為CLERK的員工信息

SELECT empno, ename, job, sal

? ? FROM?? emp

? ?WHERE? sal>=1000

? ? OR job='CLERK';

查詢工資大于1000或者工作崗位不為CLERK,MANAGER的員工信息

SELECT ename, job

? ?FROM?? emp

? ? WHERE?? sal>=1000 or

?job NOT IN ('CLERK','MANAGER','ANALYST');

–NOT運(yùn)算符可以和BETWEEN…AND零如、LIKE、IS NULL一起使用

?...WHERE deptno NOT IN (10, 20)

?...WHERE sal NOT BETWEEN 3000 AND 5000

?...WHERE ename NOT LIKE 'D%’

?...WHERE mgr IS NOT NULL


?運(yùn)算符的優(yōu)先級(jí)*

小括號(hào)優(yōu)先锄弱,實(shí)在記不住考蕾,用小括號(hào)括起

練習(xí)9

?1.查詢工資超過(guò)2000并且職位是MANAGER,或者職位是SALESMAN的員工姓名、職位会宪、工資

SELECT ENAME,JOB,SAL

FROM emp

WHERE SAL>2000 AND JOB='manager' or JOB='salesman'


?2.查詢工資超過(guò)2000并且職位是MANAGER或SALESMAN的員工姓名肖卧、職位、工資掸鹅。

SELECT ENAME,JOB,SAL

FROM emp

WHERE SAL>2000 AND (JOB='manager' or JOB='salesman')

?3.查詢部門在10或者20塞帐,并且工資在3000到5000之間的員工姓名、部門巍沙、工資葵姥。

select ename,deptno,sal

from emp

where? (deptno=10 or deptno=20) and sal BETWEEN 3000 and 5000;

?4.查詢?nèi)肼毴掌谠?1年,并且職位不是SALES開(kāi)頭的員工姓名句携、入職日期榔幸、職位。

select ename,hiredate,job from emp

where hiredate between '1981-01-01' and '1981-12-31'

and job not like 'sales%'


?5.查詢職位為SALESMAN或MANAGER矮嫉,部門編號(hào)為10或者20削咆,姓名包含A的員工姓名、職位蠢笋、部門編號(hào)拨齐。

SELECT ename,job,deptno

FROM emp

where job in('salesman','manager') and deptno in(10,20)

and ename like '%A%';


ORDER BY子句

對(duì)查詢結(jié)果進(jìn)行排序,寫在所有子句后

?其中:

–可以按照列名昨寞、表達(dá)式瞻惋、列別名厦滤、結(jié)果集的列序號(hào)排序

–ASC: 升序,默認(rèn)值 DESC: 降序

–ORDER BY 子句必須寫在SELECT語(yǔ)句的最后

如:

SELECT ename, job, deptno, hiredate,sal

FROM? ? ? emp

ORDER BY sal asc,hiredate DESC;


其結(jié)果先按薪水升序排序歼狼,薪水相同的再按出生日期降序

asc:升序 正序

desc :倒序 逆序


練習(xí)10


1.查詢部門在20或30的員工姓名馁害,部門編號(hào),并按照工資升序排序蹂匹。

SELECT ENAME,DEPTNO

FROM EMP

WHERE DEPTNO=20 OR DEPTNO=30

ORDER BY SAL ASC

2.查詢工資在2000-3000之間碘菜,部門不在10號(hào)的員工姓名,部門編號(hào)限寞,工資忍啸,并按照部門升序,工資降序排序履植。

SELECT ename,deptno,sal

FROM emp

where sal BETWEEN 2000 and 3000

and deptno <>10

ORDER BY deptno,sal DESC

3.查詢?nèi)肼毴掌谠?1年至83年之間计雌,職位以SALES或者M(jìn)AN開(kāi)頭的員工姓名,入職日期玫霎,職位凿滤,

并按照入職日期降序排序。

SELECT ename,hiredate,job

FROM emp

WHERE hiredate BETWEEN '1981-01-01' AND '1983-12-31'

AND (job like 'SALES%'

OR job like 'MAN%')

ORDER BY hiredate DESC


作業(yè):

練習(xí)6:

?1.查詢職位為SALESMAN的員工編號(hào)庶近、職位翁脆、入職日期。

select empno,job,hiredate

from emp

where job='SALESMAN'

?2.查詢1985年12月31日之前入職的員工姓名及入職日期鼻种。

select ename,hiredate

from emp

where hiredate <'1985-12-31'

?3.查詢部門編號(hào)不在10部門的員工姓名反番、部門編號(hào)。

select ename,deptno

from emp

where deptno <>10

課后習(xí)題:

-- 課后作業(yè)

1.查詢?nèi)肼殨r(shí)間在1982-7-9之后叉钥,并且不從事SALESMAN工作的員工姓名罢缸、入職時(shí)間、職位投队。

select ename,hiredate,job

from emp

where hiredate > '1982-07-09'

and job != 'SALESMAN'

2.查詢員工姓名的第三個(gè)字母是a的員工姓名枫疆。\

select ename

from emp

where ename like '__a%'

3.查詢除了10、20號(hào)部門以外的員工姓名敷鸦、部門編號(hào)息楔。

select ename,deptno

from emp

where deptno not in (10,20)

4.查詢部門號(hào)為30號(hào)員工的信息,先按工資降序排序轧膘,再按姓名升序排序钞螟。

select ename,deptno,sal

from emp

where deptno=30

ORDER BY sal DESC,ename ASC

5.查詢沒(méi)有上級(jí)的員工(經(jīng)理號(hào)為空)的員工姓名兔甘。

SELECT ename

FROM emp

WHERE mgr IS NULL

6.查詢工資大于等于4500并且部門為10或者20的員工的姓名\工資谎碍、部門編號(hào)。

SELECT ename,sal,deptno

FROM emp

where sal>=4500

AND (deptno=10

or deptno=20)

分頁(yè):

?使用select語(yǔ)句時(shí)洞焙,經(jīng)常要返回前幾條或者中間某幾行記錄蟆淀,可以使用關(guān)鍵字limit拯啦。語(yǔ)法格式如下:

select 字段列表

from 數(shù)據(jù)源

limit [start,]length;

start=(當(dāng)前頁(yè)碼-1)*每頁(yè)條數(shù)

以每頁(yè)5條為例

--第1頁(yè)? start=(1-1)*5=0

select * from emp limit 0,5;? ??

-- 第2頁(yè)?start=0=(2-1)*5=5

select * from emp limit 5,5;

-- 第3頁(yè)?start=0=(3-1)*5=10

SELECT * from emp limit 10,5;

## ordery by和limit的順序 ##?

limit在order by后面

SELECT * from emp order by empno limit 10,5 ;

作業(yè):

第4章 練習(xí)10,練習(xí)11和課后作業(yè)

練習(xí)10

?1.查詢部門在20或30的員工姓名熔任,部門編號(hào)褒链,并按照工資升序排序。

?2.查詢工資在2000-3000之間疑苔,部門不在10號(hào)的員工姓名甫匹,部門編號(hào),工資惦费,并按照部門升序兵迅,工資降序排序。

?3.查詢?nèi)肼毴掌谠?2年至83年之間薪贫,職位以SALES或者M(jìn)AN開(kāi)頭的員工姓名恍箭,入職日期,職位瞧省,并按照入職日期降序排序扯夭。

練習(xí)11

?1.查詢?nèi)肼毴掌谧钤绲那?名員工姓名,入職日期鞍匾。

SELECT ename,hiredate

from emp

ORDER BY HIREDATE

LIMIT 0,5;

?2.查詢部門編號(hào)為10并且入職日期最早的前2名員工姓名交洗,入職日期。

SELECT ename,hiredate

from emp

WHERE deptno=10

ORDER BY HIREDATE

LIMIT 0,2;

?3.按照每頁(yè)顯示5條記錄橡淑,分別查詢第1頁(yè)藕筋,第2頁(yè),第3頁(yè)信息梳码,要求顯示員工姓名隐圾、入職日期、部門編號(hào)掰茶。

SELECT ename,hiredate,deptno FROM emp

LIMIT 0,5;


SELECT ename,hiredate,deptno FROM emp

LIMIT 5,5;


預(yù)習(xí):第5章 字符串函數(shù)暇藏、日期函數(shù)、數(shù)學(xué)函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末濒蒋,一起剝皮案震驚了整個(gè)濱河市盐碱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沪伙,老刑警劉巖瓮顽,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異围橡,居然都是意外死亡暖混,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門翁授,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拣播,“玉大人晾咪,你說(shuō)我怎么就攤上這事≈洌” “怎么了谍倦?”我有些...
    開(kāi)封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)泪勒。 經(jīng)常有香客問(wèn)我昼蛀,道長(zhǎng),這世上最難降的妖魔是什么圆存? 我笑而不...
    開(kāi)封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任曹洽,我火速辦了婚禮,結(jié)果婚禮上辽剧,老公的妹妹穿的比我還像新娘送淆。我一直安慰自己,他們只是感情好怕轿,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布偷崩。 她就那樣靜靜地躺著,像睡著了一般撞羽。 火紅的嫁衣襯著肌膚如雪阐斜。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天诀紊,我揣著相機(jī)與錄音谒出,去河邊找鬼。 笑死邻奠,一個(gè)胖子當(dāng)著我的面吹牛笤喳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碌宴,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼杀狡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了贰镣?” 一聲冷哼從身側(cè)響起呜象,我...
    開(kāi)封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碑隆,沒(méi)想到半個(gè)月后恭陡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡上煤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年休玩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哥捕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嘉熊,到底是詐尸還是另有隱情遥赚,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布阐肤,位于F島的核電站凫佛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏孕惜。R本人自食惡果不足惜愧薛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衫画。 院中可真熱鬧毫炉,春花似錦、人聲如沸削罩。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)弥激。三九已至进陡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間微服,已是汗流浹背趾疚。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留以蕴,地道東北人糙麦。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丛肮,于是被迫代替她去往敵國(guó)和親喳资。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容