■ 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 は左から右に 評価する
// [商品番号(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
条件を指定しないと全部消える。
■ WHERE
SYNTAX
where condition
DESC
条件を指定する。
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 ?