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は要素ツリーコントロールを通じてツリーテーブルを実装します

推薦する

Vue コンポーネント値転送中のデータ損失の分析と解決

序文前回の記事では、JavaScript の 2 つのデータ型、基本型と参照型、および参照型の浅いコ...

MySQL データベース グループ クエリの group by ステートメントの詳細な説明

1: グループ化関数の記述順序 1 選択 ... 2 から ... 3 どこで ... 4 グループ...

JavaScript ベースの Web 計算機の実装

この記事では、ウェブ計算機のマインスイーパゲームを実装するためのJavaScriptの具体的なコード...

DockerはRedisを起動し、パスワードを設定します

RedisはRedisバージョン5のapline(Alps)イメージを使用します。これは小さくて高速...

MySQLデータベースのマスタースレーブレプリケーションの原理と機能の分析

目次1. データベースのマスター/スレーブ分類: 2. MySQL マスタースレーブの紹介3. マス...

Docker可視化管理ツールであるDocker UIの使用

1. DockerUIの紹介DockerUI は Docker API をベースとしており、Dock...

Docker で ElasticSearch と Kibana をインストールするためのサンプル コード

1. はじめにElasticsearchは現在非常に人気があり、多くの企業が利用しているため、esを...

カスタムスクロールバー効果を実現するJavaScript

実際のプロジェクトでは、上下のスクロール バーと左右のスクロール バーは DIV 内にないため、右の...

Linux でハードディスクのサイズを確認し、ハードディスクをマウントする方法

Linux には、マウントされたハードディスクとマウントされていないハードディスクの 2 種類のハー...

グリッド共通レイアウトの実装

両側に隙間なし、各列間に隙間あり 幅: 100%; 表示: グリッド; グリッドテンプレート列: r...

テーブルの最大幅と最小幅を設定する際の互換性の問題と解決策の詳細な説明

テーブル内の min-width と max-width プロパティの設定 <テーブル>...

IMG での UserMap の使用例

usemap は <img> タグの属性であり、使用するイメージ マップの名前を指定する...

デザイン理論: コンテンツプレゼンテーションのための 10 のヒント

<br /> テキスト、記号、リンクの3つの側面に焦点を当て、主に中国語で、個人的な執筆...

Linux デュアル ネットワーク カード バインディング スクリプト メソッドの例

Linux の操作と構成作業では、デュアル ネットワーク カードのバインディングがよく使用されます。...