MySQL シリーズ 4 SQL 構文

MySQL シリーズ 4 SQL 構文

チュートリアルシリーズ

MySQL シリーズ: MySQL リレーショナル データベースの基本概念
MySQLシリーズのMariaDBサーバーのインストール
MySQL シリーズ II マルチインスタンス構成
MySQL シリーズ 3 基礎
MySQLシリーズ5つのビュー、ストアド関数、ストアドプロシージャ、トリガー
MySQL シリーズ 6 のユーザーと認証
MySQL シリーズ 7 MySQL ストレージ エンジン
MySQL シリーズ 8 MySQL サーバー変数
MySQL シリーズ 9 MySQL クエリ キャッシュとインデックス
MySQL シリーズ 10 同時実行制御を実装するための MySQL トランザクション分離
MySQL シリーズ 11 ログ
MySQL シリーズ 12 バックアップとリカバリ
MySQL シリーズ 13 MySQL レプリケーション
MySQL シリーズ 14 MySQL 高可用性実装
MySQLシリーズ15 MySQL共通設定とパフォーマンスストレステスト

1. SQL言語の紹介と仕様

​は、リレーショナル データベース管理システム (RDBMS) の管理やリレーショナル ストリーム データ管理システム (RDSMS) でのストリーム処理に使用される特殊なプログラミング言語です。

  • 1970年代にIBMはDB2用のSQLを開発した。
  • 1981年にIBMはSQL/DSデータベースを発売した。
  • 業界標準: Microsoft および Sybase の T-SQL、Oracle の PL/SQL
  • リレーショナル データベースで使用される標準言語である SQL は、もともと IBM の実装に基づいて 1986 年に承認されました。 1987 年、国際標準化機構 (ISO) は ANSI (米国規格協会) SQL を国際標準として採用しました。
  • SQL: ANSI SQL - SQL-86、SQL-89、SQL-92、SQL-99、SQL-03

SQL言語仕様

  1. データベースシステムでは、SQL文は大文字と小文字を区別しません(大文字が推奨されます)
  2. しかし、文字列定数は大文字と小文字が区別されます
  3. SQL ステートメントは 1 行または複数行で記述でき、末尾に「;」を付けることができます。
  4. キーワードは複数行にまたがったり、省略したりすることはできません。
  5. スペースとインデントを使用して読みやすさを向上させる
  6. 通常、編集を容易にし、読みやすさを向上させるために、句は別々の行に配置されます。
  7. 注:
  • SQL 標準:
    • /*コメント内容*/ 複数行コメント
    • -- 1行コメント、スペースに注意
  • MySQL ノート:#

データベースオブジェクトの命名規則

