非常に実用的な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 入門

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

推薦する

MySQL における in と exists の違いの詳細な説明

1. 事前に準備する便宜上、ここで 2 つのテーブルを作成し、そこにいくつかのデータを追加します。果...

IE6のmin-widthとmin-heightと互換性を持たせる簡単な方法

ウェブサイトがワイドスクリーンの場合、ブラウザ ウィンドウを左右にドラッグすると、ウェブサイトの幅が...

MySQL 8.0.24 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.24のインストールチュートリアルを参考までに紹介します。具体的な内...

base target="" はリンクのターゲットオープンフレームを制御します

<base target=_blank> は、基本リンクのターゲット フレームを新しいペ...

CSS3 ベジェ曲線の例: リンクホバーアニメーション効果の作成

CSS3 アニメーション トランジションを使用して、リンクの上にマウスを移動すると小さなポップアップ...

フロントエンドはJavaScriptを通じてCADグラフィックスの詳細を作成および変更します。

目次1. 現状2. JSでCADグラフィックを作成および変更する2.1 サポートされているCADエン...

JavaScript のフラット配列をツリー構造に変換する例

目次バックグラウンドで10,000個のデータが失われた再帰法非再帰的方法要約するバックグラウンドで1...

Mysql5.7 サービスを開始できません。グラフィカル ソリューション チュートリアル

p>「サービス」で手動で起動すると、 コンソールから起動します: 次に、...\MySQL S...

Nodejs 配列キューと forEach アプリケーションの詳細な説明

この記事では、Nodejs 開発プロセスで遭遇する配列の特性によって発生する問題と解決策、および配列...

JavaScript の継承についてどれくらい知っていますか?

目次序文コンストラクタ、プロトタイプオブジェクト、インスタンスオブジェクトの関係プロトタイプチェーン...

Flex プログラム Firefox で中国語を入力すると文字化けするバグ

Firefox の下位バージョンでは中国語の文字を入力できず、上位バージョンでは文字化けした文字が表...

HTML でフォントの色を設定する方法と、PS を使用して HTML で正確なフォントの色を取得する方法

1. HTMLフォントカラー設定HTML では、フォント タグを使用してフォント コンテンツの色を設...

Vueのログインとログアウトの詳細な説明

目次ログインビジネスプロセスログイン機能の実装要約するまず、エフェクトの実装プロセスを見てみましょう...

フロントエンドインタビューに必要なホモロジーとクロスドメインの詳細な説明

序文ご存知のとおり、ブラウザの相同性戦略とクロスドメイン方式も、フロントエンド面接で頻繁に遭遇する問...