SQLはデータベースへの問い合わせに使われる機能豊富な言語で、これらのSQLクエリはステートメントと呼ばれる。
※SQLの構文は、大文字と小文字を区別しないことに注意
◆SELECT
・データベースからデータを所得するために使用するSELECTクエリのタイプ。
#SELECT * FROM users;
id |
Username |
Password |
1 |
jon |
pass123 |
2 |
admin |
P4ssword |
3 |
martin |
secret123 |
SELECT:あるデータを取得したいことをDBに伝える。
* :データからすべてのcolumnを受信したいことをデータベースに伝える。
上記のテーブルには3つのcolumn(id、Username、Password)が含まれる。
FROM users:usersという名前のテーブルからデータを取得することを意味する。
; :クエリの最後であることをデータベースに伝える。
・次のクエリは*を使うのではなく、すべてのcolumnを取得するのではなく、
Usersという名前のテーブルから、「Username」と「Password」のcolumnのみ
を取得する構文となる。
# SELECT Username,Password FROM users;
Username |
Password |
jon |
pass123 |
admin |
P4ssword |
martin |
Secret123 |
・「LIMIT 1」句によって、データベースが1行分のデータのみを返すように強制
このクエリをLIMIT 1,1に変更すると、最初の結果がスキップされる。
LIMIT 2,1にすると最初の2つの結果、といった具合にスキップされる。
最初の数字のスキップしたい結果の数を2番目の数字は返すべき行数を、
それぞれデータベース側に伝えるということを覚えておく必要がある。
# SELECT * FROM user LIMIT 1;
id |
Username |
Password |
1 |
jon |
pass123 |
# SELECT * FROM user LIMIT 1,1;
Username |
Password |
admin |
P4ssword |
# SELECT * FROM user LIMIT 2,1;
Username |
Password |
martin |
Secret123 |
・WHERE節を利用する。
特定の節にマッチしたデータを返すことで、必要なデータをきめ細かく
ピックアップできる。
・ユーザ名がadminと等しい行のみを返す。
# SELECT * FROM users WHRER Username='admin';
id |
Username |
Password |
2 |
admin |
P4ssword |
・ユーザ名がadminと等しくない行だけを返す。
# SELECT * FROM users WHERE Username !='admin';
id |
Username |
Password |
1 |
jon |
pass123 |
3 |
martin |
secret123 |
・ユーザ名がadminかjonのどちらかである行だけを返す。
# SELECT * FROM users WHERE Username ='admin' or username='jon';
id |
Username |
Password |
1 |
jon |
pass123 |
2 |
admin |
P4ssword |
・ユーザ名がadmin、パスワードがP4sswordと等しい行のみを返す。
# SELECT * FROM users WHERE Username='admin' and Password='P4ssword';
id |
Username |
Password |
2 |
admin |
P4ssword |
・like節を使うと、完全一致ではなく、特定の文字で始めるか、含めるか、
終わるかのデータを、パーセント記号%で表せるワールドワイドカード文字
を配置する場所を選択することでしていることができる。
・ユーザ名がアルファベットのaで始まる行をすべて返す。
# SELECT * FROM users WHERE Username like '%a';
id |
Username |
Password |
2 |
admin |
P4ssword |
・ユーザ名にmiという文字が含まれる行をすべて返す。
#SELECT * FROM users WHERE Username like '%mi%';
id |
Username |
Password |
2 |
admin |
P4ssword |
◆UNION
UNION文は、2つ以上のSELECT文の結果を組み合わせて、単一または複数の
テーブルからデータを取得する。
このクエリのルールは、以下のものがある。
・各SELECT文で同じ数の例を取得すること。
・列は同様のデータ型であること。
・列の順序が同じであること。
・解説の前提、以下のcustomersというテーブルがある。columnとデータは以下の通り
id |
name |
address |
city |
postcode |
1 |
Mr John Smith |
123 Fake Street |
Manchester |
M2 3FJ |
2 |
Mrs Jenny Palmer |
99 Green Road |
Birmingham |
B2 4KL |
3 |
Miss Sarah Lewis |
15 Fore Street |
London |
NW12 3GH |
・もう一つはsuppliersというテーブル。
id |
company |
address |
city |
postcode |
1 |
Widgets Ltd |
Unit 1a, Newby Estate |
Bristol |
BS19 4RT |
2 |
The Tool Company |
75 Industrial Road |
Norwich |
N22 3DR |
3 |
Axe Makers Ltd |
2b Makers Unit, Market Road |
London |
SE9 1KK |
・以下のSQLステートメントを使用すると、2つのテーブルから結果を収集し、1つの
結果セットにすることができる。
# SELECT name,address,city,postcode FROM customers UNION SELECT company,address,city,postcode FROM suppliers;
name |
address |
city |
postcode |
Mr John Smith |
123 Fake Street |
Manchester |
M2 3FJ |
Mrs Jenny Palmer |
99 Green Road |
Birmingham |
B2 4KL |
Miss Sarah Lewis |
15 Fore Street |
London |
NW12 3GH |
Widgets Ltd |
Unit 1a, Newby Estate |
Bristol |
BS19 4RT |
The Tool Company |
75 Industrial Road |
Norwich |
N22 3DR |
Axe Makers Ltd |
2b Makers Unit, Market Road |
London |
SE9 1KK |
◆INSERT
INSERT文は、データベースに新しいデータ行をテーブルに挿入することを
指示する。
"into users"はデータを挿入したいテーブルをデータベースに伝え、
"(username,password)'はデータを提供するcolumnを、
そして"values ('bob',password');"は先にしていたcolumnにデータを提供する。
# insert into users (Username,password) values ('bob','password');
id |
username |
password |
1 |
jon |
pass123 |
2 |
admin |
p4ssword |
3 |
martin |
secret123 |
4 |
bob |
password123 |
◆UPDATE
UPDATE文は、データベースに対して、テーブル内の1つ以上のデータ行を更新する
ことを指定する。
# UPDATE users SET username='root',password='pass123' WHERE username='admin';
id |
username |
password |
1 |
jon |
pass123 |
2 |
root |
pass123 |
3 |
martin |
secret123 |
4 |
bob |
password123 |
・UPDATE:UPDATE <テーブル名>で更新したいテーブルを指定。
・username=root,password=pass123:カンマ区切りのリストで更新したいフィールドを
選択。
・WHERE username='admin';などのWHERE節を使って更新する行を正確に指定する
ことができる。
◆DELETE
1つまたは複数のデータ行を削除することをデータベースに伝える。
返したい列がないことを除けば、クエリのフォーマットのフォーマットはSELECTと
よく似ている。
WHERE節で削除するデータを正確に指定し、LIMIT節で削除する行数をしていること
ができる。
# DELETE FROM users WHERE username="matin";
id |
username |
password |
1 |
jon |
pass123 |
2 |
root |
pass123 |
4 |
bob |
password123 |
#DELETE FROM users;
id |
username |
password |