SQL基本

CREATE

CREATE DATABASE データベース名
データベースを作る。

CREATE TABLE テーブル名 (カラム名 型,カラム名 型,…)
CREATE TABLE 従業員 (ID int , 名前 varchar(10) , 所属コード varchar(10))
テーブルを作る。

CREATE USER ユーザー名
CREATE USER ユーザー名 IDENTIFIED BY ‘パスワード’
ユーザーを作る。
IDENTIFIED以降を書くと、パスワードの設定ができる。
ユーザー名は、「ユーザー名@ホスト名」で指定する。
ホスト名とは、「localhost」だったりIPアドレスだったりする。

要素の型

varchar(10) 文字。()内の数で最大文字数を設定。
datetime 時間。年、日付、時間まで保存する。
text 文字。65535バイトまで文字を格納する。

desc

desc テーブル名
これで、テーブルの構成を確認できる。

INSERT

INSERT INTO テーブル名 (要素名1,要素名2,要素名3) VALUE(要素1,要素2,要素3)
文字列を入れるときはシングルクォーテーションで囲む。

insert from

insert文にfromを使う。

insert into テーブル名(要素名1,要素名2,要素名3)
select テーブル名2.要素名1 , テーブル名2.要素名2 from テーブル名2
where テーブル名2.要素名1 = “aaaa”
とすると、テーブル名2の要素名1が「aaaa」の要素を、テーブルにinsertできる。

SELECT

SELECT * FROM テーブル名
*はそのテーブルの中のすべての要素を表示するという意味。
SELECT 要素名1,要素名2 FROM テーブル名
こう書けば要素名1と要素名2の要素だけを表示できる。

表示項目名を自分で設定する

select age As 年齢 from USER_MST
と書けば、「USER_MST」というテーブルの「age」の値を
年齢という項目にして出せる。
複数のテーブルから同じ項目名の値を出すときに区別できる。

delete

delete from テーブル名 where 要素名=”
で、指定した項目を削除できる。
null値のデータを指定する場合は、要素名 is NULL と書く。

WHERE

条件を指定できる。
SELECT * FROM テーブル名 WHERE 要素1=’aaaa’
こう書くと要素1が「aaaa」のレコードだけを表示できる。
等しくないの指定方法は「!=」。

要素1 IS NULLとすると、要素1がNULLのものを指す。
要素1 IS NOT NULLはNULLではないものを指す。

要素1 BETWEEN a AND b はa以上b以下。

要素1 IN (‘aaaa’,’bbbb’,’cccc’)は、「aaaa」か「bbbb」か「cccc」を指す。

要素1 LIKE ‘%a%’は、aを含むものを指定するという意味。
要素1 LIKE ‘%a’とするのと違いがわからない。
%aとしたら、aの前に何文字か文字が入っててもOKとする。
a%としたら、aの後ろに文字が入っててもOKとする。
%a%としたら、aの前後に文字が入っててもOKとする。
要素1 LIKE ‘_a%’とすると、aの前に何か1文字入ったものを指定するという意味。

時間を指定する場合は、TO_TIMESTAMP(‘2020/03/10’)やTO_DATE(‘2020/03/10’)の記述をしなきゃいけない(Oracleだけ?)。

サブクエリー

SELECT文の中にSELECT文を入れて参照する。
SELECT文の抽出条件に、別のSELECT文を使用する感じ。

