チュートリアルシリーズ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は要素ツリーコントロールを通じてツリーテーブルを実装します
メタ タグは、ファイル情報を定義し、検索エンジンによる検索を容易にするために Web ページ ファイ...
まず、VMware Workstation 15.1 バージョンをダウンロードします。Thunder...
1. 引き続き PHP スクリプトを使用して実行します。コマンドラインに入力: php /home/...
セレクタのグループ化h2 要素と段落の両方を灰色にしたいとします。これを行う最も簡単な方法は、次のス...
この記事では、MySQL 8.0.24のインストールチュートリアルを参考までに紹介します。具体的な内...
目次問題の説明レンダリング3種類のコード要約する問題の説明通常、表のヘッダーは折り返されませんが、ビ...
国慶節の休暇後、Windows アップデート後に VMware 仮想マシンが開けなくなり、「VMwa...
1. maxPostSize を設定する理由は何ですか? tomcat コンテナには送信データのサイ...
Nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバーであり、IM...
特定のインターフェースをリクエストするときに、指定されたテキスト文字列または JSON 文字列を返す...
ある会社の BI 職の面接を受けたとき、面接で SQL に関する質問がありました。一見すると非常に簡...
序文mv コマンドは、move の略語で、ファイルを移動したり、ファイル名を変更したり (ファイルの...
目次1. 連結() 2. 結合() 3. プッシュ() 5. シフト() 6. シフト解除() 7....
概要私は 1 年以上 Docker を使用しています。最近、サービスをすばやくオーケストレーションし...
1. MySQLをダウンロードする1. MySQLの公式ウェブサイトにログインし、64ビットシステム...