Advertisement
Guest User

latihan sql

a guest
Feb 17th, 2020
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.10 KB | None | 0 0
  1. SQL
  2. Stored Procedure | Cursor | Trigger | Function | Pivot | Optimizing | Job
  3.  
  4.  
  5.  
  6. Oleh : Kresno
  7.  
  8. Date : 09-03-2015
  9.  
  10.  
  11.  
  12. Stored Procedure
  13.  
  14.  
  15.  
  16. Kalau kata mssqltips.com, stored procedure (SP) adalah query yg sudah disiapkan dan disimpan, untuk dapat digunakan kembali berkali-kali. Jadi kita simpan suatu query yg sering kita pakai dalam bentuk SP, jika akan digunakan tinggal panggil SP tersebut.
  17.  
  18. Format :
  19.  
  20. Create Procedure/Proc Nama SP
  21.  
  22. @Parameter 1 tipedata,
  23.  
  24. @Parameter 2 tipedata,
  25.  
  26. dst
  27.  
  28. As
  29.  
  30. Select field1, field2, dst
  31.  
  32. From nama table
  33.  
  34. Where filter 1 = @Parameter1
  35.  
  36. And filter2 = @Parameter2
  37.  
  38. And dst..
  39.  
  40.  
  41.  
  42. Bisa berupa select, insert, update, delete. Cara memanggilnya adalah EXEC NamaSP.
  43.  
  44. Contoh :
  45.  
  46. Create Proc BooksRetrieve
  47.  
  48. @BookCode varchar(10)
  49.  
  50. As
  51.  
  52. Select BookCode, BookName, Author, Price
  53.  
  54. From BookList
  55.  
  56. Where BookCode = @BookCode
  57.  
  58.  
  59.  
  60. Exec BooksRetrieve ‘B150001’
  61.  
  62.  
  63.  
  64.  
  65.  
  66. Create Proc BooksInsert
  67.  
  68. @BookCode varchar(10),
  69.  
  70. @BookName varchar(50),
  71.  
  72. @Author varchar(20),
  73.  
  74. @Price numeric(8,2)
  75.  
  76. AS
  77.  
  78. Insert into BookList(BookCode, BookName, Author, Price)
  79.  
  80. Values(@BookCode, @BookName, @Author, @Price)
  81.  
  82.  
  83.  
  84. Exec BooksInsert ‘B150002’, ’Hanya Titik’, ’Saya’, 15000
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92. Cursor
  93.  
  94.  
  95.  
  96. Disadur dari codeproject.com, cursor adalah kumpulan baris-baris data dengan penanda(pointer) yang menunjuk baris tertentu. Kalau mau dibayangin mah fungsinya mirip-mirip dengan FOR.
  97.  
  98. Format :
  99.  
  100. Declare @ParameterPenampung1 varchar(10),
  101.  
  102. @ParameterPenampung2 varchar(10),
  103.  
  104. dst..
  105.  
  106. Declare NamaCursor Cursor For
  107.  
  108. Select Field1, Field2, dst..
  109.  
  110. From NamaTable
  111.  
  112. Where Filter1
  113.  
  114. And Filter2
  115.  
  116. And dst
  117.  
  118. Open NamaCursor
  119.  
  120. Fetch Next from NamaCursor
  121.  
  122. Into @ParameterPenampung1, @ParameterPenampung2, dst..
  123.  
  124.  
  125.  
  126. While @@FetchStatus = 0
  127.  
  128. Begin
  129.  
  130.  
  131. Fetch Next from NamaCursor
  132.  
  133. Into @ParameterPenampung1, @ParameterPenampung2, dst..
  134.  
  135. End
  136.  
  137. Close NamaCursor
  138.  
  139. Deallocate NamaCursor
  140.  
  141.  
  142.  
  143. Tipe Cursor :
  144.  
  145.  
  146.  
  147. Static Cursor
  148.  
  149. Bisa bergerak mundur dan maju. Data yg dihasilkan hanya ketika cursor di-open, jika setelah open ada data yg di-insert, update, delete tidak akan masuk ke cursor kecuali cursor di close dan di-
  150.  
  151. open kembali.
  152.  
  153.  
  154.  
  155. Dynamic Cursor
  156.  
  157. Hampir mirip seperti static cursor, bedanya adalah datanya ikut berubah jika ada insert update
  158.  
  159. delete.
  160.  
  161.  
  162.  
  163. Forward-Only Cursor
  164.  
  165. Mirip seperti dynamic cursor, namun tidak dapat bergerak mundur.
  166.  
  167.  
  168.  
  169. Key-Set Driven Cursor
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177. Syntax :
  178.  
  179.  
  180.  
  181. Open
  182.  
  183. Membuka Transact-SQL Server cursor
  184.  
  185.  
  186.  
  187. Close
  188.  
  189. Menutup cursor yang terbuka dengan melepaskan record yang ditunjuk dan melepaskan cursor lock yang
  190.  
  191. terdapat pada record yang ditunjuk terakhir kali
  192.  
  193.  
  194.  
  195. Deallocate
  196.  
  197. Menghilangkan cursor reference
  198.  
  199.  
  200.  
  201.  
  202.  
  203. FetchStatus :
  204.  
  205.  
  206.  
  207. 0
  208.  
  209. Fetch statement sukses
  210.  
  211. -
  212.  
  213. 1
  214.  
  215. Fetch statement gagal
  216.  
  217. -
  218.  
  219. 2
  220.  
  221. Row fetched is missing
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229. Trigger
  230.  
  231.  
  232.  
  233. Baca-baca dari sqlteam.com, Trigger adalah objek database yg melekat ke table. Kurang lebih mirip seperti Stored Procedure. Bedanya adalah jika SP bebas dipanggil kapan saja, Trigger akan dipanggil jika ada event yg mempergaruhi table yaitu Insert, Update, Delete.
  234.  
  235. Format :
  236.  
  237. Create Trigger NamaTrigger
  238.  
  239. On NamaTable
  240.  
  241. For Insert, Update, Delete
  242.  
  243. As
  244.  
  245. Select *
  246.  
  247. From Inserted/Updated/Deleted
  248.  
  249.  
  250.  
  251. Contoh :
  252.  
  253. Insert log transaksi
  254.  
  255. Create Trigger InsertLog
  256.  
  257. On Transaction_Hdr
  258.  
  259. For Insert
  260.  
  261. As
  262.  
  263. Insert into TransactionLog(Date, Description, By)
  264.  
  265. Select TransactionDate, ‘New Transaction’, CreateBy
  266.  
  267. From Inserted
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275. Function
  276.  
  277.  
  278.  
  279. Nyontek ke dotnet-tricks.com, function adalah kumpulan perintah sql yang menerima inputan, melakukan proses dan mengembalikan nilai dari proses tersebut. Nilai yg dikembalikan dapat berupa nilai tunggal ataupun sebuah table.
  280.  
  281.  
  282.  
  283. User defined function adalah function-function yang dibuat oleh user. Jenisnya :
  284.  
  285.  
  286.  
  287. Scalar Function
  288.  
  289. Me-return nilai tunggal
  290.  
  291.  
  292. Cth :
  293.  
  294. Create function GetFullName
  295.  
  296. (
  297.  
  298. @FirstName varchar(10),
  299.  
  300. @LastName varchar(10)
  301.  
  302. )
  303.  
  304. Returns varchar(20)
  305.  
  306. As
  307.  
  308. Begin
  309.  
  310. Return (select @FirstName + ' ' + @LastName)
  311.  
  312. End
  313.  
  314.  
  315.  
  316. Select dbo.GetFullName('Nino', 'Aja')
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323. Table Valued Function
  324.  
  325. Me-return tabel
  326.  
  327.  
  328. Cth :
  329.  
  330. Create function GetBooksByYear
  331.  
  332. (
  333.  
  334. @Year varchar(4)
  335.  
  336. )
  337.  
  338. Returns Table
  339.  
  340. As
  341.  
  342. Select *
  343.  
  344. From BookList
  345.  
  346. Where year(PublishDate) = @Year
  347.  
  348.  
  349.  
  350. Select dbo.GetBooksByYear(‘2015’)
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358. Pivot
  359.  
  360.  
  361.  
  362. Pivot digunakan jika ingin mengubah data dari bentuk baris menjadi bentuk kolom.
  363.  
  364. Contoh :
  365.  
  366.  
  367. SalesPerson
  368.  
  369. Product
  370.  
  371. SalesAmount
  372.  
  373.  
  374.  
  375. Bob
  376.  
  377. Pickles
  378.  
  379. $100.00
  380.  
  381.  
  382.  
  383. Sue
  384.  
  385. Oranges
  386.  
  387. $50.00
  388.  
  389.  
  390.  
  391. Bob
  392.  
  393. Pickles
  394.  
  395. $25.00
  396.  
  397.  
  398.  
  399. Bob
  400.  
  401. Oranges
  402.  
  403. $300.00
  404.  
  405.  
  406.  
  407. Sue
  408.  
  409. Oranges
  410.  
  411. $500.00
  412.  
  413.  
  414.  
  415.  
  416. SELECT SalesPerson, [Oranges] AS Oranges, [Pickles] AS Pickles
  417.  
  418. FROM
  419.  
  420. (SELECT SalesPerson, Product, SalesAmount
  421.  
  422. FROM ProductSales ) ps
  423.  
  424. PIVOT
  425.  
  426. (
  427.  
  428. SUM (SalesAmount)
  429.  
  430. FOR Product IN
  431.  
  432. ( [Oranges], [Pickles])
  433.  
  434. ) AS pvt
  435.  
  436.  
  437.  
  438.  
  439. SalesPerson
  440.  
  441. Oranges
  442.  
  443. Pickles
  444.  
  445.  
  446.  
  447. Bob
  448.  
  449. $300.00
  450.  
  451. $125.00
  452.  
  453.  
  454.  
  455. Sue
  456.  
  457. $550.00
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. Atau bisa juga dengan :
  467.  
  468. Declare @Query as varchar(1000)
  469.  
  470. Declare @ColumnName as varchar(1000)
  471.  
  472. Select @ColumnName = Isnull(@ColumnName + ‘,’,’’) + QuoteName(Product,’[]’)
  473.  
  474. From (select distinct Product from ProductSales) as prod
  475.  
  476. Set @Query = ‘Select *
  477.  
  478. From
  479.  
  480. (SELECT SalesPerson, Product, SalesAmount
  481.  
  482. FROM ProductSales ) ps
  483.  
  484. PIVOT
  485.  
  486. (
  487.  
  488. SUM (SalesAmount)
  489.  
  490. FOR Product IN( ‘ + @ColumnName + ‘)
  491.  
  492. ) AS pvt’
  493.  
  494.  
  495.  
  496. Exec (@Query)
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504. Optimizing Database And Queries
  505.  
  506.  
  507.  
  508. Tips untuk meningkatkan performa database :
  509.  
  510.  
  511.  
  512. 1.
  513.  
  514. Pilih tipe data yang cocok
  515.  
  516.  
  517.  
  518.  
  519.  
  520. Cth: Untuk string lbh dr 8000 character menggunakan tipe data text, dibawah itu menggunakan varchar.
  521.  
  522.  
  523.  
  524. 2.
  525.  
  526. Hindari menggunakan nchar dan nvarchar
  527.  
  528.  
  529.  
  530.  
  531.  
  532. Gunakan nchar atau nvarchar untuk menyimpan Unicode.
  533.  
  534.  
  535.  
  536. 3.
  537.  
  538. Hindari nilai NULL pada field dgn panjang fixed (char)
  539.  
  540.  
  541.  
  542. 4.
  543.  
  544. Hindari select *
  545.  
  546.  
  547.  
  548.  
  549.  
  550. Agar sql tidak perlu convert * ke field name.
  551.  
  552. Select * from BookList
  553.  
  554. menjadi
  555.  
  556. Select BookCode, BookName, Author, Price from BookList
  557.  
  558.  
  559.  
  560. 5.
  561.  
  562. Jika data dalam subquery-nya besar/banyak gunakan EXISTS daripada IN, EXISTS lebih cepat.
  563.  
  564.  
  565.  
  566.  
  567.  
  568. Select BookCode, BookName, Author, Price from BookList
  569.  
  570. Where BookCode IN ( select distinct bookcode from Order)
  571.  
  572. menjadi
  573.  
  574. Select BookCode, BookName, Author, Price from BookList
  575.  
  576. Where BookCode EXISTS ( select * from Order where order.bookcode = booklist.bookcode)
  577.  
  578.  
  579.  
  580. 6.
  581.  
  582. Hindari penggunaan HAVING
  583.  
  584.  
  585.  
  586.  
  587.  
  588. Gunakan having hanya untuk filter berdasarkan aggregation
  589.  
  590. Select … from …
  591.  
  592. Group by …
  593.  
  594. Having sum(…)
  595.  
  596.  
  597.  
  598. 7.
  599.  
  600. Hindari CURSOR
  601.  
  602.  
  603.  
  604. 8.
  605.  
  606. Gunakan UNION ALL disbanding UNION
  607.  
  608.  
  609.  
  610. 9.
  611.  
  612. Gunakan nama schema sebelum sql object
  613.  
  614.  
  615.  
  616.  
  617.  
  618. Select BookCode, BookName, Author, Price from BookList
  619.  
  620. menjadi
  621.  
  622. Select BookCode, BookName, Author, Price from dbo.BookList
  623.  
  624.  
  625.  
  626. 10.
  627.  
  628. Set NOCOUNT ON
  629.  
  630.  
  631.  
  632.  
  633.  
  634. Sql mengembalikan jumlah baris yang terproses oleh perintah Select, Insert, Update, Delete.
  635.  
  636. Create Proc …
  637.  
  638. As
  639.  
  640. Set NOCOUNT ON
  641.  
  642.  
  643.  
  644. 11.
  645.  
  646. Gunakan TRY - CATCH
  647.  
  648.  
  649.  
  650.  
  651.  
  652. Untuk menghindari error yang dapat menyebabkan deadlock.
  653.  
  654.  
  655.  
  656. 12.
  657.  
  658. Gunakan Stored Procedure untuk query yg sering dipakai atau yg kompleks.
  659.  
  660.  
  661.  
  662. 13.
  663.  
  664. Hindari prefix “sp_” pada stored procedure yg dibuat sendiri
  665.  
  666.  
  667.  
  668.  
  669. SP_ merupakan prefix default untuk system defined SP. Sql akan mencari lebih dahulu pada system defined SP baru ke
  670.  
  671. user defined SP.
  672.  
  673.  
  674.  
  675. 14.
  676.  
  677. Gunakan filter yang akan mengurangi paling banyak baris pada WHERE
  678.  
  679.  
  680.  
  681. 15.
  682.  
  683. Left Join lebih cepat daripada Right Join
  684.  
  685.  
  686.  
  687. 16.
  688.  
  689. (>=) lebih cepat daripada (>)
  690.  
  691. >= 8 lebih cepat drpd > 7
  692.  
  693.  
  694.  
  695. 17.
  696.  
  697. Hindari menggunakan LIKE
  698.  
  699.  
  700.  
  701. 18.
  702.  
  703. Kadang menggunakan UNION dari 2 query bisa lebih baik daripada 1 query
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement