SQL クエリの 6 つのヒントを静かに共有します

coldplay.xixi
リリース: 2021-02-26 09:57:19
転載
2863 人が閲覧しました

SQL クエリの 6 つのヒントを静かに共有します

# 推奨 (無料):SQL チュートリアル

1. 行と列の変換

質問: 次のような生徒の得点表 (tb) があるとします。


SQL クエリの 6 つのヒントを静かに共有します

なりたい (目標を取得する)次の結果):



SQL クエリの 6 つのヒントを静かに共有します#コード:

WITH tb(姓名,课程,分数) AS ( SELECT N'张三',N'语文',74 UNION ALL SELECT N'张三',N'数学',83 UNION ALL SELECT N'张三',N'物理',93 UNION ALL SELECT N'李四',N'语文',79 UNION ALL SELECT N'李四',N'数学',86 UNION ALL SELECT N'李四',N'物理',88 ) SELECT 姓名 , MAX(CASE 课程 WHEN '语文' THEN 分数 ELSE 0 END) 语文, MAX(CASE 课程 WHEN '数学' THEN 分数 ELSE 0 END) 数学, MAX(CASE 课程 WHEN '物理' THEN 分数 ELSE 0 END) 物理 FROM tb GROUP BY 姓名
ログイン後にコピー

#2. ページング


#オプション 1: NOT IN および SELECT TOP ページング ステートメントのフォームを使用します。

SELECT TOP 10 * FROM TestTable WHERE ID NOT IN (SELECT TOP 20 ID FROM TestTable ORDER BY ID) ORDER BY ID
ログイン後にコピー

オプション 2: より大きい ID および SELECT TOP ページング ステートメントを使用します。 form

SELECT TOP 10 * FROM TestTable WHERE ID > ( SELECT MAX(id) FROM (SELECT TOP 20 id FROM TestTable ORDER BY id) AS T) ORDER BY ID
ログイン後にコピー

オプション 3: SQL Server の機能 ROW_NUMBER をページングに使用する

SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY ID DESC) AS ROWID,* FROM TestTable ) AS mytable where ROWID between 21 and 40
ログイン後にコピー

3. 結果のマージ


重複行をマージ

SELECT * FROM A UNION SELECT * FROM B
ログイン後にコピー

重複行をマージしない

SELECT * FROM A UNION ALL SELECT * FROM B
ログイン後にコピー

4. ランダム並べ替え

SELECT * FROM TestTable ORDER BY NEWID()
ログイン後にコピー

TOP Random first N records

SELECT TOP 100 * FROM TestTable ORDER BY NEWID()
ログイン後にコピー

5 と組み合わせることもできます。両側のデータを任意の記号で区切ります


たとえば、次のようにします。データをカンマ (,) で区切ると、次のようになります。

# データは、次のように分割されます。SQL クエリの 6 つのヒントを静かに共有します

SELECT R, CASE WHEN CHARINDEX(',',R)>1 THEN LEFT(R,CHARINDEX(',',R)-1) ELSE NULL END AS R1 , CASE WHEN CHARINDEX(',',R)>1 THEN RIGHT(R,(LEN(R) - CHARINDEX(',',R))) ELSE NULL END AS R2 FROM t
ログイン後にコピー

コードは長いため、コードを分割します理解:SQL クエリの 6 つのヒントを静かに共有します

SELECT CHARINDEX(',',',') --结果是1 SELECT CHARINDEX(',','NULL') --结果是0 SELECT CHARINDEX(',','') --结果是0 SELECT CHARINDEX(',','A,B') --结果是2 SELECT LEN('A,B') --结果是3 SELECT LEN('A,B') - CHARINDEX(',','A,B') --结果是3-2=1 SELECT RIGHT('A,B',( LEN('A,B') - CHARINDEX(',','A,B'))) --结果是 B
ログイン後にコピー

最後のステップでは、「A, B」を B に分割します。同様に、次を使用して A を取得することもできます。同様の方法。


6. WAITFOR 遅延実行

たとえば、SELECT ステートメントを実行する前に 1 時間 2 分 3 秒待機します。

WAITFOR DELAY '01:02:03' SELECT * FROM Employee
ログイン後にコピー

DELAY は、実行が開始されるまでの遅延です。


例: SELECT ステートメントを実行する前に、午後 11 時 08 分まで待機します。


WAITFOR TIME '23:08:00' SELECT * FROM Employee
ログイン後にコピー

TIME は、実行を開始する特定の時刻まで待機することです

我是岳哥,最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行数据前线 ——End—— 后台回复关键字:1024,获取一份精心整理的技术干货 后台回复关键字:进群,带你进入高手如云的交流群。 推荐阅读 27岁发明SQL以后,上帝把他带走了 微信8.0不好玩?那可能是你打开方式不正确! 一个员工的离职成本有多恐怖! SQL养成这些好习惯是一笔财富 MySQL基本知识点梳理和查询优化
ログイン後にコピー

その他の関連する無料学習の推奨事項:

SQLserver

以上がSQL クエリの 6 つのヒントを静かに共有しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!