आप यह सोचकर ट्रैक से बाहर हैं कि इसमें शामिल होने से कई पंक्तियों के साथ क्या करना है। समस्या आपके तर्क के साथ WHERE क्लॉज में है। आप तारीखों के संदर्भ में यह नहीं कहते कि आप क्या चाहते हैं, इसलिए यह जानना असंभव है कि समाधान क्या होना चाहिए।
मैंने बुकिंग टेबल को देखने के लिए सरल कर दिया। मुझे दो पंक्तियाँ मिलती हैं जहाँ आप केवल एक की अपेक्षा कर रहे हैं। आपको केवल उस सशर्त का पता लगाना है जो आप वास्तव में चाहते हैं।
mysql> SELECT * FROM booking WHERE NOT(start <= '2018-07-23' AND end >= '2018-07-21');
+-----+------------+------------+-----------+
| uid | start | end | apartment |
+-----+------------+------------+-----------+
| 1 | 2018-07-18 | 2018-07-20 | 1 |
| 3 | 2018-07-18 | 2018-07-20 | 2 |
+-----+------------+------------+-----------+
2 rows in set (0.00 sec)