如标题,这篇想和大家聊聊如何用SQL的语法做资料库的查询
请注意,SQL的函数皆为「全大写的英文字母」
以下资料表和范例是我之前练习过的题目,看起来有点复杂,但其实用法很固定,其格式也大同小异
首先,这里有三张资料表,由上到下依序为employees
、members
、transactions
employees:
members:
transactions:
现在我们点击上方的「SQL」,会看到一个输入程序的执行框,在此输入完按执行即可
现在,我们会使用以上三张资料表的资料做「查询」,并且透过以下六个范例来解释SQL的语法架构
每次查询完都会跑出一张「新的资料表」,至於跑出什麽内容,全看你的语法怎麽下
Ex 1:
首先,你会看到SELECT
和FROM
SELECT是用来「取得」资料表里的资料,其写的名称即为新资料表的栏位名称
FROM则表示要从「哪个」资料表里取得资料
这里SELECT为*
,FROM为employees
,表示将从employees这张资料表里,查询「全部栏位」的资料
所以它印出的新资料表会和「原本」的资料表employees
一样:
Ex 2:
这里我们把栏位名称分别打出来
但请注意(salary*12) as annual_salary
这行,意思是,对资料表employees的salary
这个栏位*12倍
,并将结果存在annual_salary
这个栏位里
所以annual_salary
这个栏位的资料会等於salary*12倍
Ex 3:
这里多了WHERE
和ORDER BY
WHERE的後面写的是「欲查询的条件」有哪些
ORDER BY则表示要从哪个栏位的资料去做「排序」,预设为「由小排到大」,如果在栏位名称後面加上DESC
,则表示「由大排到小」
这里WHERE为(age<=30) AND (position IN (‘主管’, ’职员’))
,表示将从employees这张资料表里的栏位age
取小於等於30
的资料,且在栏位position里是主管or职员
的资料,因为是AND
,故需「两者皆符合」才印出
ORDER BY salary DESC
则表示依照salary
这个栏位的资料,依序由大排到小
所以它印出的结果只有position是主管、职员
,且age小於等於30
的资料
Ex 4:
这里我们FROM了两张资料表,分别是transactions
和members
请注意看SELECT的members.name as name
,意思是,「新资料表」的栏位name
的资料是从资料表members里的栏位name
获得的,其余「皆」是从资料表transactions
里获得的
所以,如果想「指定」哪张资料表的哪个栏位,只要加上.
就好,ex: members.name
这里WHERE表示transTime
须为’2020-03-17 21:36:18’
且transaction.transMid = members.mid
,才将其印出
ORDER BY则指定依members.mid
这个栏位的资料,依序由大排到小
所以它印出的transTIme的资料皆为2020-03-17 21:36:18
Ex 5:
这里多了EXTRACT()
EXTRACT()函数是用来取出日期or时间
中的特定部分,语法为:EXTRACT(欲取得的部分 as 栏位名称)
,在「欲取得的部分」需全部为「大写的英文字母」
这里分别要取出transactions里的栏位transTime
的year、month、day,所以在EXTRACT()里的「欲取得的部分」则依序填入YEAR
、MONTH
、DAY
,再分别指向「新资料表」的栏位year、month、day
因为transactions这张资料表里的栏位transMid
里有编号1、2、3、4
,而members里的栏位mid
只有编号1、2、3
,所以在WHERE须加上transactions.transMid = members.mid
,以防印出在栏位transMid
为「编号4」的资料
这里可以看到tNo
里没有s141016
、s141017
,因为它们在栏位transMid
的编号为4
Ex 6:
这里多了COUNT()
和GROUP BY
COUNT()是计算此资料在资料表里出现的次数
GROUP BY为「群组指令」,那种算平均值
、最大最小值
、总和
……等需整个栏位做比较的,都需要用GROUP BY「指定」栏位名称
这里我们要计算在资料表members里的陈阿龙
、吴阿珠
、陈阿明
在资料表transactions里出现的次数为何,所以在WHERE要下transactions.transMid = members.mid
GROUP BY指定计算资料表transactions里的栏位transMid
ORDER BY先从新资料表里的栏位count
由大排到小,再从栏位name
由大排到小
结果如下图所示:
以上就是今天的介绍
看起来有点复杂,但SQL的查询其实就环绕着SELECT
、FROM
、WHERE
、ORDER BY
、GROUP BY
等
如果你能搞懂以上六个范例的语法架构,那你对SQL的查询语法架构大致上就没问题了,只是需要依照其他题目的要求去换函数做使用
如果对以上用法还不太清楚,可以去看一下我贴的参考资料喔!
里面对SQL的查询语法有很详尽的解说
>>: Day 18【Opensea.js】我的这把刀可是涂满了毒药的毒刃
ES6出现的Arrow function,看起来简短许多,但却充满许多陷阱(限制),所以充份了解箭头...
Purpose:运用’回呼函数Callback’,列举(筛选)子目录下符合档案 Enviro:Del...
挑战目标: MockNative Camp 最近不止工作还有很多事情要处理,今天只能先暂停一次。 之...
其实威尔猪本来没打算写 Filter,因为总觉得在一般情形下不太常会用到,但又觉得这好像也算是 T...
首先新增一个Fragment,名称为BlankFragment 再新增一个Package,名称为me...