3

-- 1.單行函數(shù)
-- 每一行數(shù)據(jù)都會做為參數(shù)楼誓,得到自己對應的結(jié)果
-- 1.1 文本函數(shù)
-- 1.1.1 CHAR_LENGTH(s)返回文本s的字符(中文,英文名挥,數(shù)字疟羹,符號都算一個字符)個數(shù)(長度)
-- MySQL: CHAR_LENGTH(s) Oracle: LENGTH(s)
SELECT ename, CHAR_LENGTH(ename)
FROM emp;

-- 練習:查詢emp表中姓名字符長度超過4個的員工信息
SELECT *
FROM emp
WHERE CHAR_LENGTH(ename) > 4;

-- 1.1.2 CONCAT(s1,s2...sn) 將s1,s2...sn拼接在一起形成一個最終文本
-- MySQL: CONCAT(s1,s2...sn)
-- Oracle:CONCAT(s1,CONCAT(s2,s3)) 還可以 s1 || s2 || s3 ||...sn
-- 查詢員工姓名和月薪禀倔,顯示的格式為'XXX的月薪是XXXXX'
SELECT CONCAT(ename, '的月薪是' ,sal)
FROM emp;

SELECT CONCAT(ename, '的月薪是' ,IFNULL(comm,0))
FROM emp;

-- 練習:查詢員工姓名和入職日期榄融,顯示的格式為'XXX在XXXXX入職'
SELECT CONCAT(ename, '在', hiredate, '入職')
FROM emp;

-- 1.1.3 LOWER(s)和UPPER(s) 將參數(shù)s全部轉(zhuǎn)換為小寫/大寫字母
-- MySQL和Oracle的用法一致
-- Oracle中還有 INITCAP(s) 將s中所有單詞的首字母變成大寫,其余小寫
SELECT adress, LOWER(adress), UPPER(adress)
FROM locs;

-- 1.1.4 SUBSTR(s, start, length) 截取文本s救湖,從start位置起剃袍,截取length個字符
-- MySQL和Oracle的用法一致 start的位置都是從1開始
SELECT ename, SUBSTR(ename,1,2)
FROM emp;
-- 查詢emp表中job項最后三個字符是'MAN'的數(shù)據(jù)
SELECT *
FROM emp
WHERE SUBSTR(job,CHAR_LENGTH(job)-2,3) = 'MAN';

-- 1.1.4 TRIM(s) 去掉文本s兩側(cè)多余的空格
-- MySQL和Oracle的用法一致

SELECT ' abc def ', CHAR_LENGTH(' abc def ')

SELECT ' abc def ', CHAR_LENGTH(TRIM(' abc def '))

-- 1.2 數(shù)值函數(shù)
-- 1.2.1 CEIL(n)和FLOOR(n)和ROUND(n,m)
-- 進一法,退一法捎谨,四舍五入
SELECT CEIL(3.14), FLOOR(3.99), ROUND(12.5), ROUND(-12.5), ROUND(-12.4)

SELECT ROUND(12.15,1),ROUND(12.15,-1),ROUND(15.5,-2),ROUND(55.5,-2)
-- 1.2.2 MOD(x,y)計算x和y相除后的余數(shù)
SELECT MOD(5,3),MOD(5,-3),MOD(-5,3),MOD(-5,-3)
-- 1.2.3 POW(x,y)和SQRT(x) 計算x的y次冪 對x進行開方
SELECT POW(2,3), SQRT(16)

-- 1.3 日期函數(shù)
-- 1.3.1 CURDATE(),CURTIME(),NOW() 分別獲得當前的日期民效,時間憔维,完整日期時間
-- MySQL:CURDATE(),CURTIME(),NOW()
-- Oracle:sysdate select sysdate form dual; 相當于MySQL的select now()
-- dual表是一張空表,oracle中書寫select必須書寫from,dual表補全SQL語句
SELECT CURDATE(),CURTIME(),NOW()

