①MySQL之DQL數(shù)據(jù)查詢語言一

sql腳本分享

鏈接: https://pan.baidu.com/s/1ckA70v0CgSFecKhAKiu1cA
提取碼: 76th

1,sql载碌、DB岩四、DBMS分別是什么,他們之間的關(guān)系晕讲?

DB:DataBase(數(shù)據(jù)庫组橄,數(shù)據(jù)庫實際上在硬盤上以文件的形式存在)
DBMS:DataBase Management System(數(shù)據(jù)庫管理系統(tǒng)衣吠,常見的有:MySQL、Oracle小压、DB2线梗、Sybase、SQLServer...)
SQL:結(jié)構(gòu)化查詢語言(高級語言)怠益,是一門標準的通用的語言仪搔;標準的sql適合于所有的數(shù)據(jù)庫產(chǎn)品。
    SQL語句在執(zhí)行的時候溉痢,實際上內(nèi)部也會先進行編譯僻造,然后再執(zhí)行sql。(sql語句的編譯由DBMS完成孩饼。)

DBMS負責執(zhí)行sql語句髓削,通過執(zhí)行sql語句來操作DB當中的數(shù)據(jù)。
DBMS - (執(zhí)行)-> SQL -(操作)-> DB        

2镀娶,什么是表立膛?

表:table; table是數(shù)據(jù)庫的基本組成單元,所有的數(shù)據(jù)都以表格的形式組織,目的是可讀性強宝泵。
一個表包括行和列:
    行:被稱為數(shù)據(jù)/記錄(data)
    列:被稱為字段(column)
        字段包含的屬性:字段名好啰、數(shù)據(jù)類型、相關(guān)的約束儿奶。

3框往,學(xué)習(xí)MySQL主要還是學(xué)習(xí)通用的SQL語句,SQL語句的分類:

DQL(數(shù)據(jù)查詢語言):查詢語句闯捎,凡是select語句都是DQL椰弊。
DML(數(shù)據(jù)操作語言):insert delete update,對表當中的數(shù)據(jù)進行增刪改瓤鼻。
DDL(數(shù)據(jù)定義語言):create drop alter秉版,對表結(jié)構(gòu)的增刪改。
TCL(事務(wù)控制語言):commit提交事務(wù)茬祷,rollback回滾事務(wù)清焕。(TCL中的T是Transaction)
DCL(數(shù)據(jù)控制語言):grant授權(quán)、revoke撤銷權(quán)限等祭犯。

4秸妥,導(dǎo)入數(shù)據(jù)

第一步:登錄mysql數(shù)據(jù)庫管理系統(tǒng)
    本地登錄$:mysql -uroot -p
    遠程登錄$:mysql -hIP地址 -uroot -p  
第二步:查看有哪些數(shù)據(jù)庫
    mysql> show databases;(這個不是SQL語句,屬于MySQL的命令)
第三步:創(chuàng)建屬于我們自己的數(shù)據(jù)庫
    mysql> create database sqltest;
第四步:使用sqltest數(shù)據(jù)庫
    mysql> use sqltest;
第五步:查看當前使用的數(shù)據(jù)庫中有哪些表盹憎?
    mysql> show tables;
第六步:初始化數(shù)據(jù)(source 路徑)
    mysql> source /Users/a1/Desktop/Java/Simon_JavaSE/數(shù)據(jù)庫/腳本文件/bjpowernode.sql

注意:看到這里如果沒有sql腳本進行學(xué)習(xí)筛峭,可返回頂部[sql腳本分享]進行下載.
5铐刘,sqltest.sql這個文件以.sql結(jié)尾陪每,這樣的文件被稱為“sql腳本”。當一個文件的擴展名是.sql镰吵,并且該文件中編寫了大量的sql語句檩禾,我們稱為這樣的文件為sql腳本。注意:直接使用source命令可以執(zhí)行sql腳本疤祭,sql腳本中的數(shù)量太大的時候盼产,無法打開;請使用source命令完成初始化勺馆。

6戏售,刪除數(shù)據(jù)庫:(drop database 數(shù)據(jù)庫名稱;)

mysql> drop database sqltest;

7,查看表結(jié)構(gòu):(dese 表名;)

mysql> desc dept;

8草穆,表中的數(shù)據(jù)

mysql> select * from emp;

9灌灾,常用命令

查看當前使用的數(shù)據(jù)庫
mysql> select database();
查看mysql版本號
mysql> select version();
終止一條語句
mysql> \c
退出mysql
mysql> exit  

10,查看創(chuàng)建表的語句:(show create table 表名;)

mysql> show create table emp;

11悲柱,簡單的查詢語句(DQL)

語法結(jié)構(gòu):
    select 字段1,字段2,字段3,... from 表名;
提示:1锋喜,任何一條sql語句都是以";"結(jié)尾。2,sql語句不區(qū)分大小寫嘿般。
    查詢員工年薪(字段可以參與數(shù)學(xué)預(yù)算):
        mysql> select ename , sal * 12 from emp;

    給查詢結(jié)果的列重命名:
        mysql> select ename , sal * 12 as yearsal from emp;
        mysql> select ename , sal * 12 as '年薪' from emp;
