DBメモ 25

——————————————————————
■いろいろな条件で抽出する
■カラムの表示を工夫して「SELECT」を実行する
・テーブルtbのuriaカラムとbangカラムだけ抽出
SELECT uria,bang FROM tb;

■エイリアスを使う
カラムに「ニックネーム」をつける。
SELECT カラム名 AS エイリアス FROM テーブル名;
(例
SELECT bang AS 社員番号 , uria AS 売上 FROM tb;

■計算したり、文字列を処理したりして表示する
uriaカラムに10000を掛けて表示
SELECT uria*10000 as 売上 FROM tb;

・カラム同士の計算も可能
SELECT a/b FROM テーブル名
SELECT a+b FROM テーブル名

■関数を使って計算する
テーブル「tb」のカラム「uria」の平均を出す
・平均
SELECT AVG(uria) FROM tb;

・合計
SELECT SUM(uria) FROM tb;

・個数を表示
SELECT COUNT(uria) FROM tb;

・MySQLのサーバーのバージョン
SELECT VERSION();

・現在使っているデータベースを表示
SELECT DATEBASE();

・現在のユーザーを表示
SELECT USER();

・引数で指定した文字の文字コードを表示
SELECT CHARSET(‘この文字’);

■文字列を結合する
カラムaとbとcの文字を繋げる
SELECT CONCAT(bang,name,’さん’) FROM tb1;
これでbangとnameにさんを付けて表示

■文字列操作で活躍する関数
・右から取り出す:RIGHT関数
カラム「bang」の右から2文字を表示する
SELECT RIGHT(bang,2) FROM tb1;
たとえばA101なら01が表示される

・左から取り出す:LEFT関数
SELECT LEFT(bang,2) FROM tb1;

・×番目から△個取り出す:SUBSTRING関数
次は、カラム「bang」の2文字目から3文字分を表示します
SELECT SUBSTRING(bang,2,3) FROM tb1;
たとえばA101なら101が表示される

■日付・時刻の関数
現在の日時と時刻の値を返す関数NOW()
INSERT INTO ima (b) VALUSE(NOW());
2008-09-11 23:00:33 などと入る

——————————————————————
■テーブル・データベース・レコードの削除
■テーブルを削除する
DROP TABLE テーブル名;
(例
DROP TABLE tb1A;

■もし指定のテーブルがあったら削除
DROP TABLE IF EXISTS tb1A;

■データベースの削除
DROP DATABASE データベース名;

■レコードの丸ごと削除
テーブルは残して、レコードだけ削除する
DELETE FROM テーブル名;

——————————————————————
■テーブルやレコードをコピー・削除する

■テーブルのカラム構造とレコードを丸ごとコピーする
SELECTした結果から、カラム構造とレコードをコピーして、新規テーブルを作成する。
ただしこの方法では、「AUTO_INCREMENT」など一部の属性がコピーされないので、
コピー後に設定する必要がある。

CREATE TABLE 新規テーブル SELECT * FROM 元となるテーブル名;
(例
CREATE TABLE tb1H SELECT * FROM tb1;

■テーブルのカラム構造だけをコピーする
CRATE TABLE 新規テーブル LIKE 元となるテーブル名;
(例
CREATE TABLE tb1I LIKE tb1;
この方法では「AUTO_INCREMENT」などの属性もコピーできる、器だけコピーする感じ。

■他のテーブルのレコードをコピーする
同じカラム構造のテーブルのデータを丸ごとコピーするには、次のようにする
INSERT INTO テーブル名 SELECT * FROM 元となるテーブル名;
(例
INSERT INTO tb1I SELECT * FROM tb1;
※器だけ作ったテーブルにレコードをコピーすればよい

■特定のカラムを選択してコピーする
INSERT INTO tb1I (name) SELECT FROM tb1;
この場合、tb1Iのnameカラムにtb1のレコードが入る。他はNULL

——————————————————————
■テーブルを改造する
テーブルのカラム構造の変更
ALTER TABLEコマンド

■カラムのデータ型を変更する
ALTER TABLE テーブル名 MODIFY カラム名 データ型;
(例
ALTER TABLE tb1 MODIFY name VARCHAR(100);

■カラムを追加する
ALTER TABLE テーブル名 ADD カラム名 データ型;
(例
ALTER TABLE tb1 ADD umare DATETIME;

・カラムの先頭に追加する
FIRSTをつけてカラムの先頭に追加,DATATIME型カラムを追加
ALTER TABLE tb1 ADD umare DATATIME FIRST;

・カラムを自由な位置に追加する
ALTER TABLE tb1 ADD umare DATATIME AFTER bang;

■レコードの追加
INSERT INTO tb1c VALUES(‘N111′,’松田’,33,’1975-11-10′);

■カラム名とデータ型を変更する
■カラム名を含めてカラムのデータ型・位置を変更する
ALTER TABLE テーブル名 CHANG 変更前カラム名 変更後カラム名 変更後データ型;
(例
ALTER TABLE tb1c CHANGE umare seinen DATE;

■カラムを削除する
ALTER TABLE テーブル名 DROP カラム名;

■主キーを設定する

主キーの作成
CREATE TABLE テーブル名(カラム名 データ型 PRIMARY KEY・・・);

(例 主キーであるINT型のカラム「a」と、VARCHAR(10)型のカラム「b」を持つテーブル「itii」を作成します。
CREATE TABLE itii(a INT PRIMARY KEY,b VARCHAR(10));

■ユニークキー
重複をしないという制限を設定する
CREATE TABLE uniq(a INT UNIQUE,b VARCHAR(10));

■自動的に連続番号が入力されるカラムにする
連続番号機能付きカラムの定義
1:データ型は「INT」などの整数型
2:「AUTO_INCREMENT」を付ける
3:「PRIMARY KEY」などを設定して一意(ユニーク)にする ●●●

■連続番号機能付きカラムの作成
CREATE TABLE renzoku(a INT AUTO_INCREMENT PRIMARY KEY,b VARCHAR(10));

■連続番号の初期化
すべてのレコードを削除して、連続番号の値を1から入力する場合は
「AUTO_INCREMENT」を初期化する必要がある。
ALTER TABLE テーブル名 AUTO_INCREMENT = 0;

■最初からデータが入っているカラムにする
「何も入力しなければ、あらかじめ設定してあるデータが勝手に入力される」
DEFAULT
CREATE TABLE テーブル名 (カラム名 データ名 DEFAULT 初期値…)
(例
ALTER TABLE tb1G MODIFY name VARCHAR(10) DEFAULT ‘氏名未入力’;
上記でnameカラムに値を入れない場合は、勝手に氏名未入力と入力される

■インデックスを設定する
CREATE INDEX インデックス名 ON テーブル名(カラム名);
テーブルtb1Gにmy_indという名前のインデックスを設定する
(例
CREATE INDEX my_ind ON tb1G(bang);

■インデックスの設定
SHOW INDEX FORM テーブル名

■インデックスの削除
DROP INDEX インデックス名 ON テーブル名;

■インデックスの確認
SHOW INDEX FROM tb1G G

◎インデックスと処理速度の関係
YESかNOしかないカラムをインデックスにしても意味がない。
インデックスが設定されているテーブルを更新したら、
インデックスが作り直されるので、更新が遅くなる。

——————————————————————
■データ型
■数値型
◎INT
-2147483648から2147483647 (符号無しの場合0から4294967295)

◎TINYINT
-128から127 (符号無しの場合0から255)

◎SMALLINT
-32768から32767 (符号無しの場合0から65535)

◎MEDIUMINT
-8388608から8388607 (符号無しの場合0から16777215)

◎BIGINT
-9223372036854775808から9223372036854775807
(符号無しの場合0から18446744073709551615)

◎FLOAT 浮動小数点
 -3.402823466E+38から3.402823466E+38

◎DOUBLE
 -1.7976931348623157E+308から1.7976931348623157E+308

■日付・時刻データの入力
日付は「YYYY-MM-DD」、時刻は「HH:MM:SS」で入力する

■文字列型
◎CHAR (固定の文字列)
 255文字まで

◎VARCHAR (可変の文字列)
 255文字まで

◎TEXT (長い文字列)
 65535文字まで

◎LONGTEXT (とても長い文字列)
 4294967295文字まで

■日付・時刻型
◎DATETIME (日付と時刻)
 000-01-01 00:00:00~9999-12-31 23:59:59

◎DATE (日付)
 1000-01-01~9999-12-31

◎YEAR(年) (とても長い文字列)
 1901~2155

◎TIME (時刻)
 -838:59:59~838:59:59

——————————————————————

■全てのデータ表示させる
SELECT * FROM tb1;

■データを表示する
SELECT カラム名1,カラム名1,カラム名1, FROM テーブル名;
(例
SELECT bang,name FROM tb1;

■一度にデータを入力する
INSERT INTO テーブル名
(例
INSERT INTO tb1 (toshi,name,bang) VALUES(23,’佐藤’,’A104′), VALUES(26,’鈴木’,’B104′), VALUES(40,’加藤’,’C120′);

■カラム名を指定してデータを挿入する
INSERT INTO テーブル名(カラム名1,カラム名2・・・) VALUES(データ1,データ2・・・);
(例
INSERT INTO tb1 (toshi,name,bang) VALUES(23,’佐藤’,’A104′);

■テーブルにデータ挿入する
INSERT INTO テーブル名 VALUES(データ1,データ2・・・);
(例
INSERT INTO tb1 VALUES(‘A101′,’佐藤’,40);

——————————————————————

■テーブルのカラム構造を表示する
DESC テーブル名;

■すべてのテーブルを表示する
SHOW TABLES;

■テーブルを作る
CREATE TABLE テーブル名(カラム名1 データ型1, カラム名2 データ型2・・・)

(例
CREATE TABLE tb1(bang VARCHAR(10),name VARCHAR(10),tosi INT);

■現在使っているデータベースを表示する
SELECT DATABASE();

■使用するデータベース名
USE データベース名

■データデース一覧を確認
SHOW DATABASES;

■データベースを作る
CREATE DATABASE データベース名;