SELECT SYSDATE();
SELECT SYSDATE() FROM DUAL;

-- 1.3.2 DATEDIFF(d1,d2):計算兩個日期之間的天數(shù) d1早于d2得到負數(shù)
-- MySQL DATEDIFF(d1,d2) 計算兩個日期之間的天數(shù)
-- Oracle MONTHS_BETWEEN(d1,d2) 計算兩個日期之間的月數(shù)
-- d1-d2 得到就是兩個日期之間的天數(shù)差
SELECT DATEDIFF('2019-07-10','2019-07-20')

SELECT DATEDIFF(NOW(),'1997-07-19')/365

SELECT ename, hiredate, DATEDIFF(CURDATE(),hiredate)/365
FROM emp;

-- 1.3.3 DATE_ADD(d, INTERVAL n TYPE):為時間d追加n個時間單位
-- TYPE: YEAR,MONTH,DAY,HOUR,MINUTE,SECOND
SELECT CURDATE(), DATE_ADD(CURDATE(),INTERVAL 1 YEAR), DATE_ADD(CURDATE(),INTERVAL 13 MONTH);

-- 練習:假設(shè)emp表中所有員工在入職6個月后轉(zhuǎn)正
SELECT ename, hiredate, DATE_ADD(hiredate, INTERVAL 6 MONTH)
FROM emp;

-- 1.3.4 LAST_DAY(d) 計算d日期所在月份的最后一天
SELECT LAST_DAY(CURDATE())
SELECT LAST_DAY('2012-02-14')

-- 練習:計算當前月份的倒數(shù)第三天
SELECT DATE_ADD(LAST_DAY(CURDATE()),INTERVAL -2 DAY)

-- 1.4 轉(zhuǎn)換函數(shù)
-- 1.4.1 STR_TO_DATE(s, fmt) 將文本s按照fmt格式轉(zhuǎn)換成日期類型
-- MySQL: STR_TO_DATE(s, fmt)
-- Oracle: TO_DATE(s, fmt)

-- fmt是一種文本畏邢,用于描述日期的格式
-- MySQL:
-- year: %Y 四位數(shù)年
-- month: %m 數(shù)字表示月份
-- day: %d 數(shù)字表示天數(shù)
-- hour: %H 24進制小時的數(shù)字表示
-- minute: %i 數(shù)字表示分鐘
-- second: %s 數(shù)字表示秒
-- week: %w 數(shù)字表示星期(0=星期日, 6=星期六)
-- %Y-%m-%d

-- Oracle:
-- year: yyyy 四位數(shù)年
-- month: mm 數(shù)字表示月份
-- day: dd 數(shù)字表示天數(shù)
-- hour: HH24 24進制小時的數(shù)字表示
-- minute: mi 數(shù)字表示分鐘
-- second: ss 數(shù)字表示秒
-- yyyy-mm-dd

SELECT LAST_DAY(STR_TO_DATE('02-14/2012','%m-%d/%Y'))
SELECT LAST_DAY(STR_TO_DATE('2012年02月14日','%Y年%m月%d日'))

-- 1.4.2 DATE_FORMAT(d, fmt) 將日期d按照fmt格式轉(zhuǎn)換成文本類型
-- MySQL: DATE_FORMAT(d, fmt)
-- Oracle: TO_CHAR(d, fmt)
-- 查詢員工姓名和入職日期业扒,按照'xxx的入職日期是xxxx年xx月xx日'顯示

SELECT CONCAT(ename,'的入職日期是', DATE_FORMAT(hiredate,'%Y年%m月%d日'))
FROM emp;

-- 練習:查詢員工姓名,入職日期舒萎,入職日期的格式為"xx月xx日xxxx年"
SELECT ename, DATE_FORMAT(hiredate,'%m月%d日%Y年')
FROM emp;

