2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MySQL SQL文の基礎をまとめる

Last updated at Posted at 2020-04-06

目的

  • MySQLを用いてSQL文を学んでいるのでまとめる(SQL文は小文字で記載するがスペルがあっていれば大文字でも小文字でも問題ない)

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.3)
PC機種 MacBook Pro (16-inch ,2019)
プロセッサ 2.6 GHz 6コアIntel Core i7
メモリ 16 GB 2667 MHz DDR4
グラフィックス AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB
  • ソフトウェア環境
項目 情報 備考
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いて導入

前提環境

準備

  1. 下記コマンドを実行してMySQLのターミナルを起動する。(MySQLのルートユーザのパスワードを忘れてしまった方はこちら→MySQL 8.0.18 のrootパスワードを忘れた時のリセット方法)

    $ mysql -u root -p
    
  2. MySQLにターミナルからログインできる事を確認する。(ターミナルにmysql>と表示されていればOK)

  3. use文を使ってデータベースを指定する。(データベース名一覧の出力方法はこちら→MySQL データベース作成 テーブル作成からデータの格納 取り出し)

    mysql> use データベース名;
    

コメントアウト

  • --の後に半角スペースを開けて記載した文字はコメントとして扱われる。
  • *//*で囲んだ部分もコメントとして扱われる。

テーブル内の特定のカラムに格納されている値を出力する

  • 下記を実行する。

    mysql> select カラム名
        -> from テーブル名;
    
  • 「users」テーブルの「id」カラムを出力したい場合は下記を実行する。

    mysql> select id
        -> from users;
    
  • 「users」テーブルの全てのカラムを出力したい場合は下記を実行する。

    mysql> select *
        -> from users;
    

カラムの別名定義

  • 予約語(selectなど)を使用する際に、テーブル名やカラム名を別名として定義することができる。

  • 現状基礎では必要ないように思えるが後々使用する事になるので別名定義の存在と記載方法だけ紹介する。

  • 下記の二つの構文をそれぞれの予約後と絡めて実行する。

    • テーブル名の別名を定義したい場合は本来のテーブル名 as 定義したいテーブル名となる。
    • カラム名の別名を定義したい場合は本来のカラム名 as 定義したいカラム名となる。
  • 「user」テーブルの別名を「people」と定義し、全てのカラムを出力したい場合は下記を実行する。

    mysql> select *
        -> from user as people;
    
  • 「user」テーブルの「id」カラムの別名を「user_id」と定義して「id」カラムを出力したい場合は下記を実行する。

    mysql> select id as user_id
        -> from user;
    

新しくレコードを作ってデータを格納する

  • 下記を実行する。

    mysql> insert into テーブル名
        -> (カラム名1, カラム名2, カラム名3)
        -> value ('カラム名1に追加するデータ', 'カラム名2に追加するデータ', 'カラム名3に追加するデータ');
    
  • すべてのカラムに対してデータを追加する場合、データを格納する先のカラムは指定しなくて良い

  • 下記のカラムとデータが存在するuserテーブルにidが「2」、dateが「2020-04-02」、memoが「idが2のユーザです」という情報のレコードを追加する場合は下記を実行する。

    • 追加前のテーブルの状態を下記に記載する。

      id date memo
      1 2020-04-01 idが1のユーザです
    • 下記を実行する。

      mysql> insert into user
          -> (id, date, memo)
          -> value ('2','2020-04-02', 'idが2のユーザです。');
      
    • 実行後userテーブルは下記のようにデータが追加された状態になる。

      id date memo
      1 2020-04-01 idが1のユーザです
      2 2020-04-02 idが2のユーザです

指定カラムのデータを更新する

  • テーブル内の指定カラム全てを同じ値で更新したい場合は下記を実行する。

    mysql> update テーブル名
        -> set カラム名1 = 上書きしたいデータ;
    
  • 条件付けを行い一致したレコードのカラムのデータを書き換える場合は下記を実行する。

    mysql> update テーブル名
        -> set カラム名1 = 上書きしたいデータ
        -> where 条件
    
  • 下記のカラムとデータが存在するuserテーブルのidが2のユーザのdateを「2020-04-03」に更新したい場合は下記を実行する。

    • データ更新前のテーブルの状態を下記に記載する。

      id date memo
      1 2020-04-01 idが1のユーザです
      2 2020-04-02 idが2のユーザです
    • 下記を実行する。

      mysql> update user 
          -> set date = '2020-04-03'
          -> where id = '2';
      
    • 実行後userテーブルは下記のようにデータが更新された状態になる。

      id date memo
      1 2020-04-01 idが1のユーザです
      2 2020-04-03 idが2のユーザです

指定カラムのデータを削除する

  • テーブル内の全てのカラムのデータを削除する場合は下記を実行する。(基本これは実行しない。本能的にこれは実行を禁止するレベルで覚える)

    mysql> delete from テーブル名;
    
  • 特定のレコードのカラムないのデータを削除する場合は下記を実行する。

    mysql> delete from テーブル名
        -> where カラム名 = データ;
    
  • 下記のカラムとデータが存在するuserテーブルのidが2のレコードのデータを削除する場合下記を実行する。

    • データ更新前のテーブルの状態を下記に記載する。

      id date memo
      1 2020-04-01 idが1のユーザです
      2 2020-04-03 idが2のユーザです
    • 下記を実行する。

      mysql> delete from user
          -> where id = 2;
      
    • 実行後userテーブルは下記のようにデータが更新された状態になる。

      id date memo
      1 2020-04-01 idが1のユーザです

テーブルを作成する

  • 下記を実行する。

    mysql> create table テーブル名 (初回作成カラム名1 データ型(オプション), 初回作成カラム名2 データ型(オプション));
    

テーブルを削除する

  • 下記を実行する。(文字通りそっくりそのままテーブルを削除するので実行には注意する。)

    mysql> drop table テーブル名;
    

特定のカラムを追加する

  • 新規作成されたカラムのデータはすでにいくつかのレコードが存在している場合、NULLが格納される。

  • 下記を実行する。

    mysql> alter table カラムを追加したいテーブル名
        -> add 追加したいカラム名 データ型;
    
  • 下記のカラムとデータが存在するuserテーブルのidカラムの隣にデータ型がtinyint型のnameカラムを追加したい場合は下記を実行する。

    • カラム追加前のテーブルの状態を下記に記載する。

      id date memo
      1 2020-04-01 idが1のユーザです
    • 下記を実行する。

      mysql> alter table user
          -> add name tinyint
          -> after id;
      
    • カラム追加後のテーブルの状態を下記に記載する。

      id name date memo
      1 NULL 2020-04-01 idが1のユーザです

特定のカラムを削除する

  • 下記を実行する。(文字通りそっくりそのままカラムを削除するので実行には注意する。)

    mysql> alter table users
        -> drop カラム名;
    

テーブル内のデータをターミナル上に出力する

  • 下記を実行する。

    mysql> select *
        -> from テーブル名;
    

テーブル作成時、カラム追加時に自動インクリメント(連番付与)してくれるカラムを定義する

  • テーブル作成時のカラム設定を記述する場合は下記を実行する。

    mysql> create table テーブル名
        -> 自動インクリメントを行たいカラム名 データ型 auto_incrment;
    
  • カラム追加時のカラム設定を記述する場合は下記を実行する。

    mysql> alter table テーブル名
        -> add 自動インクリメントを行たいカラム名 データ型 auto_incrment;
    

既存のカラム名を変更する

  • 下記を実行する。(データ型の記載までが必須である。)

    mysql> alter table テーブル名
        -> change 現在のカラム名 変更後のカラム名 データ型 その他の設定;
    
  • userテーブルのdateカラムのカラム名をcreate_atカラムでデータ型をdateに修正したい場合は下記を実行する。(先に記載されているdateは現在のカラム名、後に記載されているdateはカラム名をcreate_atに変更した後のデータ型)

    mysql> alter table user
        -> -- change 現在のカラム名 変更後のカラム名 データ型と記載する
        -> change date create_at date
    

既存のカラムのデータ型や設定を変更する

  • 下記を実行する。(データ型までの記載が必須である。)

    mysql> alter table テーブル名
        -> modify カラム名 変更後のデータ型 変更後のその他の設定
    
  • userテーブルのmemoカラムのデータ型をvarchar型で最大文字数を20文字に変更したい場合は下記を実行する。

    mysql> alter table user
        -> -- modify データ型などを変更したいカラム名 データ型の順に記載する。
        -> modify memo varchar(20);
    

既存カラムのデータ型、NULL制約、初期値、キー設定を表示する。

  • 下記を実行する。

    mysql> show columns from テーブル名;
    

データベースの作成

  • 下記を実行する。

    mysql> create database データベース名;
    

データベースの削除

  • 下記を実行する。完全に内容も削除するので注意すること。

    mysql> drop database データベース名;
    
2
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?