SQL第1/n篇(持續(xù)更新中)DQL基礎(chǔ)查詢語(yǔ)句

PS:絕不眼高手低,從基礎(chǔ)做起。咱也不知道sql語(yǔ)句寫(xiě)在哪里扑毡,就直接用代碼塊呈現(xiàn)了,這樣看起來(lái)方便一些盛险。
(1)先來(lái)講一些注意事項(xiàng):
選中Fn+F12格式化瞄摊。選中Fn+F9執(zhí)行。";"分割語(yǔ)句苦掘。雙擊字段快捷輸入换帜,這樣輸入時(shí)字段是著重號(hào)引起來(lái)。著重號(hào)一般用來(lái)區(qū)分是字段還是關(guān)鍵字鹤啡,是關(guān)鍵字的時(shí)候引起來(lái)惯驼,不是的時(shí)候可不用(手打時(shí))。
(2)表中字段含義:


表中字段含義.png

進(jìn)階一 查詢

語(yǔ)法:select 查詢列表 from 表名;
特點(diǎn):
1递瑰、可以查:字段祟牲、常量值、表達(dá)式抖部、函數(shù)
2说贝、查詢的結(jié)果是一個(gè)虛擬表格

#選用操作的庫(kù)
USE `myemployees`;
#顯示表的結(jié)構(gòu)
DESC `departments`;

#1.查詢字段
#連接字符串用concat
SELECT 
  CONCAT(`last_name`, '-',`first_name`) AS 姓名 
FROM
  `employees` ;
#去重 在一次執(zhí)行中只能去一個(gè)字段的重
SELECT DISTINCT `department_id` FROM `employees`;

#有null值返回指定值,不是null值顯示原值
SELECT `last_name`  姓,IFNULL(`commission_pct`,0) AS 獎(jiǎng)金率
FROM `employees` 

#2.查詢常量值

SELECT '粉紅狐貍'; #字符型和日期型要用單引號(hào)引起來(lái)慎颗,數(shù)值型不需要
SELECT '100';
SELECT 100;

#3.查詢表達(dá)式

SELECT 100%98 AS 取模;  
SELECT 100%98 余數(shù);#取別名可以用空格
SELECT 100%98 AS "out put";#別名為關(guān)鍵字建議雙引號(hào)引起來(lái)乡恕,單引號(hào)也可以
#4.查詢函數(shù)

SELECT VERSION();

#5.+在Mysql中只有一個(gè)功能:運(yùn)算符

SELECT 99+1; #兩個(gè)都是數(shù)值
SELECT '98'+1; #能轉(zhuǎn)換成數(shù)字的字符,試圖轉(zhuǎn)換成數(shù)字俯萎,再運(yùn)算
SELECT '粉紅狐貍'+1;#不能轉(zhuǎn)換成數(shù)字的字符傲宜,轉(zhuǎn)換成0,再運(yùn)算
SELECT  NULL+1;#只要有null結(jié)果就是null

進(jìn)階二 條件查詢

語(yǔ)法:select 查詢列表 from 表 where 篩選條件
執(zhí)行過(guò)程:先查表夫啊,再看條件函卒,再查詢
條件分類:
1、條件表達(dá)式:< > != <> (又大于又小于就是不等于,推薦寫(xiě)這個(gè))<= >=
2撇眯、邏輯運(yùn)算符(用于連接條件表達(dá)式):&& || 报嵌!躁愿,推薦寫(xiě) and or not
3、模糊查詢:
like :與通配符搭配查詢字符型或者數(shù)值型都可以沪蓬,%任意多個(gè)字符,說(shuō)不清是什么字符来候,包含0個(gè)字符 _只匹配一個(gè)字符 跷叉。 (如果字段里有null值,like+通配符是無(wú)法匹配的)
between and :取值區(qū)間[<= ,>=]
in|not in : 判斷字段是否在in的列表里营搅,不支持通配符查詢云挟,因?yàn)閕n等價(jià)于==
is null | is not null :只能判斷null值

#案例1:查詢工資在1萬(wàn)到2萬(wàn)之間的員工姓名,工資转质,獎(jiǎng)金
SELECT `last_name` ,`salary` ,`salary`*12*IFNULL(`commission_pct`,0) AS 獎(jiǎng)金
FROM `employees`
WHERE `salary` >=10000 AND `salary`<=20000;

