非常に実用的なMySQL関数の包括的な概要、詳細な例の分析チュートリアル

非常に実用的なMySQL関数の包括的な概要、詳細な例の分析チュートリアル

1. MySQLの関数の説明

「概念」: Java や Python のメソッドと同様に、一連の論理ステートメントがメソッド本体にカプセル化され、メソッド名が外部に公開されます。

「利点」:Ⅰ実装の詳細を隠す;Ⅱコードの再利用性を向上させる;

"呼び出し": 関数名 (実際のパラメータ リスト) [テーブルから] を選択します。

「機能」:Ⅰ 何と呼ばれているか(機能名) Ⅱ 何をするか(機能機能)

「分類」:Ⅰ 単一行機能;Ⅱ グループ化機能;

「単一行関数とは:」: テーブル内のレコードの各行に対して動作し、レコードごとに 1 つの結果が得られます。

「集計関数とは:」: 1 つ以上の行に作用し、最終的に結果を返します。

2. 単行関数の分類

キャラクター機能

数学関数;

日付関数;

その他の機能:

プロセス制御機能。

3. キャラクター機能

1) length(str) : パラメータ値のバイト数を取得します。

utf8文字セットの場合、英語の文字 1 つは 1 バイトを占め、中国語の文字 1 つは 3 バイトを占めます。

gbk文字セットの場合、英語の文字 1 つは 1 バイトを占め、中国語の文字 1 つは 2 バイトを占めます。

操作は以下のとおりです。

ここに画像の説明を挿入

2) concat(str1,str2,…) : 文字列を連結します。

操作は以下のとおりです。

ここに画像の説明を挿入

3) upper(str) : 文字列内のすべての文字を大文字に変換します。

操作は以下のとおりです。

ここに画像の説明を挿入

4) lower(str) : 文字列内のすべての文字を小文字に変更します。

操作は以下のとおりです。

ここに画像の説明を挿入

5) substr(str,start,len) : 開始位置から文字列を抽出します。len は抽出する長さを示します。len が指定されていない場合は、開始位置から文字列の末尾まで抽出することを意味します。指定された長さは len です。つまり、start から始まり、len の長さがインターセプトされます。

操作は以下のとおりです。

ここに画像の説明を挿入

6) instr(str,要查找的子串) : 部分文字列が最初に出現するインデックスを返します。見つからない場合は 0 を返します。検索する部分文字列が文字列内に存在する場合: 文字列内で部分文字列が [最初に] 出現するインデックスを返します。検索対象の部分文字列が文字列内に存在しない場合: 0 が返されます。

操作は以下のとおりです。

ここに画像の説明を挿入

7) trim(str) : 文字列の前後のスペースを削除します。この関数は文字列の前後のスペースのみを削除できますが、文字列の途中のスペースは削除できません。

操作は以下のとおりです。

ここに画像の説明を挿入

8) lpad(str,len,填充字符) : 指定された文字を使用して、文字列の左側に指定された長さまで文字を埋めます。

操作は以下のとおりです。

ここに画像の説明を挿入

9) rpad(str,len,填充字符) : 指定された文字を使用して、文字列を指定された長さまで右詰めします。

操作は以下のとおりです。

ここに画像の説明を挿入

10) replace(str,子串,另一個字符串) : 文字列 str 内の文字列を別の文字列に置き換えます。

操作は以下のとおりです。

ここに画像の説明を挿入

4. 数学関数

1) round(x,[保留的位數]) : 最も近い整数に丸めます。正の数を丸める場合: 通常の計算方法に従って最も近い整数に丸めます。負の数を丸めるときは、まず符号を無視し、負の符号を削除した後に正の数を丸め、丸めが完了したら負の符号を戻します。

操作は以下のとおりです。

ここに画像の説明を挿入

2) ceil(x) : 引数以上の最小の整数を切り上げて返します。 (天井関数) 天井関数。この関数は Excel と Python の両方に存在します。自分の家の天井を想像して、この数字を天井に投げてください。目標は、この数字以上の最小の整数を見つけることです。

操作は以下のとおりです。

ここに画像の説明を挿入

3) floor(x) : 引数以下の最大の整数を切り捨てて返します。 (Floor 関数) Floor 関数: この関数は Excel と Python の両方に存在します。自分の家の床を想像し、この数字を床に投げて、この数字以下の最大の整数を見つけてください。

操作は以下のとおりです。

ここに画像の説明を挿入

4) truncate(x,D) : 切り捨て; truncate函數ExcelやPythonにも存在し、意味は基本的に同じです。しかし、この機能は理解するのが少し難しいです。 学習方法を説明します。

理解は次のとおりです。

「以下の例の画像を参照して、次のテキストを理解してください」
1) D は正の数であり、演算は小数点の右側の小数部分に対して行われます。
D=1の場合、最初の位置から次の部分を直接切り取ります。
D=2、2番目の位置から直接後ろの部分を切り取ります。
......

