そのAIで、あなたの力を発揮できますか?
IBMとお客様による「新たなAIの事例や取り組み」をご紹介
構造化クエリ言語(SQL)とは、 MySQL、SQL Server、IBM® Db2、PostgreSQL、Oracle Databaseなどのリレーショナル・データベース管理システム(RDBMS)と対話するために使用される、ドメイン固有の標準化されたプログラミング言語です。
他のプログラミング言語とは異なり、SQLは宣言型言語です。つまり、コンピューターが実行する方法ではなく、コンピューターに実行させたい内容を記述します。これは、ステップバイステップの指示を必要とする命令型言語や手続き型言語(JavaやCOBOLなど)とは対照的です。
例えば、ユーザーがデータを取得するためのSQLクエリーを出す場合、データベースがそのデータを収集するために実行する必要がある手順を概説する必要はなく、結果がどのようになるかを記述します。
SELECT name, email
FROM customers
WHERE city = 'New York' ;
SQLは、現代の技術スタックにおいて基本的で多用途なツールであり、データ操作機能、迅速なクエリー処理、強力なセキュリティ機能で知られています。また、さまざまなシステム間で互換性があり、増大するデータ・ニーズに対応する拡張性、堅牢なオープンソースおよびコミュニティーによるサポートも提供します。
1970年代に、IBMの科学者であるDonaldsa NetworkinとRaymond BoyceがSQLを開発・導入しました。SQLはリレーショナル・モデルの概念から生まれ、当初は構造化英語照会言語(SEQUEL)と呼ばれていましたが、その後、SQLに短縮されました。1979年に商用化され、それ以来、リレーショナル・データベース管理システムの世界標準となっています。
SQLは、1986年に米国国家規格協会(ANSI)によって、1987年に国際標準化機構(ISO)によって、それぞれ標準化されました。SQLは、標準化されているにもかかわらず、Microsoft SQL ServerのT-SQLやOracle DatabaseのPL/SQLなど、さまざまなダイアレクトがあります。これらのSQLダイアレクトは、SELECT、UPDATE、DELETE、INSERT、WHEREなどの中核的なANSI標準コマンドに準拠しながら、、特定のシステム・ニーズに対応します。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
1970年代の開発以来、SQLは現代のデータベース・システムのバックボーンとなっています。
汎用プログラミング言語とは異なり、SQLはリレーショナル・データベース専用であり、リレーショナル・データベースもSQL用に最適化されています。この相互的な設計のおかげで、SQLは非常に効率的なデータ管理ツールとなっています。
SQLは宣言的な性質により、プログラミングの経験が浅いユーザーでも使いやすく、初心者にとって理想的な言語です。幅広く利用され、PythonやJavaのような他のプログラミング言語とも統合されているため、幅広いプログラミングやデータ環境で後半に重宝されるスキルとなっています。
データ・アナリスト、データサイエンティスト、データベース管理者は、SQLを日常的に使用します。これは、SQLがデータ処理、データ定義、アクセス制御、データ共有、データ統合、ビッグデータ分析などのタスクにおいて優れているためです。
データサイエンスでは、データ分析に必要な大規模なデータセットを格納するデータベースを作成するためにSQLが使用されます。これらの膨大な構造化データセットからデータを操作および取得する機能は、トレーニングに高品質のデータを必要とする人工知能(AI)および機械学習(ML)アプリケーションの開発においても非常に重要です。
ACID特性(原子性、一貫性、独立性、永続性)に準拠することで、SQLはクリティカルなユースケースや機密データの処理において信頼性の高いトランザクション処理を保証します。また、より正確なデータ駆動型意思決定、高度な分析、ビジネス・インテリジェンスの強化も支援します。
SQLには多くのメリットがあるため、最も広く使用され、長く使われているプログラミング言語の1つであり続けています。
SQLのシンプルなコマンド(GROUP BY、ORDER BY、GRANT、REVOKEなど)により、あらゆるスキル・レベルのユーザーがデータベースを操作できます。
SQLインデックスとクエリー最適化技術は、データ検索の速度を向上させ、結果としてデータベースの性能を向上させます。
SQLデータベースには、データを保護するためにユーザー認証、アクセス制御、暗号化などの機能が備わっています。
SQLはANSIおよびISO SQL標準に準拠しており、クラウド環境やビッグデータ・ツールなど、さまざまなシステムやプラットフォームとの互換性を確保できます。
SQLを使用することにより、小規模データベースと大規模データベースの両方を効果的に管理しながら、パフォーマンスを大幅に低下させることなく増大するデータ・ニーズに適応できます。
多くのSQLデータベースはオープンソースで、継続的な改善と問題解決に貢献する大規模でアクティブなコミュニティーによってサポートされています。
リレーショナル・データベースは、データを表形式(行と列)に整理し、異なるテーブル間の関連付けを容易にします。例えば、顧客サービス・データベースでは、顧客情報、購入、製品コード、連絡先ごとに個別のテーブルが使用され、一意の顧客IDなどのキーでリンクされる場合があります。
SQLを使用すると、このデータを操作するためのクエリー(およびサブクエリー)を記述できます。これらのコマンドは、以下のSQLプロセス中にいくつかのソフトウェア・コンポーネントを介して実行されます。
まず、パーサーがSQLステートメントの正確性を検証し、トークン化されたシンボルなど、データベースが理解できる形式に変換します。このステップには、構文分析とセマンティック・チェックが含まれます。パーサーは、ユーザーが操作を実行する権限を持っていることも確認します。
次に、リレーショナル・エンジン(クエリー・オプティマイザーとも呼ばれる)が、最も効率的なデータ取得、変更、または追加ストラテジーを計画します。そのために、さまざまなクエリー実行計画を評価します。この計画は、仮想マシン言語であるバイトコードで記述されます。このステップは、データベースのパフォーマンスとリソースの使用を最適化するために重要です。
最後に、ストレージ・エンジンがバイトコードを処理し、SQLステートメントを実行して、物理的なデータ・ストレージを管理します。ファイル形式やデータバッファリングなどのデータの物理表現を処理し、その結果をユーザーまたはアプリに返します。このステップは、ディスク上で効率的なデータ・アクセスと更新を行うために役立ちます。このリンクには、データの一貫性を確保するために主キーと外部キーを使用して確立された1対多または多対多などの関係が含まれることがよくあります。
リレーショナル・データベース管理システム(SQLシステムともいいます)は、次のような多くのコンポーネントで構成されています。
SQLコマンドは通常、次のカテゴリーに分けられます。
データ定義言語はテーブル、ビュー、インデックスなどのデータベース・オブジェクトを管理します。保存データの構造と構成、および保存データ項目間の関係を定義します。
データ操作言語は、データを挿入、変更、結合するINSERT、UPDATE、OUTER JOINなどの操作を通じてデータベース内のデータを管理します。
データ制御言語は、GRANT(アクセス権を付与)やREVOKE(アクセス権を削除)などのコマンドを通じてデータ・アクセスを制御します。ユーザーがデータを取得、追加、変更する能力を制限できます。
データ・クエリ言語は、データ・クエリーを実行して情報を取得します。通常はSELECTコマンドを使用します。特定のデータ項目または項目の範囲を取得できます。
トランザクション制御言語は、データの整合性を確保するためにトランザクションの変更を管理し、ROLLBACK操作(変更の取り消し)とCOMMIT操作(変更の確定)をサポートします。データベースを同時に使用しているユーザーによるデータ共有を調整するために使用されます。
SQLデータベースは、データ操作のためにさまざまなSQLステートメントをサポートしています。ただし、SQLコマンドはデータベースによって異なる場合があり、それぞれのデータベース独自のSQL構文も使用されます。
基本的なSQLコマンドには、次のようなものがあります。
1つ以上のテーブルからデータを取得します。
SELECT name, email
FROM customers
WHERE city = 'New York' ;このステートメントは、顧客テーブルからニューヨークに住んでいるすべての顧客の名前とメール・アドレスを取得します。
テーブルに新しい行を追加します。
INSERT INTO customers (name, email, city)
VALUES ('Jane Doe', 'jane.doe@example.com', 'Los Angeles') ;
このステートメントは、名前「Jane Doe」、Eメール「jane.doe@example.com」、都市「Los Angeles」の新しい行を顧客テーブルに追加します。
テーブル内の既存のデータを変更します。
UPDATE customers
SET email = 'new.email@example.com'
WHERE name = 'John Doe':
このステートメントは、顧客テーブル内の「John Doe」という名前の顧客のEメールを「new.email@example.com」に更新します。
条件に基づいてテーブルから行を削除します。
DELETE FROM customers
WHERE city = 'Boston' ;
このステートメントは、都市が「Boston」である顧客テーブルからすべての行を削除します。
新しいテーブルとその構造を定義します。
CREATE TABLE products ( product_id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10, 2) ) ;
このステートメントは、productsという3つの列を持つ新しいテーブルを作成します。product_idは整数の主キー、nameは最大100文字の可変文字列、priceは10桁で小数点以下2 桁の小数点です。
既存のテーブルの構造を変更します。
ALTER TABLE customers
ADD COLUMN birthday DATE ;
このステートメントは、既存の顧客テーブルにDATEタイプの新しい列を追加します。
テーブルとそのデータをすべて削除します。
DROP TABLE old_customers:
このステートメントは、old_customersテーブルとそのデータすべてを削除します。
関連する列に基づいて、2つ以上のテーブルの行を結合します。
SELECT c.name, p.name AS product_name FROM customers c JOIN orders o ON c.customer_id = o.customer_id JOIN products p ON o.product_id = p.product_id WHERE c.city = 'New York' ;
SQL JOINステートメントは、顧客の名前と注文した製品の名前を取得します。customer_idとproduct_idに基づいて顧客、注文、および製品テーブルに結合され、ニューヨークに居住する顧客のみが選択されます。
SQLデータベースはリレーショナル・データベースであり、構造化データが行とテーブルで保管され、さまざまな方法でリンクされます。SQLは、こうしたデータベースと対話するための標準言語です。
NoSQLデータベース(または非リレーショナル¥データベース)は、あまり構造化されていないデータを処理するために2000年代後半に登場しました。NoSQLデータベース(MongoDBなど)は、SQLデータベースと比較して、より柔軟なデータモデルを提供します。
主な違いは次のとおりです。
NoSQLは水平方向にスケーラブルであり、サーバーを追加することでより大きなトラフィックに対応できるようになります。対照的に、SQLデータベースは以前から垂直方向にスケーラブルであり、増大する負荷に対処するにはより強力なハードウェアが必要になります。
SQLデータベースは、堅牢なインデックス作成と結合機能により、複数行のトランザクションや関連データにわたる複雑なクエリーに最適なテーブルベースの構造を使用しています。NoSQLは、キー値、ドキュメント、グラフ、大きな列ストアなどのさまざまな構造を提供し、さまざまなニーズに応え、半構造化データまたは非構造化データを使用して柔軟性を高めます。
SQLデータベースは、ACID原則に従って、厳密なデータ一貫性を備えた複雑なクエリーに合わせて最適化されています。BASEの原則(基本的に利用可能、ソフト・ステート、最終的な一貫性)に従ったNoSQLデータベースは、特定の種類のデータに対してより高速な性能を提供しますが、一貫性の保証は異なります。
SQLデータベースは、財務システム、Eコマース・プラットフォーム、CRMデータベースなど、複雑なトランザクション、一貫性のあるデータ、厳格なスキーマ準拠を必要とするアプリケーションによく選択されます。NoSQLは、ソーシャル・ネットワーク、リアルタイム分析、コンテンツ管理システムなど、急速に変化する大規模データや半構造化データに適しています。
SQLデータベースには長い歴史があり、広く採用されているため、SQLチュートリアルやコミュニティ・サポートなどリソースはNoSQLよりも広範です。NoSQLは多くの場合、事前の設計が少なくて済み、拡張が容易ですが、複雑なクエリーやデータの一貫性のために、よりカスタム開発の手間がかかる場合があります。
SQLデータベースは慎重なスキーマ設計が必要であり、スキーマ変更の保守に関しては困難が伴う場合があります。NoSQL DBMSは、大規模なダウンタイムや再構築を必要とせずに、スキーマ変更への容易な拡張性と適応性を提供します。
多くのSQLデータベースはセキュリティーに強みがありますが、他のエンタープライズ・アプリケーションは、低い認証安全性、脆弱な設計、構成ミスなど、セキュリティー面で問題を抱えています。こうした脆弱性があるため、SQLインジェクションは依然として組織にとって現実的な脅威となっています。
SQLインジェクションは、ハッカーがデータベース情報にアクセスしたり、データベース情報を破壊したりするためにSQLクエリーを操作するときに発生します。これらの脆弱性を理解し、強力なセキュリティー対策を講じることが、SQLデータを保護する上で極めて重要です。
IBMのデータベース・ソリューションを活用して、ハイブリッドクラウド全体のさまざまなワークロードのニーズに対応しましょう。
構造化データの保管と管理に高性能で拡張性と信頼性を備えたリレーショナル・データベースであるIBM Db2をご覧ください。IBM Cloud上でSaaSとして、もしくはセルフホスティングとしてご利用いただけます。
IBMコンサルティングと連携することで、企業データの価値を引き出し、ビジネス上の優位性をもたらす洞察を活用した組織を構築します。
IBM web domains
ibm.com, ibm.org, ibm-zcouncil.com, insights-on-business.com, jazz.net, mobilebusinessinsights.com, promontory.com, proveit.com, ptech.org, s81c.com, securityintelligence.com, skillsbuild.org, softlayer.com, storagecommunity.org, think-exchange.com, thoughtsoncloud.com, alphaevents.webcasts.com, ibm-cloud.github.io, ibmbigdatahub.com, bluemix.net, mybluemix.net, ibm.net, ibmcloud.com, galasa.dev, blueworkslive.com, swiss-quantum.ch, blueworkslive.com, cloudant.com, ibm.ie, ibm.fr, ibm.com.br, ibm.co, ibm.ca, community.watsonanalytics.com, datapower.com, skills.yourlearning.ibm.com, bluewolf.com, carbondesignsystem.com, openliberty.io