JDBC中常用的SQL總結(jié)02之SELECT語句用法詳解

0. README

本篇文章主要總結(jié)SELECT語句的具體用法, 包含條件查詢, 順序查詢, 分組查詢, 結(jié)合聚集函數(shù)的查詢, 多表查詢.

本文行文思路結(jié)構(gòu)

DQL(數(shù)據(jù)查詢語言)
一. 單表查詢
  1. 條件查詢
  2. 順序查詢
  3. 分組查詢
  4. 結(jié)合聚集函數(shù)的查詢  
二. 多表查詢
  1. 多表操作
  2. 內(nèi)連接
  3. 外連接
三. 總結(jié)

一. 單表查詢

與查詢數(shù)據(jù)(select)相關(guān)的查詢語句:

SHOW TABLES [FROM database_name]; -- 查看數(shù)據(jù)庫中的所有表
SELECT * FROM table_name; -- 查看一個表中的所有記錄數(shù) (*代表表中所有的列名)

1. 條件查詢

格式:
SELECT 列名 FROM 表名 [WHERE 條件表達(dá)式];

條件表達(dá)式中常用的符號
< > <= >= = <> (不等于)

WHERE子句中相關(guān)關(guān)鍵字的用法:
in(范圍內(nèi)取內(nèi)容)
not in

示例:
(準(zhǔn)備階段)假設(shè)已存在一個數(shù)據(jù)庫mydb, 里面已創(chuàng)建一個表mytable, 表結(jié)構(gòu)如下:

表結(jié)構(gòu).png

表內(nèi)已插入6條記錄:

原始表中數(shù)據(jù).png
-- in的用法
SELECT * FROM mytable WHERE id IN (1, 3, 4);
SELECT * FROM mytable WHERE id NOT IN (1, 3, 4);

執(zhí)行結(jié)果:

結(jié)果1.png

結(jié)果2.png

like(模糊查詢的關(guān)鍵字)
寫法:
下劃線和%區(qū)別:都是占位符, _只有一個字符, %可以有零個或多個字符.
%寫法:
like '%李'; 結(jié)果: XXX李
like '李%'; 結(jié)果: 李XXX
like '%李%'; 結(jié)果: 只要有李就行

示例:

-- 查詢username中含有'a'的元組(即一行)
SELECT * FROM mytable WHERE username LIKE '%a%';

執(zhí)行結(jié)果:

結(jié)果.png

as
可以使用別名:使用as設(shè)置別名, 并且as可以省略
示例:

-- as設(shè)置別名, 也可以省略, 兩種情況得到同樣的結(jié)果
SELECT id AS 'ID' FROM mytable;
SELECT id 'ID' FROM mytable;

執(zhí)行結(jié)果:

結(jié)果.png

其它重要關(guān)鍵字:
is null -- 判斷是否為null
and -- 并且
or -- 或者
not -- 不成立

2. 順序查詢

  • 排序, 使用order by, 升序?yàn)槟J(rèn)的(asc)/降序(desc)
  • 同時出現(xiàn)select的語句最末尾
-- 按id升序排列信息, 兩種情況得到同樣的結(jié)果
SELECT * FROM mytable ORDER BY id;
SELECT * FROM mytable ORDER BY id ASC; 

執(zhí)行結(jié)果:

結(jié)果.png

3. 分組查詢

格式:
SELECT * FROM 表名 [group by 列名 having 條件表達(dá)式];

4. 結(jié)合聚集函數(shù)的查詢

count 獲取數(shù)量
sum 求和
avg 求平均數(shù)
max 最大值
min 最小值
示例:

SELECT MAX(id) FROM mytable
GROUP BY password;

執(zhí)行結(jié)果:


結(jié)果.png

完整的SELECT語句:
格式:
SELECT * FROM 表名 [WHERE 條件表達(dá)式]
[GROUP BY 列名 HAVING 條件表達(dá)式]
[ORDER BY ASC/DESC];

示例:

SELECT id, username, password, COUNT(*) FROM mytable 
WHERE id > 1
GROUP BY password
HAVING password <> '111'
ORDER BY id;

執(zhí)行結(jié)果:

結(jié)果.png

二. 多表查詢

1. 多表操作

  • 首先重新提供數(shù)據(jù), 有一個部門的表dept宽档,還有一個員工表emp.
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE dept(
    did INT PRIMARY KEY AUTO_INCREMENT,
    dname VARCHAR(30)
);

CREATE TABLE emp(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(20),
    salary DOUBLE,
    dno INT
);

INSERT INTO dept VALUES(NULL, '研發(fā)部');
INSERT INTO dept VALUES(NULL, '銷售部');
INSERT INTO dept VALUES(NULL, '人事部');
    
INSERT INTO emp VALUES(NULL, '小王', 10000, 1);
INSERT INTO emp VALUES(NULL, '小李', 10000, 2);
INSERT INTO emp VALUES(NULL, '小鳳', 10000, 3);       
INSERT INTO emp VALUES(NULL, '東東', 800, NULL);
INSERT INTO emp VALUES(NULL, '波波', 1000, NULL);
        

之后, 表dept中所有數(shù)據(jù)如下:

表dept.png

表dept中所有數(shù)據(jù)如下:

表emp.png

外鍵約束
因?yàn)榘蜒邪l(fā)部刪除, 研發(fā)部下有人員, 該操作不合理奕短。
所以, 引入外鍵約束, 作用是保證數(shù)據(jù)的完整性间唉。

