\r\n\r\n

すべてのプログラマーが知っておくべき13の重要なSQLコマンド

大規模なWebサイトや動的なWebサイトでは、何らかの形でデータベースが使用されており、構造化問い合わせ言語(SQL)と組み合わせて使用すると、データ操作の可能性は本当に無限大になります...。

データベースは、現代のウェブを牽引しています。大規模なWebサイトや動的なWebサイトでは、何らかの形でデータベースが利用されており、SQL(Structured Query Language)を併用することで、データ操作の可能性はまさに無限大に広がる。SQLをすでにご存知の方は、すべてのWeb開発者が知っておくべきプログラミングスキルをぜひご覧ください。

今日は、プログラマーとして知っておくべき核となるSQLコマンドを紹介します。

データベーステーブルから返されるデータには多くの名前があります。データはしばしば行、レコード、タプルと呼ばれます。この記事では、これらの用語を互換的に使用します。

序文

今日の例はすべて、4つの架空のテーブルに基づいています。顧客テーブルには、顧客の名前と年齢が含まれています。

身長表には、その人の名前と身長が書かれています。

スタッフテーブルには、スタッフの名前と年齢が入っており、カスタマーテーブルと全く同じである。

最後のPEOPLEというテーブルには、CUSTOMERSやSTAFFと同じように、人の名前と年齢が入っています。

1 セレクト

select文は最もシンプルで、他のほとんどすべてのコマンドをサポートしているので、これを理解する必要があります。SQLの予約語は大文字で書くと、コマンドが読みやすく理解しやすくなるため、ベストプラクティスとされています。

selectはその名の通り、データベースからデータを選択するために使われるもので、最もシンプルな使い方は以下の通りです。

SELECT * FROM table;

これには2つのパートがあります。最初の部分(SELECT*)は、選択する列を指定します。アスタリスクは、テーブルのすべての列を選択することを意味します。2番目の部分(from table)は、データベースエンジンに、このデータをどこから取得するかを伝えます。table "をデータベースのテーブル名に置き換えてください。

このセレクトを「セレクトスター」と呼びます。アスタリスクを使うのはテーブルのデータを探すのに良い方法ですが、本番のコードで使うのはお勧めしません。セレクトスターを使用する場合、データベースエンジンは必要なデータを提供します。データが返される順番はコントロールできないので、誰かがテーブルに新しい列を追加すると、プログラミング言語の変数が正しいデータを表せなくなることがあります。幸いなことに、回避策があります。

以下のように、どのカラムを取得するかを明示的に指定することが可能である。

SELECT age, name FROM people;

このクエリは、"people" テーブルから "age" と "name" のカラムを取得する。データ量が多い場合、この明示的な形式は少し面倒かもしれませんが、将来の問題を減らし、将来のプログラマーが理解しやすいSQLにすることができます。

どのテーブルにも保存されていないデータセグメントを追加で選択する場合は、次のようにします。

SELECT age, '1234' FROM people;

は、カラム名にマッチする文字列ではなく、一重引用符で囲まれた任意の文字列を返します。

2 どこ

selectコマンドはデータを取得するのには最適ですが、結果をさらにフィルタリングしたい場合はどうしたらよいでしょうか。青い目の人限定で探すのはどうでしょう?1月生まれのメカニックは?そこで登場するのがコマンドです。これは、文の最後に条件を付け加えるだけで、selectに条件を適用できるようにしたものです。

SELECT age, name FROM people WHERE age > 10;

このクエリは、10歳以上に限定されました。複数の条件をAND演算子で組み合わせることができます。

SELECT age, name FROM people WHERE age > 10 AND age < 20;

ANDコマンドは、英語と全く同じように動作します。つまり、文に別の条件を適用します。この例では、年齢が10歳から20歳までのすべてのレコードが返されます。一致しないため、データは返されない。

これと併用できるもう一つのコマンドがorです。 例として、以下のようなものがあります。

SELECT age, name FROM people WHERE age > 10 OR name = 'Joe';

このクエリは、10年以上前のレコード、または名前が "Joe "に等しいレコードを返します。等号が1つしかないことにお気づきでしょうか?ほとんどのプログラミング言語では、ダブルイコール(=)で等価性をチェックする。ほとんどのデータベースエンジンでは、これは必要ありません(ただし、すべての環境では必須ですので、まずはよく確認してください)。

III. 注文

orderコマンドは、返された結果を並べ替えるために使われます。これも簡単に使えるもので、文の末尾に次のように追加するだけです。

SELECT name, age FROM people ORDER BY age DESC;

列と順序を指定する必要があり、昇順の場合はASC、降順の場合はDESCを指定します。

