2011年6月1日水曜日

ありがちな受注管理システムのmysql文

*********************************************
ありがちな受注管理システムのmysql文です。
今回xamppのmysqlを使いました。

#初回にrootユーザのパスワード設定コマンド
mysqladmin -u root password mysql

#rootユーザでmysqlにログイン
mysql -u root -p

#P476 データベースの作成
CREATE DATABASE 受注管理;

#MySQLのコマンド。カレントデータベースを変更する。
use 受注管理;

#P476 テーブルの作成
CREATE TABLE 顧客 (
顧客番号 CHAR(4) PRIMARY KEY,
顧客名 VARCHAR(20),
住所 VARCHAR(50),
電話番号 CHAR(15));

CREATE TABLE 受注 (
受注番号 CHAR(5) PRIMARY KEY,
受注年月日 DATE NOT NULL,
顧客番号 CHAR(4),
受注合計 DECIMAL,
FOREIGN KEY(顧客番号) REFERENCES 顧客(顧客番号));



CREATE TABLE 商品 (
商品番号 CHAR(3) PRIMARY KEY,
商品名 VARCHAR(20),
単価 DECIMAL );

CREATE TABLE 受注明細 (
受注番号 CHAR(5),
商品番号 CHAR(3),
数量 INTEGER,
受注小計 DECIMAL,
PRIMARY KEY(受注番号,商品番号),
FOREIGN KEY(受注番号) REFERENCES 受注(受注番号),
FOREIGN KEY(商品番号) REFERENCES 商品(商品番号));

#P496 レコードの挿入(1件のみ)
INSERT INTO 顧客 (顧客番号,顧客名,住所,電話番号)
VALUES ('1001','株式会社冨田貿易','東京都港区芝浦1-XX-XX','03-3256-XXXX');

#カラムを指定せずに複数行を挿入
INSERT INTO 顧客 VALUES
('1003','宇宙商事株式会社','東京都足立区神明22-XX','03-5126-XXXX'),
('1006','有限会社吉野物産','大阪府大阪市中央区城見23-XX','06-6112-XXXX');

INSERT INTO 商品 VALUES
('A01','テレビ(液晶大型)','200000'),
('A11','テレビ(液晶小型)','50000'),
('G02','DVDレコーダー','80000'),
('S05','ラジオ','3000');

INSERT INTO 受注 VALUES
('00001','2010/04/01','1001','640000'),
('00002','2010/04/02','1006','518000'),
('00003','2010/04/02','1003','600000'),
('00004','2010/04/05','1001','3000');

INSERT INTO 受注明細 VALUES
('00001','A01','2','400000'),
('00001','G02','3','240000'),
('00002','S05','6','18000'),
('00002','A11','10','500000'),
('00003','A01','3','600000'),
('00004','S05','1','3000');

#P497 挿入(INSERT文)
INSERT INTO 顧客 (顧客番号,顧客名)
VALUES ('2001','株式会社こあら百貨店');

#P497 更新(UPDATE文)
UPDATE 顧客 SET 住所='埼玉県入間市東町1-XX' WHERE 顧客番号='2001';

#P498 削除(DELETE文)
DELETE FROM 顧客 WHERE 顧客番号='2001';

#P479 ビューの定義
CREATE VIEW 顧客名簿 AS SELECT 顧客番号,顧客名 FROM 顧客;

#P480 検索系のデータ操作(SELECT文)
#P481 全ての項目の検索
SELECT * FROM 受注;

#P481 特定の項目の検索
SELECT 受注番号,受注合計 FROM 受注;

#P481 計算結果の表示
SELECT 受注番号,受注合計*1.05 FROM 受注;

#P482 ひとつの項目で重複するデータを除いた検索
SELECT DISTINCT 受注年月日 FROM 受注;

#P482 複数の項目で重複するデータを除いた検索
SELECT DISTINCT 受注年月日,顧客番号 FROM 受注;

#P482 条件を指定したデータの検索
#前準備
INSERT INTO 受注 (受注番号,受注年月日,顧客番号) VALUES ('00005','2010/04/05','1001');

#P484 条件を満たすデータの検索
SELECT * FROM 受注 WHERE 顧客番号='1001';

#P484 すべての条件を満たすデータの検索
SELECT * FROM 受注 WHERE 顧客番号='1001' AND 受注合計>=600000;

