SQL常用語句總結大全

mysql和oracle語法都差不多,但還是有差別,查閱資料后我總結了一套完整的sql語句大全,供初學者學習

1.SQL是用于訪問和處理數據庫的標準計算機語言-------結構化查詢語言(Structured Query Language)
RDBMS:關系型數據庫管理系統,是sql基礎,有 MS SQL Server、IBM DB2、Oracle、MySQL等

2.語法:
表是相關數據的集合,由行和列組成
SQL不區分大小寫
SELECT - 從數據庫中提取數據 UPDATE - 更新數據庫中的數據
DELETE - 從數據庫中刪除數據 INSERT INTO - 向數據庫中插入新數據
CREATE DATABASE - 創建新數據庫 ALTER DATABASE - 修改數據庫
CREATE TABLE - 創建新表 ALTER TABLE - 變更(改變)數據庫表
DROP TABLE - 刪除表 CREATE INDEX - 創建索引(搜索鍵)
DROP INDEX - 刪除索引

3.查詢-----select
(1)select----從數據庫選取數據
select 列名 from 表名------------------查詢指定的列的數據
select * from 表名------------------------查詢整張表

(2)distinct :一列可能有多個重復值,distinct返回唯一不同的值,即去重復
select distinct 列名 from 表名-----------查詢指定列的唯一不同的數據

(3)where:過濾條件
例:SELECT * FROM web WHERE country='成都';
字符串需要用引號,數字不需要引號
select * from 表名 where 條件--------查詢滿足條件的所有數據
=:等于 !=或<>:不等于 >:大于 >=:大于等于
<:小于 <=:小于等于 between:在某個范圍
like:某種模式 in:多個可能值 like:模糊查詢 not like:不匹配記錄
例:
name 含 "oo" 的所有客戶:SELECT * FROM web WHERE name LIKE '%oo%';
name不含“00”的所有客戶:SELECT * FROM web WHERE name NOT LIKE '%oo%';

通配符:%----代替多個字符,-------替代一個字符
M% : 以M 開頭的 %M% :包含M %M
% : 包含M并且M在倒數第二位
_M:任一字符開頭M結尾的 [ ]:字符列中任一個 [^ ]/[! ]:不在字符列任一個
例:
name 以 "G"、"F" 或 "s" 開始的所有網站:
SELECT * FROM web WHERE name REGEXP '^[GFs]';
name 不以 "G"、"F" 或 "s" 開始的所有網站:
SELECT * FROM web WHERE name REGEXP '[GFs]';
注:mysql 以 REGEXP 或 NOT REGEXP 運算符 (或 RLIKE 和 NOT RLIKE) 來操作正則表達式

in:匹配條件存在多個值
例: name 為 "a" 或 "b" 的所有網站
SELECT * FROM web WHERE name IN ('a','b');

between:兩個值之間的數據(不同數據庫可能取邊值不同)
例: alexa 介于 1 和 20 間
SELECT * FROM web WHERE alexa BETWEEN 1 AND 20;
name 介于 'A' 和 'H' 之間字母:
SELECT * FROM web WHERE name BETWEEN 'A' AND 'H';
date 介于 '2016-05-10' 和 '2016-05-14' 之間:
SELECT * FROM a where date BETWEEN '2016-05-10' AND '2016-05-14';

(4)and 和or :兩個及以上條件
and:第一條件和第二個條件都成立,顯示一條記錄
or :第一和第二只要一個成立,顯示一條記錄
select * from 表名 where 條件1 and/or 條件2
例:"web" 表中選取 alexa 排名大于 "15" 且國家為 "CN" 或 "USA" 的所有網站
SELECT * FROM web WHERE alexa > 15 AND (country='CN' OR country='USA');

(5)order by :對結果集排序,默認升序ASC,降序用DESC
select * from 表名 order by 列名-----根據某列升序排列
select * from 表名 order by 列名1,列名2---根據列1排序,如果數據相同按照列2排序

