sondmk header
SQL SERVER เบื้องต้น

SQL SERVER :: SELECT some_column FROM (แสดงข้อมูลโดยระบุคอลัมน์)

Post by Goborijung at 2019-12-06 15:18:19 | ID: 223

SELECT column1, column2, column_n FROM table_name

Ex.
SELECT userID, UserName, FullName FROM User

SQL SERVER :: SELECT แสดงข้อมูลที่ตรงข้ามกับเงือนไขในการค้นหา

Post by Goborijung at 2019-12-06 15:55:10 | ID: 225

Ex.
SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE NOT POQty = 5
SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE NOT POQty BETWEEN 1 AND 10

SQL SERVER :: SELECT แสดงข้อมูลที่ได้จากการคำนวณของคอลัมน์

Post by Goborijung at 2019-12-06 15:40:15 | ID: 224

SELECT col1 , col2, co3, add_new_col=(col2*cal3) FROM table_name

Ex.
SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO
SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE (POQty*UnitCost) > 300
SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO WHERE (POQty*UnitCost) BETWEEN 1000 AND 1500

SQL SERVER :: SELECT แสดงข้อมูลโดยการแบ่งกลุ่มเงื่อนไขในการค้นหา

Post by Goborijung at 2019-12-06 16:06:24 | ID: 226

SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO 
WHERE POQty = 1 AND (UnitCost=245 OR UnitCost=740)

SELECT Description , POQty, unitCost, Amount=(POQty*UnitCost) FROM TM_PO 
WHERE POQty = 1 AND (UnitCost IN(245,740))

SQL SERVER :: SET NOCOUNT ON

Post by Goborijung at 2020-02-21 08:29:09 | ID: 403

ref: https://www.bloggang.com/mainblog.php?id=cyberpig


SET NOCOUNT ON ใน Stored Procedure ช่วย performance ระบบได้

คำสั่ง SET NOCOUNT ON เป็นการ "หยุด" การคืนค่า จำนวนบรรทัดที่ได้จากการ Select ของ SQL Server มาให้ผู้เรียก

