转载自: http://blog.csdn.net/IBM_hoojo/article/details/5546868 Case 具有 两种 格式 。 简单 Case 函数 和Case 搜索 函数 。 -- 简单 Case 函数 CASE sex WHEN ' 1 ' THEN ' 男 ' WHEN ' 2 ' THEN ' 女 ' ELSE ' 其他 ' END -- Case 搜索 函数 CASE WHE
转载自:
http://blog.csdn.net/IBM_hoojo/article/details/5546868
Case具有两种格式。简单Case函数和Case搜索函数。
--
简单Case函数
CASE
sex
WHEN
'
1
'
THEN
'
男
'
WHEN
'
2
'
THEN
'
女
'
ELSE
'
其他
'
END
--
Case搜索函数
CASE
WHEN
sex
=
'
1
'
THEN
'
男
'
WHEN
sex
=
'
2
'
THEN
'
女
'
ELSE
'
其他
'
END
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
--
比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE
WHEN
col_1
IN
(
'
a
'
,
'
b
'
)
THEN
'
第一类
'
WHEN
col_1
IN
(
'
a
'
)
THEN
'
第二类
'
ELSE
'
其他
'
END
下面我们来看一下,使用Case函数都能做些什么事情。
一,已知数据按照另外一种方式进行分组,分析。
有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary
Key
)
国家(country) 人口(population)
中国
600
美国
100
加拿大
100
英国
200
法国
300
日本
250
德国
200
墨西哥
50
印度
250
根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。
洲 人口
亚洲
1100
北美洲
250
其他
700
想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。
如果使用Case函数,SQL代码如下:
SELECT
SUM
(population),
CASE
country
WHEN
'
中国
'
THEN
'
亚洲
'
WHEN
'
印度
'
THEN
'
亚洲
'
WHEN
'
日本
'
THEN
'
亚洲
'
WHEN
'
美国
'
THEN
'
北美洲
'
WHEN
'
加拿大
'
THEN
'
北美洲
'
WHEN
'
墨西哥
'
THEN
'
北美洲
'
ELSE
'
其他
'
END
FROM
Table_A
GROUP
BY
CASE
country
WHEN
'
中国
'
THEN
'
亚洲
'
WHEN
'
印度
'
THEN
'
亚洲
'
WHEN
'
日本
'
THEN
'
亚洲
'
WHEN
'
美国
'
THEN
'
北美洲
'
WHEN
'
加拿大
'
THEN
'
北美洲
'
WHEN
'
墨西哥
'
THEN
'
北美洲
'
ELSE
'
其他
'
END
;
同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。SQL代码如下;
SELECT
CASE
WHEN
salary
500
THEN
'
1
'
WHEN
salary
>
500
AND
salary
600
THEN
'
2
'
WHEN
salary
>
600
AND
salary
800
THEN
'
3
'
WHEN
salary
>
800
AND
salary
1000
THEN
'
4
'
ELSE
NULL
END
salary_class,
COUNT
(
*
)
FROM
Table_A
GROUP
BY
CASE
WHEN
salary
500
THEN
'
1
'
WHEN
salary
>
500
AND
salary
600
THEN
'
2
'
WHEN
salary
>
600
AND
salary
800
THEN
'
3
'
WHEN
salary
>
800
AND
salary
1000
THEN
'
4
'
ELSE
NULL
END
;
二,用一个SQL语句完成不同条件的分组。
有如下数据
国家(country) 性别(sex) 人口(population)
中国
1
340
中国
2
260
美国
1
45
美国
2
55
加拿大
1
51
加拿大
2
49
英国
1
40
英国
2
60
按照国家和性别进行分组,得出结果如下
国家 男 女
中国
340
260
美国
45
55
加拿大
51
49
英国
40
60
普通情况下,用UNION也可以实现用一条语句进行查询。但是那样增加消耗(两个Select部分),而且SQL语句会比较长。
下面是一个是用Case函数来完成这个功能的例子
SELECT
country,
SUM
(
CASE
WHEN
sex
=
'
1
'
THEN
population
ELSE
0
END
),
--
男性人口
SUM
(
CASE
WHEN
sex
=
'
2
'
THEN
population
ELSE
0
END
)
--
女性人口
FROM
Table_A
GROUP
BY
country;
这样我们使用Select,完成对二维表的输出形式,充分显示了Case函数的强大。
三,在Check中使用Case函数。
在Check中使用Case函数在很多情况下都是非常不错的解决方法。可能有很多人根本就不用Check,那么我建议你在看过下面的例子之后也尝试一下在SQL中使用Check。
下面我们来举个例子
公司A,这个公司有个规定,女职员的工资必须高于1000块。如果用Check和Case来表现的话,如下所示
CONSTRAINT
check_salary
CHECK
(
CASE
WHEN
sex
=
'
2
'
THEN
CASE
WHEN
salary
>
1000
THEN
1
ELSE
0
END
ELSE
1
END
=
1
)
如果单纯使用Check,如下所示
CONSTRAINT
check_salary
CHECK
( sex
=
'
2
'
AND
salary
>
1000
)
女职员的条件倒是符合了,男职员就无法输入了。

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLは、データストレージ、管理、クエリ、セキュリティに適したオープンソースのリレーショナルデータベース管理システムです。 1.さまざまなオペレーティングシステムをサポートし、Webアプリケーションやその他のフィールドで広く使用されています。 2。クライアントサーバーアーキテクチャとさまざまなストレージエンジンを通じて、MySQLはデータを効率的に処理します。 3.基本的な使用には、データベースとテーブルの作成、挿入、クエリ、データの更新が含まれます。 4.高度な使用には、複雑なクエリとストアドプロシージャが含まれます。 5.一般的なエラーは、説明ステートメントを介してデバッグできます。 6.パフォーマンスの最適化には、インデックスの合理的な使用と最適化されたクエリステートメントが含まれます。

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