(6)top子句:規定返回的記錄數目(不是所有都支持)
sql server/MS Access語法:
select top 數字|percent 列名 from 表名
例:"Customers" 表中選取前面 50% 的記錄
SELECT TOP 50 PERCENT * FROM web;
mysql和oracle用其他方式:
select 列名 from 表名 limit 數字-------mysql
select 列名 from 表名 where rownum<=數字------oracle

(7)別名:為表或列指定別名(使用:不止一個表,使用了函數,列名過長,需要合并多個列)
表:select 列名 from 表名 as 表別名
列:select 列名 as 列表名 from 表名
例:三列(url、alexa 和 country)結合在一起,并創建一個名為 "site_info" 的別名
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM web ;
"web " 和 "access_log" 表,并分別為它們指定表別名 "w" 和 "a"
SELECT w.name, w.url, a.count, a.date FROM web AS w, access_log AS a WHERE a.site_id=w.id and w.name="小三";

(8)join:基于相同字段,將多個表的行結合
inner join:若表至少一個匹配,返回行(inner join=join),沒有不返回

left join :從左表(table1)返回所有行,即使右表(table2)中沒有匹配,若右表沒有匹配,返回null

right join:右表(table2)返回所有的行,即使左表(table1)中沒有匹配。若左表中沒有匹配,則結果為 NULL。

full join:只要其中一個表中有匹配,返回行

(9)union :合并兩個及以上select 語句結果
每個select語句必須有相同數量的列,列有相似的數據類型,列的順序相同
union默認選取不同的值,union all允許重復的值
結果的列名等于union中第一個select語句中的列名

4.插入-----insert into
insert into 表名(列1,列2,列3) values (值1,值2,值3)
id不用插入,是自動更新,唯一標識

5.更新-----update
update------更新(修改)已有數據
update 表名 set 列=值 where 列=條件 (where指定條件更新,無where則全部更新)

6.刪除-----delete
delete from 表名 where 條件-----刪除滿足條件的數據
刪除表中所有行(清空數據):delete from 表名 或 delete * from 表名
還有一種方式:truncate table 表名-------刪除速度快,刪除表中所有內容
drop table 表名:刪除表,連表結構也刪除

7.表復制:select into
復制一張表的數據插入到另一張新表中:create table 新表 select * from 舊表
也可以用select into (mysql不支持,但有insert into .....select)
select * into 新表 from 舊表---------舊表復制備份
select 列名 into 新表 from 舊表---------舊表指定列復制到新表
select * into 新表 from 舊表 where 1=0-------創建一個新的空表(無數據)

8.數據復制:insert into .....select
從一個表復制數據,插入到另一個已存在的表中
insert into 表2 select * from 表1:復制表1所有列到表2
insert into 表2 列名 select 列名 from 表1:復制表1的指定列插入到表2中

9.創建數據庫:create database
create database 數據庫名-----創建一個數據庫

10.創建表:create table
create table 表名(列名1 數據類型(大小),列名2 數據類型(大小)...)
表由行和列組成,每個表必須有表名

11.約束Constraints:用于規定表中的數據規則
若違反規則,行為被約束終止
約束條件可以在建表時規定(create table)、或建表之后(alter table)
create table 表名(列名1 數據類型(大小) 約束條件,列名2......)
sql有以下約束:
not null:指定某列不能存儲null值,即不為空,若無添加值無法更新表

unique:某列的每行必須有唯一的值,每個表可以有多個unique約束
(1)create table時:
單個:create table 表名(id int not null,...,unique (id))-------mysql
create table 表名(id int not null unique,..., )----------其他
多個:create table 表名(id int not null,name varchar(255) not
null,constraint 別名 unique(id,name))
(2)alter table時:
單個:alter table 表名 add unique(列名)
多個:alter table 表名 add constraint 別名 unique(列1,列2)
(3)撤銷 :
alter table 表名 drop index 別名----------mysql
alter table 表名 drop constraint 別名-----------其他

