Можете ли вы составлять SQL-запросы для iOS (Core Data, SQLite)?

«Можете ли вы составлять SQL-запросы для iOS (Core Data, SQLite)?» — вопрос из категории Базы данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, могу составлять SQL-запросы для работы с базами данных в iOS-разработке, используя как высокоуровневые абстракции (Core Data), так и прямой SQL (SQLite).

1. Core Data (рекомендуемый способ): Использую NSFetchRequest с NSPredicate для типобезопасных и оптимизированных запросов.

// Запрос: выбрать пользователей старше 18 лет, отсортированных по имени
let request: NSFetchRequest<User> = User.fetchRequest()
request.predicate = NSPredicate(format: "age > %@", NSNumber(value: 18))
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
// Для эффективной работы с UITableView часто использую NSFetchedResultsController

2. Прямой SQL (через обёртки вроде FMDB или SQLite.swift):

// Пример с FMDB для SQLite
let query = """
SELECT u.id, u.name, COUNT(o.id) as order_count
FROM Users u
LEFT JOIN Orders o ON u.id = o.user_id
WHERE u.age > ?
GROUP BY u.id
HAVING order_count > 0
ORDER BY u.name ASC;
"""
let resultSet = try database.executeQuery(query, values: [18])

Ключевые компетенции:

  • Знание основных операторов: SELECT, INSERT, UPDATE, DELETE, JOIN (INNER, LEFT), GROUP BY, HAVING.
  • Понимание важности индексов для оптимизации запросов к большим таблицам.
  • Умение писать подзапросы и использовать агрегирующие функции (COUNT, SUM, AVG).
  • Безопасная работа с параметризованными запросами для предотвращения SQL-инъекций.