添加外鍵
語法:
ALTER TABLE 當(dāng)前表名 ADD FOREIGN KEY 當(dāng)前表名(dno) REFERENCES 關(guān)聯(lián)的表(did);
給emp員工表添加外鍵:

ALTER TABLE emp ADD FOREIGN KEY emp(dno) REFERENCES dept(did);

查看emp表結(jié)構(gòu):

emp表結(jié)構(gòu).png

在介紹內(nèi)連接, 外連接之前, 有必要了解一下笛卡爾積:
舉個例子:
表A 表B
aid aname bid bname
a1 aa1 b1 bb1
a2 aa2 b2 bb2
b3 bb3

查詢的語法

SELECT * FROM 表A, 表B;

返回的結(jié)果就是笛卡爾積, 表A中有兩條記錄, 表B中有三條記錄, A和B的笛卡爾積中就有2*3=6條記錄.

笛卡爾積.png

2. 內(nèi)連接

  • 普通內(nèi)連接
    前提條件:需要有外鍵的.
    提交關(guān)鍵字 inner join ... on + 條件
    SELECT * FROM dept INNER JOIN emp ON dept.did = emp.dno;

  • 隱式內(nèi)連接(用的是最多的)
    可以不使用inner join ... on關(guān)鍵字
    SELECT * FROM dept,emp WHERE dept.did = emp.dno;

執(zhí)行結(jié)果(兩者相同):

內(nèi)連接.png

3. 外連接

  • 左外連接(看左表樟遣,把左表所有的數(shù)據(jù)全部查詢出來)
    前提條件:需要有外鍵的.
    語法: 使用關(guān)鍵字 left [outer] join ... on + 條件
    SELECT * FROM dept LEFT OUTER JOIN emp ON dept.did = emp.dno;
    執(zhí)行結(jié)果:


    左外連接.png
  • 右外連接(看右表汹碱,把右表所有的數(shù)據(jù)全部查詢出來)
    前提條件:需要有外鍵的要尔。
    語法: 使用關(guān)鍵字 right [outer] join ... on
    SELECT * FROM dept RIGHT JOIN emp ON dept.did = emp.dno;
    執(zhí)行結(jié)果:

右外連接.png

三. 總結(jié)

個人博客主頁
到此, 所有的內(nèi)容就總結(jié)完了! 當(dāng)然, 還有部分有關(guān)查詢的關(guān)鍵詞, 如ALL, DISTINCT等等, 自己也可以去看看它們的用法.

最后, 非常歡迎各位小伙伴評論和指點(diǎn)我的文章, 如果您覺得寫得還不太差勁或者對您有一丁點(diǎn)的幫助, 麻煩動個小手點(diǎn)個贊, 好人萌萌噠, 也很感謝您耐心認(rèn)真地看完!


本文寫于 2017/05/14 20:42

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婉宰,一起剝皮案震驚了整個濱河市势似,隨后出現(xiàn)的幾起案子拌夏,更是在濱河造成了極大的恐慌僧著,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件障簿,死亡現(xiàn)場離奇詭異盹愚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)卷谈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門杯拐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人世蔗,你說我怎么就攤上這事端逼。” “怎么了污淋?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵顶滩,是天一觀的道長。 經(jīng)常有香客問我寸爆,道長礁鲁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任赁豆,我火速辦了婚禮仅醇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘魔种。我一直安慰自己析二,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布节预。 她就那樣靜靜地躺著叶摄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪安拟。 梳的紋絲不亂的頭發(fā)上蛤吓,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機(jī)與錄音糠赦,去河邊找鬼会傲。 笑死,一個胖子當(dāng)著我的面吹牛愉棱,可吹牛的內(nèi)容都是我干的唆铐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼奔滑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了顺少?” 一聲冷哼從身側(cè)響起朋其,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤王浴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后梅猿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氓辣,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年袱蚓,在試婚紗的時候發(fā)現(xiàn)自己被綠了钞啸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡喇潘,死狀恐怖体斩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颖低,我是刑警寧澤絮吵,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站忱屑,受9級特大地震影響蹬敲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜莺戒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一伴嗡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧从铲,春花似錦瘪校、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吉嫩,卻和暖如春价认,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背自娩。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工用踩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忙迁。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓脐彩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姊扔。 傳聞我的和親對象是個殘疾皇子惠奸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

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

  • 1. select * from emp; 2. select empno, ename, job from em...
    海納百川_4d26閱讀 1,904評論 0 4
  • 多表查詢有如下幾種: 合并結(jié)果集;UNION恰梢、UNION ALL 連接查詢 內(nèi)連接[INNER] JOINON 外...
    Michael_林閱讀 3,451評論 0 6
  • 查詢是數(shù)據(jù)的一個重要操作佛南。用戶發(fā)送查詢請求梗掰,經(jīng)編譯軟件變異成二進(jìn)制文件供服務(wù)器查詢,后返回查詢結(jié)果集給用戶嗅回,查詢會...
    產(chǎn)品小正閱讀 1,385評論 0 2
  • 目錄 簡介 在Android中存儲數(shù)據(jù)有時會用到數(shù)據(jù)庫及穗,Android給我們提供了 一系列的API來操作數(shù)據(jù)庫,非...
    慕涵盛華閱讀 1,014評論 1 2
  • 曾經(jīng)绵载,也只是曾經(jīng)埂陆, 一個,多么熟悉的字眼娃豹, 但總能穿透一切焚虱, 觸碰那顆柔軟的心, 這就是她的魅力所在培愁。 曾經(jīng)著摔,多少...
    園藝之人閱讀 238評論 0 1