Day SQL查詢

一宾尚、SQL語法補充

1.條件語句的寫法

在SQL中可以通過 where 條件語句來對操作對象進行篩選 - 篩選

a. 比較運算符: =, <>, >, <, >=, <=

注意: 判斷一個字段的值是否為空不用使用=和<>, 而是使用is nullis not null

SELECT addr FROM t_student;
SELECT stuname FROM t_student WHERE addr is NULL;    -- 判斷是否為NULL(空)
SELECT stuname FROM t_student WHERE addr='';     -- 判斷是否是空串
b. 邏輯運算符: and, or, not
c. where 字段名 between 值1 and 值2

篩選指定的字段的值在值1和值2之間

SELECT stuname,birth FROM t_student WHERE birth BETWEEN '1990-1-1' AND '1999-12-31'; 
d. where 字段名 in 集合

篩選出字段值是集合中的元素;(集合是使用括號括起來里面多個值)

SELECT * FROM t_student WHERE stuname in ('小花', '小明', '路飛'); 
e. like操作
SELECT * FROM t_student WHERE stuname like ('王%%'); -- 選出姓王的
2.數(shù)據(jù)類型
  • varchar(size): 不定長字符串俯在,size決定的是最大長度
  • char(size): 定長字符
  • text: 不限長度(最大是255個字符)
  • int/tinyint(-128~127)
  • FLOAT(size,d)/DOUBLE(size,d) - 這兒的size和d的值都有約束效果
  • bit: 只有0和1兩個值
  • date/datetime/time: 值可以是時間函數(shù)的結(jié)果产园,也可以時間字符串炕贵;計算或者是比較的時候內(nèi)部是按時間處理的
3.去重
SELECT DISTINCT addr FROM t_student;  

二、添加約束

1.創(chuàng)建表的時候添加約束
CREATE TABLE if not EXISTS t_college(
collid int, 
collname VARCHAR(20) NOT NULL,   -- 創(chuàng)建表的時候添加約束
website VARCHAR(1024), 
intro VARCHAR(200),
PRIMARY KEY(collid)
);
2.通過添加約束索引的方式添加約束
a.添加約束

alter table 表名 add constraint 索引名 約束 (字段名);
說明: 索引名 - 自己隨便命名侦副,用來指向當前添加的約束豆村; 約束 - 需要添加的約束(支持唯一約束、主鍵約束和外鍵約束)

ALTER TABLE t_college ADD CONSTRAINT con_website UNIQUE (website);  

給t_college表中的website添加unique約束脸秽,約束索引為con_website

b.刪除約束

alter table 表名 drop index 約束索引;

ALTER TABLE t_college DROP index con_website;

三儒老、外鍵和E.R圖

1.什么是外鍵:

表中的某個字段的值是根據(jù)其他表中主鍵的值來確定的。那么這個字段就是外鍵

1.1 對應(yīng)關(guān)系

多對一的外鍵的添加: 將外鍵添加到多的一方對應(yīng)的表中

一對一的外鍵的添加: 將外鍵隨便添加到哪一方记餐,同時添加值唯一約束
多對多的外鍵的添加: 關(guān)系型數(shù)據(jù)庫中驮樊,兩張表沒法實現(xiàn)多多的關(guān)系,需要一個中間表。(中間表有兩個外鍵分別參照多多的兩個表的主鍵)

1.2 怎么添加外鍵:

a.添加外鍵對應(yīng)的字段

alter TABLE tb_student add COLUMN collid int;

b.給設(shè)計好的外鍵對應(yīng)的字段添加外鍵約束
alter table 表1 add constraint 索引名 foreign key (字段1) references 表2 (字段2);
將表1中的字段1設(shè)置為外鍵囚衔,并且讓這個外鍵的值參照表2中的字段2

ALTER TABLE tb_student ADD CONSTRAINT fk_collid_stu 
FOREIGN KEY (collid) 
REFERENCES  tb_college (collid);

c.刪除外鍵約束
alter table 表名 drop foreign key 外鍵索引名; - 可以刪除外鍵約束挖腰,但是外鍵索引還存在;需要額外的把索引刪掉
注意: 刪除外鍵約束的時候直接刪除約束的索引無效练湿,必須先將約束刪掉猴仑,然后再刪除索引.

ALTER TABLE tb_student DROP FOREIGN KEY fk_collid_stu;
ALTER TABLE tb_student DROP INDEX fk_collid_stu; 

d. 多對多的外鍵約束

多對多的時候需要創(chuàng)建中間表分別來關(guān)聯(lián)兩個兩個表。

