判斷是否為空 mysql
檢查字段是否為空 is null
檢查字段是否不為空 is not null
創(chuàng)建一個表t1淋昭,包含id和name兩個字段
create table t1(id int, name varchar(10));
向t1表中插入兩行數(shù)據(jù)馆里,只指定了id造成,name為NULL
insert into t1(id) values(1),(2);
向t1表中插入一行數(shù)據(jù)址否,指定了id和name
insert into t1 values(3,'tongyao');
查詢t1表中name不為NULL的所有記錄
select * from t1 where name is not null;
查詢t1表中name為NULL的所有記錄
select * from t1 where name is null;
---------------邏輯判斷
邏輯與操作符 and or not
查詢students表中年齡在16到21歲之間的所有記錄
select * from students where 16<=age and age<=21;
查詢students表中年齡小于等于16歲或大于等于22歲的所有記錄
select * from students where age<=16 or age >=22;
查詢students表中年齡不是16歲的所有記錄
select * from students where not age=16;
--------------排序
用于對查詢結(jié)果進行排序 order by
根據(jù)age字段正序排序查詢students表
select * from students order by age;
根據(jù)age字段倒序排序查詢students表
select * from students order by age desc;
-----限制
用于限制查詢結(jié)果的行數(shù) limit
展示students表中的前5條數(shù)據(jù)
select * from students limit 5;
從students表的第4條數(shù)據(jù)開始(注意贬派,這里的計數(shù)從0開始)彻桃,輸出接下來的3條數(shù)據(jù)
select * from students limit 3,3;
-------去重
用于去除查詢結(jié)果中的重復(fù)記錄 distinct
查詢grades表中不重復(fù)的subject_number字段值
select distinct subject_number from grades;
--------模糊查詢
用于進行模糊匹配查詢 like
查詢students表中name字段以'xi'開頭的所有記錄
select * from students where name like 'xi%';
查詢students表中name字段第二個字符為'l'且第三個字符任意的所有記錄
select * from students where name like 'li_ _'; #這里2個下劃線 匹配幾個下劃線-1
--------------范圍查詢
用于指定一個范圍進行查詢 between
select * from students where age in (1,16,17,22); #選擇 age 在 (1, 16, 17, 22) 這些值中的記錄
查詢students表中年齡在16到22歲之間的所有記錄(包含16和22)
select * from students where age between 16 and 22;
-----------聚合函數(shù)
計算students表中的記錄總數(shù)
select count(*) from students;
計算students表中非NULL的name字段值的數(shù)量
select count(name) from students;
計算students表中所有記錄的age字段值之和
select sum(age) from students;
計算students表中所有記錄的age字段值的平均值
select avg(age) from students;
--------------分組
根據(jù)一個或多個列對結(jié)果集進行分組坛善,然后使用聚合函數(shù)進行計算 having子句用于對分組后的結(jié)果進行過濾
通過subject_number和grade對grades表進行分組,并篩選出grade大于等于80的分組及其記錄數(shù)
select subject_number, grade, count(*) from grades group by subject_number, grade having grade>=80;
注意:where子句在數(shù)據(jù)分組前進行過濾邻眷,而having子句在數(shù)據(jù)分組后進行過濾 having 在 where后面
------------子查詢 子查詢是嵌套在另一個查詢中的查詢
派生表(子查詢的結(jié)果集)必須有一個別名眠屎,以便在外部查詢中引用
查詢students表中年齡小于18歲的記錄,但僅限于年齡最小的前5名記錄
select * from (select * from students order by age limit 5) as tongyao where age < 18;
--------------鏈接查詢
內(nèi)連接查詢肆饶,選擇t1和t2中id匹配的記錄
SELECT t1.id, t1.name AS t1_name, t2.name AS t2_name FROM t1
INNER JOIN t2 ON t1.id = t2.id;
外連接(LEFT JOIN 和 RIGHT JOIN)
左外連接查詢改衩,選擇t1表中的所有記錄,以及t2表中匹配的記錄
如果t1中的id在t2中沒有對應(yīng)的記錄驯镊,則t2的字段將為NULL
SELECT t1.id, t1.name AS t1_name, t2.name AS t2_name FROM t1
LEFT JOIN t2 ON t1.id = t2.id;
右外連接查詢葫督,選擇t2表中的所有記錄,以及t1表中匹配的記錄
如果t2中的id在t1中沒有對應(yīng)的記錄板惑,則t1的字段將為NULL
SELECT t1.id, t1.name AS t1_name, t2.name AS t2_name FROM t1
RIGHT JOIN t2 ON t1.id = t2.id;
在進行連接查詢時橄镜,確保在 JOIN 關(guān)鍵字后面緊跟著 ON 關(guān)鍵字,并在 ON 后面指定連接條件冯乘。
當進行外連接時洽胶,未匹配的記錄將在對應(yīng)的表中顯示為NULL。左外連接(LEFT JOIN)保留左表中的所有記錄裆馒,而右外連接(RIGHT JOIN)保留右表中的所有記錄妖异。