>데이터 베이스 >SQL >6가지 SQL 쿼리 팁을 조용히 공유하세요

6가지 SQL 쿼리 팁을 조용히 공유하세요

coldplay.xixi
coldplay.xixi앞으로
2021-02-26 09:57:192991검색

6가지 SQL 쿼리 팁을 조용히 공유하세요

권장(무료): SQL tutorial

1. 행 및 열 변환

질문: 다음과 같은 학생 점수 테이블(TB)이 있다고 가정합니다.

6가지 SQL 쿼리 팁을 조용히 공유하세요

되고 싶다(다음 결과 얻기):

6가지 SQL 쿼리 팁을 조용히 공유하세요

코드:

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, paging

옵션 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 페이징 문 양식

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을 결합하여 임의의 상위 N개 레코드를 얻을 수도 있습니다

SELECT TOP 100 * FROM TestTable ORDER BY NEWID()

5. 양쪽의 데이터를 임의의 기호로 분리하세요.
예를 들어 쉼표(,)를 사용하여 데이터를 구분하고 다음 데이터

6가지 SQL 쿼리 팁을 조용히 공유하세요를 다음 그림으로 나눕니다.

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
6가지 SQL 쿼리 팁을 조용히 공유하세요코드가 길기 때문에 이해하기 위해 코드를 나눕니다.

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시 8분까지 기다리세요

WAITFOR TIME '23:08:00'
SELECT * FROM Employee

여기서 TIME은 실행을 시작하기 위해 특정 시간까지 기다립니다

我是岳哥,最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行数据前线
——End——

后台回复关键字:1024,获取一份精心整理的技术干货
后台回复关键字:进群,带你进入高手如云的交流群。
推荐阅读
27岁发明SQL以后,上帝把他带走了

微信8.0不好玩?那可能是你打开方式不正确!

一个员工的离职成本有多恐怖!
SQL养成这些好习惯是一笔财富
MySQL基本知识点梳理和查询优化

더 많은 관련 무료 학습 권장사항:

SQLserver

위 내용은 6가지 SQL 쿼리 팁을 조용히 공유하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제