LoginSignup
2
2

More than 1 year has passed since last update.

初心者向けSQLクエリ リスト

Last updated at Posted at 2020-06-27

割と自分に向けた記事なので、可読性などは重視していない。

■Windowsコマンドプロンプトの文字コード変更方法
文字コードをUTF8に設定する場合
chcp 65001

データベースを作成する
create database データベース名;

データベース一覧を表示する
show databases;

使うデータベースを指定する
use データベース名

現在使用しているデータベースを表示する
select database();

テーブルを作成する
create table テーブル名(カラム名1 データ型1, カラム名 データ型2...);

すべてのテーブルを表示する
show tables;

テーブルのカラム構造を表示する(desc = describe, 説明する)
desc テーブル名;

データをテーブルに挿入する
insert into テーブル名(データ1, データ2...);

カラム名を指定してデータをテーブルに挿入する
insert into テーブル名 (カラム名1, カラム名2...) values (データ1, データ2...)

複数のデータを一度にテーブルに挿入する
insert into テーブル名(カラム名1, カラム名2...) values (データ1, データ2),
(データ1,データ2...), (データ1,データ2...)...;

カラムごとのデータを表示する
select カラム名1, カラム名2... from テーブル名;

すべてのカラムのデータを表示する
select * from テーブル名;

カラムのデータ型を変更する
alter table テーブル名 modify カラム名 データ型;

カラムのデータ型を変更する(not nullを付与したい)
alter table テーブル名 modify カラム名 データ型 not null;

カラムを追加する
alter table テーブル名 add カラム名 データ型;

カラムを先頭に追加する
alter table テーブル名 modify カラム名 データ型 first;

カラム名・データ型・位置を変更する
alter table テーブル名 change 変更前カラム名 変更後カラム名 変更後データ型

カラムを削除する
alter table テーブル名 drop カラム名;

主キーを設定してテーブルを作成する
create table テーブル名(カラム名 データ型 primary key)

自動で連続した番号が割り振られるカラムを設定する(データ型には大抵INTが入りそう)
create table テーブル名(カラム名1 データ型1 auto_increment, カラム名2 データ型2...)

連続番号を初期化する
※テーブル内のレコードを全消去してレコードを追加すると、消去前の最大値+1の番号が割り振られてしまう
※テーブル内のレコードを全消去してから使う
alter table テーブル名 auto_increment=0;

カラムの初期値を設定する
alter table テーブル名(カラム名 データ型 default 初期値...);

インデックスを作成する
create index インデックス名 on テーブル名(カラム名);

インデックスを確認する
show index from テーブル名;

インデックスを確認する(カラムごとの表示)
show index from テーブル名\G (Gは必ず大文字)

インデックスの削除
drop index インデックス名 on テーブル名;

テーブルのカラム構造とレコードをコピーしてテーブルを作成する
(auto_incrementなどは反映されない)
create table 新規テーブル名 select * from コピー元のテーブル名;

テーブルのカラム構造だけをコピーする
create table 新規デーブル名 like コピー元のテーブル名;

テーブルのすべてのレコードを、同じカラム構造の他のテーブルにコピーする
insert into コピー先のテーブル名 select * from コピー元のテーブル名;

テーブルの中身を空にする
truncate table テーブル名;

テーブルを削除する
drop table テーブル名;

指定したテーブルが存在する場合は削除する
drop table if exists テーブル名;

データベースの削除
drop database データベース名;

テーブルを残してレコードだけ削除する
delete from テーブル名;

カラム名をエイリアスにする
select カラム名 asエイリアス from テーブル名;

レコードを処理して表示する(例 10000倍してhogeというエイリアスで表示)
select カラム名*10000 as hogehoge from テーブル名;

文字列を結合して表示する
select concat(引数1, 引数2, 引数3...);

右からn文字取り出して表示する(左から:left)
select right(カラム名, n) from テーブル名;

n番目からm個取り出して表示する
select substring(カラム名, n, m) from テーブル名;

"str"をi回繰り返して表示する(iがカラムを指す場合は末尾にfrom テーブル名)
select repeat("str", i);

逆さから表示する
select reverse(カラム名) from tb1;

表示するレコード数に制限をかける
select カラム名 from テーブル名 limit レコード数;

条件に一致したレコードだけを表示する
select カラム名 from テーブル名 where 条件式;

条件によって出力するリテラルを変化
select
case
when 条件式 then 出力するリテラル
when 条件式 then 出力するリテラル...
else 出力するリテラル
end
from テーブル名;