SELECT `last_name` ,`salary` ,`salary`*12*(1+IFNULL(`commission_pct`,0)) AS 年薪
FROM `employees`
WHERE `salary` BETWEEN 10000 AND 20000; #between and 包含端點(diǎn)值园欣,臨界值順序不能顛倒

#案例2:查詢員工姓名中包含字符a的員工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';

#案例3:查詢員工姓名中第二個(gè)字符為"_"的員工信息
SELECT * FROM employees WHERE last_name LIKE '_\_%';
SELECT * FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';#escape 表示后面的字符是轉(zhuǎn)義字符,$可任意

#案例4:查詢工種編號(hào)為AD_PRES休蟹,AD_VP,IT_PROG的員工姓名和工種編號(hào)
SELECT last_name,job_id FROM employees WHERE job_id  IN ('AD_PRES','AD_VP','IT_PROG');

#查詢工種編號(hào)不為‘IT’的員工信息
SELECT * FROM employees WHERE job_id <> 'IT' ;#不能用is not 

#案例5:查詢有獎(jiǎng)金的員工姓名和獎(jiǎng)金率
SELECT last_name ,`commission_pct` FROM employees WHERE `commission_pct`IS NOT NULL;#= 或者<> 不能去判斷null值

#案例6:查詢沒(méi)有獎(jiǎng)金的員工姓名和獎(jiǎng)金率 安全等于<=>  等價(jià)于==
SELECT last_name ,`commission_pct` FROM employees WHERE `commission_pct` <=> NULL;
SELECT last_name ,salary FROM employees WHERE salary <=> 12000;
/* 
is null:只能判斷是否等于null值沸枯,可讀性高
   <=> :既能判斷是否是null值,也能判斷普通值赂弓,但可讀性差绑榴,建議用is null     
*/

進(jìn)階三 排序 order by 放在最后面

語(yǔ)法:select 查詢列表 from 表 where 條件 order by 排序列表 【asc|desc】
執(zhí)行順序:從哪個(gè)表篩選什么條件,再去查找盈魁,最后排序
特點(diǎn):默認(rèn)升序asc

#案例1.查詢部門(mén)編號(hào)>90,按照入職時(shí)間先后順序進(jìn)行排序
SELECT * FROM employees WHERE `department_id`>90 ORDER BY `hiredate`;#時(shí)間早的值較小

#案例2.查詢員工信息翔怎,按照入職時(shí)間先后順序、月薪和姓名長(zhǎng)度降序杨耙、進(jìn)行排序【怎么只能有兩個(gè)排序字段赤套?第三個(gè)不管用了呢】
SELECT `last_name`,`hiredate`,`salary`,LENGTH(last_name) 姓名長(zhǎng)度 
FROM employees  
ORDER BY `hiredate` ASC ,`salary` DESC,姓名長(zhǎng)度  DESC;

進(jìn)階四 函數(shù)

函數(shù)分為單行函數(shù),聚合函數(shù)(統(tǒng)計(jì)函數(shù))
1珊膜、單行函數(shù):給一個(gè)值返回一個(gè)值
2容握、統(tǒng)計(jì)函數(shù):給多個(gè)值返回一個(gè)值(下一篇更新)

一、單行函數(shù)

1.1字符型函數(shù)
#length :獲取參數(shù)值的字節(jié)個(gè)數(shù)(不是字符個(gè)數(shù))在utf8中漢字占3個(gè)字符辅搬,在jbk中漢子占兩個(gè)字符唯沮;英文字母均占一個(gè)字符
SHOW VARIABLES LIKE '%char%' #看字符集
SELECT LENGTH('粉紅狐貍');

#concat : 拼接字符串
SELECT CONCAT('粉紅狐貍','_','最好看');

#upper、lower : 全部變成大寫(xiě)堪遂、小寫(xiě)
SELECT  CONCAT(UPPER(last_name),'_',LOWER(first_name)) FROM employees;

#substr | substring : 截取字符串 索引從1開(kāi)始
#一個(gè)數(shù)值參數(shù)時(shí)介蛉,返回從開(kāi)始索引的位置到最后
SELECT SUBSTR('乘風(fēng)破浪的小姐姐',6);#返回“小姐姐”
#兩個(gè)數(shù)值參數(shù)時(shí),返回從開(kāi)始索引的位置溶褪,指定字符長(zhǎng)度的子串
SELECT SUBSTR('乘風(fēng)破浪的小姐姐',1,4);#返回“乘風(fēng)破浪”
#案例:首字母大寫(xiě)币旧,其余小寫(xiě),下劃線拼接
SELECT  CONCAT(UPPER(SUBSTR(last_name,1,1)),
           LOWER(SUBSTR(last_name,2)),
           '_',
           LOWER(first_name)
           ) FROM employees;