SELECT name, age FROM people ORDER BY name ASC, age DESC

ORDER BYは、おそらく他のコマンドと組み合わせて使用する場合に最も便利です。すべてのクエリが論理的な順序でデータを返すわけではありません。このコマンドでこれを変更することができます。

4 参加する

joinコマンドは、1つまたは複数のテーブルに保存されている関連データを結合するために使用されます。2つ目のテーブルを1つ目のテーブルに結合し、データの結合方法を指定するものです。以下は基本的な例です。

SELECT age, name, height FROM people LEFT JOIN heights USING (name);

ここで何かが起きている。LEFT JOIN」構文で開始する必要があります。これは、LEFTタイプの結合を使用してテーブルを結合することを指定するものです。次に、結合するテーブル(height)を指定します。USING(name)構文は、「name」カラムが両方のテーブルにあり、テーブルを結合するためのキーとして使用することを宣言しています。

各テーブルでカラムの名前が異なる場合でも、"USING "の代わりに "ON "を使用することができますので、ご安心ください。

SELECT age, name, height FROM people LEFT JOIN heights ON (namea = nameb);

on文は、どの列にキーをセットするかを明示的に宣言している。結合には様々な種類があり、それぞれ詳細に説明すると長い時間がかかるので、以下にその使い方を簡単に説明する。

  • (INNER) JOIN - 2つのテーブルで一致する行を返します。
  • LEFT (OUTER) JOIN - 左側のテーブルのすべての行と、右側のテーブルで一致する行を返します。一致するものがない場合も、左のテーブル行が返される。
  • 右(外部)結合 - これは左結合の逆で、右のテーブルのすべての行と、左のテーブルのすべてのマッチを返します。
  • FULL (OUTER) JOIN - 任意のテーブルで一致するレコードを返します。

internal」または「external」構文は任意です。これを指定することで理解が容易になりますが、ほとんどの場合、指定する必要はありません。

5 エイリアス

基本を理解したところで、aliasコマンドについて見ていきましょう。これは、一時的にテーブルの名前を変更するために使用されます。この新しい名前は、実行中の単一のトランザクションにのみ存在するため、どちらかというとニックネームのようなものです。その使い方を紹介します。

SELECT A.age FROM people A;

有効な名前は何でもいいのですが、私はアルファベットの文字を使うのが好きです。各カラム名にはエイリアスが付きます。このエイリアスは、テーブルが宣言された直後に割り当てられる。こうするのと全く同じです。

SELECT people.age FROM people;

長いテーブル名を入力する代わりに、シンプルで覚えやすい文字を入力することができます - しかし、何の意味があるのでしょうか?複数のテーブルから選択する場合、どの列がどのテーブルに属するのかが分からなくなりがちです。2つのテーブルに同じ名前のカラムがある場合、テーブル名やエイリアスを明示的に参照しないと、データベースクエリが機能しないことがあります。以下は、2つのテーブルを含むテーブルの例である。

SELECT staff.age, staff.name, customers.age, customers.name FROM staff, customers;

以下は、同じクエリに別名をつけたものです。

SELECT A.age, A.name, B.age, B.name FROM staff A, customers B;

スタッフテーブルのエイリアスは "A"、カスタマーテーブルのエイリアスは "B "です。エイリアス表は、コードを理解しやすくし、キー入力の量を減らすのに役立ちます。

エイリアスを持つ列は、「AS」コマンドを使用して名前を変更することもできます。

SELECT age AS person_age FROM people;

このクエリを実行すると、カラム名は "age "ではなく、"personu age "になります。

6 ユニオン

連帯は大命である。行を互いに追加することができます。一致する列を追加するユニオンとは異なり、ユニオンは、列数と列名が同じであれば、無関係の行を追加することができる。使い方は次のとおりです。

SELECT age, name FROM customersUNION SELECT age, name FROM staff;

ユニオンは、2つのクエリの結果を結合する方法と考えることができます。結合は、2つのクエリの間に一意な行がある場合にのみ結果を返します。UNION ALL」構文を使用すると、重複に関係なくすべてのデータを返すことができます。

SELECT age, name FROM customersUNION ALLSELECT age, name FROM staff;

行の順番がどう変わるかに注目してください。ユニオンは最も効率的な方法で操作するので、返されるデータは順番が変わっても大丈夫です。

特定のシナリオのために、合計クエリを単一の合計クエリにマージすることができます。

7**

さて、データベースからデータを取得する方法についてはすべて学びましたが、では、どのように**行うのでしょうか?そこで登場するのが、INSERTコマンドです。一例として

INSERT INTO people(name, age) VALUES('Joe', 102);