注意:標準的sql語句中要求字符串使用單引號括起來段标。雖然mysql支持雙引號,盡量別用炉奴。

12逼庞,條件查詢

1,語法結(jié)構(gòu):
    select 字段1,字段2,字段3,... 
    from 表名
    where 條件;
    執(zhí)行順序:先from瞻赶,然后where往堡,最后select

2,查詢SMITH的工資
    mysql> select sal from emp where ename = 'SMITH';

3共耍,查詢工資等于(大于虑灰、小于等于)3000的員工 
    mysql> select ename , sal from emp where sal = 3000;
    mysql> select ename , sal from emp where sal > 3000;
    mysql> select ename , sal from emp where sal <= 3000;

4,查詢工資不等于3000的員工 
    mysql> select ename , sal from emp where sal <> 3000;
    mysql> select ename , sal from emp where sal != 3000;
5痹兜,查詢工資在1100和3000之間的員工穆咐,包括1100和3000
    mysql> select ename , sal from emp where sal >= 1100 and sal <= 3000;
    mysql> select ename , sal from emp where sal between 1100 and 3000; // between...and... 是閉區(qū)間,左小右大字旭。
    between...and... 使用的時候必須左小有大对湃。
    between...and... 除了可以使用在數(shù)字方面之后,還可以使用在字符串方面
        mysql> select ename , sal from emp where ename  between 'a' and 'd'; // 左閉右開遗淳。

6拍柒,找出哪些人沒有津貼?
    mysql> select ename ,sal,comm from emp where comm = 0 or comm is null;

    在數(shù)據(jù)庫中NULL不是一個值屈暗,代表什么也沒有拆讯,為空⊙眩空不是一個值种呐,不能用等號衡量。
    必須使用 is null 或者is not null
    mysql> select ename ,sal,comm from emp where comm is null;
    mysql> select ename ,sal,comm from emp where comm is not null;

7弃甥,找出工作崗位是MANAGER和SALESMAN的員工爽室?
    mysql> select ename ,job from emp where job = 'MANAGER' or  job = 'SALESMAN';
    
    in等同于or
    mysql> select ename ,job from emp where job in ( 'MANAGER' , 'SALESMAN');
    mysql> select ename , sal from emp where sal in (1100 , 3000); // in后面的值不是區(qū)間,是具體的值淆攻。
    
    not in:不在這個幾個值當中
    mysql> select ename , sal from emp where not sal in (1100 , 1600 ,3000);

8阔墩,找出薪資大于1000并且部門編號是20或30的部門好員工(and和or聯(lián)合使用)
    mysql> select ename ,sal ,DEPTNO from emp where sal > 1000 and (DEPTNO = 20 or DEPTNO = 30);
    注意:當運算符的優(yōu)先級不確定的時候加小括號。

    模糊查詢like: 找出名字當中含有o的瓶珊?
        (在模糊查詢當中啸箫,必須掌握兩個特殊符號:1,'%'代表任意多個字符艰毒;2筐高,'_'代表任意1個字符。)
        mysql> select ename from emp where ename like '%o%' ;
    找出第二個字母是A的名字?
    mysql> select ename from emp where ename like '_a%';
    找出名字中有下劃線的( 斜杠具有轉(zhuǎn)譯作用)?
    mysql> select ename from emp where ename like '%\_%';  

13柑土,排序order by(升序蜀肘、降序)

1,按照工資升序稽屏,找出員工名和薪資
    mysql> select ename,sal from emp order by sal;
    mysql> select ename,sal from emp order by sal asc;
2扮宠,工資升序:
    mysql> select ename,sal from emp order by sal desc;

3,注意:默認是升序狐榔,asc表示升序坛增,desc表示降序。

4薄腻,按照工資的降序排列收捣,當工資相同的時候再按照名字的升序排列。
    mysql> select ename,sal from emp order by sal desc , ename asc;
    注意:越靠前的字段越能起到主導(dǎo)作用庵楷,只有當前面的字段無法完成排序的時候罢艾,才會啟用后面的字段。

    找出工作崗位是SALESMAN的員工尽纽,并且要求按照薪資的降序排序    
    mysql> select ename,sal,job from emp where job = 'SALESMAN' order by sal desc;

14咐蚯,分組函數(shù):多行處理函數(shù)(輸入多行,最終輸入一行)

count:計數(shù)弄贿;sum:求和春锋;avg:平均值;max:最大值差凹;min:最小值期奔。
所有的分組函數(shù)都是對“某一組”數(shù)據(jù)進行操作的。
分組函數(shù)自動忽略NULL直奋。
SQL語句語法規(guī)則:分組函數(shù)不可直接使用在where字句當中能庆。

count(*)和count(具體的某個字段),他們有什么區(qū)別脚线?
    count(*):不是統(tǒng)計某個字段中數(shù)據(jù)的個數(shù),而是統(tǒng)計總記錄條數(shù)弥搞。
    count(具體的某個字段):表示統(tǒng)計某個字段中不為NULL的數(shù)據(jù)總數(shù)量邮绿。