2) D が 0 の場合、小数部分はそのまま切り捨てられます。

3) D は負の数であり、演算は小数点の左側の整数部分に対して行われます。
D=-1の場合、小数点以下の-1の位置を直接切り捨て、
そして、「現在の位置(現在位置を含む)から始まり、次の整数部分が 0 に置き換えられます」。
D=-2、小数点以下の-2の位置を直接切り捨て、
そして、「現在の位置(現在位置を含む)から始まり、次の整数部分が 0 に置き換えられます」。

サンプル画像:

ここに画像の説明を挿入

操作は以下のとおりです。

ここに画像の説明を挿入

5) mod(被除數,除數) : 剰余; 被除数が正の数の場合、結果も正の数になります。被除数が負の数の場合、結果も負の数になります。

操作は以下のとおりです。

ここに画像の説明を挿入

5. 日付と時刻の機能

日付の意味: よく言われる年、月、日を指します。

時間の意味: 私たちがよく言う時間、分、秒を指します。

次の機能を説明する前に、まずは知識を追加しましょう。さまざまな時刻形式文字は何を意味するのでしょうか?

ここに画像の説明を挿入

1) now() : システムの現在の日付と時刻を返します。

操作は以下のとおりです。

ここに画像の説明を挿入

2) curdate() : 時間を除いたシステムの現在の日付のみを返します。

操作は以下のとおりです。

ここに画像の説明を挿入

3) curtime() : 日付を除いた現在のシステム時刻のみを返します。

操作は以下のとおりです。

ここに画像の説明を挿入

4) 日付と時刻の年、月、日、時、分、秒を取得します。

年を取得します: year();

月を取得します: month();

日を取得します: day();

時間を取得します: hour();

分を取得します: minute();

秒を取得します: second();

5) weekofyear() : 現在の時刻の週番号を取得します。

操作は以下のとおりです。

ここに画像の説明を挿入

6) quarter() : 現在の時点が属する四半期を取得します。

操作は以下のとおりです。

ここに画像の説明を挿入

7) str_to_date() : 日付形式の文字列を指定された形式の日付に変換します。

操作は以下のとおりです。

ここに画像の説明を挿入

8) date_format() : 日付を日付文字列に変換します。 %Y-%m-%d返される月は 01,02... の形式になります。 %Y-%c-%d返される月は 1,2... の形式になります。

操作は以下のとおりです。

ここに画像の説明を挿入

9) date_add() + interval : 日付と時刻を前方または後方にオフセットします。

ここに画像の説明を挿入

操作は以下のとおりです。

ここに画像の説明を挿入

10) last_day() : 月の最終日の日付を抽出します。

操作は以下のとおりです。

ここに画像の説明を挿入

11) datediff(end_date,start_date) : 2つの日付間の日数を計算します。

操作は以下のとおりです。

ここに画像の説明を挿入

12) timestampdiff(unit,start_date,end_date) : 2 つの時刻で返される年/月/日を計算します。

単位パラメータは、(開始日、終了日) の結果を決定する単位であり、整数として表されます。有効な単位は次のとおりです。

年: 年

月: 月

日: 日

時間: 時間

秒: 秒

マイクロ秒: マイクロ秒

week: 週番号

四半期:四半期

年: 年

操作は以下のとおりです。

ここに画像の説明を挿入

6. その他のよく使われるシステム機能

ここに画像の説明を挿入

7. フロー制御機能

1) if関数: if-else の効果を実現します。

ここに画像の説明を挿入

2) ifnull関数: 値が null かどうかを判定し、null の場合は指定された値で埋めます。

ここに画像の説明を挿入

3) case…when関数の 3 つの使用方法。

case … when には 3 つの用法があります。私の要約は非常に包括的であると思います。皆さんがこれらの使い方を注意深く研究してくれることを願っています。どれも非常に役立ちます。

同等性の判断: Java の switch case の効果に似ています。

区間判定: Python の if-elif-else の効果に似ています。

case ... when は集計関数と組み合わせて使用​​されます。

① case ... 等価判定の構文形式として使用されるとき

ケース 判断対象となるフィールドまたは式
定数1の場合、値1またはステートメント1が表示されます
定数2の場合、値2またはステートメント2が表示されます
...
そうでない場合は、表示される値 n またはステートメント n
終わり

操作は以下のとおりです。

ここに画像の説明を挿入

② case … 区間判定の構文形式として用いられる場合

場合
条件 1 の場合、値 1 またはステートメント 1 が表示されます
条件2の場合、値2またはステートメント2が表示されます
...
そうでない場合は、表示される値 n またはステートメント n
終わり

操作は以下のとおりです。

ここに画像の説明を挿入

③ case…whenと集計関数の組み合わせ