- 文字で始まる必要があります
- 数字と3つの特殊文字(# _ $)を含めることができます
- MySQLの予約語は使用しないでください
- 同じデータベース(スキーマ)内のオブジェクトは同じ名前を持つことはできません

SQL文の分類

DDL: データ定義言語

- 作成、削除、変更

DML: データ操作言語

- 挿入、削除、更新

DCL: データ制御言語

- 許可、取り消し

DQL: データクエリ言語

-選択

2. データベース操作

1. ライブラリを作成する

CREATE DATABASE [IF NOT EXISTS] db_name; データベースを作成する

CHARACTER SET '文字セット名' 文字セットの種類を設定します

COLLATE 'collat​​e name' は照合順序を設定します

サポートされているすべての文字セットを表示します: SHOW CHARACTER SET;

サポートされているすべての並べ替えルールを表示します: SHOW COLLATION;

MariaDB [(なし)]> データベースが存在しない場合は testdb を作成します。


2. ライブラリを削除する

私はしません

3. データベースリストを表示する

データベースを表示;

3. テーブル操作

1. テーブルを作成する

方法1: 直接作成する
テーブルを作成 [存在しない場合] tbl_name (create_definition,...)

MariaDB [testdb]> テーブルを作成 IF NOT EXISTS students (id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY、name VARCHAR(30) NOT NULL、phone CHAR(11)、gender ENUM('M','F')); 

方法2: 既存のテーブルをクエリして作成します。クエリからのデータが新しいテーブルに直接挿入されます。

CREATE TABLE [IF NOT EXISTS] tbl_name select_statement

MariaDB [testdb]> テーブル user を作成します。 SELECT user,host,password FROM mysql.user;

古いテーブルのクエリを模倣してレコードのないテーブルを作成する場合は、条件 WHERE 0=1; を追加できます。

MariaDB [testdb]> テーブル user2 を作成します。 SELECT user,host,password FROM mysql.user WHERE 0=1;

方法3: 既存のテーブルのテーブル構造をコピーしてテーブルを作成するが、データはコピーしない

テーブルを作成 [存在しない場合] tbl_name LIKE old_tbl_name

MariaDB [testdb]> mysql.user のようなテーブル user3 を作成します。

2. テーブルを変更する

ALTER TABLE tbl_name [alter_specification [, alter_specification] ...]

属性を追加 ADD

MariaDB [testdb]> ALTER TABLE students ADD age TINYINT AFTER name;

落とす

MariaDB [testdb]> ALTER TABLE students DROP phone;

変更、修正

MariaDB [testdb]> ALTER TABLE students CHANGE age ages TINYINT(2) NOT NULL;
MariaDB [testdb]> ALTER TABLE students MODIFY gender ENUM('M','F');

3. テーブルを削除する

MariaDB [testdb]> テーブル user3 を削除します。

4. テーブルを表示

SHOW TABLES; ライブラリ内のすべてのテーブルを一覧表示します

DESC [db_name.]tb_name; テーブル構造を表示する

SHOW CREATE TABLE tbl_name; テーブルを作成するコマンドを表示します

SHOW TABLE STATUS LIKE 'tbl_name'; テーブルステータスを表示する

SHOW TABLE STATUS FROM db_name; 指定されたデータベース内のすべてのテーブルの状態を表示します。

SHOW ENGINES; すべてのストレージエンジンを表示

4. DML: データ操作言語

MariaDB [testdb]> DESC students; #サンプルテーブル+--------+----------------------+------+-----+---------+----------------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+--------+----------------------+------+-----+---------+----------------+
| id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| 名前 | varchar(30) | NO | | NULL | |
| 年齢 | tinyint(2) | NO | | NULL | |
| 性別 | enum('M','F') | YES | | NULL | |
+--------+----------------------+------+-----+---------+----------------+

1. INSERTはデータを挿入する

単一のレコードを挿入する

tb_name (col1,col2,...) に VALUES (val1,val2,...) を挿入します。

MariaDB [testdb]> INSERT students(id,name,ages,gender) VALUES (1,'tom',26,'M');
MariaDB [testdb]> INSERT students(名前、年齢、性別) VALUES ('jerry'、19、'M'); 
MariaDB [testdb]> INSERT students(名前、年齢、性別) VALUES ('maria'、19、'M');
MariaDB [testdb]> INSERT students SET name='ouyangfeng',ages=56,gender='M';

複数のレコードを挿入する

tb_name (col1,col2,...) に VALUES (val1,val2,...)[,(val1,val2,...),...] を挿入します。

MariaDB [testdb]> INSERT students(名前、年齢、性別) VALUES ('xiaolongnv'、18、'F')、('dongfangbubai'、28、'F');
MariaDB [testdb]> SELECT * FROM students;
+----+---------------+------+--------+
| ID | 名前 | 年齢 | 性別 |
+----+---------------+------+--------+
| 1 | トム | 26 | 男 |
| 2 | ジェリー | 19 | 男性 |
| 3 | マリア | 19 | 男 |
| 4 | xiaolongnv | 18 | 女性 |
| 5 | 東方布柏 | 28 | F |
| 6 | 欧陽鋒 | 56 | 男 |
+----+---------------+------+--------+

他のテーブルからデータをクエリし、このテーブルに保存します

MariaDB [testdb]> ALTER TABLE students ADD address TEXT; #テスト用のフィールドを追加
MariaDB [testdb]> INSERT students(name,address) SELECT user,host FROM mysql.user;
MariaDB [testdb]> SELECT * FROM students;
+----+---------------+------+--------+-----------+
| ID | 名前 | 年齢 | 性別 | 住所 |
+----+---------------+------+--------+-----------+
| 1 | トム | 26 | M | NULL |
| 2 | ジェリー | 19 | M | NULL |
| 3 | マリア | 19 | 男性 | NULL |
| 4 | xiaolongnv | 18 | F | NULL |
| 5 | 東方布柏 | 28 | F | NULL |
| 6 | 欧陽鋒 | 56 | M | NULL |
| 7 | ルート | 0 | NULL | 127.0.0.1 |
| 8 | ルート | 0 | NULL | ::1 |
| 9 | | 0 | NULL | centos7 |
| 10 | ルート | 0 | NULL | centos7 |
| 11 | | 0 | NULL | ローカルホスト |
| 12 | ルート | 0 | NULL | ローカルホスト |
+----+---------------+------+--------+-----------+

2. データを変更するにはUPDATEする

UPDATE tbl_name SET col1=value1,col2=value2,... WHERE col=value;

MariaDB [testdb]> UPDATE students SET gender='F' WHERE id=3;

3. 削除

MariaDB [testdb]> DELETE FROM students WHERE name=''; #空の名前のレコードを削除 MariaDB [testdb]> TRUNCATE TABLE user; #状況テーブルレコード

注意: 制限 (WHERE | LIMIT) が必要です。そうでない場合、すべての行の指定されたフィールドが変更されます。

5. SELECT: データクエリ

  • AS: エイリアス
  • WHERE: 「選択」機能を実現するためのフィルター条件を指定します
    • +、-、*、/、%: 算術演算子
    • =、!=、<>、>、<、>=、<=: 比較演算子
    • BETWEEN min_num AND max_num: min_num と max_mun の間
    • IN (要素1、要素2、...): 要素内...
    • IS NULL: 空
    • IS NOT NULL: 空ではない
    • LIKE: 一致する、好き。 。 。
      %: 任意の長さの任意の文字
      _: 任意の1文字
    • RLIKE: 正規表現、非推奨
    • 正規表現: 上記と同じ
    • NOT、AND、OR、XOR: 論理演算子
  • GROUP BY: 指定された条件に従ってクエリ結果を「集計」操作にグループ化します。
    • AVG() 平均
    • MAX() 最大数
    • MIN() 最小数
    • COUNT() 統計
    • 和()
    • HAVING: グループ集計操作の結果のフィルタリング条件を指定します。 WHERE に似ていますが、グループ内でのみ使用できます。
  • ORDER BY: 並べ替え
    • ASC: 正のシーケンス、デフォルト
    • DESC: 逆順
    • -キーワード: ソート中にキーワードの前に - を追加すると、先頭に NULL が置かれるのを回避できます。
  • LIMIT [[offset,]row_count]: クエリ結果の出力行数を制限します

1. 選択

MariaDB [testdb]> SELECT * FROM students WHERE name='maria'; #maria の情報を照会MariaDB [testdb]> SELECT * FROM students WHERE id BETWEEN 2 AND 5; #2 から 5 の学生の情報を照会MariaDB [testdb]> SELECT * FROM students WHERE name IN ('jerry','xiaolongnv'); #jerry と xiaolongnv の情報を照会MariaDB [testdb]> SELECT * FROM students WHERE gender IS NOT NULL; #age が空でない情報を照会MariaDB [testdb]> SELECT * FROM students WHERE name LIKE '%o%'; #name に 'o' が含まれる情報を照会

2. 投影

MariaDB [testdb]> mysql.user から、user AS user、host AS host、password AS password を選択します。

3. グループ化

MariaDB [testdb]> SELECT gender,AVG(ages) FROM students GROUP BY gender; #男子と女子の平均年齢を照会MariaDB [testdb]> SELECT gender,AVG(ages) FROM students GROUP BY gender HAVING gender='M'; #男子の平均年齢情報のみを表示

4. ソート

MariaDB [testdb]> SELECT * FROM students ORDER BY ages DESC; #年齢でソートし、逆順に表示MariaDB [testdb]> SELECT * FROM students WHERE ages > 0 ORDER BY ages LIMIT 3; #年齢でソートし、年齢が 0 より大きいものをフィルターし、昇順でソートし、最初の 3 つのレコードを取得します

6. 複数テーブルクエリ

練習のために、表を拡大します

MariaDB [testdb]> DELETE FROM students WHERE id BETWEEN 7 AND 12;
MariaDB [testdb]> CREATE TABLE score (id TINYINT(2) UNSIGNED AUTO_INCREMENT PRIMARY KEY、score TINYINT(3));
MariaDB [testdb]> ALTER TABLE students ADD sid TINYINT(2); 
MariaDB [testdb]> UPDATE students SET sid=6 WHERE id=6;
MariaDB [testdb]> スコアを挿入します。スコアを 87 に設定します。
MariaDB [testdb]> SELECT * FROM students;
+----+---------------+------+--------+--------+------+
| ID | 名前 | 年齢 | 性別 | 住所 | SID |
+----+---------------+------+--------+--------+------+
| 1 | トム | 26 | M | NULL | 1 |
| 2 | ジェリー | 19 | M | NULL | 2 |
| 3 | マリア | 19 | F | NULL | 3 |
| 4 | xiaolongnv | 18 | F | NULL | 4 |
| 5 | 東方布柏 | 28 | F | NULL | 5 |
| 6 | 欧陽鋒 | 56 | M | NULL | 6 |
+----+---------------+------+--------+--------+------+
MariaDB [testdb]> SELECT * FROM score;   
+----+-------+
| ID | スコア |
+----+-------+
| 1 | 99 |
| 2 | 98 |
| 3 | 88 |
| 4 | 68 |
| 5 | 78 |
| 6 | 87 |
+----+-------+

JOIN ON: クロスジョイン

内部結合オン: 内部結合

左外部結合オン: 左外部結合

右外部結合オン: 右外部結合

UNION ON: 完全外部結合

MariaDB [testdb]> SELECT * FROM students AS s,score AS o WHERE s.sid=o.id; #2つのテーブルの交差

1. クロス接続

MariaDB [testdb]> SELECT * FROM students JOIN score;

2. 内部結合

MariaDB [testdb]> SELECT t.name,s.score FROM students AS t INNER JOIN score AS s ON t.sid=s.id;
+---------------+-------+
| 名前 | スコア |
+---------------+-------+
| トム | 99 |
| ジェリー | 98 |
| マリア | 88 |
| xiaolongnv | 68 |
| 東方布柏 | 78 |
| 欧陽鋒 | 87 |
+---------------+-------+

3. 外部結合

MariaDB [testdb]> SELECT t.name,s.score FROM students AS t LEFT JOIN score AS s ON t.sid=s.id; #左外部結合 +--------------+-------+
| 名前 | スコア |
+---------------+-------+
| トム | 99 |
| ジェリー | 98 |
| マリア | 88 |
| xiaolongnv | 68 |
| 東方布柏 | 78 |
| 欧陽鋒 | 87 |
+---------------+-------+
MariaDB [testdb]> SELECT * FROM students AS t RIGHT JOIN score AS s ON t.sid=s.id; #右外部結合

4. 完全外部結合

MariaDB [testdb]> SELECT name,address FROM students
    -> ユニオン
    -> mysql.user から user,host を選択します。
+---------------+-----------+
| 名前 | 住所 |
+---------------+-----------+
| トム | NULL |
| ジェリー | NULL |
| マリア | NULL |
| xiaolongnv | NULL |
| 東方布柏 | NULL |
| ouyangfeng | NULL |
| ルート | 127.0.0.1 |
| ルート | ::1 |
| | centos7 |
| ルート | centos7 |
| | ローカルホスト |
| ルート | ローカルホスト |
+---------------+-----------+

5. 自己接続

MariaDB [testdb]> ALTER TABLE students ADD tid TINYINT(2); #別のtidフィールドを追加しますMariaDB [testdb]> SELECT * FROM students;
+----+---------------+-------+---------+-------+------+------+
| ID | 名前 | 年齢 | 性別 | 住所 | SID | TID |
+----+---------------+-------+---------+-------+------+------+
| 1 | トム | 26 | M | NULL | 1 | 2 |
| 2 | ジェリー | 19 | M | NULL | 2 | 1 |
| 3 | マリア | 19 | F | NULL | 3 | 4 |
| 4 | xiaolongnv | 18 | F | NULL | 4 | 5 |
| 5 | 東方布柏 | 28 | F | NULL | 5 | 4 |
| 6 | 欧陽鋒 | 56 | M | NULL | 6 | 4 |
+----+---------------+-------+---------+-------+------+------+
MariaDB [testdb]> SELECT s1.name AS studentname,s2.name AS teachername FROM students AS s1 INNER JOIN students AS s2 ON s1.id=s2.tid;
+---------------+---------------+
| 生徒名 | 教師名 |
+---------------+---------------+
| ジェリー | トム |
| トム | ジェリー |
| xiaolongnv | マリア |
| 東方布柏 | xiaolongnv |
| xiaolongnv | 東方布百 |
| xiaolongnv | ouyangfeng |
+---------------+---------------+

7. サブクエリ

サブクエリ: クエリ ステートメントがクエリ ステートメント内にネストされています。パフォーマンスは低く、特定のステートメントのクエリ結果に基づくクエリです。

1. WHERE句で使用されるサブクエリ

比較式のサブクエリに使用されます。サブクエリは単一の値のみを返すことができます。

MariaDB [testdb]> SELECT name, ages FROM students WHERE ages > (SELECT AVG(ages) FROM students); #平均年齢より上の学生をクエリする

INで使用されるサブクエリ:サブクエリは単一キークエリであり、コンポーネントのリストから1つ以上の値を返す必要があります。

2. FROM句内のサブクエリ

SELECT tb_alias.col1,... FROM (SELECT 句) AS tb_alias WHERE 句;

8. データ型

高いパフォーマンスを実現するには、適切なデータ型を選択することが重要です。次の 3 つの原則が適用されます。

  • 通常は小さいほど良いので、データを正しく保存できる最小のデータ型を使用するようにしてください。
  • シンプルにしてください。単純なデータ型の操作では、通常、CPU サイクルが少なくて済みます。
  • NULL は避けてください。NULL を含む列は、MySQL 用に最適化するのが難しくなります。

1. 数値型

正確な値

  • 内部
    • TINYINT マイクロ整形手術 1
    • SMALLINT 小さい整数 2
    • MEDIUMINT 中整数 3
    • INT 整数 4
    • BIGINT 大きな整数 8
  • DECIMAL 正確なポイント型

近似値

  • FLOAT 単精度浮動小数点型4
  • DOUBLE 倍精度浮動小数点型8
  • 本物
  • 少し

2. キャラクタータイプ

固定長

- CHAR(大文字と小文字を区別しない)255

- バイナリ(大文字と小文字を区別)

延長

  • VARCHAR (大文字と小文字を区別しない) 65,535
  • VARBINNARY (大文字と小文字を区別)

テキスト(大文字と小文字を区別しない)

  • 小さなテキスト 255
  • テキスト 65,535
  • 中テキスト 16,777,215
  • 長文 4,294,967,295

BLOB (大文字と小文字を区別)

  • TINYBLOB マイクロバイナリラージオブジェクト 255
  • BLOB バイナリ ラージ オブジェクト 64K
  • MEDIUMBLOB 中バイナリラージオブジェクト 16M
  • LONGBLOB ロングバイナリラージオブジェクト 4G

ENUM 列挙 65535 バリエーション

SETは1~64の文字列を設定し、自由に組み合わせることができます。

3. 日付と時刻の種類

  • 日付 3
  • 時間3
  • 日時 8
  • タイムスタンプ 4
  • 年{2|4} 1

4. ブール

  • BOOL、BOOLEAN: ブール型、TINYINT(1)の同義語。値 0 は false とみなされます。ゼロ以外の値は真とみなされます。

公式ドキュメントを参照してください: https://dev.mysql.com/doc/refman/5.5/en/data-types.html

要約する

SQL 構文に関するこの記事はこれで終わりです。SQL 構文に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLの最も基本的なSQL構文/ステートメント
  • MySQLとOracleの構文の違いの詳細な比較
  • MySQL インデックス作成方法、構文構造、および例
  • Mysql の Join 構文とパフォーマンスの最適化の簡単な分析
  • MySQL ALTER構文の使い方
  • MySQLのprepareステートメントのSQL構文
  • MySQL 高度な SELECT 構文
  • MySQL SQL 構文リファレンス
  • MySQL Order By 構文の紹介
  • MySQL DELETE構文の詳細な分析

<<:  div+cssとウェブ標準ページの利点

>>:  Vueは要素ツリーコントロールを通じてツリーテーブルを実装します

推薦する

Linux で ping は成功するがポートが利用できない問題を解決する方法

ping は成功したがポートにアクセスできない場合のポート可用性検出の説明ポート可用性検出ツールの紹...

MySQLテーブルパーティショニングプログラムを変更する方法

MySQLテーブルパーティショニングプログラムを変更する方法1. サブテーブルの実装の原則は次のとお...

Navicatは機能ソリューション共有を作成できません

初めて MySQL FUNCTION を書いたとき、エラーが何度も発生しました。 Err] 1064...

