2019-03-25 子查詢建表、(round、truncate)、字符串函數(shù)、日期函數(shù)、函數(shù)重點(diǎn)、多表查詢

子查詢建表

-- 子查詢建表 -->只繼承結(jié)構(gòu)跟數(shù)據(jù),不繼承約束
-- create table 表名 as SELECT...

-- 建一張空表
create table emp_copy
AS
select * from a=b;

函數(shù) 函數(shù)名(參數(shù))
虛表 dual

取絕對(duì)值
select abs(-19),abs(-20)
from dual

round、truncate

-- round (x,y)將x精確到小數(shù)點(diǎn)后y位,y如果省略,表示四舍五入到整數(shù)
select round (99.567,2)
from dual

-- truncate(x,y)截?cái)啵財(cái)嗟叫?shù)點(diǎn)y位,之后清零
select truncate (99.567,2)
from dual

字符串函數(shù)

-- 字符串函數(shù)
-- substr(str,pos,length)
-- str 操作字符串;pos是位置,length是截取長(zhǎng)度
-- 不能截取時(shí)間
select SUBSTR('helloeorld',2,3)
from dual

-- 姓名以s開頭
select ename ,substr(ename,1,1)
from emp
where SUBSTR(ename,1,1)='s'
-- 姓名以s,j,m開頭
select ename ,substr(ename,1,1)
from emp
where SUBSTR(ename,1,1) in ('s','j','m')

-- 顯示姓名為5個(gè)字符的
select ename
from emp
where length (ename)=5

concat 連接

日期函數(shù)

-- 日期函數(shù)
-- mysq15.6以后支持日期作為默認(rèn)值

-- curdate()和current date():獲得當(dāng)前日期函數(shù)
-- now():返回服務(wù)器當(dāng)前日期和時(shí)間

-- date_format(date,format):格式化日期
-- %Y       -->  年份
-- %m       -->  中文月份
-- %d       -->  日
-- %h(H)  -->  時(shí)12進(jìn)制(24進(jìn)制)
-- %i       -->  分
-- %s       -->  秒
select date_format(now(),'%y-%m-%d %h:%i:%s')
from dual

-- DATEDIFF(expr1,expr2):返回兩個(gè)日期相差天數(shù)
select hiredate ,DATEDIFF(curdate(),hiredate)
from emp

-- EXTRACT(unit FROM date) :提取時(shí)間 年(YEAR) 月(MONTH) 日(DAY) 時(shí)(hour) 分(minute) 秒(SECOND)
SELECT hiredate, EXTRACT(YEAR FROM hiredate)
from emp

-- TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)月份差

-- 如果員工試用期6個(gè)月,查詢職位不是MANAGER的員工姓名,入職日期,轉(zhuǎn)正日期,入職日期是第多少月

select ename,hiredate,DATE_ADD(hiredate,INTERVAL 6 MONTH) 轉(zhuǎn)正日期,EXTRACT(MONTH FROM hiredate) 
from emp
where job !='MANAGER'

函數(shù)重點(diǎn)

-- 函數(shù)
-- NOW() 年月日時(shí)分秒,CURDATE()年月日, CURTIME() 時(shí)分秒,返回系統(tǒng)當(dāng)前時(shí)間
-- DATE_FORMAT(date,format);格式化時(shí)間
-- %Y       -->  年份
-- %m       -->  中文月份
-- %d       -->  日
-- %h(H)          -->  時(shí)12進(jìn)制(24進(jìn)制)
-- %i       -->  分
-- %s       -->  秒

to_date('2012-11-7','yyyy-MM-dd')
字符串轉(zhuǎn)換為時(shí)間格式

-- 一般函數(shù)
-- SUBSTR(str,pos,len)
-- SUBSTR(str,pos)
-- ROUND(X,D),`TRUNCATE`(X,D)
-- 流程控制函數(shù)
-- case語(yǔ)句
-- case .. when .. then ...end
-- 查詢員工姓名,工資,部門編號(hào),部門名稱
select ename,sal,deptno,(case deptno 
                            when 10 then '開發(fā)部'
                            when 20 then '實(shí)施部'
                            when 30 then '測(cè)試部'
                            else '小賣部' end ) dename
