ドキュメントの形式に問題があります。PDF をダウンロードできます。
リンク: https://pan.baidu.com/s/1R8qSPt2cMnzJqjCmox9h0A?pwd=WHY6
抽出コード: WHY6または、次のリンクにジャンプします: MySQL 操作ステートメントの概要 - Nuggets
目次
DDL(データ定義言語)の基本操作
データベース操作
- データベースに接続します:
mysql -uroot -p;
次にパスワードを入力します - データベースのリストを表示します。
show databases;
- データベースを作成します。
create databases 数据库名称;
- データベースを削除します。
drop database 数据库名称;
- データベースを変更します。
alter database 数据库名称 charset=编码格式;
- データベース内のテーブルを表示します。
show tables;
テーブル操作
- CREATE TABLE:
create table if not exists 表名(列名,列类型,[约束])
: テーブルが存在しない場合は作成します
-
- 一般的な制約:
-
-
- 空でない制約: NOT NULL。列の内容を空にすることはできません。
- 列のデフォルト値を設定します: DEFAULT;
- 一意の制約: UNIQUE、このテーブルでは、この列の内容は一意である必要があります。
- 主キー制約: PRIMARY KEY、空ではなく一意です。
- 主キーの自己拡張: AUTO_INCREMENT、1 から始まり、ステップ サイズは 1;、
- 外部キー制約: FOREIGN KEY、テーブル A の外部キー列。テーブル A の外部キー列の値は、テーブル B の列 (テーブル B の主キー) を参照する必要があります。
-
- ドロップテーブル:
drop table 表名;
- テーブル構造を説明します。
desc table 表名;
- テーブル構造を変更します。
alter table <表名> add|drop <列名><列类型>
DML(データ操作言語)の基本操作
- 改訂:
update 表名 set col1=value1,col2=value2...... where[条件]
-
- エンティティ整合性制約: 主キー値を変更するとき、外部キー値をカスケード更新するとき、または主キー値を変更する操作を拒否するとき
- 参照整合性制約:外部キー テーブル内の外部キー情報は変更できません。
- 入れる:
insert into 表名 (col1,col2,......) value (value11,value12,......),(value21,value22,......);
-
- 別のテーブルからクエリを実行した後、このテーブルに挿入します。
insert into 表1(col1,col2,......) select col1,col2,...... from 表2 where[条件];
- 挿入時の整合性制約:
- 別のテーブルからクエリを実行した後、このテーブルに挿入します。
-
-
- エンティティの整合性: 同じ主キーが挿入されたタプルであるか
- 参照整合性: 新しいタプルが外部キー テーブルに挿入されるとき、新しいタプルの外部キー値は主キー テーブルに存在しますか?
- ユーザー定義の整合性 (
not null
の制約、unique
の制約など)。
-
- 消去:
delete from 表名 where [条件];
DQL(データクエリ言語)の基本操作
1.個別の重複排除
機能: 列値の重複を排除します。
SQLの例:select distinct col1,col2 from 表名;
- 上記のように、distinct のスコープはすべてのターゲット列です。col1 とcol2 の組み合わせが繰り返される場合にのみ、重複排除されます。
- 最初の列の後に unique を配置することはできません
2. 共通の列値の操作
- 算術演算 - (+、-、、/):
select col1 operator col2 from 表名;
-
- 数学演算と同じ優先順位
- 列式の別名 -as を設定します。
select col1 as 别名 from 表名;
-
- と書くこともできません:
select col1 别名 from 表名;
- と書くこともできません:
- 下/上/トリム:
select lower(col1) as 别名 from 表名;
-
- lower: 列の値を小文字に変換します。
- upper: 列の値を大文字に変換します。
- トリム: 指定された文字列をフィルタリングします:
-
-
- トリム: 開始文字列と終了文字列を削除します。
select trim(col1) from 表名;
- ltrim: 左側の文字列を削除します
- rtrim: 右側の文字列を削除します
- トリム: 開始文字列と終了文字列を削除します。
-
3. 一般的な演算子
- 比較演算子:
=, >, >=, <, <=, !=,<>
-
- これは以下
<>
と同等です!=
- これは以下
- 論理演算子:
and,or,not
4. where 条件付きクエリ
between...and...
:間like
: 文字の一致。ワイルドカードは%
0 個以上の文字を置換し、ワイルドカードは_
1 文字のみを置換します。escape
: エスケープに使用されます。ユーザーがクエリする文字列にそれ自体が含まれる場合、ワイルドカードをエスケープするための語句を%或者_
使用する必要があります。escape '<换码字符>'
-
- 例: 。これは、
select * from 表名 where col1 like 'AB_%C_' escape ''
テーブル内の、col1 の値に一致し、最後からAB_
2 番目の文字が ; であるC
すべての行をクエリすることを意味します。
- 例: 。これは、
in (not in)
: 指定されたコレクションに属性値が属する(属さない)タプルを検索するために使用されます
-
- 例:
select * from 表名 where col1 in (value1,value2);
- これは次と同等です。
select * from 表名 where col1 = value1 or col1 = value2;
- 例:
is null(is not null)
: 列の値が null 値であるかどうかを判断します。
-
- 例:
select * from 表名 where col1 is null;
、col1 の列値が null であるすべての行の情報をクエリします。 is null
カラムの値が空文字列であるかどうかを判定するのではなく、null値であるかどうかを判定するために使用します。空文字列であるかどうかを判定したい場合は、;を使用します== ""
。
- 例:
5. 並べ替えて注文する
- 昇順:
order by col1 asc;
- 降順:
order by col1 desc;
order by
select
通常、ステートメントの最後に表示されます。照合順序が指定されていない場合、デフォルトは昇順です。
6. 集計関数
count
:カウント
-
count(*)
: クエリ集計 from 句と where 句によって作成されたリレーション内のタプルの数をカウントします。count([distinct|all] col1)
:列内の値の数をカウントします(Null値はカウントされません)
sum([distinct|all] col1)
: 値の列の合計を計算します。avg([distinct|all] col1)
: 値の列の平均を計算します。max([distinct|all] col1)
: 値のリストの最大値を計算します。min([distinct|all] col1)
: 値のリストの最小値を計算します。
7.グループごとの操作
役割: 集計関数のアクション オブジェクトを調整する
クエリ結果がグループ化されていない場合、集計関数はクエリ結果全体に作用します。グループ化後は、集計関数は各グループに個別に作用します。
SQLの例:select count(*),col1 from 表名 group by col1;
- Col1列の列値に従ってグループ化され、その値はグループに等しい
- 句の使用後は
group by
、select
グループ化属性と集計関数のみが句の列名リストに表示されます。 group by
句のオブジェクトはクエリの中間結果テーブルです。
条件フィルターあり
機能: グループ化後、条件を満たす最終結果をフィルタリングします。
SQLの例:select max(col1),col1 from 表名 group by col1 having max(col1) > 1000;
グループ化後、最大値が 1000 を超える列のみが除外されます。
持つことと場所の違い: 異なるオブジェクト
- where 句はベース テーブルまたはビューに作用して、条件を満たすタプルを選択します。
- Hasting 句はグループに作用し、条件を満たすグループを選択します。
より複雑なクエリ操作
1. 接続クエリ
join on
: 結合操作、R join S on <连接条件>
-
- 例:
select col1 from table1 join table2 on table1.col1 = table2.col1;
- 例:
natural join
:自然なつながり
-
- 例:
select col1 from table1 natural join table2 ;
- 機能: 自然結合を通じて重複する列属性を削除します。上記の例のように、
col1
この属性はテーブル 1 とテーブル 2 の両方に存在し、col1
自然結合によって取得された新しいテーブルでは属性が 1 つだけ予約されます。
- 例:
outer join
: 外部結合。結合によって一致しないタプルを指定された関係に保持します。
-
- 例:
select * from table1 outer join table2 on table1.col1 = table2.col
- 左外部結合:
left outer join
: 左側のテーブルにレコードを保持します。デフォルト値は null で埋められます。 - 右外部結合:
right outer join
: レコードを右側のテーブルに保持します。デフォルト値は null で埋められます。
- 例:
inner join
: 内部接続、内部は省略できます。
外部結合と内部結合の違いの説明:
学生情報フォーム:
ID | 名前 |
---|---|
001 | 張三 |
002 | 李思 |
003 | ワン・ウー |
004 | 趙劉 |
学生のスケジュール
ID | コース |
---|---|
001 | 数学 |
002 | 言語 |
003 | 英語 |
005 | 物理 |
内部結合を実行します。
ID | 名前 | コース |
---|---|---|
001 | 張三 | 数学 |
002 | 李思 | 言語 |
003 | ワン・ウー | 英語 |
外部結合を行う
ID | 名前 | コース |
---|---|---|
001 | 張三 | 数学 |
002 | 李思 | 言語 |
003 | ワン・ウー | 英語 |
004 | 趙劉 | |
005 | 物理 |
左外部結合を実行します。
ID | 名前 | コース |
---|---|---|
001 | 張三 | 数学 |
002 | 李思 | 言語 |
003 | ワン・ウー | 英語 |
004 | 趙劉 |
右外部結合を実行します。
ID | 名前 | コース |
---|---|---|
001 | 張三 | 数学 |
002 | 李思 | 言語 |
003 | ワン・ウー | 英語 |
005 | 物理 |
2. ネストされたクエリ
クエリブロック: SELECT-FROM-WHERE
ステートメントはクエリブロックと呼ばれます。
ネストされたクエリ: クエリ ブロックを別のクエリ ブロックの WHERE 句または HAVING 句にネストしたクエリは、ネストされたクエリと呼ばれます。
SQLの例:select col1 from table1 where col2 in (select col2 from table2 where col3=value);
ネストされたクエリには、一般的に使用されるサブクエリがいくつかあります。
- 述語を含む
in
サブクエリ(例にすでに存在します) - 比較演算子を使用したサブクエリ:
<,>,=,......
-
- 例:
select col1 from table1 where col2 = (select col2 from table2 where col3=value);
- サブクエリは比較演算子の後に続く必要があることに注意してください
- 例:
any
OR述語を使用したサブクエリall
:
-
- 例:
select col1 from table1 where col2 > any (select col2 from table2 where col3=value);
- 意味:
- 例:
- 述語を含むサブクエリ
exists
: 存在量指定子。
-
- 例:
select col1 from table1 where exists (select * from table2 where col2=value);
- 存在量指定子を使用した後、内側のクエリ結果が空でない場合、外側の where 句は true 値を返し、それ以外の場合は false 値を返します。
- 例:
from
句内のサブクエリ:
-
- 例:
select col1,avg_col2 from (select col1,avg(col3) as avg_col2) as temp_table;
- 注: 各派生テーブルには独自の別名が必要であるため、サブクエリの結果を
as
親クエリで使用するには、その前に別名が設定されている必要があります。そうでない場合は、エラー コード: 1248 が報告されます。すべての派生テーブルには、その別名が必要です。自分の別名
- 例:
- 句を含むサブクエリ
with
: ネストされたクエリで使用する一時的な関係を定義します。
-
- 例:
with temp_table as (select col1,avg(col2)_as avg_col2) select col1,avg_col2 from table1,temp_table;
- 例:
3. クエリを設定する
- そしてユニオン:
select * from table1 where col1=value1 union select * from table1 where col2=value2;
-
where
項内のor
操作に相当
- 支払い交差点:
select * from table1 where col1=value1 intersect select * from table1 where col2=value2;
-
where
項内のand
操作に相当
- 差EXCEPT:
select * from table1 where col1=value1 except select * from table1 where col2=value2;
-
- 条件 1 が満たされ、条件 2 が満たされない
注: セット操作に参加する各結果テーブルの列の数は同じである必要があり、対応するデータ型も同じである必要があります。システムは、マージ、インターセクト、および差分操作の前に入力重複行を自動的に削除します。重複排除操作には非常に時間がかかり、重複排除時間はクエリ時間を超えることがよくあります。