不會SQL,好意思說自己會程式設計?

2021-09-29 14:10:29 字數 3403 閱讀 2195

歡迎關注,敬請點讚!

【摘要】

現有乙個會議室管理系統,有一張會議室表(id,名稱,位置,大小,投影projection),一張預定表(id,會議室id,起始時間,結束時間,預定人),建立方法及**如下:

create table meeting (

id int(11) not null auto_increment,

name varchar(50) default null,

position varchar(256) default null,

size int(11) default '0',

projection int(11) default '1',

primary key (id)

) engine=innodb auto_increment=7 default charset=utf8mb4;

meeting表id

name

position

size

projection

1room1

10112002

room2

10312013

room3

10415014

room4

20112005

room5

20312016

room6

204150

1

create table `booking` (

`id` int(11) not null auto_increment,

`meeting_id` int(11) default null,

`start_time` datetime default current_timestamp,

`end_time` datetime default current_timestamp,

`booking_man` varchar(50) default 'admin',

primary key (`id`)

) engine=innodb auto_increment=17 default charset=utf8mb4;

booking表id

meeting_id

start_time

end_time

booking_man11

2019/11/12 17:50

2019/11/12 19:50

xiao wang25

2019/11/12 20:50

2019/11/12 22:50

xiao wang33

2019/11/12 20:50

2019/11/12 22:50

xiao liu44

2019/11/12 20:50

2019/11/12 22:50

xiao liu52

2019/11/12 20:50

2019/11/12 22:50

xiao sun61

2019/11/12 22:20

2019/11/12 22:50

xiao sun72

2019/11/12 23:00

2019/11/12 23:40

xiao wang81

2019/11/12 20:50

2019/11/12 21:20

xiao wu93

2019/11/12 23:00

2019/11/12 23:40

xiao liu

select b.booking_man, count(*) c from booking b join meeting m on b.meeting_id = m.id group by b.booking_man order by c desc;
根據題意,需要顯示預定會議室的人booking_man和次數count,倒序排列;

簡寫直接跟在全稱後面,中間的as省略,如count() [as] c;

同級的逗號隔開,如b.booking_man, count() c;

join on 配合使用,on 可以理解為「滿足…條件時」,其作用範圍終止於(不包括)後面其它語法如group by、order by、where等;

預定和被預定,意味著兩表連線(join)時,booking表的meeting_id = meeting表的id。

select m.name, count(*) c from meeting m join booking b on m.id = b.meeting_id group by m.name order by c desc limit 3;
根據題意,需要顯示會議室名稱name和次數,倒序排列,顯示前幾個(比如前3個);

limit 3表示顯示前3個。

返回頂部

select b.booking_man, m.name, b.start_time, b.end_time, m.projection from booking b join meeting m on b.meeting_id = m.id and m.projection = 1;
根據題意,需要顯示預定會議室的人booking_man,被預定且有投影(booking表的meeting_id = meeting表的id,且projection = 1),會議室名稱(因乙個人可能定多個會議室),宜顯示起始和結束時間。

select now(), m.name from meeting m join booking b on b.meeting_id = m.id and now() between b.start_time and b.end_time union select now(), m.name from meeting m where m.id not in (select b.meeting_id from booking b);
根據題意,需要顯示該時段now(),會議室名稱name,(情況一)有預定但當前時間不在起始和結束時間範圍內的會議室 聯合 (情況二)沒有預定,room2和room3屬於情況一,room6屬於情況二。

歡迎關注,敬請點讚!

返回頂部

不再不好意思

1 我決定了將知識 邏輯應用於生活。1 我會仔細分析彼此雙方的優勢 劣勢 目的 需求 價值 人品 等等一系列。以及我自己要的,還有我的應對策略。我決定這麼做。2 當然這遠遠不夠。我決定在日常生活中利用這些思想。比如吃飯 休息 購物 我決定應用。我決定形成我自己的方法。2 我決定堅守原則 知己知彼,百...

連個判空都不會,還好意思說工作好多年

由於原來一直都沒注意到這兩個方法,一直使用string.isnullorempty,當看到string.isnullorwhitespace時,而且在微軟人員開發的專案中經常使用時才注意到,查了一下msdn,記一下免得以後忘記。string.isnullorempty 都知道,這個功能是判斷字串是否...

別讓不好意思害了你 。

昨晚和乙個本科同學嘮嗑 祭奠了一下青春 想到本科畢業的時候除了畢業答辯 班裡還組織了最後一次班會 四年的相處大家已經很熟悉了 說是班會到也算不上 就是乙個班級的人聚到一起 每個人上台簡單講了一段話 要麼回憶一下過去的四年 要麼分享一些經驗 其中乙個同學的 ppt 標題現在依舊很深刻 是的 標題就是 ...