レコードを昇順に表示する
select * from テーブル名 order by キーとなるカラム名;

レコードを降順に表示する
select * from テーブル名 order by カラム名 desc;

表示するレコードの範囲を制限する
select カラム名 from テーブル名 limit 表示するレコード数 offset 表示開始レコード;

グループごとに表示する
selectカラム名 from テーブル名 group by グループ化するカラム名;

カラムのデータをすべて修正する(既にデータがある場合は上書きされる)
update テーブル名 set カラム名 = 設定する値;

条件に一致したレコードだけ修正する
update テーブル名 set カラム名 = 設定する値 where 条件;

(INT型のカラムに対して)下位n個のカラムだけ修正する
update テーブル名 set カラム名 = 設定する値 order by INT型のカラム limit n;

(INT型のカラムに対して)昇順(asc)や降順(desc)に表示
select * from テーブル名 order by カラム名 asc;

既存のテーブルの一部をコピーして新しいテーブルを作成する
(既存のテーブルへコピーする場合は create table ではなくinsert into)
create table 新テーブル名 select * from 旧テーブル名 where カラム名 like 値;

既存のテーブルの全部をコピーして新しいテーブルを作成する(バックアップをとる)
create table 新テーブル名 select * from 旧テーブル名;

条件に一致するレコードを削除する
delete from テーブル名 where 条件;

外部ファイルからデータをインポートする(import, いmぽーと)
load data infile "db1\tb2.csv" into table tb2 fields terminated by ",";

複数の抽出結果をあわせて表示する
select * from テーブル名 where 条件 union select * from テーブル名 where 条件;

複数の抽出結果をあわせて表示する(重複を許容、UNION ALLを用いる)
select * from テーブル名 where 条件 union all select * from テーブル名 where 条件;

複数の抽出結果をあわせて表示する1
(内部結合 on ~の条件が真のものだけ結合して、select ~のカラムを表示)
select テーブル名.カラム名, テーブル名.カラム名... from 結合するテーブル名1 join 結合するテーブル名2 on テーブル名1.カラム名 = テーブル名2.カラム名

複数の抽出結果をあわせて表示する2
(where~の条件に一致するレコードだけ表示する)
(from~はカンマで区切ってもよいし、joinで区切ってもよい)

select テーブル名.カラム名... from テーブル名1, テーブル名2, ... where テーブル名1.カラム名 = テーブル名2.カラム名;

複数の抽出結果をあわせて表示する3
select テーブル名.カラム名... from 結合するテーブル名1, 結合するテーブル名2, ... where テーブル名1.カラム名 = テーブル名2.カラム名

共通項となるカラム名が一致しているとき、複数の抽出結果をあわせて表示する
select テーブル名.カラム名... from 結合するテーブル名1 join 結合するテーブル名2 using(カラム名);

複数の抽出結果のうち、whereで指定した条件で更に抽出する(ex. 100以上で抽出)
select テーブル名.カラム名... from テーブル名1 join テーブル名2 using(カラム名) where テーブル名.カラム名 >=100;

複数のテーブルを結合して抽出する
select * from テーブル名1 join テーブル名2 where 結合条件 join where 結合条件....;

選択したテーブルに共通項が存在しているものだけを表示→内部結合
選択したテーブルに共通項がなくても表示→外部結合

左外部結合(left)右外部結合(right)して結果を表示する
select カラム名 from テーブル名1 left join 結合するテーブル2 on テーブル1カラム名 = テーブル2カラム名;

自己結合して表示(エイリアスを用いる)
select カラム名 from テーブル名1 as エイリアス1 join テーブル名2 as エイリアス2;

自己結合して表示(エイリアスを用いる)
(asを省略して表記するがカンマで区切る)
select カラム名 from テーブル名1 エイリアス1, テーブル名2 エイリアス2, ... ;

サブクエリを使って最大値をもつレコードを表示する

select * from tb where カラム名 in (select max(カラム名) from テーブル名);

https://blanche-toile.com/web/mysql-like-search
//末尾一致検索の場合
SELECT * FROM テーブル名 WHERE フィールド名 LIKE '%文字列'

//前方一致検索の場合
SELECT * FROM テーブル名 WHERE フィールド名 LIKE '文字列%'

//部分一致検索(どこかに含まれていれば良い)の場合
SELECT * FROM テーブル名 WHERE フィールド名 LIKE '%文字列%'

//jで始まりtで終わる任意の長さの文字列の場合
SELECT * FROM テーブル名 WHERE フィールド名 LIKE 'j%t'

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2