INNODBのロックメカニズムには、共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロックが含まれます。 1.共有ロックにより、トランザクションは他のトランザクションが読み取らないようにデータを読み取ることができます。 2.排他的ロックは、他のトランザクションがデータの読み取りと変更を防ぎます。 3.意図ロックは、ロック効率を最適化します。 4。ロックロックインデックスのレコードを記録します。 5。ギャップロックロックインデックス記録ギャップ。 6.次のキーロックは、データの一貫性を確保するためのレコードロックとギャップロックの組み合わせです。

MySQLクエリのパフォーマンスが低いことの主な理由には、インデックスの使用、クエリオプティマイザーによる誤った実行計画の選択、不合理なテーブルデザイン、過剰なデータボリューム、ロック競争などがあります。 1.インデックスがゆっくりとクエリを引き起こし、インデックスを追加するとパフォーマンスが大幅に向上する可能性があります。 2。説明コマンドを使用してクエリ計画を分析し、オプティマイザーエラーを見つけます。 3.テーブル構造の再構築と結合条件を最適化すると、テーブルの設計上の問題が改善されます。 4.データボリュームが大きい場合、パーティション化とテーブル分割戦略が採用されます。 5.高い並行性環境では、トランザクションの最適化とロック戦略は、ロック競争を減らすことができます。

データベースの最適化では、クエリ要件に従ってインデックス作成戦略を選択する必要があります。1。クエリに複数の列が含まれ、条件の順序が固定されている場合、複合インデックスを使用します。 2。クエリに複数の列が含まれているが、条件の順序が修正されていない場合、複数の単一列インデックスを使用します。複合インデックスは、マルチコラムクエリの最適化に適していますが、単一列インデックスは単一列クエリに適しています。

MySQLスロークエリを最適化するには、slowquerylogとperformance_schemaを使用する必要があります。1。LowerQueryLogを有効にし、しきい値を設定して、スロークエリを記録します。 2。performance_schemaを使用してクエリの実行の詳細を分析し、パフォーマンスのボトルネックを見つけて最適化します。

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

メモ帳++7.3.1
使いやすく無料のコードエディター