from emp

====================================================
習(xí)題
-- 計(jì)算2000年1月1日到現(xiàn)在有多少月,多少周(四舍五入)
select TIMESTAMPDIFF(MONTH,'2000-1-1',NOW()),TIMESTAMPDIFF(WEEK,'2000-1-1',NOW())
FROM DUAL
-- 將員工工資按如下格式顯示:123,234.00 RMB 
select concat( sal,'rmb')
from emp
-- 查詢員工的姓名及其經(jīng)理編號(hào),要求對(duì)于沒有經(jīng)理的顯示“No Manager”字符串。
select ename,IFNULL(mar,'No Manager')
from emp

-- 將員工的參加工作日期按如下格式顯示:月份/年份
select ename,DATE_FORMAT(hiredate,'%m/%Y')
from emp


-- 在員工表中查詢出員工的工資,并計(jì)算應(yīng)交稅款:如果工資小于1000,稅率為0,
-- 如果工資大于等于1000并小于2000,稅率為10%,如果工資大于等于2000并小于3000,
-- 稅率為15%,如果工資大于等于3000,稅率為20%。

select sal, (case 
                                when sal<1000 then 0
                                when sal>=1000 and sal<2000 then sal*0.1
                                when sal>=2000 and sal<3000 then sal*0.15
                                else sal*0.2 end)tax
from emp

select sal,(case TRUNCATE(sal/1000,0)
                                when 0 then 0
                                when 1 then sal*0.1
                                when 2 then sal*0.15
                                else sal*0.2 end)tax
from emp 

復(fù)習(xí)要點(diǎn)

-- 1.
-- DATE_FORMAT(date,format)
-- NOW() CURDATE() CURTIME()

-- 2.
-- CASE..WHEN..THEN
-- IFNULL(expr1,expr2)
-- TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2),DATEDIFF(expr1,expr2)

-- 3.
-- CONCAT(str1,str2,...)
-- length,LPAD(str,len,padstr)|RPAD(str,len,padstr)

多表查詢

-- 涉及一張表以上,兩張表就會(huì)自動(dòng)發(fā)生連接
-- 連接規(guī)則:笛卡爾積,一張表的記錄與另一張表的記錄全部匹配的情況

-- 注意①同名必須加表名作為前綴;
--       ②涉及一張以上表,別落下連接條件,否則就會(huì)有笛卡爾積
--       ③表名可以起別名,方便寫前綴

-- 查詢所有員工編號(hào),姓名,部門編號(hào),工作地點(diǎn)
select empno,ename ,d.deptno,loc
from emp e,dept d
where e.deptno= d.deptno

練習(xí)題
=====================================================
-- 1.寫一個(gè)查詢,顯示所有員工姓名,部門編號(hào),部門名稱。
select ename,d.deptno,dname
from  emp e,dept d
where e.deptno=d.deptno

select ename,d.deptno,dname
from emp e
join dept d
on e.deptno=d.deptno

-- 2.寫一個(gè)查詢,顯示所有工作在CHICAGO并且獎(jiǎng)金不為空的員工姓名,工作地點(diǎn),獎(jiǎng)金
select ename,loc,comm
from emp e,dept d
where e.deptno=d.deptno and loc ='CHICAGO' and comm is not null

select ename,loc,comm
from emp e
join dept d
on e.deptno=d.deptno 
where loc ='CHICAGO' and comm is not null

-- 3.寫一個(gè)查詢,顯示所有姓名中含有A字符的員工姓名,工作地點(diǎn)。

select ename,loc
from emp e,dept d
where e.deptno=d.deptno and ename like '%A%'


select ename,loc,comm
from emp e
join dept d
on e.deptno=d.deptno 
where  ename like '%A%'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容