チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念 1. SQL言語の紹介と仕様は、リレーショナル データベース管理システム (RDBMS) の管理やリレーショナル ストリーム データ管理システム (RDSMS) でのストリーム処理に使用される特殊なプログラミング言語です。
SQL言語仕様
データベースオブジェクトの命名規則
SQL文の分類 DDL: データ定義言語 - 作成、削除、変更 DML: データ操作言語 - 挿入、削除、更新 DCL: データ制御言語 - 許可、取り消し DQL: データクエリ言語 -選択 2. データベース操作1. ライブラリを作成するCREATE DATABASE [IF NOT EXISTS] db_name; データベースを作成する CHARACTER SET '文字セット名' 文字セットの種類を設定します COLLATE 'collate name' は照合順序を設定します
MariaDB [(なし)]> データベースが存在しない場合は testdb を作成します。 2. ライブラリを削除する私はしません 3. データベースリストを表示するデータベースを表示; 3. テーブル操作1. テーブルを作成する方法1: 直接作成する 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: データクエリ
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 つの原則が適用されます。
1. 数値型正確な値
近似値
2. キャラクタータイプ固定長
延長
テキスト(大文字と小文字を区別しない)
BLOB (大文字と小文字を区別)
ENUM 列挙 65535 バリエーション SETは1~64の文字列を設定し、自由に組み合わせることができます。 3. 日付と時刻の種類
4. ブール
公式ドキュメントを参照してください: https://dev.mysql.com/doc/refman/5.5/en/data-types.html 要約するSQL 構文に関するこの記事はこれで終わりです。SQL 構文に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Vueは要素ツリーコントロールを通じてツリーテーブルを実装します
ping は成功したがポートにアクセスできない場合のポート可用性検出の説明ポート可用性検出ツールの紹...
MySQLテーブルパーティショニングプログラムを変更する方法1. サブテーブルの実装の原則は次のとお...
初めて MySQL FUNCTION を書いたとき、エラーが何度も発生しました。 Err] 1064...
導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...
この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する方法に関する3番目の記事...
大きな落とし穴、Linuxシステムに付属するPythonのバージョンを簡単に削除しないでください1....
目次序文1. Props、$emit一方向データフロー2. $親、$子3. $attrs、$list...
この記事の例では、ログイン機能を実現するためのvue+springbootの具体的なコードを参考まで...
Dockerfile でのボリュームのマウントと docker -v コマンドによるマウントには明ら...
複数の Docker コンテナがデプロイされたサーバーがあり、各 Docker コンテナが stde...
HTML: タイトル見出しは <h1> - <h6> などのタグによって定...
目次定期的に剪定するミラーエビクションコンテナのクリーンアップネットワークソート体積の蒸発完全にクリ...
目次1. はじめに2. 初期ビュー(I) Vueの概念を理解する(II) MVVMアーキテクチャ(I...
vue-無限スクロールインストール npm インストール vue-infinite-scroll -...
Web デザインで js を使用すると、多くのページ効果を実現できますが、HTML タグの META...