SQL高級(jí)

1. SELECT TOP子句

1. SQL Server | MS Access 語法
sekect top number | percent 字段名 from 表名;
2. MySQL 和 Oracle 中的 select top 等價(jià)
select * from school limit 8;
select 字段名 | * from 表名 limit number;
select 字段名 | * from 表名 where rownum <= number;
3. MySQL select top percent 實(shí)例

在 Microsoft SQL Server 數(shù)據(jù)庫(kù)中可執(zhí)行

select top number percent * from 表名;

2. LIKE語法

select 表名 from where 字段名 like pattern; 
例: select school from where name 'G%';G開頭的所有名字

[%]在模式的前后定義通配符

select * from school where name like  '%k';  以k結(jié)尾
select * from school where name like  'c%';  以c開頭
select * from school where name like  '%oo%';  含有oo
select * from school -> where name like  '%00%';  不含有oo的所有數(shù)據(jù)

3. 通配符

1. % 替代 0 個(gè)或多個(gè)字符
select * from 表名 where 字段名 like  '值';
select * from school where name like 't%';
2. _ 替代一個(gè)字符
select * from 表名 where 字段 like '_值';  值的首字符用_代替,
select * from school where name like '_ongzhu'; 也可以_ on_zh_
3. [charlist] 字符列中的任何單一字符
select * from 表名 where 字段名 regexp '^[字符]';
select * from school where name regexp '^[ty]';
select * from school where name regexp '^[a-z]';  選取 name以 a 到 z 字母開頭的名字
4. [^charlist] 或 [!charlist] 不在字符列中的任何單一字符
select * from school where name regexp '^[^a-z]';  選取 name 不以 A 到 H 字母開頭的名字

4. 操作符

1. [in]

允許在 where 子句中規(guī)定多個(gè)值

select * from 表名 where 字段名 in (values1,values2,...);
select * from school where remark in ('keai','eef');
2. [between]

選取介于兩個(gè)值之間的數(shù)據(jù)范圍內(nèi)的值

select * from 表名 where 字段名 between value1 and value2;
select * from school where number  between 700 and 900;

3. [not between]

選取不在這個(gè)范圍內(nèi)的值

select * from 表名 where 字段名 not between value1 and value2;
select * from school where number  not between 700 and 900; 
4. [帶有in 的 between]
select * from 表名 where (字段名 between value and value ) and not 字段名 in ( 'value','value');
select * from school where (字段名 between value and value ) and not 字段名 in ( 'value','value');
5. [帶有文本值的not between]
select * from 表名 where 字段名 not between '值' and '值';
select * from school where name not between 'a' and 'h';
6. [帶有日期值的between]
select * from 表名 where date between '日期值' and ‘日期值’;
select * from dates where date bewttn '2017-03-25' and '2017-04-19';
7. [union]

操作符合并兩個(gè)或多個(gè) SELECT 語句的結(jié)果

select 字段名 from 表1  union select 字段名 from 表2 order by 字段名;  三個(gè)字段名為同名
select country from website union select country from apps order by country;
8. [union all]

選取所有的country

select 字段名 from 表1  union all select 字段名 from 表2 order by 字段名;  三個(gè)字段名為同名
select country from website union all select country from apps order by country;
9. [帶有where 的 union all]

選取所有的某一個(gè)值

select 字段名 , 字段名 from 表1  where 字段名='值' union all select 字段名,  字段名 from 表2 where 字段名='值' order by 字段名;  三個(gè)字段名為同名
select country, name from website where country='CN' union all select country, appname from apps where country='CN' order by country;

5. SQL別名

1. [列別名]
select  字段名 as 別名 from 表名;
select count as number from dates;
多列合一列如下:
select name, concat(字段名, ',' , 字段名,.....)as 別名 from 表名;
select name, concat (name, ',' , count) as nc from dates;
2. [表別名]
select 別名.字段名声滥,別名.字段名炊邦,別名.字段名谜酒,... from 表名 as 別名 where 別名.字段名='值';
select d.id, d.name, d.count, d.date from dates as d where d.name='safari';
[下面的情況下使用別名很有用:]
  1. 在查詢中涉及超過一個(gè)表
  2. 在查詢中使用了函數(shù)
  3. 列名稱很長(zhǎng)或者可讀性差
  4. 需要把兩個(gè)列或者多個(gè)列結(jié)合在一起