ここに画像の説明を挿入

上記の元の表を使用して、次の質問に回答してください。

-- 18. 各科目の最高得点、最低得点、平均得点を確認し、次の形式で表示します。
-- コース ID、コース名、最高スコア、最低スコア、平均スコア、合格率、平均率、良好率、優秀率
-- 合格点: >=60、平均点: 70-80、良好点: 80-90、優秀点: >=90

操作は以下のとおりです。

sc.c、cname を選択し、
max(スコア)は最高スコア、min(スコア)は最低スコア、avg(スコア)は平均スコアです。
sum(case スコア>60 なら 1、それ以外は 0、終了)/count(*) 合格率、
sum(case スコア>=70かつスコア<80の場合は1、それ以外は0、終了)/count(*) 中レート、
sum(case スコア>=80かつスコア<90の場合は1、それ以外は0、終了)/count(*) 良いレート、
sum(case スコア>=90 の場合 1、それ以外の場合は 0 終了)/count(*) sc からの優秀なレートがコースに参加しました 
sc.c = course.c で
sc.c でグループ化します。

結果は次のとおりです。

ここに画像の説明を挿入

8. 集計関数

1) 集計関数の機能と分類

① 集計関数の機能

統計目的で使用され、集計関数、統計関数、またはグループ関数とも呼ばれます。

②集計関数の分類;合計を表すsum、平均値を表すavg、最大値を表すmax、最小値を表すmin、計算回数を表すcount

2) 集計関数の簡単な使用

ここに画像の説明を挿入

3) 5 つの集計関数に渡されるパラメータではどのようなデータ型がサポートされていますか?

MySQL は厳密に型指定されたプログラミング言語ではありません。つまり、一部のステートメントは実行時にエラーを報告しないかもしれませんが、実行結果は無意味であるため、これも間違っていると考えられます。

① テストデータ

「テーブルステートメントの作成」
テーブルテストを作成(
	id int 主キー auto_increment,
	名前varchar(20)がnullではない、
	サルint、
	生年月日)charset=utf8;

「データを挿入」
 テスト(name,sal,birth)の値に挿入する 
 (「動物園」、6500、'1993.3.20')、
 (「趣味」、4000、'1997.6.10')、
 (「アライン」、5500、'2000.5.1')、
 ("ボブ",10000,'2008.10.1');

② sum() 関数と avg() 関数: 整数/小数型を渡すのが合理的です。

ここに画像の説明を挿入

結論は次のとおりです。

sum() 関数と avg() 関数は、文字列型と日付/時刻型の計算にはあまり意味がありません。したがって、小数型と整数型を合計するには、sum() 関数と avg() 関数のみを使用します。

③ max() 関数と min() 関数: 整数/小数型、日付/時刻型で渡す方が意味があります。

ここに画像の説明を挿入

結論は次のとおりです。

max()とmin()に渡されるのは「整数・小数型」であり、数値の最大值最小值が計算されます。 「日付型」は、max() と min() に渡されます。max() で計算される最大値は最近的那個日期、min() で計算される最小値は最遠的那個日期です。これを覚えておいてください。 max() と min() に渡される値は字符串類型です。max() で算出された最大値はアルファベット順で表示され、min() で算出された最小値もアルファベット順で表示されますが、あまり意味がありません。

④ count() 関数: 任意のデータ型を渡すことができますが、null に遭遇した場合は注意してください。

ここに画像の説明を挿入

結論は次のとおりです。

count() 関数は、任意のデータ型を渡して行をカウントできます。
「しかし、以下の知識ポイントには特別な注意が必要です」
まず、 count(sal)count(birth)の意味を見てみましょう。これら 2 つの文は、それぞれ sal 列と birth 列の行数の統計を表します。レコードの 1 つが null なので、count() が使用されます。
関数がカウントする場合、null 行は無視されます。
次に、count(*) はテーブル全体の行数をカウントすることを意味します。これは間違いなく、元のデータの行数を正確にカウントしたものです。テーブル全体の行の列フィールドに null 以外の値がある限り、count(*) はその行を 1 行とみなします。もちろん、行全体が null の場合、このレコードを挿入する必要はありません。

要約:

フィールド列に null 値がない場合、「count(列フィールド) = count(*)」
フィールド列に null 値がある場合、「count(列フィールド) < count(*)」
したがって、テーブル全体の行数をカウントしたい場合は、count(*)を使用してください。

実際、すべてのグループ化関数は null 値を無視しますが、上記の count() 関数では null 値に遭遇したときに特別な注意が必要です。

⑤ count() 関数が null 値に遭遇した場合は特に注意してください。

ここに画像の説明を挿入

結論は次のとおりです。

avg(sal)の平均値の場合、(6500+4000+5500+10000)/4=6500となります。

