SQL の基本概念
-
WHERE と HAVING: SQL の
WHERE
句と HAVING
句を区別し、グループ化の前後でデータをフィルタリングする際の用途に焦点を当てます。
-
JOIN タイプ:
INNER JOIN
、LEFT JOIN
、RIGHT JOIN
、FULL OUTER JOIN
の違いを説明し、例を示して機能を示します。
-
主キーと一意のキー: データの整合性と一意性を確保する際の
PRIMARY KEY
制約と UNIQUE KEY
制約の役割を定義します。
-
FOREIGN KEY: テーブル間の関係を確立し、参照整合性を維持する際の
FOREIGN KEY
制約の目的を説明します。
-
SQL インデックス: SQL インデックス、クエリのパフォーマンスへの影響、作成と保守に伴うトレードオフについて説明します。
-
SQL ビュー: SQL ビューを定義し、その利点 (データの抽象化、セキュリティ、クエリの簡素化) と制限 (潜在的なパフォーマンスのオーバーヘッド、ベース テーブルへの依存) の概要を説明します。
-
GROUP BY 句: 類似した値を持つ行をグループ化する
GROUP BY
句の機能を説明し、実際の例を示します。
-
TRUNCATE、DELETE、および DROP:
TRUNCATE
、DELETE
、および DROP
コマンドを比較対照し、データ操作と可逆性の違いを強調します。
-
サブクエリと結合: サブクエリと結合を比較し、複数のテーブルのデータを結合する際のそれぞれの異なるアプローチを強調します。
-
集計関数: 集計関数 (例:
SUM
、AVG
、COUNT
、MIN
、MAX
) を定義し、その使用法を例で説明します。
中級 SQL 熟練度
-
データベースの正規化: データベースの正規化、そのさまざまな正規形式 (1NF、2NF、3NF、BCNF)、およびデータの冗長性の削減とデータの整合性の向上におけるその重要性について説明します。
-
非正規化: 非正規化を定義し、そのトレードオフとそれが有益なシナリオ (パフォーマンスの最適化) について説明します。
-
CASE ステートメント: SQL クエリ内の条件ロジックに対する
CASE
ステートメントの使用方法を示します。
-
CHAR と VARCHAR:
CHAR
と VARCHAR
データ型を比較対照し、それぞれのストレージ特性と適切な使用例を強調します。
-
ACID プロパティ: SQL データベース トランザクションのコンテキストにおける ACID プロパティ (原子性、一貫性、分離性、耐久性) と、データの信頼性を確保する際のそれらの役割について説明します。
-
クラスター化インデックスと非クラスター化インデックス: データ ストレージとクエリ パフォーマンスへの影響に焦点を当てて、クラスター化インデックスと非クラスター化インデックスを区別します。
-
遅いクエリの最適化: クエリの書き換え、インデックス作成、実行計画の分析など、遅い SQL クエリを最適化するための戦略を示します。
-
共通テーブル式 (CTE): CTE を定義し、可読性と再利用性の観点からサブクエリと比較対照します。
-
重複行の処理: 一意のレコードのみの識別、削除、保持など、SQL で重複行を処理するためのメソッドを提供します。
-
UNION と UNION ALL: 重複行の処理の違いに焦点を当てて、
UNION
と UNION ALL
集合演算子について説明します。
高度な SQL 専門知識
-
ウィンドウ関数: ウィンドウ関数 (
ROW_NUMBER()
、RANK()
、DENSE_RANK()
など) を説明し、現在の行に関連する一連のテーブル行にわたって計算を実行する際のその使用法を示します。
-
マテリアライズド ビュー: マテリアライズド ビューを定義し、ストレージ、更新メカニズム、パフォーマンスへの影響に関して通常のビューと比較対照します。
-
SQL パーティショニング: データベース パーティショニング、そのさまざまなタイプ (範囲、リスト、ハッシュ)、および大規模なデータセットの管理とクエリを実行する際の利点について説明します。
-
SQL のページネーション: SQL クエリにページネーションを実装して、管理可能なチャンクでデータを取得する手法について説明します。
-
OLTP と OLAP: OLTP (オンライン トランザクション処理) データベースと OLAP (オンライン分析処理) データベースを区別し、それぞれの異なるアーキテクチャとユース ケースを強調します。
-
シャード データベース: シャーディング、データベースを水平方向に拡張する目的、およびそれに関連する課題について説明します。
-
デッドロックの検出と解決: SQL データベースのデッドロックを検出して解決する方法について説明します。
-
クエリ実行プラン: クエリ実行プラン、パフォーマンス分析におけるその役割、およびクエリ実行プランを最適化する手法について説明します。
-
ストアド プロシージャと関数: ストアド プロシージャと関数を比較対照し、機能と使用方法の違いを強調します。
-
SQL トリガー: SQL トリガーを定義し、特定のイベントに基づいてデータベース アクションを自動化する際の使用例を示します。
実際の応用シナリオ
-
電子商取引データベースの設計: エンティティ、関係、データの整合性を考慮して、単純な電子商取引プラットフォームのデータベース スキーマを設計します。
-
ゼロ ダウンタイムのデータベース移行: アプリケーションとユーザーへの中断を最小限に抑え、ゼロ ダウンタイムでデータベースを移行する戦略の概要を説明します。
-
スキーマ変更の処理: 運用環境でのスキーマ変更を管理し、データの一貫性を確保し、中断を最小限に抑えるためのプロセスについて説明します。
-
大規模データベースのバックアップと復元: 大規模データベースを効率的かつ確実にバックアップおよび復元する戦略について説明します。
-
高可用性のためのデータベース レプリケーション: 高可用性とフォールト トレランスを強化するためにデータベース レプリケーションを実装する方法について説明します。
-
大きなテーブルのインデックス作成: パフォーマンスへの影響を最小限に抑えながら、ライブ システムで非常に大きなテーブルにインデックスを作成するプロセスについて説明します。
-
機密データの保護: データベース内の機密データを保護する方法 (暗号化、アクセス制御など) について説明します。
-
大規模なデータセットを使用したクエリの最適化: 大規模なデータセット (1,000 万行) を含むクエリを最適化する戦略の概要を説明します。
-
遅いクエリのトラブルシューティング: 突然遅くなったクエリをトラブルシューティングするアプローチについて説明します。
-
RBAC の実装: ユーザー権限を効果的に管理するために SQL データベースにロールベースのアクセス制御 (RBAC) を実装する方法について説明します。
クエリベースの演習
-
2 番目に高い給与: SQL クエリを作成して、従業員テーブルで 2 番目に高い給与を見つけます。
-
売上の累計: 一定期間の売上の累計を計算するクエリを作成します。
-
同じマネージャーを持つ従業員: 同じマネージャーを共有するすべての従業員を検索するクエリを作成します。
-
重複行の削除: テーブルから重複行を削除し、一意の行ごとに 1 つのインスタンスを保持するクエリを作成します。
-
収益別の上位 3 人の顧客: 総収益に基づいて上位 3 人の顧客を取得するクエリを作成します。
-
n 番目の行の取得: テーブルから n 番目の行を取得するクエリを作成します。
-
最初と最後のレコード: テーブルから最初と最後のレコードを取得するクエリを作成します。
-
毎月の購入: 特定の年の毎月に購入した顧客を検索するクエリを作成します。
-
製品の寄与率: 総売上高に対する各製品の寄与率を計算するクエリを作成します。
-
最近販売されていない製品: 過去 30 日間に販売されていない製品を検索するクエリを作成します。
パフォーマンスのチューニングと最適化
-
カバレッジ インデックス: クエリのパフォーマンス向上におけるカバレッジ インデックスとその役割について説明します。
-
クエリ ヒント: SQL でのクエリ ヒントの使用と、その潜在的な利点と欠点について説明します。
-
パフォーマンスのためのデータベース パーティショニング: データベース パーティショニングによりクエリのパフォーマンスがどのように向上するかを説明します。
-
一時テーブル: SQL での一時テーブルの目的と使用法について説明します。
-
大規模データのインポート: パフォーマンスを低下させることなく大規模なデータセットをデータベースに効率的にインポートするための戦略の概要を示します。
-
バッチ処理: SQL でのバッチ処理とその利点について説明します。
-
複数の結合の最適化: 複数の結合を使用してクエリを最適化する手法について説明します。
-
相関サブクエリと最適化: 相関サブクエリとそのパフォーマンスを最適化するための戦略について説明します。
-
複合キーのインデックス作成: 複合キーのインデックス作成戦略について説明します。
-
DML 操作に対するインデックス作成の影響: インデックス作成が
INSERT
、UPDATE
、および DELETE
操作にどのような影響を与えるかを説明します。
データの整合性、セキュリティ、コンプライアンス
-
楽観的ロックと悲観的ロック: 楽観的ロック メカニズムと悲観的ロック メカニズムを比較対照します。
-
監査の実装: データ変更を追跡するために SQL データベースに監査を実装する方法について説明します。
-
SQL インジェクションの防止: SQL インジェクションの脆弱性とそれを防止する手法について説明します。
-
行レベルのセキュリティ: SQL の行レベル セキュリティ (RLS) とその実装について説明します。
-
データ検証の強制: SQL データベースでデータ検証ルールを強制する方法について説明します。
-
ソフト削除とハード削除: ソフト削除とハード削除を比較対照します。
-
CHECK 制約: データの整合性を強制する際の
CHECK
制約の使用について説明します。
-
機密データの暗号化: データベース内の機密データを暗号化する方法について説明します。
-
アクセス制御メカニズム: SQL データベースのさまざまなアクセス制御メカニズムについて説明します。
-
データベース マスキング: 機密データを保護するためのデータベース マスキング手法について説明します。
スケーラビリティと高可用性
-
リレーショナル データベースのスケーリング: リレーショナル データベースのスケーリングの課題について説明します。
-
リードレプリカのセットアップ: SQL データベースのリードレプリカのセットアップを設計および実装する方法について説明します。
-
結果整合性: 分散データベースにおける結果整合性について説明します。
-
マルチマスター レプリケーション: マルチマスター レプリケーションとその使用例について説明します。
-
データベース パフォーマンスの監視: 高トラフィック環境でデータベースのパフォーマンスを監視する方法について説明します。
-
データ アーカイブ: SQL データベースでのデータ アーカイブ戦略について説明します。
-
ホット スタンバイとリード レプリカ: ホット スタンバイとリード レプリカの構成を比較対照します。
-
データベース フェイルオーバー: 高可用性セットアップでデータベース フェイルオーバーを処理する方法について説明します。
-
接続プーリング: データベースのスケーラビリティにおける接続プーリングの役割について説明します。
-
分散トランザクション: 複数のデータベース間で分散トランザクションを実装する方法について説明します。
複雑な SQL トピック
-
トランザクション分離レベル: トランザクション分離レベルとその使用例について説明します。
-
ハッシュ結合とネストされたループ結合: ハッシュ結合とネストされたループ結合を比較対照します。
-
論理データ モデルと物理データ モデル: 論理データ モデルと物理データ モデルを区別します。
-
集計関数の Null 値: SQL が集計関数の
NULL
値を処理する方法について説明します。
-
非正規化のトレードオフ: データの非正規化に関連するトレードオフについて説明します。
-
断片化したインデックスの特定と解決: 断片化したインデックスを特定して解決する方法について説明します。
-
ファントム リードと防止: ファントム リードとその防止方法について説明します。
-
シリアル化可能とスナップショットの分離: シリアル化可能とスナップショットの分離を比較対照します。
-
SQL のシーケンス: SQL のシーケンスの目的と使用法を説明します。
-
変更データ キャプチャ (CDC): 変更データ キャプチャ (CDC) と SQL データベースでのその実装について説明します。
行動に関する質問とベストプラクティス
-
SQL の困難な問題: 以前のプロジェクトで解決した SQL の困難な問題について説明し、アプローチと解決策を強調します。
-
SQL クエリの文書化: 他の開発者向けに複雑な SQL クエリを文書化するアプローチを説明します。
-
クエリの保守性: SQL クエリの保守性を確保するために実行する手順について説明します。
-
パフォーマンスの悪いクエリの最適化: パフォーマンスの低いクエリを最適化することに成功した状況について説明します。
-
SQL と NoSQL: プロジェクトに SQL データベースと NoSQL データベースのどちらを使用するかをどのように決定するかについて話し合います。
-
スキーマ設計: 新しいアプリケーションのデータベース スキーマを設計するアプローチについて説明します。
-
データベース バックアップのテスト: データベース バックアップが定期的にテストされていることを確認する方法を説明します。
-
複雑なデータベースの移行: 複雑なデータベースの移行を実装したときのことを説明してください。
-
最新情報を維持する: 最新の SQL およびデータベース テクノロジを常に最新の状態に保つ方法について話し合います。
-
監視とデバッグ用のツール: SQL クエリの監視とデバッグに使用するツールをリストします。
この拡張バージョンでは、より詳細な説明と概念間の明確な区別が提供され、上級開発者のインタビューにより適しています。 自分の具体的な経験や面接の背景に合わせて、必ず回答を調整してください。
以上がマスター SQL インタビュー: 上級開発者向けの重要な質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。