primary key:某列有唯一標識,每個表只能有一個primary key約束
主鍵必須包含唯一的值,主鍵列不能含null值,每個表只能有一個主鍵
(1)create table時:
單個:create table 表名(id int not null,...,primary key (id))---mysql
create table 表名(id int not null primary key,...)-------其他
多個: create table 表名(id int not null ,name varchar not
null,...,constraint pk_id primary key (id,name))-------所有
(這里 其實只有一個主鍵pk_id)
(2)alter table時:
單個:alter table 表名 add primary key(列名)
多個:alter table 表名 add constraint 別名 primary key(列1,列2)
注:必須在建表時把主鍵聲明為不含null
(3)撤銷:
alter table 表名 drop primary key----------mysql
alter table 表名 drop constraint 別名-----------其他

foreign key :外鍵,指向另一個表的primary key
(1)create table時:
單個:create table 表1(id int not null,p_id int...,primary key
(id),foreign key(p_id) peferences 表2 (p_id))----------mysql
create table 表1(id int not null primary key,...,p_id int foreign
key peferences 表2 (p_id))-------其他
(2)alter table時:
單個:alter table 表1 add foreign key(列) references 表2(列)
多個:alter table 表1 add constraint 別名 foreign key(列)
references 表2(列)
(3)撤銷:
alter table 表名 drop foreign key 別名----------mysql
alter table 表名 drop constraint 別名------------其他

check:值符合指定條件,同上分類
(1)create table:
單個:create table 表名 (p_id int not null,...,check (p_id>0))-----mysql
create table 表名 (p_id int not null check (p_id>0),...,)-----其他
多個: create table 表名 (p_id int,city varchar(255),...,constraint 別
名 check (p_id>0 and city='v'))
( 2 ) alter table:
單個:alter table 表名 add check (p_id>0)
多個:alter table 表名 add constraint 別名 check (p_id>0 and city='v')
( 3 )撤銷:
alter table 表名 drop check 別名----------mysql
alter table 表名 drop constraint 別名---------其他

default:默認值
(1)create table:
create table 表名 (...,name varchar(255) default '張三')
( 2 ) alter table:
alter table 表名 alter 列 set default '值'-----mysql
alter table 表名 modify 列 default '值'-----oracle
alter table 表名 alter column 列 set default '值'-----其他
( 3 )撤銷:
alter table 表名 alter 列 drop default----------mysql
alter table 表名 alter column 列 drop default---------其他

12.創建索引:create index------加速搜索、查詢
create index 索引名 on 表名(列名)-----允許重復
create unique index 索引名 on 表名(列名)------唯一索引

13.撤銷刪除:drop -----------------刪除索引、表和數據庫
刪除索引:drop index 索引名 on 表名---------MS Access
drop index 表名.索引名---------sql server
drop index 索引名--------------oracle/db2
alter table 表名 drop index 索引名-----mysql
刪除表:drop table 表名(刪除內容 : truncate table 表名)
刪除數據庫:drop database 數據庫名

14、操作表:alter -----------用于已有表的添加、刪除、修改列
添加列:alter table 表名 add 列名 數據類型
刪除列:alter table 表名 drop colnum 列名
改變列的數據類型:
alter table 表名 alter colnum 列名 數據類型-----sql server
alter table 表名 modify colnum 列名 數據類型-------oracle/mysql
alter table 表名 modify 列名 數據類型------------oracle 10g后

15.主鍵自動生成:auto increment --------每次插入新記錄會自動創建字段的值
create table 表名(id int not null auto_increment,....)----------------mysql
默認開始1,每次加1,若以其他值可用auto_increment,=100
create table 表名(id int identity(1,1) primary key,..)-------------------sql server
identity(10,2)規定id起始為10,每次遞增2
create table 表名(id integer primary key autoincrement,....)-------Access
默認1,每次加1,autoincrement(10,5)以10開始,每次加5

oracle中比較復雜:
首先創建sequence對象:
create sequence 名字 minvalue 1 start with 1 increment by 1 cache 10
然后插入數據的時候:
insert into 表(id,字段2,...)values(名字.nextval,值2,...)

16.null值:不能比較,null和0不等價
is null: select * from 表 where 列 is null
is not null: select * from 表 where 列 is not null
操作null,很多時候運算需要將null轉化成0,所以需要null函數:
isnull(列,0)---------------------------------sql server/MS Access
nvl(列,0)------------------------------------oracle
ifnull(列,0)或coalesce(列,0)----------mysql

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容