-- 1.5 其他函數(shù)
-- ifnull(expr1,expr2): 當expr1表達式的結(jié)果為null時程储,使用expr2的結(jié)果
-- MySQL:ifnull(expr1,expr2)
-- Oracle:nvl(expr1,expr2)
-- nvl2(expr1,expr2,expr3): 當expr1表達式的結(jié)果為null時,使用expr2的結(jié)果臂寝,否則使用expr3的結(jié)果

-- 1.查詢名字第二個字符是O的員工姓名章鲤,入職日期,顯示格式為'XXXX的入職日期是XXXXXX'
SELECT CONCAT(ename,'的入職日期是', hiredate)
FROM emp
WHERE SUBSTR(ename,2,1) = 'O' ;
-- 2.計算員工姓名和他的年收入咆贬,將年收入四舍五入精確至萬位
SELECT ename, ROUND((sal+IFNULL(comm,0))*12,-4)
FROM emp;
-- 3.查詢在‘1994年5月1日’至‘1994年9月15日’期間入職的員工信息
SELECT *
FROM emp
WHERE hiredate BETWEEN STR_TO_DATE('1994年5月1日','%Y年%m月%d日' ) AND STR_TO_DATE('1994年9月15日','%Y年%m月%d日' );

-- 2.分組函數(shù)
-- 多行數(shù)據(jù)(一組數(shù)據(jù))作為參數(shù)败徊,得到一個結(jié)果
-- 2.1 求和 sum(x) 對x列的數(shù)據(jù)進行求和計算,得到求和結(jié)果,x應該是表示數(shù)值列
SELECT SUM(sal)
FROM emp;
-- 2.2 平均 avg(x) 對x列的數(shù)據(jù)進行平均計算掏缎,得到平均值,x應該是表示數(shù)值列
SELECT AVG(sal)
FROM emp;

SELECT SUM(sal),AVG(sal)
FROM emp;
-- 2.3 計數(shù) count(x): 統(tǒng)計記錄數(shù)量,重復的數(shù)據(jù)會重復計算
-- 查詢月薪大于3000的員工數(shù)量
SELECT COUNT(*)
FROM emp
WHERE sal > 3000;

-- 2.4 最大 Max(x) 求得x列中的最大值
-- 2.5 最小 min(x) 求得x列中的最小值
-- 查詢月薪最高數(shù)和月薪最低數(shù)
SELECT MAX(sal), MIN(sal)
FROM emp

-- 查詢10號部門所有員工的平均月薪
SELECT AVG(sal)
FROM emp
WHERE deptno = 10;

-- 分組概念: 新的句式: group by x 以x列的數(shù)據(jù)分組統(tǒng)計數(shù)據(jù)
-- 書寫順序: select...from...where...group by...having...order by...
-- 執(zhí)行順序: from...where...group by...having...select...order by...
-- 查詢各個部門員工的平均月薪
SELECT deptno,AVG(sal)
FROM emp
GROUP BY deptno;
-- 只有在group by中出現(xiàn)的列皱蹦,才可以書寫在select中,否則在MySQL沒有意義
-- 在Oracle中直接報錯
-- 錯誤演示:ename在一個部門中沒有代表性
SELECT deptno,ename,AVG(sal)
FROM emp
GROUP BY deptno;

-- 查詢各部門中各職位的平均月薪
-- 在部門分組的前提下眷蜈,繼續(xù)對職位進行分組
SELECT deptno, job, AVG(sal)
FROM emp
GROUP BY deptno, job

-- 查詢平均月薪高于3000的部門編號和平均月薪
-- having: 專門用于對分組函數(shù)進行條件篩選

-- 錯誤演示:where在group by之前執(zhí)行沪哺,無法執(zhí)行分組函數(shù)AVG
SELECT deptno, AVG(sal)
FROM emp
WHERE AVG(sal) > 3000
GROUP BY deptno;

-- 正確演示
SELECT deptno, AVG(sal)
FROM emp
WHERE hiredate < CURDATE()
GROUP BY deptno
HAVING AVG(sal) BETWEEN 3000 AND 4000;

