SYNTAX
SELECT field[, field...] from tbl [where field=val][ORDER BY field (DESC|ASC)][LIMIT [offset,] row_count]
DESC
テーブルからレコードを取得( 照会 )する
CustomerID、CompanyName は、それぞれ列( Key )の名前を指定
「Customersテーブルから
CustomerID、CompanyNameを取得しなさい」という命令になる
WARNING
SELECT 構文では 各節 ( where など )の順番は構文とおりの順番である必要がある
// BAD
select name LIMIT 1, 10 ORDER BY name
// OK
select name ORDER BY name LIMIT 1, 10
// すべての Column を指定
SELECT * FROM Customers
// 顧客 Table を表示する.
SELECT * FROM customer;
// Column を指定する { name, age }
SELECT name, age FROM Customer;
// 複数の条件を指定する.
SELECT * FROM Customer where name="sato" and age=30;
// 条件 >= , <= を利用する
SELECT * FROM Customer where age >= 30;
// 指定リストに一致するものを抽出
SELECT * FROM Customer where name in ( "tanaka", "sato" );
// あいまい 検索
// %: 0 文字以上の任意の文字
// _: 1 つの任意の文字
SELECT * FROM Customer where name like "%田%"
// 文字列も 順序関係 があれば 条件判定できる
SELECT * FROM Customer where TIMES >= "2009.11.27" order by TIMES;
SYNTAX
ORDER BY field [(DESC|ASC)][, ...]
DESC
指定したカラムでソートする
-- id, message の順に sort
select * from tbl order by id, message
-- 各項目について ASC DESC を指定する
-- Default は昇順( ASC )
select * from tbl order by id ASC, message DESC
-- where の後でなくてはならない
select * from tbl where id = 1 order by id, message
// 文字列でも Sort 可能 ( ASCII code 順かな ? )
SELECT * FROM member order by age
GROUP BY
DESC
指定したカラムの値ごとにグループ化する。
POINT
グループ化した後は, sum, avg などの統計関数で値をとる。
-- 性別ごとに平均年齢をもとめる
SELECT sex, AVG(age) FROM member GROUP BY sex;
SYNTAX
INSERT INTO テーブル名 (フィールド名 , フィールド名 ,...) VALUES(値 , 値 ,...);
# Primary ID は 1 から始まる
insert into testtbl (NAME) values("tanaka")
BAD
insert into testtbl ("NAME") values("tanaka")
OK
insert into testtbl (NAME, AGE) values("tanaka", 32);
UPDATE
SYNTAX
UPDATE [LOW_PRIORITY] [IGNORE] テーブル名
SET field=val [,field=val ...]
[WHERE 条件式]
[ORDER BY ...]
[LIMIT 値]
DESC
レコードを更新します
すべてのレコードを一括更新、もしくは条件式を満たす特定のレコードだけを更新できる
Table[mn] の ID == 30 の ガス を 3000 にする
UPDATE mn SET ガス = 3000 WHERE ID = 30;
UPDATE test.music SET filesize = 5;
// 複数を指定することもできる
// UPDATE は左から右に 評価する
// [商品番号(id_g)]"3"の[価格(price)] フィールドに"3200"を代入し, 1.05倍
UPDATE goods SET price = 3200, price = price * 1.05 WHERE ID = 3;
BAD
UPDATE mn SET ガス = 111, 水 = 222, WHERE ID =32 ;
OK
UPDATE mn SET ガス = 111, 水 = 222 WHERE ID =32 ;
// String Data は ["] が必須
BAD
UPDATE kabu SET 会社 = aaa WHERE id = 12;
OK
UPDATE kabu SET 会社 = "aaa" WHERE id = 12;
DELETE
SYNTAX
DELETE from tbl
DESC
レコードを消す。
// 10 才以下は削除
DELETE FROM member WHERE age <= 10;
// 田中さんは削除
DELETE FROM member WHERE name = "tanaka"
// 30 才より下を消す
DELETE FROM member WHERE age <= 30
WARNING
条件を指定しないと全部消える。
DELETE FROM member;
WHERE
SYNTAX
where condition
DESC
条件を指定する。
POINT
where TRUE とすることで、 無条件に条件にテストする。任意の追加条件をいれるときに便利。
select * from table where TRUE;
SELECT CustomerID, CompanyName, City
FROM Customers WHERE City = 'London'
select * from cmdTbl where ID>=1
// 複数の指定
// 20 代のみ削除
delete from Customer where age >= 20 AND age <= 29;
// C みたいに () もあり
SELECT * FROM customer WHERE (id_c >= 2 AND id_c <=4) OR sex = 1;
BAD
delete from testtbl where ID == 1;
OK
delete from testtbl where ID = 1;
WARNING
条件を指定しないと すべて削除することになるので注意 ( これかなり重要 ! )
where "xxx" [quot] を忘れずに
// あいまい検索
select from アイドル where like "森%千里"
// REGEXP 検索
// 部分にのみ Match すれば OK
//
select from アイドル where regexp "森.千里"
データ定義
CREATE DATABASE
SYNTAX
CREATE DATABASE [IF NOT EXISTS] name
DESC
指定した名前のデータベースを作成する
WARNING
IF NOT EXISTS を指定していないときに
既存の DB を指定するとエラーになる
CREATE TABLE
SYNTAX
CREATE TABLE Customer (
-- 名前 型 属性
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
fullname VARCHAR(40) NOT NULL,
age TINYINT UNSIGNED NOT NULL ,
sex TINYINT UNSIGNED NOT NULL,
email VARCHAR(50),
-- 制約
PRIMARY KEY (id)
);
DESC
Table を作成する
TIP
// into outfile "xxx" がないとだめらしい
// 単独ですると, 落ちる
echo use test;select * from tbl into outfile "foo.csv" fields terminated by ',' \
| mysql -u root -pXXX
CREATE TABLE Customer (
-- 名前 型 属性
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
fullname VARCHAR(40) NOT NULL,
age TINYINT UNSIGNED NOT NULL ,
sex TINYINT UNSIGNED NOT NULL,
email VARCHAR(50),
-- 制約
PRIMARY KEY (id)
);
-- Column の定義
name type [NOT NULL | NULL] [DEFAULT val] [AUTO_INCREMENT]
[[PRIMARY] KEY] [COMMENT 'string'] [reference_definition]
-- 名前 型 属性
-- name 32文字 NULL はなし Default値 "tanaka"
name char(32) NOT NULL DEFAULT "tanaka",