次のsum()/count(*)で平均を計算すると、(6500+4000+5500+10000)/5=5200となります。

上記の例を注意深く見てみましょう。場合によっては、誰かのスコアが null として記録されていても、まだ 5 人いることがあります。そのため、適切な関数を使用して希望する結果を達成する方法を検討する必要があります。

⑥ count(1)とcount(0)はどういう意味ですか?

sum(1)、sum(0)、count(1)、count(0)、avg(1)、avg(0)のいずれの場合でも、原理は同じで、元のテーブルに新しい列を追加するのと同じです。

次に、where の後に [論理値] が続くことがわかります。where 1 と where 0 を使用する場合も、原理は同じで、元のテーブルに新しい列を追加するのと同じです。

MySQL では、「0 以外は true、0 は false」ということを覚えておく必要があります。つまり、以下のすべての 1 を任意の 0 以外の数字に置き換えることができます。

概略図は以下のとおりです。

ここに画像の説明を挿入

テストしてみましょう:

ここに画像の説明を挿入

⑦ count(*) カウントの効率

MYISAM ストレージ エンジンでは、count(*) は非常に効率的です。 INNODB ストレージ エンジンでは、count(*) と count(1) はほぼ同じくらい効率的ですが、count(field) よりもわずかに効率的です。まとめると、count(*) が推奨されます。

4) 集計関数とグループ化の使用は「最も重要」です。

この知識ポイントについては、次の知識ポイントで説明します。ここで覚えておく必要があるのは、SQL ステートメントで group by 関数が使用される場合、select の後のフィールドは、group by + 集計関数の使用後のフィールドである必要があります。

上記は、詳細な例分析を伴う非常に実用的な MySQL 関数の包括的な概要の詳細です。MySQL 関数の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL実践ウィンドウ関数SQL分析クラスの生徒のテストの成績と生活費
  • MySQL データベースの基礎 SQL ウィンドウ関数の例の分析チュートリアル
  • mysql 計算関数の詳細
  • 単一行関数と文字計算日付プロセス制御を説明する MySQL の例
  • MySQL の基本: グループ化関数、集計関数、グループ化クエリの詳細な説明
  • MySQL関数の簡単な紹介
  • MySQL 空間データストレージと関数
  • MySQL関数の包括的な概要

<<:  フロントエンド開発者のための HTML 入門

>>:  インライン要素とブロック要素とは何ですか?

推薦する

Docker を使用して Microsoft Sql Server を展開するための詳細な手順

目次1 背景2 コンテナを作成する3 SAパスワードを変更する4 mssql のリンク5. コンテナ...

Nginx フォワード プロキシとリバース プロキシ、および負荷分散機能の構成コード例

この記事は主に、Nginx のフォワード プロキシとリバース プロキシ、および負荷分散機能の設定コー...

MySQL 8.0.22 解凍版インストールチュートリアル(初心者向け)

目次1. リソースのダウンロード2. ソフトウェアを解凍する2.1 場所を選択する2.2 名前を変更...

MySql のインデックス、ロック、トランザクションの知識ポイントのまとめ

この記事では、MySql のインデックス、ロック、トランザクションに関する知識のポイントをまとめてい...

Windows Server 2016 に Docker をインストールするプロセスと発生した問題

前提条件Windows Server でコンテナーを実行するには、Windows Server (半...

Flutterを使用して移動可能なスタックウィジェット機能を作成する

この投稿では、キャンバスとドラッグ可能なノード インターフェースを使用するデスクトップおよび Web...

JavaScript モバイル H5 画像生成ソリューションの説明

現在、WeChatパブリックアカウントの運用活動が多く、写真を生成する必要があります。生成された写真...

Mysql通信プロトコルの詳細な説明

1.Mysql接続方法MySQL 通信プロトコルを理解するには、まず MySQL サーバーへの接続に...

MySQLのバックアップとリカバリの詳細な説明

序文:前回の記事では、さまざまな MySQL ステートメント構文の使用法とユーザー権限に関する知識を...

Bash で山括弧を使用するその他の方法

序文この記事では、山括弧のその他の用途をさらに詳しく見ていきます。前回の記事では、山括弧 (<...

Dockerリンクはコンテナの相互接続を実現します

目次1.1. IP経由のコンテナ間のネットワークアクセス1.2. コンテナ名またはコンテナIDによる...

ウェブサイトメンテナンスページのリスト構築のヒント

また、多くの場合、メンテナンスのために Web サイトを少なくとも数分間オフラインにする必要がありま...

WeChatアプレット開発で遭遇したことのない落とし穴のまとめ

目次getApp()ページエントリファイルの先頭に変数を定義しますwx.createSelector...

Docker ベースの MySQL マスタースレーブ レプリケーションを実装する方法

序文MySQL マスター/スレーブ レプリケーションは、アプリケーションの高パフォーマンスと高可用性...