#instr :返回在字符串中第一次出現(xiàn)的索引猿妈,找不到返回0
SELECT INSTR('紅色高跟鞋','高跟鞋') #返回3

#trim去掉前后空格,或者去掉前后的指定字符
SELECT LENGTH(TRIM('   楊冪  ')); #2*3=6
SELECT TRIM('a' FROM 'aaaaaaaa楊aaaa冪aaaa')#若為aa 則以aa為單位進(jìn)行匹配

#lpad left_pad | rpad right_pad : 參數(shù)代表總長(zhǎng)度,原有數(shù)值的個(gè)數(shù)超過(guò)指定長(zhǎng)度從右邊截?cái)?SELECT LPAD('楊冪',10,'*') AS result

#replace : 凡是能夠匹配上的都替換掉
SELECT REPLACE('周芷若周芷若張無(wú)忌愛(ài)上了周芷若','周芷若','趙敏') result
 
1.2 數(shù)學(xué)函數(shù)
#round : 四舍五入
SELECT ROUND(-1.55); #先計(jì)算正數(shù)的四舍五入值吹菱,再加符號(hào)
SELECT ROUND(-1.567,2); #四舍五入巍虫,小數(shù)點(diǎn)保留2位

#ceil :向上取整,返回>=該參數(shù)的最小整數(shù)
SELECT CEIL(-1.01);

#floor : 返回<=該參數(shù)的最大整數(shù)
SELECT FLOOR(-1.01);

#truncate :截?cái)啵诙€(gè)參數(shù)表示小數(shù)點(diǎn)后保留的位數(shù)
SELECT TRUNCATE(1.79999,1)

#mod : 取余 符號(hào)看被除數(shù) 10%3 看10
/* 
a-a/b*b java中除法左右兩邊都是整數(shù)取整
mod(-10,-3) : -10 - (-10)/(-3)*(-3)
mod(10,-3) : 10 - (10)/(-3)*(-3)
*/
SELECT MOD(-10,-3)
SELECT MOD(10,-3)
SELECT -10/-3
1.3 日期函數(shù)
日期的符號(hào).png
SELECT NOW(); #日期+時(shí)間
SELECT CURDATE(); #日期
SELECT CURTIME(); #時(shí)間
#可以獲取年鳍刷、月占遥、日、時(shí)输瓜、分瓦胎、秒
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW()); #英文的月份

#將字符串轉(zhuǎn)換成日期 
SELECT STR_TO_DATE('1996-5-15','%Y-%c-%d')
#在一定的業(yè)務(wù)場(chǎng)景下使用解析用戶返回給的日期字符串
SELECT * FROM `employees` WHERE `hiredate`=STR_TO_DATE('4-3 1992','%c-%d %Y');

#date_format 將日期轉(zhuǎn)換成字符
SELECT DATE_FORMAT(NOW(),'%y年-%m月-%d日') result;
1.4其他函數(shù)
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
1.5 流程控制函數(shù)
#if函數(shù)
SELECT 
  last_name,
  commission_pct,
  IF(
    commission_pct,
    '有獎(jiǎng)金 嘻嘻',
    '沒(méi)獎(jiǎng)金 呵呵'
  ) AS 備注 
FROM
  employees 
  
#case使用一  case后面加字段,功能相當(dāng)于等于的判斷尤揣,when后面加的是常量
  /*
case 需要判斷的字段或表達(dá)式
when 常量1 then 要顯示的值1或者語(yǔ)句1
when 常量2 then 要顯示的值2或者語(yǔ)句2
...
else 要顯示的值n或者語(yǔ)句n(默認(rèn))
end

搭配select時(shí) case-end充當(dāng)?shù)氖潜磉_(dá)式搔啊,then后面顯示的是值
*/

/*案例:查詢員工的工資,要求:
部門(mén)號(hào)=30北戏,顯示的工資為1.1倍
部門(mén)號(hào)=40负芋,顯示的工資為1.2倍
部門(mén)號(hào)=50,顯示的工資為1.3倍
其他部門(mén)嗜愈,顯示的工資為原工資
*/
SELECT 
  last_name,
  department_id,
  salary,
  CASE department_id
    WHEN  30 THEN salary * 1.1 
    WHEN  40 THEN salary * 1.2 
    WHEN  50  THEN salary * 1.3 
    ELSE salary 
   END AS 工資 
 FROM
   employees 
    
