SQL基礎(chǔ)語句

select distinct [字段名] from [表名]旧找;

用于查詢該列不重復(fù)的所有值剖膳。?

where子句中可以加between...and...

模糊查詢:like

%代表多個字符魏颓,_代表一個字符

like 'M%'代表查詢以M開頭的字符串;

like '%M%'代表查詢包含M的字符串吱晒;

like '%M'代表查詢以M結(jié)尾的字符串甸饱;

like '%M_'代表查詢M為倒數(shù)第二個字符的字符串

like 'M_'代表兩位,第一位是M的字符串

like關(guān)鍵字前還可以加上not關(guān)鍵字仑濒,表示不是....

in保留字:指定針對某個列可能的多個值

select * from product where market_price in (1999,2999,3999);

order by...

是可以指定多列進(jìn)行排序的

insert into...語句使用方法:

兩種方式:

(1)insert into category values (‘7‘’叹话,‘生活用品’);

(2)insert into category (cid, cname) values ('7', ‘生活用品')墩瞳;

update語句:

例如:

? ? ?update category set cname = ‘書籍’ where cid = '18';

注意:

? ? update語句后面如果不接where子句驼壶,就會使表內(nèi)所有行的值都會更新,一定要慎重喉酌!

在MySQL中热凹,可以通過設(shè)置 set sql_safe_updates = 1; 這樣箩溃,update后沒有where子句就會報錯。

delete語句

limit語句

select * from product limit A;

表示從第一條開始查詢碌嘀,一共查詢A條涣旨;

select * from product limit A ,B;

表示從第A條開始查詢,一共查詢B條股冗;

as為列霹陡、表添加別名,作用有:

(1)列名稱很長或者可讀性很差

select name as n, price as p from product;

(2)在查詢中設(shè)計到了不止一個表

select o.uid, oi.pid from orders as o, orderitems as oi where o.oid = oi.oid;

通過oid將兩個表連接到了一起止状,并輸出兩個表中各一列烹棉;

(3)需要把兩個列或多格列合到一起,為新列去一個別名

select pname,?CONCAT(market_price, ',' ,shop_price) as price from product;

join連接:將兩個或多個表的行通過一定關(guān)系連接到一起

分為內(nèi)連接怯疤、外連接

內(nèi)連接:

select product.pid, product.pname, orderitem.itemid from product (inner) join orderitem on product.pid = orderitem.pid;

只有兩個表格滿足了?product.pid = orderitem.pid? 這個條件之后浆洗,才會將符合條件的行輸出出來;

外連接:分為左連接和右連接

select?product.pid, product.pname, orderitem.itemid?from?product?left join?orderitem?on?product.pid = orderitem.pid;

這句是左連接集峦,不管product.pid = orderitem.pid 條件是不是滿足伏社,左邊的表product 所有行全部輸出出來,但是右邊的表格orderitem是否輸出需要依靠這個條件塔淤,條件滿足的行則輸出摘昌,條件不滿足的行則輸出null;

右連接類似高蜂,只不過將left改為right聪黎,右表全部輸出,左表是否輸出看每一行的條件是否滿足备恤;

union語句

select columnName1... from table1?

union

select columnName2... from table2

用于將兩次select的所有值連接到一起顯示稿饰,需要保證兩次查詢的列的數(shù)量、類型相同露泊,而且union連接時喉镰,不會顯示重復(fù)值

如需要顯示重復(fù)值,請使用union all 關(guān)鍵字滤淳。

insert into? [目標(biāo)表名] ((目標(biāo)表的列))? select [選擇的列名] from [源表名] (where...)梧喷;


可以將源表中的一些數(shù)據(jù)插入到目標(biāo)表中,注意是插入脖咐,并不會影響目標(biāo)表已有的數(shù)據(jù)铺敌。

如果目標(biāo)表不存在,則該語句不會創(chuàng)建新的目標(biāo)表屁擅,而是報錯偿凭。

選取的列的數(shù)量、類型要與目標(biāo)表選取的列的數(shù)量派歌、類型保持一致弯囊,否則報錯痰哨。

可以加where子句,用法和select語句相同匾嘱。

例:

insert into category_new select product.pid, orderitem.itemid from product join orderitem on product.pid = orderitem.pid;?

create關(guān)鍵字的使用


創(chuàng)建數(shù)據(jù)庫:

create datebase db_1;

創(chuàng)建表格:

create table test_table (

id int,

tname varchar(50);

);

注意斤斧,varcahr類型后面需要跟上長度

如果想要復(fù)制一個表格的類型,可以使用如下語句:

create table test_table_1 as select * from test_table where 1=0;

where 1=0是為了在新表中不添加任何數(shù)據(jù)


創(chuàng)建索引

create index index_test on test_table (column_1 , column_1 );


約束 NOT NULL


NOT NULL指定一列不為空霎烙,不許存放null值撬讽;

約束UNIQUE


UNIQUE指定一列不許出現(xiàn)重復(fù)值,但是可以出現(xiàn)多個NULL

使用方法:

使用create來添加 UNIQUE

create table person (

pid int,

pname varchar(20) not null,

unique (pid)

);

如果為多個列添加unique越約束悬垃,使用如下語句:

create table person(

pid int not null,

pname varchar(20) not null,

constraint uc_person unique (pid, pname)

);

這樣一來游昼,pid或者pname本身可以出現(xiàn)重復(fù)值,但是pid+pname不允許出現(xiàn)重復(fù)值尝蠕。

使用ALTER來添加刪除UNIQUE

alter table person add unique (pid);

或者

alter table person add constraint uc_person unique (pid, pname);

alter table person drop index uc_person;

(刪除?UNIQUE 約束)

PRIMARY KEY約束(主鍵約束)


PRIMARY KEY 相當(dāng)于NOT NULL和UNIQUE放在一起烘豌,而且每一個表中只能有一個主鍵。

其使用方法與UNIQUE類似看彼。

只不過在刪除主鍵約束時廊佩,可以像下面這樣寫

alter table person drop primary key;

因為一個表中只有一個主鍵約束,不需要為其指定約束名稱

FOREIGN KEY約束(外鍵約束)


一個表中的 FOREIGN KEY 指向另一個表中的 UNIQUE KEY(唯一約束的鍵)闲昭。

FOREIGN KEY 約束用于預(yù)防破壞表之間連接的行為罐寨。

FOREIGN KEY 約束也能防止非法數(shù)據(jù)插入外鍵列,因為它必須是它指向的那個表中的值之一序矩。

其用法如下,以create為例:

create table orders (

oid int not null,

pid int not null,

constraint fc_pid foreign key (pid) references person (pid)

);

Check約束


Check約束用于限制列的取值范圍

例如:

create table person (

id int primary key,

pname varchar(20) not null,

age int,

constraint cc_age check (age>10)

);

Default約束


用于向列中插入默認(rèn)值

create table person (

id int primary key,

pname varchar(20) not null,

age int,

constraint dc_age default 15

);

drop語句

刪除數(shù)據(jù)庫

drop database db1;

刪除表

drop table table1;

刪除索引

drop index index1;

drop跋破、delete簸淀、truncate刪除表的區(qū)別

drop會清除表的內(nèi)容,結(jié)構(gòu)毒返,約束租幕,并釋放空間,后續(xù)想要向該表中添加數(shù)據(jù)是不允許的拧簸,除非建立一個新的表劲绪;

truncate保留表的結(jié)構(gòu),清空表的內(nèi)容盆赤,釋放空間贾富,后續(xù)可以繼續(xù)向表中添加內(nèi)容;

delete允許使用where子句一行一行刪除表的內(nèi)容牺六,而且刪除操作會作為事務(wù)記錄在日志中颤枪。當(dāng)不加where子句時,其作用效果與truncate類似淑际。

delete語句是數(shù)據(jù)庫操作語言(dml) 畏纲,drop和truncate是數(shù)據(jù)庫定義語言(ddl)扇住。

alter語句允許添加列,刪除列盗胀,修改列

alter table table1 add pid int;? //添加列

alter table table1 drop column pid;? //刪除列

alter table table1 modify column pid varchar(20);? //將pid列的類型從int改為varchar

關(guān)于MySQL null值的處理


null值是不可比較的艘蹋,要想判斷一個數(shù)據(jù)存的是不是null值,需要使用到is null關(guān)鍵字,或者是 is not null票灰。

select * from test_table2 where age is not null女阀;

如果我們要對某些列進(jìn)行運(yùn)算,里邊如果摻雜著null值米间,那么計算結(jié)果一定是null强品,不符合我們的要求,所以希望將null值改為一個可以計算的數(shù)值屈糊。在mysql中的榛,使用到了ifnull()函數(shù);

select product_price * count as total_price from product;

這里面逻锐,如果count中有null值夫晌,輸出結(jié)果total_price中將會出現(xiàn)null值,是我們不想看到的昧诱,

所以該SQL語句改為如下:

select product_price * ifnull(count, 0) as total_price from product;

該語句的意思是晓淀,如果count為空,那么就將其看做成0來計算盏档。

count()函數(shù)的使用

select count(*) from test_table;? ? //計算test_table一共有多少行

select count(age) from test_table;? ? //計算test_table中age列一共有多少數(shù)據(jù)凶掰,注意,null值不會計算在內(nèi)

select count(distinct age) from test_table;? ? //計算test_table中age列有多少不同的值蜈亩,注意懦窘,null值不會計算在內(nèi)

group by和having語句的使用


group by主要是將查詢的數(shù)據(jù)進(jìn)行分組,在單表查詢中稚配,其使用方式如下:

select oid, sum(subtotal) as total from orderitem group by oid;? ? //查詢每一個訂單中的總金額畅涂,最后顯示的是訂單號和總金額

對于多表分組查詢,比較復(fù)雜道川,

比如說我們想要查詢每一個訂單中的訂單號午衰,總金額,和所有的商品

可以寫下如下的SQL語句

select orderitem.oid, sum(orderitem.count * product.market_price) as totalPrice,?group_concat(product.pname) as product

from orderitem left join product on orderitem.pid = product.pid

group by oid;


having主要是解決了where子句中不能使用聚合函數(shù)的問題

比如說冒萄,我們想要從orderitem中查詢訂單總金額大于10000的訂單號和總金額臊岸,可以寫出如下的sql語句

select oid, sum(subtotal) from orderitem?group by oid having sum(subtotal) > 10000;

當(dāng)然,having也可用于多表分組查詢中

對于sql查詢語句的子句執(zhí)行順序如下:

(1)from子句: 先確定從哪個表格中獲取數(shù)據(jù)宦言,如果有join關(guān)鍵字扇单,則先進(jìn)行多表的連接

(2)where子句:從獲取的表中篩選出符合where子句條件的行;

(3)group by子句:篩選過后奠旺,對所有行進(jìn)行分組

(4)having子句:分組后蜘澜,通過having子句的篩選獲取符合條件的組施流;

(5)select子句:選取我們需要查詢的列或者列的組合運(yùn)算(聚合函數(shù));

(6)union子句:將選取出的數(shù)據(jù)放到一起鄙信;

(7)order by子句:將選好的列按照一定規(guī)則排列顯示瞪醋;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市装诡,隨后出現(xiàn)的幾起案子银受,更是在濱河造成了極大的恐慌,老刑警劉巖鸦采,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宾巍,死亡現(xiàn)場離奇詭異,居然都是意外死亡渔伯,警方通過查閱死者的電腦和手機(jī)顶霞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锣吼,“玉大人选浑,你說我怎么就攤上這事⌒” “怎么了古徒?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長读恃。 經(jīng)常有香客問我隧膘,道長,這世上最難降的妖魔是什么寺惫? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任舀寓,我火速辦了婚禮,結(jié)果婚禮上肌蜻,老公的妹妹穿的比我還像新娘。我一直安慰自己必尼,他們只是感情好蒋搜,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著判莉,像睡著了一般豆挽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上券盅,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天帮哈,我揣著相機(jī)與錄音,去河邊找鬼锰镀。 笑死娘侍,一個胖子當(dāng)著我的面吹牛咖刃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播憾筏,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼嚎杨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氧腰?” 一聲冷哼從身側(cè)響起枫浙,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎古拴,沒想到半個月后箩帚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡黄痪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年紧帕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片满力。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡焕参,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出油额,到底是詐尸還是另有隱情叠纷,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布潦嘶,位于F島的核電站涩嚣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掂僵。R本人自食惡果不足惜航厚,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锰蓬。 院中可真熱鬧幔睬,春花似錦、人聲如沸芹扭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舱卡。三九已至辅肾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間轮锥,已是汗流浹背矫钓。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人新娜。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓赵辕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杯活。 傳聞我的和親對象是個殘疾皇子匆帚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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

  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,787評論 5 116
  • 查詢:select * from table_name where 條件 查詢的結(jié)果集中使用別名:select 列...
    約見閱讀 433評論 0 0
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常旁钧。 O...
    我想起個好名字閱讀 5,249評論 0 9
  • 理性 生于寧靜平和的內(nèi)心 歸于靈魂之上的智慧 表現(xiàn)在你以平靜的心態(tài)專心一意做著的事以及你持之以恒的良好習(xí)慣 如你早...
    Ceno閱讀 243評論 0 3
  • 想吸引他的注意歪今,湊得太近跌份嚎幸,離的太遠(yuǎn)刷不到好感。很多妹子在進(jìn)退兩難之間生生把相思熬成毒寄猩,自己感動得一把鼻涕一把淚...
    章魚姬閱讀 842評論 1 4