機能1:CONCAT
- 使用シナリオ:クエリ時に複数のフィールドを文字列に連結します
-
select concat('id:',`id`,',name:',`name`) from `student`
- 分析:接続する必要のあるフィールドはコンマで区切られ、カスタムスプライシングシンボルは一重引用符で囲まれ、コンマで区切られます。
- 注:この関数は、列の値が空の場合、この列のスプライシングの結果がnullになることに注意する必要があります。この状況を回避するには、空の可能性がある列に関数2を追加する必要があります。
関数2:IFNULL
- 使用シナリオ:クエリを実行するときは、フィールドが空かどうかを判断します。空の場合は2番目のデフォルトパラメータを使用し、空でない場合はテーブルのデータを取得します。
-
SELECT IFNULL(`student_number`,'is null') FROM `sc_student`
- 分析:2つのパラメーター、最初のパラメーターはフィールド名、2番目のパラメーターはデフォルト値です
- 注:これはクエリ結果の判断です。データが存在しない場合、次のようなデフォルト値は使用されません(studentテーブルに合計10個のデータ):SELECT IFNULL(student_number、 'is null ')FROM `sc_student` WHERE id = 100、この結果はデフォルト値ではなくnullです' is null '
機能3:COALESCE
- 使用シナリオ:クエリを実行するときは、フィールドが空かどうかを判断し、フィールドが空の場合は2番目のパラメーターから空でない値を取得し、フィールドが空でない場合はテーブルのデータを取得します
-
SELECT COALESCE(`student_number`,NULL,NULL,'is default') FROM `student`
- 分析:複数のパラメーター、最初のパラメーターはフィールド名、2番目のパラメーターはオプションです。フィールドが空の場合、値は2番目のパラメーターから空ではない値です。すべてが空の場合、nullを返します。
- 注:いいえ
機能4:交換
- 使用シナリオ:クエリ時にフィールド内の指定された文字を置き換えます
-
SELECT REPLACE(`name`,'陈小婷','小红') FROM `student`
- 分析:3つのパラメーター、最初のパラメーターはフィールド名、2番目のパラメーターはフィールドで置き換えられる文字列、3番目のパラメーターは置き換えられた文字列です
- 注:2番目のパラメーター値は3番目のパラメーター値に置き換えられます
関数5:FIND_IN_SET
- 使用シナリオ:指定された文字がフィールドに存在するかどうかに関係なく、このタイプのフィールドには機能があります。つまり、「、」(コンマ)で区切られた複数の値があります。
-
SELECT `id` , `name` , `score` from `student` where find_in_set ('100' , `score` )
- 分析:2つのパラメーター、最初のパラメーターはクエリ条件、2番目のパラメーターは一致する必要のあるフィールドです。3つのコースのスコアを格納するためのフィールドスコアが学生テーブルにあり、「、」で区切られているとします。 (comma区切り)、このステートメントは、スコアが100ポイントの少なくとも1人の学生のIDと名前を学生テーブルに照会するためのものです。
- 注:2つのパラメーターの順序は、逆さまに書くのが簡単なことがよくあります。最も注意が必要なのは、逆さまに書くことであり、プログラムはエラーを報告しません。
機能6:ケース
- 使用シナリオ:テーブルに状態フィールドがあり、値は0(無効)または1(有効)ですが、クエリ結果に対応する漢字を表示したいと思います。
-
SELECT `id` , `nickname` , `state` ,(CASE `state` WHEN 0 THEN '禁用' WHEN 1 THEN '启用' ELSE '其他' END ) `state_new` FROM `student`
- 解決策:学生テーブルのID、名前、およびステータスを照会します。ステータスが0の場合は無効になり、1の場合は有効になり、0と1でない場合は他のテーブルが表示されます。
- 注:最後に終わりがあります。忘れないでください
関数7:GROUP_CONCAT
- 使用シナリオ:商品テーブル、商品ラベルテーブル、商品ラベル関連付けテーブルがある場合、各商品に対応する複数の商品ラベルIDを調べたい
-
SELECT pi.id,GROUP_CONCAT( ptr.product_tag_id ) as tags FROM `product_info` pi LEFT JOIN `product_tag_rel` ptr ON pi.id = ptr.product_info_id GROUP BY pi.id
- 分析:各製品と各製品の対応する製品タグIDを照会します(製品タグIDはコンマで区切られます)
- 注:グループ化
関数8:FROM_UNIXTIME
- 使用シナリオ:タイムスタンプから日付形式
-
SELECT `id` , FROM_UNIXTIME(`add_time`, '%Y-%m-%d %H:%i') FROM `student`
- 解決策:学生テーブルのIDとフォーマットされた作成時刻(年-月-日時間:分)をクエリします
- 注:フォーマット文字の場合
機能9:TIMESTAMPDIFF
- シナリオの使用:時差を見つける
-
SELECT TIMESTAMPDIFF(SECOND , `create_time` , `update_time`) FROM `student` SELECT TIMESTAMPDIFF(SECOND,'2018-07-01 09:00:00','2018-07-04 12:00:00') FROM `student`
- 解決策:学生テーブルの作成時間と変更時間の2番目の差を照会します(2番目:秒/分:分/時間:時間/日:日/月:月/年:年)
- 注:データ型がdatetimeの場合、create_time <update_time
機能10:MAX
- 使用シナリオ:最大値を照会する
-
SELECT `id`, `subject_id` , MAX(score) FROM `student_score` GROUP BY `subject_id` HAVING MAX(score) > 90
- 分析:学生の成績証明書で90ポイントを超える各科目の最高スコアをクエリし、各科目のグループ化にGROUP BY `subject_id`を使用し、90ポイントを超える条件をフィルタリングするためにHAVING MAX(score)> 90を使用します
- 注:グループ化、フィルタリング