MySQL例题一 综合案例(多条件组合查询)
MySQL例題一 綜合案例
多條件組合查詢練習(xí)
/* NULL和空值
-NULL也就是在字段中存儲(chǔ)NULL值,空值也就是字段中存儲(chǔ)空字符(’’)。
從上面看空值(’’)的長(zhǎng)度是0,是不占用空間的;而NULL長(zhǎng)度是NULL,其實(shí)它是占用空間的。
NULL列需要行中的額外空間來(lái)記錄它們的值是否為NULL。
總結(jié)
1、空值不占空間,NULL值占空間。當(dāng)字段不為NULL時(shí),也可以插入空值。
2、當(dāng)使用 IS NOT NULL 或者 IS NULL 時(shí),只能查出字段中沒(méi)有不為NULL的或者為 NULL 的,不能查出空值。
3、判斷NULL 用IS NULL 或者 is not null,SQL 語(yǔ)句函數(shù)中可以使用IFNULL()函數(shù)來(lái)進(jìn)行處理,判斷空字符用 =’‘或者<>’'來(lái)進(jìn)行處理。
4、在進(jìn)行count()統(tǒng)計(jì)某列的記錄數(shù)的時(shí)候,如果采用的NULL值,會(huì)別系統(tǒng)自動(dòng)忽略掉,但是空值是會(huì)進(jìn)行統(tǒng)計(jì)到其中的。
5、MySql中如果某一列中含有NULL,那么包含該列的索引就無(wú)效了。這一句不是很準(zhǔn)確。
6:實(shí)際到底是使用NULL值還是空值(’’),根據(jù)實(shí)際業(yè)務(wù)來(lái)進(jìn)行區(qū)分。個(gè)人建議在實(shí)際開(kāi)發(fā)中如果沒(méi)有特殊的業(yè)務(wù)場(chǎng)景,可以直接使用空值。
參考
NULL和空值 https://blog.csdn.net/u010648555/article/details/94555199
MySQL (37k) 關(guān)鍵字
https://blog.csdn.net/weixin_45851945/article/details/114287877
*/
/*創(chuàng)建外鍵格式
CONSTRAINT fk_dept_personnel foreign key (d_id) references personnel(id)
CONSTRAINT 別名 foreign key (外鍵表值) references 主表(主表值)
*/
– COMMENT 創(chuàng)表時(shí)設(shè)置備注
– auto_increment 設(shè)置自增(整型)
– default 設(shè)置默認(rèn)值
– IF EXISTS 判斷是否存在(如果存在)
– 創(chuàng)建練習(xí)題數(shù)據(jù)庫(kù) 字符集為utf8
create DATABASE Exercises_One CHARSET=utf8;– 切換到Exercises_One下
use Exercises_One;– 創(chuàng)建表之前先刪除同名表(結(jié)構(gòu)和數(shù)據(jù))一般情況下同數(shù)據(jù)庫(kù)下不能出現(xiàn)重名表
DROP TABLE IF EXISTS personnel; create table personnel (id int(11) not null auto_increment COMMENT '主鍵id',name varchar(255) DEFAULT NULL COMMENT '名字 默認(rèn)為空',age int(11) default null COMMENT '年齡 默認(rèn)為空',salary int(10) default null COMMENT '工資 默認(rèn)為空',leader int(11) default null COMMENT '領(lǐng)導(dǎo) 默認(rèn)為空',menpai varchar(255) default null COMMENT '門(mén)派 默認(rèn)為空', primary key (id) COMMENT '主鍵' )charset=utf8;select * from personnel;
– 插入數(shù)據(jù)
– update set 根據(jù)id修改age
update personnel set age=27 WHERE id=2; update personnel set age=28 WHERE id=3; update personnel set age=23 WHERE id=4; update personnel set age=29 WHERE id=5; update personnel set age=30 WHERE id=6; update personnel set age=28 WHERE id=7; update personnel set age=28 WHERE id=8; update personnel set age=26 WHERE id=9; update personnel set age=23 WHERE id=10;– 創(chuàng)建表之前先刪除同名表(結(jié)構(gòu)和數(shù)據(jù))一般情況下同數(shù)據(jù)庫(kù)下不能出現(xiàn)重名表
DROP TABLE IF EXISTS dept; create table dept( d_id int(11) not null auto_increment PRIMARY key COMMENT '主、外鍵', d_name varchar(255) not null COMMENT '部門(mén)名字', adress VARCHAR(255) not null COMMENT '地址', CONSTRAINT fk_dept_personnel foreign key (d_id) references personnel(id) )CHARACTER set=utf8;select * from dept ;
select * from personnel;
– 插入數(shù)據(jù)
– 創(chuàng)建表之前先刪除同名表(結(jié)構(gòu)和數(shù)據(jù))一般情況下同數(shù)據(jù)庫(kù)下不能出現(xiàn)重名表
DROP TABLE IF EXISTS leaders; create table leaders(l_id int(10) primary key not null auto_increment COMMENT'主鍵',l_name varchar(255) default null COMMENT '名字 默認(rèn)為空',CONSTRAINT fk_dleaderst_personnel foreign key (l_id) references personnel(leader) )CHARSET=utf8;– 1.查詢所有人員信息
select * from personnel;– 2.只查詢?nèi)藛T的姓名和年齡
select name,age from personnel;– 3.查詢年齡為28歲的有哪些人員
select * from personnel where age=28;– 4.查詢60歲以下的人員有哪些人員
select * from personnel where age<60;– 5.查詢27歲以上并且工資大于8000的人員有哪些
select * from personnel where age>27 and salary>8000;– 6.查詢姓[張]的人員有哪些
– 'like和 %'組合使用 模糊查詢
– 正則表達(dá)式 REGEXP
select * from personnel where name REGEXP '^張';– 7.查詢哪些人員屬于 武當(dāng)/華山/嵩山
**select * from personnel where menpai in('武當(dāng)','華山','嵩山');**select * from personnel where menpai='華山'; select * from personnel where menpai='武當(dāng)'; select * from personnel where menpai='嵩山';– 8.查詢工資在 5000-8900 的人員有哪些
– 邏輯運(yùn)算符 <= >=
– 9.查詢所有人員,要求按工資倒序排列
– 倒敘order bay 正序desc
– 10.查詢令狐沖的領(lǐng)導(dǎo)人是誰(shuí)
– 需要關(guān)聯(lián)表,這里暫無(wú)信息
– 11.查詢?nèi)藛T表中最高工資是多少
– MAX()最大值
– 12.查詢?nèi)藛T表中最低工資是多少
– MIN()最小值
– 13.查詢所有人員的平均工資是多少
– AVG()平均數(shù)
– 14.查詢所有人員的工資總和是多少
– SUM()總數(shù)
– 15.查詢目前有多少個(gè)人員
– COUNT()統(tǒng)計(jì)總數(shù)
– 16.查詢當(dāng)前武林中有哪些門(mén)派
– DISTINCT 清楚重復(fù)(去重)
– GROUP BY 分組
select DISTINCT menpai from personnel GROUP BY menpai;– 17.查詢 武當(dāng)派 最高工資是誰(shuí)
select MAX(salary),NAME from personnel where menpai='武當(dāng)';– 18.查詢各門(mén)派的平均工資是多少
– GROUP BY 分組查詢
– ORDER BY排列
– 19.查詢當(dāng)前武林中有哪些門(mén)派的平均工資大于8000 并按工資倒序排列
– HAVING
– DESC 倒序排列 組合 ORDER BY 使用
– HAVING 字句可以讓我們篩選成組后的各種數(shù)據(jù),where字句在聚合前先篩選記錄,也就是說(shuō)作用在group by和HAVING字句前。而 HAVING子句在聚合后對(duì)組記錄進(jìn)行篩選。我的理解就是真實(shí)表中沒(méi)有此數(shù)據(jù),這些數(shù)據(jù)是通過(guò)一些函數(shù)生存。
– 20.查詢當(dāng)前人員表的中的第3條數(shù)據(jù)到第7條數(shù)據(jù)
– LIMIT 分頁(yè)查詢 可指定開(kāi)始結(jié)束位置
– 21.查詢哪些門(mén)派下沒(méi)有弟子
select * from personnel GROUP BY menpai HAVING COUNT(*) =1;select *from personnel GROUP BY menpai HAVING COUNT(*)=1;– 22.查詢武當(dāng)派下有哪些弟子
select * from personnel where menpai='武當(dāng)';– 23.查詢 各門(mén)派 的 工資總和 按倒序/正序排列
– 按什么什么排列 就要想起來(lái)分組和排序結(jié)合使用
– 正序 ASC
– 倒敘 DESC
select menpai,SUM(salary) from personnel GROUP BY menpai ORDER BY SUM(salary) DESC;– 24.刪除工資重復(fù)的人員,請(qǐng)保留年齡最大的一個(gè)人
DELETE FROM personnel where id in(SELECT id FROM (SELECT id from personnel where salary in(SELECT salary FROM personnel GROUP BY salary HAVING count(*)>1)AND age not in (SELECT MAX(age) FROM personnel GROUP BY salary HAVING count(*)>1)) as temp );– 25.將武當(dāng)派 張三豐 修改為 張豐
update set name='張三豐' where name='張豐';select * from personnel; select * from dept;– 26.將所有門(mén)派大哥工資上調(diào)10%,但不包括Alex.
– != 非 不包含
– 27.查看哪些人員的門(mén)派已登記地理位置.
– 多表多列查詢
– DISTINCT 清楚重復(fù)(去重)
– 28.查詢所有人員門(mén)派的位置信息,不存在位置信息則不顯示
– LEFT JOIN左連接 on后跟鏈接判斷條件
– 29.在湖北省內(nèi)的門(mén)派中的人員有哪些.
select name,adress from personnel LEFT JOIN dept on menpai=d_name where adress='湖北';– 30.在陜西省內(nèi)門(mén)派中的工資小于5000,年齡大于20歲的人員有哪些,按主鍵倒序排列
SELECT * FROM personnel INNER JOIN dept on personnel.menpai = dept.d_name AND dept.adress = '湖北' and personnel.salary <5000 AND personnel.age >20 ORDER BY personnel.id DESC;總結(jié)
以上是生活随笔為你收集整理的MySQL例题一 综合案例(多条件组合查询)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 77. Combinations
- 下一篇: Hadoop之block副本放置策略 R