勉強メモーMySQL関連
勉強メモーMySQL関連
リレーショナルデータベース(RDB)の操作を行うための言語
DDLデータを定義する
DMLデータを操作する
SQLの文法について学ぶ
mysql -u root
mysqlにユーザー名がrootで接続する
SHOW DATABASES;
データベースを一覧で表示するSQL文
CREATE DATABASE データベース名;
指定した名前のデータベースが作成される
USE データベース名;
データベースを選択するSQL文
SHOW TABLES;
選択したデータベースに存在するテーブルを一覧で表示するSQL文
CREATE TABLE テーブル名 (カラム名 カラム名の型, ……);
CREATE TABLE文はテーブルを作成するためのSQL文
CREATE TABLE goods(id INT, name VARCHAR(255));
SHOW columns FROM テーブル名;
テーブル構造を確認するためのSQL文
ALTER TABLE テーブル名 操作
カラムの追加・修正・削除はすべてテーブル構造の変更
SQL文は共通して、ALTER命令を用いたALTER TABLE文を使用
ALTER TABLE goods ADD (price INT,zaiko INT);
ALTER TABLE テーブル名 CHANGE 古いカラム名 新しいカラム名 新しいカラムの型;
カラムの修正は先ほど同様ALTER TABLE文を使用する
ALTER TABLE goods CHANGE zaiko stock INT;
※カラムの型は変更しなくても、再度記述をしなくてはなりません。
カラムの削除にもALTER TABLE文を使用する
ALTER TABLE goods DROP stock;
テーブルにデータを登録するためのINSERT文を使用する
・全てのカラムに値を入れる場合
INSERT INTO テーブル名 VALUES(値1, 値2, 値3);
・特定のカラムのみに値を入れる場合
INSERT INTO テーブル名(カラム名1, カラム名2) VALUES(値1, 値2);
INSERT INTO goods VALUES(1, "ペン", 120);
デフォルト値
レコードを生成するときにカラムにn入れるものを指定しなかった場合、そのカラムに入る値のこと
UPDATE テーブル名 SET 変更内容 WHERE 条件;
データの更新にはUPDATE文を使用する
例)先ほど追加したidが2のレコードを、priceが100となるように更新してみましょう。
UPDATE goods SET price = 100 WHERE id = 2;
DELETE FROM テーブル名 WHERE 条件;
テーブルにあるデータを削除するためにはDELETE文を使用
DELETE FROM goods WHERE id = 2 ;
Sequel proでもクエリ操作が出来る
=>セミコロンは不要
=>検索時には長いタイプが必要であり、ミス時に修正が楽
=>出力が多く、その出力を見やすくするため
SELECT *
FROM users
SELECT句とFROM句を用いたSQL文が、検索の基本的な形となります。
FROM句 :検索するテーブルを指定する
SELECT句:取得するカラムを指定する
WHERE句 :取得するレコードの条件を指定し、その条件が正のレコードを取得する
比較演算子を使用することが出来る
文字列や日付の場合は””でもじを囲う
"*"(アスタリスク)を指定:ワイルドカード(代わりになるもの)
WHERE a AND b
AND演算子:複数の条件を指定して式を作り、その条件が全て正であるとき、式が正となる
WHERE a OR b
OR演算子:複数の条件を指定して式を作り、その条件のうちどれか1つ以上が正となれば、式は正となる
WHERE NOT a
NOT演算子:1つの条件を指定して式を作り、式の正誤はその条件と逆のものになる
条件aが誤となる(当てはまらない)レコードが取得出来ます。
WHERE カラム名 BETWEEN 下限 AND 上限
BETWEEN演算子:1つのカラムに対し上限と下限を指定して式を作り、カラムの値がその範囲に含まれるとき、その式は正になる
WHERE カラム名 IN (値1, 値2, ……)
-- (値1, 値2, ……)の部分がリストとなります
IN演算子:1つのカラムに対しリストを指定して、カラムの値がそのリストに含まれるとき、その式は正になる
CONCAT(文字列1, 文字列2, ……)
CONCAT関数:複数の文字列を連結させることができる
SELECT 取得するデータ AS 別名
AS句:SELECT句でデータを取得するとき、AS句を併用すると、そのカラムに別名を付けることが出来る
SELECT user_id
FROM shifts
WHERE date = "2015-07-01"
↑これだと重複した結果が出力される
SELECT DISTINCT カラム名
DISTINCTキーワードを使用で。、指定したカラムの値が重複する行を除外してデータ取得する
SELECT DISTINCT user_id
FROM shifts
WHERE date = "2015-07-01"
GROUP BY カラム名
GROUP BY句:指定したカラムが同じ値を持つデータを1つのグループとしてまとめることが出来る
SELECT user_id
FROM shifts
WHERE date = "2015-07-01"
GROUP BY user_id
このSQL文では、
①”shifts"テーブルから"date"が"2015-07-01"のレコード取得しています。
②”user_id"が同じ値のレコードをグループ化し、
③そのグループ化された一覧の"user_id"のみを表示する
ということが行われています。
レコードの数を数える
グループ化されたデータは何件のレコードがグループされているのかというデータを持っている
SELECT COUNT(カラム名)
CONUT関数:グループ化されたデータに対して使用することが出来る集計関数の一
SELECT user_id, COUNT(*)
FROM shifts
WHERE date = "2015-07-01"
GROUP BY user_id
上記のSQL文は、先ほどGROUP BY句で実行したSQL文の、
SELECT句にCOUNT(*)を追加したものです。
今回は特にNULLの行を除きたいといったことはないため、
COUNTのカラム指定は*となっています。
FROM テーブル名1
JOIN テーブル名2 ON テーブル名1.カラム名1 = テーブル名2.カラム名2
JOINを使用すると、指定したそれぞれのテーブルの、カラムの値が一致するデータを結合することが出来る
FROM shifts
JOIN users ON shifts.user_id = users.id
「"shifts"テーブルに"users"テーブルを結合させます。
"shifts"テーブルの各行には、その行の"user_id"が"users"テーブルの"id"と一致する行を結合させます。」
という意味
FROM shifts (as) s
JOIN users (as) u ON s.user_id = u.id
SELECT
user_id,
COUNT(*) "コマ数",
u.*
FROM shifts s
JOIN users u ON s.user_id = u.id
WHERE date = "2015-07-01"
GROUP BY user_id
SELECT DISTINCT user_id
FROM shifts
WHERE date = "2015-07-01"
SELECT *
FROM users
WHERE id NOT IN (リスト)
SQL文はWHERE句で、NOT INを使用して以下のように記述することが出来る
テスト解答