テーブル名(people)と使用する列(nameとage)を指定する必要があります。次に、「VALUES」構文を使用して、**となる値を指定します。これらの列の順序は、先に指定された列の順序と同じでなければならない。

挿入時にWhere句を指定できないので、必要な既存のテーブル制約が守られていることを確認する必要があります。

8 アップデート

いくつかのデータを取得した後、特定の行を変更する必要があるのは当然です。更新コマンドの構文は次のとおりです。

UPDATE people SET name = 'Joe', age = 101;

変更するテーブルを指定し、「SET」構文でカラムとその新しい値を指定する必要があります。この例も良いのですが、すべてのレコードを更新してしまうので、必ずしも望ましいとは言えません。

より具体的には、selectのように "WHERE "句を使用します。

UPDATE people SET name = 'Joe', age = 101 WHERE name = 'James';

AND」「OR」を使って複数の条件を指定することも可能です。

UPDATE people SET name = 'Joe', age = 101 WHERE (name = 'James' AND age = 100) OR name = 'Ryan';

括弧がどのように制約に使われているかに注意してください。

9 UPDATE**

Upsertは奇妙な響きのある言葉ですが、非常に便利なコマンドです。テーブルに制約があり、一意な名前を持つ行のみが必要であると指定したとします。例えば、同じ名前の行を2つ保存したくないとします。もし、複数の 'Joe' 値を ** しようとすると、データベースエンジンはエラーを投げて拒否します (当然ですが)。 UPSERT では、すでに存在するレコードを更新することができます。これはとても便利ですこのコマンドがなければ、まずレコードが存在するかどうかを確認し、存在しない場合は**、そうでない場合は正しい主キーを取得して更新するというロジックをたくさん書かなければならないでしょう。

残念ながら、upsertはデータベースエンジンによって実装が異なります。postgreSQLは最近になってこの機能を獲得しましたが、MySQLはかなり以前からこの機能を備えていました。参考までに、以下のMySQLの構文を記載しておきます。

INSERT INTO people(name, age)VALUES('Joe', 101)ON DUPLICATE KEY UPDATE age = 101;

これは実際には update と insert のステートメントであることに注意してください。"update on insert failure" と要約することができます。

10 削除

Deleteは、レコードを完全に削除するために使用します。乱用すると、かなりの損害を与える可能性があります!基本的な構文は、非常に簡単です。

DELETE FROM people;

他のコマンドと同様、このコマンドはすべてを削除してしまいます!できれば、whereを使ってもう少し妥当な行数に制限する必要があります。

DELETE FROM people WHERE name = 'Joe';

システムを開発する場合、「ソフト削除」を実施することが賢明である場合が多い。実際に削除コマンドを実行するのではなく、削除された列を作成し、その列をselectsでチェックします。削除されたと思われるレコードを迅速かつ容易に取り出すことができれば、多くの潜在的な困惑を避けることができます。しかし、これは適切なバックアップの代わりにはなりません。

11 テーブルの作成

create tableコマンドは、テーブルを作成するために使用されますが、これも非常に簡単な問題です。

CREATE TABLE people ( name TEXT, age, INTEGER, PRIMARY KEY(name));

カラム名と制約を角括弧で囲み、カラムに適切なデータ型を与えていることに注意してください。主キーが指定されていることは、優れたデータベース設計において必要なことです。

12 変更フォーム

altertableコマンドは、テーブルの構造を変更するために使用されます。これは、既存のデータが衝突を引き起こす場合、例えば文字列を整数に変更する場合など、データベースがテーブルの変更を許可しないため、やや制限されます。このような場合、まずデータを修復し、その後テーブルを修正します。一例として

ALTER TABLE people ADD height integer;

この例では、people テーブルに整数型の "height" というカラムを追加しています。変えられるものは、本当に無限です。

13 削除フォーム

最後のコマンドはdrop tableです。これは削除と同じように考えてください。しかし、個々のレコードを削除するのではなく、テーブル内のすべてのレコードを削除しますその使い方は次の通りです。

DROP TABLE people;

これはかなり思い切ったコマンドで、システムにプログラムする必要がある理由はない。大半の場合、手動でしか実行できず、非常に破壊的です。

本日は以上です。役に立つヒントを得ていただけたでしょうか?サイトを作成する方法を学び、新しく見つけたスキルを使ってダイナミックなサイトにすることができます。ただ、そのような間違いを犯さないように、またSQLインジェクションに対して脆弱なままにしておかないように注意してください。SQLを学ぶ必要があるかどうかわからない場合、Static Site Builderを検討されましたか?

あなたのお気に入りのSQLのヒントやトリックを以下に教えてください。

写真提供: HYSÄNTU NP/Shutterstock

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