3. SQL JOIN

1. 可以使用的不同的 SQL JOIN 類型:

** INNER JOIN**
如果表中有至少一個(gè)匹配,則返回行

select 表名.字段名,  表名.字段名,  表名.字段名, ... from 表名1 inner join 表名2 on 表名1.字段名=表名2.字段名;
select dates.id, dates.name, dates.date, log.alexa from dates inner join log on dates.id=log.sid;
                                          or
select dates.id, dates.name, dates.date, log.alexa from dates  join log on dates.id=log.sid;    

LEFT JOIN
即使右表中沒有匹配,也從左表返回所有的行

select 表名.字段名,  表名.字段名,  表名.字段名, ... from 表名1 left join 表名2 on 表名1.字段名=表名2.字段名;
select dates.id, dates.name, dates.date, log.alexa from dates left join log on dates.id=log.sid;
                                    or
select dates.id, dates.name, dates.date, log.alexa from dates left outer join log on dates.id=log.sid;

** RIGHT JOIN**
即使左表中沒有匹配,也從右表返回所有的行

select 表名.字段名,  表名.字段名,  表名.字段名, ... from 表名1 right join 表名2 on 表名1.字段名=表名2.字段名;
select dates.id, dates.name, dates.date, log.alexa from dates right join log on dates.id=log.sid;
                                    or
select dates.id, dates.name, dates.date, log.alexa from dates right outer join log on dates.id=log.sid;

FULL OUTDER JOIN
只要其中一個(gè)表中存在匹配,則返回行

MySQL中不支持 FULL OUTER JOIN呼盆,可以在 SQL Server 測(cè)試以下實(shí)例。

select 表名.字段名,  表名.字段名,  表名.字段名, ... from 表名1 full outer join 表名2 on 表名1.字段名=表名2.字段名 order by 表2.字段名 desc;
select  dates.name, dates.date, log.count from dates full outer join log on dates.id=log.sid order by log.count desc;

4. INSERT INTO SELECT

復(fù)制A表中的數(shù)據(jù)到B表

insert into A表 (字段名蚁廓,字段名宿亡,...) select 字段名,字段名 from B表;
insert into website (name, country) select appname, country from apps;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纳令,一起剝皮案震驚了整個(gè)濱河市挽荠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌平绩,老刑警劉巖圈匆,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捏雌,居然都是意外死亡跃赚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門性湿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纬傲,“玉大人,你說我怎么就攤上這事肤频√纠ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵宵荒,是天一觀的道長(zhǎng)汁雷。 經(jīng)常有香客問我,道長(zhǎng)报咳,這世上最難降的妖魔是什么侠讯? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮暑刃,結(jié)果婚禮上厢漩,老公的妹妹穿的比我還像新娘。我一直安慰自己岩臣,他們只是感情好溜嗜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布柴底。 她就那樣靜靜地躺著,像睡著了一般粱胜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狐树,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天焙压,我揣著相機(jī)與錄音,去河邊找鬼抑钟。 笑死涯曲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的在塔。 我是一名探鬼主播幻件,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蛔溃!你這毒婦竟也來了绰沥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤贺待,失蹤者是張志新(化名)和其女友劉穎徽曲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麸塞,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秃臣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哪工。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奥此。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖雁比,靈堂內(nèi)的尸體忽然破棺而出稚虎,到底是詐尸還是另有隱情,我是刑警寧澤偎捎,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布祥绞,位于F島的核電站,受9級(jí)特大地震影響鸭限,放射性物質(zhì)發(fā)生泄漏蜕径。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一败京、第九天 我趴在偏房一處隱蔽的房頂上張望兜喻。 院中可真熱鬧,春花似錦赡麦、人聲如沸朴皆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遂铡。三九已至肮疗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扒接,已是汗流浹背伪货。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钾怔,地道東北人碱呼。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宗侦,于是被迫代替她去往敵國(guó)和親愚臀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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