SELECT * FROM テーブル1 WHERE
テーブル1.値段=(
SELECT 値段 FROM テーブル2 WHERE テーブル2.名前=’商品1′
こう書けば、テーブル2の商品1と同じ値段のレコードを、テーブル1から参照して表示できる。

変数

DECLARE 変数名 型;
以上のように変数は宣言できる。

DECLARE 変数名 型:=値;
以上のように書くと初期値を入れられる。
DECLARE num int:=10;みたいな。

GRANT

GRANT CREATE on *.* to ユーザー名
指定したユーザーに、CREATE文を使う権限を与える。
*.*と書くと、すべてのDB、テーブルに対して権限を与えられる。
データベース名.テーブル名と書けば、特定のテーブルに対して権限を与えられる。

SHOW GRANTS FOR ユーザー名
指定したユーザーの権限を確認する。

文字コードの確認

MySQLの文字コードを確認する方法。
SHOW variables LIKE ‘character_set%’;
utf8mb4だと文字化けしないらしい。

コンソールの文字コードを変更する方法。
CHARSET utf8mb4

COUNT

SELECT COUNT(*) FROM テーブル名
これでテーブル内のレコードの数を取得できる。
WHEREで条件を指定して数えることもできる。

LOOP文

LOOP
 EXIT WHEN 終了条件
 処理内容
END LOOP
何故かBEGINとENDで挟まないとエラーになって処理できなかった。

CONCAT

文字列と数値をくっつけるにはCONCATが使えた。
変数名 int:=0;
CONCAT(‘a’,変数名)
これで「a0」という形にできる。
INSERTで値を入れるときにはこの書き方しかうまくいかなかった。

外部結合

片方のテーブルの情報をすべて残すテーブルの結合方法。
SELECT * FROM テーブル1,テーブル2 WHERE テーブル1.要素=テーブル2.要素(+)
以上のように書くことでテーブル1の中身をすべて残したレコードを表示できる。
(普通の結合だとテーブル1.要素=テーブル2.要素の条件を満たすレコード以外は除外される)

SELECT * FROM テーブル1,テーブル2 WHERE テーブル1.要素=テーブル2.要素(+) AND
テーブル1.要素=’aaaa’
という風にWHEREの条件を増やすこともできる。

LEFT OUTER JOIN

SELECT * FROM テーブル1 LEFT OUTER JOIN テーブル2 ON テーブル1.要素=テーブル2.要素
という書き方をすることでも外部結合は可能。
後ろにWHEREをつけて抽出条件を入れることもできる。

3つのテーブルを結合したい場合は以下のように書く。
SELECT * FROM テーブル1 LEFT OUTER JOIN テーブル2 ON
テーブル1.要素=テーブル2.要素 LEFT OUTER JOIN テーブル3 ON
テーブル1.要素=テーブル3.要素

ORDER BY

テーブルを表示する際の順番を変更できる。
SELECT * FROM テーブル名 ORDER BY 要素名
以上のように書くことで、要素名が昇順になるようにレコードが表示される。

SELECT * FROM テーブル名 ORDER BY 要素名 DESC
以上のように書くと降順で表示される。昇順はASC。何も書かないと昇順になる。

SELECT * FROM テーブル名 ORDER BY 要素名1 DESC,要素名2,ASC
以上のように書くことで複数の値で表示順を決めることができる。

TOP

表示する行数を決めるのに使える。
SELECT TOP 5 * FROM テーブル名
とすれば、最初の5行だけ表示できる。

SELECT TOP * 5 FROM テーブル名 ORDER BY 要素名 ASC
と書けば、指定した要素名で昇順で表示できる。

DUAL

DUALはダミーのテーブルを指す。
とりあえず関数とかを表示したいときとかに使える。
SELECT sysdate FROM DUAL
以上のように書くと、sysdateでシステムの時刻が表示されることを確認できたりする。
動作確認などをするとき、わざわざそれ用のテーブルを作らなくてもいいように存在するもの。

UNION

複数のSQL文の結果を合わせて表示する。
SELECT * FROM テーブル1 WHERE テーブル1.要素=”xx”
UNION
SELECT * FROM テーブル2 WHERE テーブル2.要素=”yy”

DECODE

条件分岐のSQL文。
SELECT
DECODE(カラム名,’aaaa’,’出したい値1′,’bbbb’,’出したい値2′,’出したい値3′)
FROM テーブル名
こう書くことで、指定したカラムの値が「aaaa」だったら「出したい値1」を表示し、「bbbb」だったら「出したい値2」を出し、「aaaa」でも「bbbb」でもなかったら「出したい値3」を表示する。
SELECT
DECODE(name,NOT NULL,name,’名前書き忘れ’) FROM テーブル名
こうすると、nameの値がNULLだったら「名前書き忘れ」と表示し、NULLじゃなかったらnameの値をそのまま出す。

CASE

条件指定のSQL文。
SELECT
CASE
  WHEN 条件式 THEN ‘表示したい値’
  WHEN 条件式 THEN ‘表示したい値’
  ELSE ‘表示したい値’
END カラム名
FROM テーブル名
条件式は、WHEN score>=10 AND name=’aaaa’ THEN などANDで複数指定もできる。

ALTER

テーブルの設定を変える文。
テーブルに項目を追加したり、削除したりできる。

新しい項目を追加するには
alter table テーブル名 add 項目名 型 not null
nullと書けば、null制約をなくせる。

alter table テーブル名 add 項目名 型 Not NULL
と書けば、指定したテーブル名に指定した型の項目をNot NULLで追加できる。
NULLと書けばNULL制約なしで追加できる。

alter table テーブル名 change 項目名 新しい項目名 型
と書いたら、項目名を新しい項目名、型に変えることができる。

alter table テーブル名 modify column 項目名 型 Not NULL
と書くと、既にある項目にNot NULL属性を追加できる。

既存の項目に、一意制約を加えるには
alter table テーブル名 add constraint 制約名 unique(項目名)
制約名は、かぶらなければなんでもいいらしい。
unique(項目名,項目名,)と書けば、複数の項目にキーを追加できる。ただ、それは項目ごとに一意制約を加えるのでなく、指定した項目すべてに対して一意制約が加わる。
unique(ID,password)とした場合、IDとpassword両方がかぶっているものを追加できないということになる。IDが同じでもpasswordが違っていれば登録できてしまう。

一意制約を解除するには
alter table テーブル名 drop index 制約名
一意制約を確認するには
show indexes from テーブル名

編集画面
タイトルとURLをコピーしました