#P484 いずれかの条件を満たすデータの検索
SELECT * FROM 受注 WHERE 顧客番号='1001' OR 受注合計>=600000;

#P485 条件を満たさないデータの検索
SELECT * FROM 受注 WHERE NOT 顧客番号='1001';

#P485 NULLを含むレコードの検索
SELECT 受注番号,受注合計 FROM 受注 WHERE 受注合計 IS NULL;

#P485 NULLを含まないレコードの検索
SELECT 受注番号,受注合計 FROM 受注 WHERE 受注合計 IS NOT NULL;

#P486 2つの値の間にあるデータを含むレコードの検索
SELECT 受注番号,受注合計 FROM 受注
WHERE 受注合計 BETWEEN 600000 AND 1000000;

#P486 リストの値と一致するデータを含むレコードの検索
SELECT 受注番号,受注合計 FROM 受注
WHERE 受注番号 IN ('00001','00004');

#P486 リストの値のすべてと一致しないデータを含むレコードの検索
SELECT 受注番号,受注合計 FROM 受注
WHERE 受注番号 NOT IN ('00001','00004');

#P487 文字列の一部を条件とした検索
SELECT 商品番号,商品名 FROM 商品 WHERE 商品名 LIKE 'ラ__';

SELECT 商品番号,商品名 FROM 商品 WHERE 商品名 LIKE '%液晶%';

#P487 表の結合
#下準備
DELETE FROM 受注 WHERE 受注番号='00005';

#P488 2つの表の結合
SELECT 受注番号,受注.顧客番号,顧客名 FROM 受注,顧客
WHERE 受注.顧客番号=顧客.顧客番号;

#P488 3つ以上の表の結合
SELECT 受注.受注番号,受注.顧客番号,顧客名,受注明細.商品番号,商品名,単価,数量,受注小計
FROM 受注,顧客,受注明細,商品
WHERE 受注.顧客番号=顧客.顧客番号 AND 受注.受注番号=受注明細.受注番号 AND 受注明細.商品番号=商品.商品番号;

#P489 データの集計
#P489 レコード数の表示
SELECT COUNT(*) FROM 受注;

#490 指定した項目の合計値の表示
SELECT SUM(受注合計) FROM 受注;

#P490 指定した項目の平均値の表示
SELECT AVG(受注合計) FROM 受注;

#P490 指定した項目の最大値の表示
SELECT MAX(受注合計) FROM 受注;

#P490 指定した項目の最小値の表示
SELECT MIN(受注合計) FROM 受注;

#P491 データのグループ化
#P491 項目ごとにグループ化して表示
SELECT 受注年月日,COUNT(*),SUM(受注合計) FROM 受注 GROUP BY 受注年月日;

#P492 項目ごとにグループ化して条件を絞り込んで表示
SELECT 受注年月日,COUNT(*),SUM(受注合計) FROM 受注 GROUP BY 受注年月日
HAVING SUM(受注合計)>1000000;

#P492 データの並べ替え
#P493 ひとつの項目による並べ替え
SELECT 受注番号,顧客番号,受注合計 FROM 受注 ORDER BY 受注合計;

#P492 複数の項目による並べ替え
SELECT 受注番号,顧客番号,受注合計 FROM 受注 ORDER BY 顧客番号 ASC,受注合計 DESC;

#P492 副問い合わせ
#P493 単一行問い合わせ
SELECT * FROM 顧客 WHERE 顧客番号=
(SELECT 顧客番号 FROM 受注 WHERE 受注番号='00001');

#P493 複数行問い合わせ
SELECT * FROM 顧客 WHERE 顧客番号 IN
(SELECT 顧客番号 FROM 受注 WHERE 受注合計>=600000);

#P495 相関副問い合わせ
#下準備
INSERT INTO 商品 VALUES ('Z01','冷蔵庫','150000'),('Z11','エアコン','98000');

#P495 複数の表で一致するレコードの検索
SELECT 商品番号,商品名 FROM 商品 WHERE EXISTS
(SELECT * FROM 受注明細 WHERE 商品.商品番号=受注明細.商品番号);

#P496 複数の表で一致しないレコードの検索
SELECT 商品番号,商品名 FROM 商品 WHERE NOT EXISTS
(SELECT * FROM 受注明細 WHERE 商品.商品番号=受注明細.商品番号);






0 件のコメント:

コメントを投稿