找出工資總和:
    mysql> select sum(sal) from emp;
找出最高、最低工資:
    mysql> select max(sal) from emp;
    mysql> select min(sal) from emp;
找出平均工資:
    mysql> select avg(sal) from emp;
找出總?cè)藬?shù):
    mysql> select count(ename) from emp;
分組函數(shù)自動忽略NULL
    mysql> select count(comm) from emp;
找出工資高于平均工資的員工
    錯誤寫法:
    mysql> select ename,sal from emp where sal > avg(sal); // ERROR 1111 (HY000): Invalid use of group function
    
    正確寫法:
    mysql> select ename,sal from emp where sal > (select avg(sal) from emp);

    分組函數(shù)不可直接使用在where字句當中攀例。
        分組函數(shù)一般都會和group by聯(lián)合使用船逮;分組函數(shù)都是在group by語句執(zhí)行結(jié)束之后才會執(zhí)行。
        因為group by是在where執(zhí)行之后才會執(zhí)行的粤铭。

分組函數(shù)也能組合起來用:
    mysql> select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;

15挖胃,單行處理函數(shù):輸入一行,輸出一行。

計算每個員工的年薪(包含津貼)
    mysql> select ename, (sal + comm) * 12 as yearsal from emp;
    重點:所有的數(shù)據(jù)庫規(guī)定:只要有NULL參與的運算結(jié)果一定是NULL酱鸭。
ifnull()空處理函數(shù):ifnull(可能為NULL的數(shù)據(jù)吗垮,被當做什么處理),屬于單行處理函數(shù)
    mysql> select ename, (sal + ifnull(comm,0)) * 12 as yearsal from emp;

16,group by 和 having

group by :按照某個字段或者某些字段進行分組凹髓。
having :是對分組之后的數(shù)據(jù)進行再次過濾烁登。
分組函數(shù)一般都會和group by聯(lián)合使用;分組函數(shù)都是在group by語句執(zhí)行結(jié)束之后才會執(zhí)行蔚舀。

找出每個工作崗位的最高薪資:
    mysql> select job, max(sal) from emp group by job;
找出每個工作崗位的平均薪資:
    mysql> select job, avg(sal) from emp group by job;

多個字段聯(lián)合起來一塊分組
找出每個部門不同工作崗位的最高薪資饵沧。
    mysql> select DEPTNO,job, max(sal) from emp group by DEPTNO , job ;
    mysql> select DEPTNO,job, max(sal) from emp group by DEPTNO , job order by DEPTNO desc; // 按DEPTNO降序排

找出每個部門的最高薪資,顯示薪資大于2900赌躺。
    mysql> select DEPTNO, max(sal) from emp group by DEPTNO having max(sal) > 2900; // 效率低
    mysql> select DEPTNO, max(sal) from emp where sal > 2900 group by DEPTNO; // 效率高 建議能使用where就使用where
找出每個部門的平均薪資狼牺,顯示薪資大于2000。
    mysql> select DEPTNO, avg(sal) from emp group by DEPTNO having avg(sal) > 2000; // 效率低

17礼患,總結(jié)一個完整的DQL語句

    select     5
        ..
    from       1
        ..
    where      2
        ..
    group by   3
        ..
    having     4
        ..
    order by   6
        ..

下篇:②MySQL之DQL數(shù)據(jù)查詢語言二

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锁右,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子讶泰,更是在濱河造成了極大的恐慌咏瑟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痪署,死亡現(xiàn)場離奇詭異码泞,居然都是意外死亡,警方通過查閱死者的電腦和手機狼犯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門余寥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悯森,你說我怎么就攤上這事宋舷。” “怎么了瓢姻?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵祝蝠,是天一觀的道長。 經(jīng)常有香客問我幻碱,道長绎狭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任褥傍,我火速辦了婚禮儡嘶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恍风。我一直安慰自己蹦狂,他們只是感情好誓篱,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凯楔,像睡著了一般窜骄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啼辣,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天啊研,我揣著相機與錄音,去河邊找鬼鸥拧。 笑死党远,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的富弦。 我是一名探鬼主播沟娱,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腕柜!你這毒婦竟也來了济似?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤盏缤,失蹤者是張志新(化名)和其女友劉穎砰蠢,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唉铜,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡台舱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了潭流。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竞惋。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖灰嫉,靈堂內(nèi)的尸體忽然破棺而出拆宛,到底是詐尸還是另有隱情,我是刑警寧澤讼撒,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布浑厚,位于F島的核電站,受9級特大地震影響椿肩,放射性物質(zhì)發(fā)生泄漏瞻颂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一郑象、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茬末,春花似錦厂榛、人聲如沸盖矫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辈双。三九已至,卻和暖如春柜砾,著一層夾襖步出監(jiān)牢的瞬間湃望,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工痰驱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留证芭,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓担映,卻偏偏與公主長得像废士,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蝇完,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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