-- 相關(guān)子查詢:外部查詢一條數(shù)據(jù),內(nèi)部查詢執(zhí)行一次
SELECT *
FROM emp e
WHERE e.sal > (SELECT AVG(sal) FROM emp e1 WHERE e1.deptno = e.deptno)

-- 創(chuàng)建視圖
CREATE VIEW emp_view
AS
SELECT e.*,d.dname,d.loc
FROM emp e LEFT JOIN dept d ON(e.deptno = d.deptno)

-- 使用視圖
SELECT * FROM emp_view;

-- 修改視圖
CREATE OR REPLACE VIEW emp_view
AS
SELECT e.*,d.dname,l.loc,l.adress,l.country
FROM emp e
LEFT JOIN dept d ON(e.deptno = d.deptno)
LEFT JOIN locs l ON(d.loc = l.loc);

-- 刪除視圖
DROP VIEW emp_view;

SELECT t.ename, t.dname, t.adress
FROM emp_view t;

CREATE OR REPLACE VIEW emp10
AS
SELECT empno,ename,job,mgr,hiredate,deptno FROM emp WHERE deptno = 10;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酌儒,一起剝皮案震驚了整個濱河市辜妓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忌怎,老刑警劉巖嫌拣,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呆躲,居然都是意外死亡,警方通過查閱死者的電腦和手機捶索,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門插掂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腥例,你說我怎么就攤上這事辅甥。” “怎么了燎竖?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵璃弄,是天一觀的道長。 經(jīng)常有香客問我构回,道長夏块,這世上最難降的妖魔是什么疏咐? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮脐供,結(jié)果婚禮上浑塞,老公的妹妹穿的比我還像新娘。我一直安慰自己政己,他們只是感情好酌壕,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歇由,像睡著了一般卵牍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沦泌,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天糊昙,我揣著相機與錄音,去河邊找鬼赦肃。 笑死溅蛉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的他宛。 我是一名探鬼主播船侧,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼厅各!你這毒婦竟也來了镜撩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤队塘,失蹤者是張志新(化名)和其女友劉穎袁梗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憔古,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡遮怜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸿市。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锯梁。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖焰情,靈堂內(nèi)的尸體忽然破棺而出陌凳,到底是詐尸還是另有隱情,我是刑警寧澤内舟,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布合敦,位于F島的核電站,受9級特大地震影響验游,放射性物質(zhì)發(fā)生泄漏充岛。R本人自食惡果不足惜保檐,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裸准。 院中可真熱鬧展东,春花似錦、人聲如沸炒俱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽权悟。三九已至砸王,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峦阁,已是汗流浹背谦铃。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留榔昔,地道東北人驹闰。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像撒会,于是被迫代替她去往敵國和親嘹朗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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

  • 1. select * from emp; 2. select empno, ename, job from em...
    海納百川_4d26閱讀 1,904評論 0 4
  • 1.簡介 數(shù)據(jù)存儲有哪些方式诵肛?電子表格屹培,紙質(zhì)文件,數(shù)據(jù)庫怔檩。 那么究竟什么是關(guān)系型數(shù)據(jù)庫褪秀? 目前對數(shù)據(jù)庫的分類主要是...
    喬震閱讀 1,715評論 0 2
  • 引出 ?請思考如下問題? –查詢所有員工的每個月工資總和薛训,平均工資媒吗? –查詢工資最高和最低的工資是多少? –查詢公...
    C_cole閱讀 7,288評論 0 3
  • -- 查詢所有工作在new york 和chicago的員工姓名 員工編號 以及它們的經(jīng)理姓名 經(jīng)理編號 sele...
    沫忘丶閱讀 734評論 0 0
  • 用法一乙埃、浪漫玫瑰香花浴 做法:倒一浴缸溫水闸英,滴入8-10滴玫瑰精油,在浴缸中泡浴15-20分鐘膊爪,使全身每一個細胞都...
    龍口人淡如蘭閱讀 956評論 0 0