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

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

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 学習者の迅速な成長を支援します!