-- 添加學生的外鍵約束 
ALTER TABLE tb_score ADD CONSTRAINT fk_stuid_score 
FOREIGN KEY (stuid) 
REFERENCES tb_student (stuid);
-- 添加課程的外鍵約束
ALTER TABLE tb_score ADD CONSTRAINT fk_couid_score 
FOREIGN KEY (couid) 
REFERENCES tb_course (couid);

四肥哎、高級查詢操作

1.聚合:

max()/min()/sum()/avg()/count()
SELECT 聚合函數(shù)(字段) FROM 表名 WHERE 條件;

按條件多表查詢指定字段數(shù)據(jù)辽俗,然后將查詢結(jié)果做相應(yīng)的聚合運算。聚合運算的結(jié)果是最后結(jié)果

SELECT mark FROM tb_score;    -- 獲取tb_score表中的所有分數(shù)值
SELECT max(mark) as maxmark FROM tb_score;      -- 獲取tb_score表中所有分數(shù)的最大值
SELECT min(mark) FROM tb_score; 
SELECT sum(mark) FROM tb_score; 
SELECT avg(mark) FROM tb_score WHERE scoreid>=123;   -- 計算平均值的時候如果參與運算的對象的值為NULL,那么這個數(shù)據(jù)不會參與計算
SELECT count(mark) FROM tb_score WHERE mark>=90;
2.分組

SELECT 字段操作 FROM 表名 WHERE 條件 GROUP BY(字段2);
將指定表中滿足條件的記錄按照字段2的進行分組(值是一樣的在一個組里面), 然后再講每個分組作為整體按照指定字段進行指定聚合操作

-- 求每個學生的平均成績
SELECT stuid,avg(mark) FROM tb_score WHERE scoreid <= 115 GROUP BY(stuid) ;

注意:a.字段操作的位置除了分組字段不用聚合篡诽,其他字段都必須聚合 b.分組的時候where要放到分組前對需要分組的數(shù)據(jù)進行篩選

having: 分組的時候崖飘,在分組后用having代替where來對分組后的數(shù)據(jù)進行篩選

-- 獲取平均分數(shù)大于60分的學生的id
SELECT stuid,avg(mark) FROM tb_score GROUP BY(stuid) HAVING avg(mark)>60;
3.子查詢:

將一個查詢操作的結(jié)果作為另外一個查詢的數(shù)據(jù)源

-- 在tb_score表中獲取成績是大于90分的學生的id
SELECT stuid FROM tb_score WHERE mark>90 and stuid is not NULL;   

獲取成績大于90分的學生的名字

SELECT stuname FROM tb_student WHERE stuid in 
(SELECT stuid FROM tb_score WHERE mark>90 and stuid is not NULL);  
SELECT stuid,mark FROM tb_score WHERE mark > 90 and stuid is  not NULL;

將一個查詢的結(jié)果作為查詢對象提供給另外一個查詢。但是第一個查詢結(jié)果需要重命名

SELECT mark FROM (SELECT stuid,mark FROM tb_score WHERE mark > 90 and stuid is  not NULL) as t2;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杈女,一起剝皮案震驚了整個濱河市朱浴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌达椰,老刑警劉巖翰蠢,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異砰碴,居然都是意外死亡躏筏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門呈枉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趁尼,“玉大人,你說我怎么就攤上這事猖辫∷峙ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵啃憎,是天一觀的道長芝囤。 經(jīng)常有香客問我,道長辛萍,這世上最難降的妖魔是什么悯姊? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮贩毕,結(jié)果婚禮上悯许,老公的妹妹穿的比我還像新娘。我一直安慰自己辉阶,他們只是感情好先壕,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布瘩扼。 她就那樣靜靜地躺著,像睡著了一般垃僚。 火紅的嫁衣襯著肌膚如雪集绰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天谆棺,我揣著相機與錄音栽燕,去河邊找鬼。 笑死包券,一個胖子當著我的面吹牛纫谅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溅固,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼付秕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了侍郭?” 一聲冷哼從身側(cè)響起询吴,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亮元,沒想到半個月后猛计,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡爆捞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年奉瘤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煮甥。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡盗温,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出成肘,到底是詐尸還是另有隱情卖局,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布双霍,位于F島的核電站砚偶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏洒闸。R本人自食惡果不足惜染坯,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丘逸。 院中可真熱鬧酒请,春花似錦、人聲如沸鸣个。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囤萤。三九已至昼窗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涛舍,已是汗流浹背澄惊。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留富雅,地道東北人掸驱。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像没佑,于是被迫代替她去往敵國和親毕贼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359