データベース03 - sql(create, insert, delete, updateなど)
TRANSCRIPT
SQL編
回 ⽇付 テーマ2 4/16 SQL概要3 4/23 SQL(CREATE, INSERT, DELETE, UPDATEなど)4 4/30 SQL(SELECT:基本)5 5/7 SQL(SELECT:結合,副問合せ)6 5/14 SQL(VIEW, ALTER, GRANTなど)7 5/21 SQL復習,中間試験(SQL)
2
SQLの主なコマンド⼀覧(1/2)
3
種類 コマンド 説明
DDL
CREATE DATABASE データベースを作成CREATE TABLE データベース内にテーブルを定義CREATE VIEW データベースにビュー(仮想テー
ブル)を定義DROP TABLE データベースからテーブルを削除DROP VIEW データベースからビューを削除ALTER TABLE テーブル構成を変更
SQLの主なコマンド⼀覧(2/2)
4
種類 コマンド 説明
DML
INSERT テーブルにデータを登録DELETE テーブルからデータを削除UPDATE テーブル内のデータを更新SELECT テーブル内からデータを検索して
取り出す
DCL
COMMIT 正常終了を通知ROLLBACK 異常終了を通知GRANT 権限を与えるREVOKE 権限を取り下げる
MySQLにログイン
6
c:¥>mysql -u 【ユーザ名】 -pEnter password:【パスワード】
c:¥>mysql -u rootmysql>
例
コマンドプロンプトなどから,次のコマンドを実⾏する-
-u : ユーザ名を指定するオプション-p : パスワードを指定するオプション
(パスワードが設定されていない場合は省略可)
ログインすると,mysqlコンソールに切り替わり,mysqlプロンプト"mysql>"が表⽰される
SQLはmysqlコンソール上で実⾏する
データベースの作成CREATE DATABASE
8
CREATE DATABASE 【データベース名】;
CREATE DATABASE dbclass DEFAULT CHARACTER SET UTF8;SHOW DATABASES;
例
⽇本語を扱う場合は,"DEFAULT CHARACTER SET UTF8"を追加し,⽂字コードをUTF8に指定すると良い
テーブルの作成CREATE TABLE
10
CREATE TABLE 【テーブル名】(【カラム名】 【データ型】 【制約】,【カラム名】 【データ型】 【制約】,...
【カラム名】 【データ型】 【制約】);
例;プロ野球選⼿の所属テーブル
11
player_no name home birth
_dateG18 杉内俊哉 福岡 1980-10-30G19 菅野智之 神奈川 1989-10-11T14 能⾒篤史 兵庫 1979-5-28T19 藤浪晋太郎 ⼤阪 1994-4-12C15 ⿊⽥博樹 ⼤阪 1975-2-10C18 前⽥健太 ⼤阪 1988-4-11
playerteam_id name rank
G 巨⼈ 1T 阪神 2C 広島 3
teamplayer_no
team_id year
G18 G 2012G19 G 2013T14 T 2005T19 T 2013C15 C 2015C18 C 2007
affiliation
*manaba+R上の"player.sql"内のSQL⽂を実⾏することで復元できる
CREATE TABLE player(player_no CHAR(3) PRIMARY KEY,name TEXT NOT NULL,home CHAR(3) NOT NULL,birth_date DATE NOT NULL);
CREATE TABLE例;playerテーブルの作成
12
player_no name home birth
_date
player
CREATE TABLE team(team_id CHAR(1) PRIMARY KEY,name CHAR(6) NOT NULL,rank INT);
CREATE TABLE例;teamテーブルの作成
13
team_id name rank
team
CREATE TABLE affiliation(player_no CHAR(3)REFERENCES player(player_no),
team_id CHAR(1),year INT,PRIMARY KEY(player_no, team_id),FOREIGN KEY(team_id)REFERENCES team(team_id));
CREATE TABLE例;affiliationテーブルの作成
14
player_no
team_id year
affiliation
データ型(1/3)
17
データ型 説明CHARACTER(n)/ CHAR(n)
n⽂字で構成される固定⻑⽂字列(0~255⽂字)
CHARACTERVARYING(n)/ VARCHAR(n)
n⽂字までで構成される可変⻑⽂字列(0~65,535⽂字)
TEXT 可変⻑⽂字列(0~65,535⽂字)
⽂字列型
整数型の範囲とサイズ
19
データ型 符号付きの範囲 符号なしの範囲 サイズTINYINT -128 ~ 127 0 ~ 255 1バイトSMALLINT -32,768 ~ 32,767 0 ~ 65,535 2バイトMEDIUMINT -8,388,608
~ 8,388,6070 ~ 16,777,215 3バイト
INT -2,147,483,648~ 2,147,483,647
0 ~ 4,294,967,295 4バイト
BIGINT -9,223,372,036,854,775,808~ 9,223,372,036,854,775,807
0~ 18,446,744,073,709,551,615 8バイト
整数型
データ型の後にUNSINGEDを付けることで,符号なしを指定できる(MySQLの場合)
データ型(3/3)
20
データ型 説明DATE 年⽉⽇('YYYY-MM-DD'形式)TIME 時分秒('HH:MM:SS'形式)TIMESTAMP DATEとTIMEの組合せ
('YYYY-MM-DD HH:MM:SS'形式)
⽇時型
データ登録時や更新時にTIMESTAMP型のカラムに値を指定しないと,登録時または更新時の⽇付と時刻が⾃動的に設定される
制約
21
制約 キーワード 説明
主キー制約 PRIMARY KEY 主キーのカラムを指定(NOT NULLとUNIQUEの組合せ)
NOT-NULL制約 NOT NULL カラムがNULL値をとらないことを⽰す制約
⼀意性制約 UNIQUE 複数のデータがこのカラムに同じ値をもつことを禁⽌する制約
外部キー制約 FOREIGN KEY,REFERENCES
カラムの値が,他のテーブルのカラムの値と⼀致しなければならない制約(参照整合性制約)
参照整合性制約とは
22
player_no name home birth
_dateG18 杉内俊哉 福岡 1980-10-30G19 菅野智之 神奈川 1989-10-11T14 能⾒篤史 兵庫 1979-5-28T19 藤浪晋太郎 ⼤阪 1994-4-12C15 ⿊⽥博樹 ⼤阪 1975-2-10C18 前⽥健太 ⼤阪 1988-4-11
playerteam_id name rank
G 巨⼈ 1T 阪神 2C 広島 3
team
player_no
team_id year
G18 G 2012G19 G 2013T14 T 2005T19 T 2013C15 C 2015C18 C 2007
affiliation
player_no CHAR(3)REFERENCES player(player_no)
FOREIGN KEY(team_id)REFERENCES team(team_id))
参照
参照
外部キー外部キー
参照先のカラムにない値を設定しようとするとエラーになる.
データの登録INSERT INTO
23
INSERT INTO 【テーブル名】
VALUES(【値】,【値】,...);
INSERT INTO 【テーブル名】
(【カラム名】,【カラム名】,...)VALUES(【値】,【値】,...);
INSERT INTO 【テーブル名】
SET 【カラム名】=【値】,【カラム名】=【値】,...;
INSERT INTO playerVALUES('T14','能⾒篤史','兵庫','1979-5-28');
INSERT INTO例;playerテーブルへのデータの登録
24
INSERT INTO team(name, rank, team_id)VALUES('阪神', 2, 'T');
INSERT INTO affiliationSET player_no='C15', team_id='C';
数値型を除いては,値はシングルクォーテーション(')で囲む
UPDATE 【テーブル名】
SET 【カラム名】=【値】,【カラム名】=【値】,...
WHERE 【条件】;
データの更新UPDATE
26
UPDATE teamSET rank = 1WHERE team_id = 'T';
例
*WHERE句は次回以降の講義で詳細に学ぶ
WHERE句を書き忘れると,すべてのデータを更新してしまうので注意
DELETE FROM 【テーブル名】
WHERE 【条件】;
データの削除DELETE FROM
27
DELETE FROM teamWHERE team_id = 'G';
例
WHERE句を書き忘れると,すべてのデータを削除してしまうので注意
DROP DATABASE 【データベース名】;
データベースの削除DROP DATABASE
29
DROP DATABASE dbclass;例
警告や確認メッセージなしに削除されるため,実⾏するときは慎重に
まとめ
32
MySQLにログイン
CREATE DATABASE
CREATE TABLE
INSERT INTO
UPDATE
DELETE FROM
DROP TABLE
DROP DATABASE
MySQLからログアウト
本⽇学習したキーワード〜SQL編〜
33
MySQL スクリプトファイルNOT-NULL制約 静的SQL
SQL 制約⼀意性制約 対話的DB操作外部キー制約 ダンプファイル外部キー データ制御⾔語(DCL)仮想テーブル データ操作⾔語(DML)カラム(列) データ定義⾔語(DDL)関係代数 データベース関係データベース管理システム(RDBMS) テーブル(表)関係データモデル テーブル副問合せ完全外部結合 問合せ(クエリ)交差結合 等結合参照整合性制約 動的SQL⾃⼰結合 内部結合⾃然結合 左外部結合集約関数 ビュー主キー 副問合せ主キー制約 右外部結合スカラ副問合せ ロウ(⾏)
これまでに学習したキーワード〜SQL編〜
34
MySQL スクリプトファイルNOT-NULL制約 静的SQL
SQL 制約⼀意性制約 対話的DB操作外部キー制約 ダンプファイル外部キー データ制御⾔語(DCL)仮想テーブル データ操作⾔語(DML)カラム(列) データ定義⾔語(DDL)関係代数 データベース関係データベース管理システム(RDBMS) テーブル(表)関係データモデル テーブル副問合せ完全外部結合 問合せ(クエリ)交差結合 等結合参照整合性制約 動的SQL⾃⼰結合 内部結合⾃然結合 左外部結合集約関数 ビュー主キー 副問合せ主キー制約 右外部結合スカラ副問合せ ロウ(⾏)
本⽇学習したSQLキーワード
35
ALL DROP TABLE ORDER BYALTER TABLE ... ADD DROP USER PRIMARY KEYALTER TABLE ... CHANGE EXISTS REFERENCESALTER TABLE ... DROP FOREIGN KEY REVOKEALTER TABLE ... MODIFY FULL OUTER JOIN RIGHT OUTER JOINALTER TABLE ... RENAME AS GRANT SELECTANY GROUP BY SHOW COLUMNS FROMAS HAVING SHOW DATABASESASC IN SHOW TABLESavg INNER JOIN SOMEBETWEEN INSERT INTO sumcount JOIN UNIQUECREATE DATABASE LEFT OUTER JOIN UPDATECREATE TABLE LIKE USECREATE VIEW LIMIT WHERECROSS JOIN maxDELETE FROM minDESC NATURAL JOINDISTINCT NOT EXISTSDROP DATABASE NOT NULL
これまでに学習したSQLキーワード
36
ALL DROP TABLE ORDER BYALTER TABLE ... ADD DROP USER PRIMARY KEYALTER TABLE ... CHANGE EXISTS REFERENCESALTER TABLE ... DROP FOREIGN KEY REVOKEALTER TABLE ... MODIFY FULL OUTER JOIN RIGHT OUTER JOINALTER TABLE ... RENAME AS GRANT SELECTANY GROUP BY SHOW COLUMNS FROMAS HAVING SHOW DATABASESASC IN SHOW TABLESavg INNER JOIN SOMEBETWEEN INSERT INTO sumcount JOIN UNIQUECREATE DATABASE LEFT OUTER JOIN UPDATECREATE TABLE LIKE USECREATE VIEW LIMIT WHERECROSS JOIN maxDELETE FROM minDESC NATURAL JOINDISTINCT NOT EXISTSDROP DATABASE NOT NULL