CentOS7 のシステム サービスに Nginx を追加する方法

導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...

マインスイーパゲームを実装するための jQuery プラグイン (3)

この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する方法に関する3番目の記事...

LinuxでPythonの組み込みバージョンを削除する手順の詳細な説明

大きな落とし穴、Linuxシステムに付属するPythonのバージョンを簡単に削除しないでください1....

Vueコンポーネント間の通信の非常に詳細な要約

目次序文1. Props、$emit一方向データフロー2. $親、$子3. $attrs、$list...

vue+springbootでログイン機能を実現

この記事の例では、ログイン機能を実現するためのvue+springbootの具体的なコードを参考まで...

Dockerfile における VOLUME と docker -v の違い

Dockerfile でのボリュームのマウントと docker -v コマンドによるマウントには明ら...

Docker ログが多すぎてディスクがいっぱいになる場合の対処方法

複数の Docker コンテナがデプロイされたサーバーがあり、各 Docker コンテナが stde...

HTML 基本要約推奨事項 (タイトル)

HTML: タイトル見出しは <h1> - <h6> などのタグによって定...

Dockerデータを完全にクリーンアップする方法

目次定期的に剪定するミラーエビクションコンテナのクリーンアップネットワークソート体積の蒸発完全にクリ...

Vue の詳細な入門ノート

目次1. はじめに2. 初期ビュー(I) Vueの概念を理解する(II) MVVMアーキテクチャ(I...

Vue スクロールダウンしてさらにデータを読み込む スクロールケースの詳細な説明

vue-無限スクロールインストール npm インストール vue-infinite-scroll -...

見落とされがちなMETAタグの特殊効果(ページ遷移効果)

Web デザインで js を使用すると、多くのページ効果を実現できますが、HTML タグの META...