日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL例题一 综合案例(多条件组合查询)

發(fā)布時(shí)間:2023/12/16 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL例题一 综合案例(多条件组合查询) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL例題一 綜合案例

多條件組合查詢練習(xí)

  • 易錯(cuò)知識(shí)點(diǎn)
  • /* NULL和空值
    -NULL也就是在字段中存儲(chǔ)NULL值,空值也就是字段中存儲(chǔ)空字符(’’)。

    select length(NULL), length(''), length('1'),length('2');+--------------+------------+-------------+-------------+ | length(NULL) | length('') | length('1') | length('2') | +--------------+------------+-------------+-------------+ | NULL | 0 | 1 | 1 | +--------------+------------+-------------+-------------+ 1 row in set

    從上面看空值(’’)的長(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)建數(shù)據(jù)庫(kù)基本操作語(yǔ)句
  • – 創(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ù)

    INSERT INTO personnel VALUES(DEFAULT,'張豐',25,10000,0,'武當(dāng)'); INSERT INTO personnel VALUES(DEFAULT,'張無(wú)忌',25,8000,0,'華山'); INSERT INTO personnel VALUES(DEFAULT,'岳不群',25,6500,0,'嵩山'); INSERT INTO personnel VALUES(DEFAULT,'東方不敗',25,12000,0,'日月神教'); INSERT INTO personnel VALUES(DEFAULT,'令狐蔥',25,4000,0,'武當(dāng)'); INSERT INTO personnel VALUES(DEFAULT,'景天',25,2000,0,'華山'); INSERT INTO personnel VALUES(DEFAULT,'龍葵',25,10000,0,'嵩山'); INSERT INTO personnel VALUES(DEFAULT,'茂茂',25,10000,0,'日月神教'); INSERT INTO personnel VALUES(DEFAULT,'白豆腐',25,6500,0,'長(zhǎng)白山'); INSERT INTO personnel VALUES(DEFAULT,'Farke',25,10000,0,'武當(dāng)'); INSERT INTO personnel VALUES(DEFAULT,'Alex',25,10000,0,'Java');

    – 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ù)

    INSERT INTO dept VALUES(DEFAULT,'武當(dāng)','河南'); INSERT INTO dept VALUES(DEFAULT,'華山','湖北'); INSERT INTO dept VALUES(DEFAULT,'嵩山','深圳'); INSERT INTO dept VALUES(DEFAULT,'日月神教','廣州'); INSERT INTO dept VALUES(DEFAULT,'長(zhǎng)白山','烏魯木齊'); INSERT INTO dept VALUES(DEFAULT,'雇傭兵','新疆');

    – 創(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和 %'組合使用 模糊查詢

    select * from personnel where name 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)算符 <= >=

    select * from personnel where 5000<=salary and salary>=8900;

    – 9.查詢所有人員,要求按工資倒序排列
    – 倒敘order bay 正序desc

    select * from personnel ORDER BY salary; -- select * from personnel DESC salary;

    – 10.查詢令狐沖的領(lǐng)導(dǎo)人是誰(shuí)
    – 需要關(guān)聯(lián)表,這里暫無(wú)信息

    select * from personnel where id = (select leader from personnel where name = '令狐蔥');

    – 11.查詢?nèi)藛T表中最高工資是多少
    – MAX()最大值

    select MAX(salary) from personnel;

    – 12.查詢?nèi)藛T表中最低工資是多少
    – MIN()最小值

    select MIN(salary) FROM personnel;

    – 13.查詢所有人員的平均工資是多少
    – AVG()平均數(shù)

    select AVG(salary) from personnel;

    – 14.查詢所有人員的工資總和是多少
    – SUM()總數(shù)

    select SUM(salary) from personnel;

    – 15.查詢目前有多少個(gè)人員
    – COUNT()統(tǒng)計(jì)總數(shù)

    select COUNT(*) from personnel; select COUNT(name) from personnel; select COUNT(id) from personnel;

    – 16.查詢當(dāng)前武林中有哪些門(mén)派
    – DISTINCT 清楚重復(fù)(去重)

    select DISTINCT menpai from personnel ;

    – 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排列

    select menpai,AVG(salary) from personnel GROUP BY menpai;

    – 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ù)生存。

    select menpai,AVG(salary)>8000 from personnel GROUP BY menpai HAVING AVG(salary)>8000 ORDER BY AVG(salary) DESC;

    – 20.查詢當(dāng)前人員表的中的第3條數(shù)據(jù)到第7條數(shù)據(jù)
    – LIMIT 分頁(yè)查詢 可指定開(kāi)始結(jié)束位置

    select * from personnel LIMIT 2, 5;

    – 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

    select menpai,SUM(salary) from personnel GROUP BY menpai ORDER BY SUM(salary) 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.
    – != 非 不包含

    update personnel set salary = salary+salary*0.1 where leader = 0 and name !='Alex';

    – 27.查看哪些人員的門(mén)派已登記地理位置.
    – 多表多列查詢
    – DISTINCT 清楚重復(fù)(去重)

    select DISTINCT adress,d_name from personnel,dept where menpai=d_name;

    – 28.查詢所有人員門(mén)派的位置信息,不存在位置信息則不顯示
    – LEFT JOIN左連接 on后跟鏈接判斷條件

    select name,adress from personnel LEFT JOIN dept on menpai=d_name ;

    – 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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。