#case使用二  case后面不加?xùn)|西旧蛾,判斷的條件在when后面寫(xiě),相當(dāng)于是區(qū)間的判斷
/*
case 
when 條件1 then 要顯示的值1或者語(yǔ)句1
when 條件2 then 要顯示的值2或者語(yǔ)句2
...
else 要顯示的值n或者語(yǔ)句n(默認(rèn))
end

搭配select時(shí) case-end充當(dāng)?shù)氖潜磉_(dá)式蠕嫁,then后面顯示的是值
*/

/*案例:查詢員工的工資蚜点,要求:
工資>20000,顯示級(jí)別A
工資>15000,顯示級(jí)別B
工資>10000,顯示級(jí)別C
否則,顯示級(jí)別D
*/

SELECT 
  last_name,
  department_id,
  salary 原工資,
  CASE 
    WHEN  salary>20000 THEN 'A' 
    WHEN  salary>15000 THEN 'B'
    WHEN  salary>10000 THEN 'C' 
    ELSE 'D'
   END AS 工資級(jí)別 
 FROM
   employees 
   

總結(jié) 單行函數(shù)

字符函數(shù)

length , concat , substr , instr , trim ,
upper , lower , lpad , rpad , replace

數(shù)學(xué)函數(shù)

round , ceil , floor, truncate, mod

日期函數(shù)

now , curdate, curtime ,
year , month, monthname, day, hour, minute, second
str_to_date , date_format

其他函數(shù)

version , database, user

控制函數(shù)

if , case

二拌阴、分組函數(shù) :用來(lái)統(tǒng)計(jì)

分類:sum avg min max count
特點(diǎn):
1.sum avg :只處理數(shù)值型 min max count:可以處理任何類型
2.以上函數(shù)都忽略null值绍绘。
3.可以和dinstinct搭配 去重
4.count 的詳細(xì)用法
count(*),count(1)表的統(tǒng)計(jì)行數(shù)迟赃,一般使用count(*)
5.和分組函數(shù)一同查詢的字段陪拘,要求是出現(xiàn)在group by 后的字段
因?yàn)榉纸M函數(shù)只返回一個(gè)值,加上其他字段纤壁,返回的數(shù)據(jù)表不規(guī)范
select sum(salary),last_name from 表 這樣是不可以的左刽,sum只返回一個(gè)值,但last_name有多個(gè)值

SELECT SUM(DISTINCT salary), SUM(salary) FROM employees
SELECT DATEDIFF(NOW(),'1996-06-30') 地球居住天數(shù);

參考來(lái)源:https://www.bilibili.com/video/BV12b411K7Zu?from=search&seid=14676118147617784537

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酌媒,一起剝皮案震驚了整個(gè)濱河市欠痴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秒咨,老刑警劉巖喇辽,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異雨席,居然都是意外死亡菩咨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抽米,“玉大人特占,你說(shuō)我怎么就攤上這事≡迫祝” “怎么了是目?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)标捺。 經(jīng)常有香客問(wèn)我胖笛,道長(zhǎng),這世上最難降的妖魔是什么宜岛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮功舀,結(jié)果婚禮上萍倡,老公的妹妹穿的比我還像新娘。我一直安慰自己辟汰,他們只是感情好列敲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著帖汞,像睡著了一般戴而。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翩蘸,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天所意,我揣著相機(jī)與錄音,去河邊找鬼催首。 笑死扶踊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的郎任。 我是一名探鬼主播秧耗,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舶治!你這毒婦竟也來(lái)了分井?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤霉猛,失蹤者是張志新(化名)和其女友劉穎尺锚,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體惜浅,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缩麸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杭朱。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阅仔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弧械,到底是詐尸還是另有隱情八酒,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布刃唐,位于F島的核電站羞迷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏画饥。R本人自食惡果不足惜衔瓮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抖甘。 院中可真熱鬧热鞍,春花似錦、人聲如沸衔彻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)艰额。三九已至澄港,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柄沮,已是汗流浹背回梧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祖搓,地道東北人漂辐。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像棕硫,于是被迫代替她去往敵國(guó)和親髓涯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355