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