Reference




Literal

DESC リテラルとは 変数や定数以外の、数値や文字列など表記どおりの値の総称


string

文字列型は ", ' で囲む "foo", 'bar' POINT -- 文字列に引用符を追加する場合は 2 こ続ける "a""a" 'a''a' -- " 内に ' を入れる場合は 1 個でよい ( 逆も ) "a'a"



NULL

データがないことを意味する 0, "" とは意味が異なる


データの操作




SELECT

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;



Limit

SYNTAX select ... limit [ offset, ] count DESC 指定した範囲の Record をかえす 件 〜 をするときに便利
// 10 件目 から 20 件目をかえす select from tbl limit 10, 20 // 1 件目 から 30 件目をかえす select from tbl limit 30



ORDER BY

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;



DISTINCT

DESC 重複したレコードをひとつにする
select DISTINCT age from member order by age



alias(別名)

DESC カラム名に別名をつける。 複数テーブルで同名のカラムがある場合や、関数で処理をした結果の名前をつけたいときに使う。
select name AS 名前 from member;



INSERT

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
// NULL 値を拒否( NULL はなしよ! ) NOT NULL // 重複しないように 自動Increment AUTO_INCREMENT
// 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",



DROP TABLE

SYNTAX DROP TABLE [IF EXISTS] tbl [, tbl,...] [RESTRICT | CASCADE] DESC テーブルを削除
// IF EXISTS をつけることで ERROR 回避できる DROP TABLE IF EXISTS tbl;



ALTER

SYNTAX ALTER TABLE tbl ADD column type DESC Table.に.Column.を追加, 削除をする
// 顧客情報に TEL を追加 ALTER TABLE Customer ADD tel char(10); // 削除 ALTER TABLE CardInfo DROP Column Status
TIP column を追加すると, Default 値で埋まる
String -> NULL Integer -> 1 ?