ผลของการหยุด COUNT นี้ ทำให้การคืนค่า หายไป แต่ผลพลอยได้คือ ระบบเร็วขึ้น และไม่รบกวนการ nest call ของ stored procedure (จากเรื่อง "Crystal Report ... ทำไม ข้อมูลไม่ออกฟะ"

แต่ถ้าเรายังต้องการจำนวนบรรทัดที่ได้จากการเรียก procedure ก็สามารถใช้ตัวเลือก @@ROWCOUNT ได้อยู่ แม้จะ SET NOCOUNT ON ไปแล้วก็ตาม

ใน SQL Server 2005 ของ Microsoft เวลาเราสั่งสร้าง Procedure ใหม่ มันใส่ SET NOCOUNT ON มาให้เลย

SQL SERVER :: SQL Conditional Processing Control of Flow

Post by Goborijung at 2021-02-23 09:06:20 | ID: 311

/* การใช้คำสั่ง IF..ELSE */
IF EXISTS (SELECT * FROM Branch)
	PRINT 'is exists'
ELSE
	PRINT 'not exists'

/* การใช้คำสั่ง BEGIN..END */
IF EXISTS (SELECT * FROM Branch)
	BEGIN
		DECLARE @Count Int
		SELECT @Count = COUNT(*) FROM Branch WHERE Name = 'Sai 4'
		PRINT CONVERT(varchar(20),@Count) + ' Record(s) found'
	END
ELSE
	PRINT 'not exists'

/* การใช้คำสั่ง CASE โดยใช้ค่ารับเข้าค่าเดียว */
SELECT Company,Name,
	CASE Name
	WHEN 'Sai 4' THEN 's4'
	WHEN 'SAI4-2' THEN 's4-2'
	ELSE 'Unknown'
	END AS tCompany
FROM Branch

/* การใช้ CASE สำหรับเงื่อนไขตามตรรกะ */
SELECT CONo,
	SUM(CASE WHEN MONTH(ETADate) = 1 THEN ORDQTYPCS ELSE 0 END) AS [1-Jan],
	SUM(CASE WHEN MONTH(ETADate) = 2 THEN ORDQTYPCS ELSE 0 END) AS [2-Feb],
	SUM(CASE WHEN MONTH(ETADate) = 3 THEN ORDQTYPCS ELSE 0 END) AS [3-Mar],
	SUM(CASE WHEN MONTH(ETADate) = 4 THEN ORDQTYPCS ELSE 0 END) AS [4-Apr],
	SUM(CASE WHEN MONTH(ETADate) = 5 THEN ORDQTYPCS ELSE 0 END) AS [5-May],
	SUM(CASE WHEN MONTH(ETADate) = 6 THEN ORDQTYPCS ELSE 0 END) AS [6-Jun],
	SUM(CASE WHEN MONTH(ETADate) = 7 THEN ORDQTYPCS ELSE 0 END) AS [7-Jul],
	SUM(CASE WHEN MONTH(ETADate) = 8 THEN ORDQTYPCS ELSE 0 END) AS [8-Aug],
	SUM(CASE WHEN MONTH(ETADate) = 9 THEN ORDQTYPCS ELSE 0 END) AS [9-Sep],
	SUM(CASE WHEN MONTH(ETADate) = 10 THEN ORDQTYPCS ELSE 0 END) AS [10-Oct],
	SUM(CASE WHEN MONTH(ETADate) = 11 THEN ORDQTYPCS ELSE 0 END) AS [11-Nov],
	SUM(CASE WHEN MONTH(ETADate) = 12 THEN ORDQTYPCS ELSE 0 END) AS [12-Dec],
	FORMAT(SUM(ORDQTYPCS),'#,##0.00') AS Total
FROM TM_SO
WHERE YEAR(ETADate) = 2018
GROUP BY CONo
ORDER BY CONo

/* การใช้ WHILE วนรอบเช็คข้อมูลตามเงื่อนไข */
DECLARE @loop int
SET @loop = 1
WHILE @loop <= 10
BEGIN
	PRINT 'Loop : ' + CONVERT(VARCHAR(10),@loop)
	SET @loop+=1
END

/* การใช้ WHILE ร่วมกับ BREAK */
DECLARE @loop int
SET @loop = 1
WHILE @loop <= 10
BEGIN
	PRINT 'Loop : ' + CONVERT(VARCHAR(10),@loop)
	IF @loop = 3
	BEGIN
		BREAK
	END	
	SET @loop+=1
END

/* การใช้ WHILE ร่วมกับ CONTINUE */
DECLARE @StartDate datetime, @CheckDate datetime
SET @StartDate = '2018-05-22'
SET @CheckDate = @StartDate
WHILE YEAR(@StartDate) = YEAR(@CheckDate)
BEGIN
	IF DATEPART(dw,@CheckDate) = 3 -- Sun:1 , Mon:2 , Tue:3
	BEGIN
		PRINT 'Tueseday : ' + CONVERT(VARCHAR(20),@CheckDate,103)
		SET @CheckDate = DATEADD(day,7,@CheckDate)
		CONTINUE
	END	
	SET @CheckDate = DATEADD(day,1,@CheckDate)
END

/* คำสั่ง GOTO กระโดดไปยังตำแหน่งที่ระบุไว้ */
DECLARE @TotalMarks int
SET @TotalMarks = 55

IF @TotalMarks >= 50
	GOTO Pass
IF @TotalMarks < 50
	GOTO Fail

Pass:
	PRINT ' Congratulations : You pass the Examination '
	RETURN

Fail:
	PRINT ' You Failed! : Better Luck Next Time '
	RETURN

/* คำสั่ง WAITFOR ใช้สำหรับหน่วงเวลา */
WAITFOR DELAY '00:00:10' --wait 10 sec
BEGIN
	SELECT * FROM [User] 
	WHERE Section IS NOT NULL
	AND OID = 1
END

/* คำสั่ง RETURN สังให้ออกจาก Query โดยไม่สนใจคำสั่งที่เหลืออยู่ */
IF NOT EXISTS(SELECT Name FROM Section WHERE Name = 'it') --ถ้าไม่มีชื่อ it ในคอลัม Name ให้หยุดประมวลผล
BEGIN
	RETURN
END
SELECT * FROM Section

SQL SERVER :: SQL Create Function ( Inline Table-Value Function)

Post by Goborijung at 2019-12-16 16:24:18 | ID: 329

/*
Inline Table-Valued Functions
เป็นฟังก์ชั่นที่ ส่งค่ากลับออกมาในรูปแบบของตาราง โดยจะผ่านทางคำสั่งคิวรี่ SELECT 
ซึ่งจะได้ผลลัพธ์ออกมาในรูปแบบของ แถว และ คอลัมน์ ซึ่งก็คือลักษณะของตารางนั่นเอง
*/

/* Ex. */
CREATE FUNCTION udf_test001
(
	@year int
)
RETURNS TABLE
AS
RETURN
(
	SELECT CONo,
	SUM(CASE WHEN MONTH(ETADate) = 1 THEN ORDQTYPCS ELSE 0 END) AS [1-Jan],
	SUM(CASE WHEN MONTH(ETADate) = 2 THEN ORDQTYPCS ELSE 0 END) AS [2-Feb],
	SUM(CASE WHEN MONTH(ETADate) = 3 THEN ORDQTYPCS ELSE 0 END) AS [3-Mar],
	SUM(CASE WHEN MONTH(ETADate) = 4 THEN ORDQTYPCS ELSE 0 END) AS [4-Apr],
	SUM(CASE WHEN MONTH(ETADate) = 5 THEN ORDQTYPCS ELSE 0 END) AS [5-May],
	SUM(CASE WHEN MONTH(ETADate) = 6 THEN ORDQTYPCS ELSE 0 END) AS [6-Jun],
	SUM(CASE WHEN MONTH(ETADate) = 7 THEN ORDQTYPCS ELSE 0 END) AS [7-Jul],
	SUM(CASE WHEN MONTH(ETADate) = 8 THEN ORDQTYPCS ELSE 0 END) AS [8-Aug],
	SUM(CASE WHEN MONTH(ETADate) = 9 THEN ORDQTYPCS ELSE 0 END) AS [9-Sep],
	SUM(CASE WHEN MONTH(ETADate) = 10 THEN ORDQTYPCS ELSE 0 END) AS [10-Oct],
	SUM(CASE WHEN MONTH(ETADate) = 11 THEN ORDQTYPCS ELSE 0 END) AS [11-Nov],
	SUM(CASE WHEN MONTH(ETADate) = 12 THEN ORDQTYPCS ELSE 0 END) AS [12-Dec],
	SUM(ORDQTYPCS) AS Total
    -- FORMAT(SUM(ORDQTYPCS),'#,##0.00') AS Total
	FROM TM_SO
	WHERE YEAR(ETADate) = @year
	GROUP BY CONo
)
GO

/*
USE : SELECT * FROM dbo.udf_test001(2018) ORDER BY CONo 
หรือ SELECT TOP 1 * FROM dbo.udf_test001(2018) ORDER BY CONo 
*/

SQL SERVER :: SQL Create Function (Scalar Function)

Post by Goborijung at 2019-12-16 16:23:19 | ID: 328

/* 
Scalar Functions 
เป็นฟังก์ชั่นที่ให้ค่าผลลัพธ์แบบส่งกลับเพียงค่าเดียว โดยจะมีการส่งผ่าน Parameter เข้าไป หรือ ไม่มีก็ได้
*/

/* Ex1 */
USE [GSSv2_Prod]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION udf_GetThaiDate
(
	@Date datetime
)
RETURNS varchar(20)
AS
BEGIN
	DECLARE @ThaiDate varchar(20)
	DECLARE @ThaiMonth varchar(60)
	SET @ThaiMonth = 'ม.ค ก.พ มี.ค เม.ย พ.ค มี.ย ก.ค ส.ค ก.ย ต.ค พ.ย ธ.ค '
	SET @ThaiDate = CAST(DAY(@Date) AS varchar(2)) + ''
	+ SUBSTRING(@ThaiMonth,(MONTH(@Date)*5) -4,5) + ''
	+ CAST(YEAR(@Date) +543 AS varchar(4))
	RETURN @ThaiDate
END
GO
/* USE : SELECT dbo.udf_GetThaiDate(GETDATE()) */


/* Ex2 */
CREATE FUNCTION GetDiffAmount
(	
	@pAmount1 DECIMAL(18,2),
	@pAmount2 DECIMAL(18,2)
)
RETURNS DECIMAL(18,2) 
AS BEGIN
	DECLARE @diffAmt DECIMAL(18,2)
	SET @diffAmt = @pAmount1 - @pAmount2
	RETURN @diffAmt
END
GO
/* USE : SELECT dbo.GetDiffAmount(10,15) */

SQL SERVER :: SQL JOIN (รวมคำสั่ง SQL JOIN แบบต่างๆ)

Post by Goborijung at 2019-12-10 10:40:47 | ID: 263

คำสั่ง JOIN
JOIN เป็นการเชื่อมข้อมูลตั้งแต่ 2 ตารางขึ้นไป โดยใช้คำสั่งคิวรี่เพี่ยงคำสั่งเดียว ผลลัพธ์ของคิวรี่ที่ได้จะเป็นข้อมูลชุดใหม่
ที่ได้จากการเชื่อมของตาราง

ประเภทของการ JOIN จะประกอบไปด้วย

INNER JOIN
OUTER JOIN
CROSS JOIN
SELF JOIN

INNER JOIN

เป็นการเชื่อมตั้งแต่ 2 ตารางขึ้นไปเข้าด้วยกัน โดยอาศัยคอลัมที่มีความสัมพันธ์กัน มาทำการเชื่อมโยงข้อมูลเข้าด้วยกัน เงื่อนไขคือ ดึงเฉพาะคอลัมที่มีข้อมูลตรงกัน จากทั้งสองตาราง Ex. SELECT * FROM table_a INNER JOIN table_b ON table_a.ProductID = table_b.ProductID หรือ SELECT u.UserName,u.NickName,s.Name AS SectionName FROM [User] u INNER JOIN Section s ON u.Section = s.OID WHERE u.NickName IS NOT NULL

OUTER JOIN

เป็นการเชื่อมตั้งแต่ 2 ตารางขึ้นไปเข้าด้วยกัน ผลของการเชื่อมจะยึดตามรารางใดตารางหนึ่งตามที่กำหนด หรือ นำรายการของตารางทั้งหมดมารวมกัน ประกอบด้วย LEFT OUTER JOIN เชื่อมโดยยึดตารางทางด้านซ้ายมือของคำสั่ง RIGHT OUTER JOIN เชื่อมโดยยึดตารางทางด้านขวามือของคำสั่ง FULL OUTER JOIN เชื่อมตารางทางด้านซ้ายมือและขวามือเข้าด้วยกัน

LEFT OUTER JOIN

เป็นการเชื่อมตาราง ตั้งแต่ 2 ตารางเข้าด้วยกัน โดยจะตรวจสอบข้อมูลในคอลัมน์ที่ใช้เป็นเงื่อนไขในการเชื่อมโยงทั้ง 2 ตาราง โดยจะแสดงแถวข้อมูลจากตารางซ้ายทั้งหมด ส่วนตารางฝั่งขวา จะแสดงเฉพาะแถวที่มีเงื่อนไขตรงกับตารางฝั่งซ้ายเท่านั้น Note:: ตารางฝั่งซ้าย (ตารางที่ถูกประกาศก่อน) จะถูกแสดงทั้งหมด ตารางฝั่งขวา (ตารางที่ถูกประกาศทีหลัง) จะแสดงเฉาะแถวที่มีเงื่อนไขของข้อมูล ตรงกันกับตารางทางฝั่งซ้ายเท่านั้น Ex. SELECT * FROM table_a AS a LEFT OUTER JOIN table_b AS b ON a.column_name = b.column_name Ex. SELECT * FROM Section AS s LEFT OUTER JOIN [User] AS u ON s.OID = u.Section WHERE u.NickName IS NOT NULL

RIGHT OUTER JOIN

เป็นการเชื่อมตาราง ตั้งแต่ 2 ตารางเข้าด้วยกัน โดยจะตรวจสอบข้อมูลในคอลัมน์ที่ใช้เป็นเงื่อนไขในการเชื่อมโยงทั้ง 2 ตาราง โดยจะแสดงแถวข้อมูลจากตารางขวาทั้งหมด ส่วนตารางฝั่งซ้าย จะแสดงเฉพาะแถวที่มีเงื่อนไขตรงกับตารางฝั่งขวาเท่านั้น Note:: ตารางฝั่งซ้าย (ตารางที่ถูกประกาศก่อน) จะถูกแสดงทั้งหมด ตารางฝั่งขวา (ตารางที่ถูกประกาศทีหลัง) จะแสดงเฉาะแถวที่มีเงื่อนไขของข้อมูล ตรงกันกับตารางทางฝั่งซ้ายเท่านั้น Ex. SELECT * FROM table_a AS a RIGHT OUTER JOIN table_b AS b ON a.column_name = b.column_name Ex. SELECT * FROM Section AS s RIGHT OUTER JOIN [User] AS u ON s.OID = u.Section WHERE u.NickName IS NOT NULL

FULL OUTER JOIN

เป็นการเชื่อมตาราง ตั้งแต่ 2 ตารางเข้าด้วยกัน โดยนำข้อมูลในตารางทั้งฝั่งซ้ายมือ และ ขวามือมารวมกัน Ex. SELECT * FROM table_a AS a FULL OUTER JOIN table_b AS b ON a.column_name = b.column_name Ex. SELECT * FROM Section AS s FULL OUTER JOIN [User] AS u ON s.OID = u.Section WHERE u.NickName IS NOT NULL

CROSS JOIN

เป็นการเชื่อมตารางตั้งแต่ 2 ตารางขึ้นไป โดยนำทุกๆแถวของตารางหนึ่ง มาเชื่อมกับข้อมูลทุกๆแถวของอีกตารางหนึ่ง ซึ่ง จำนวนแถวที่ได้ จะเท่ากับผลคูณของตารางที่นำมาเชื่อมกัน Ex. SELECT * FROM Section AS s CROSS JOIN [User] AS u WHERE u.NickName IS NOT NULL

SQL SERVER :: SQL SERVER All Function แบ่งตามกลุ่มใหญ่ๆ

Post by Goborijung at 2019-12-10 14:12:06 | ID: 267

SQL SERVER All Function แบ่งตามกลุ่มใหญ่ๆ
1. Aggregate Function
2. Mathematical Function
3. String Function
4. Date Function
5. Ranking Function
6. Null Function
7. Converting Data Type Function
8. System Function

<<<...6789101112131415>>>

Framework

Library


เครื่องมือพัฒนาเว็บ



การออกแบบและพัฒนาเว็บไซต์


Download SourceCode



copyAllright © 2016 soundmk.com