RendraTriyanto

Query Penjualan

Apr 21st, 2019
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 12.05 KB | None | 0 0
  1. -- PERTEMUAN 1 - DDL --
  2.  
  3. //Berdasarkan relasi antar tabel di atas, Buatlah perintah untuk mendefinisikan atau membuat tabel (definisikan PRIMARY KEY, FOREIGN KEY (jika ada) dan sifat-sifat yang lainnya (NULL atau NOT NULL)
  4. CREATE DATABASE PENJUALAN0276
  5. ON(
  6. NAME = PENJUALAN0276_dat,
  7. FILENAME = 'R:\Materi Kuliah\Semester 4 - Genap\Perancangan Basis Data\Database dan Query Tugas\dbPENJUALAN0276.mdf',
  8. SIZE = 10,
  9. MAXSIZE = 50,
  10. FILEGROWTH = 5)
  11. LOG ON(
  12. NAME = PENJUALAN0276_log,
  13. FILENAME = 'R:\Materi Kuliah\Semester 4 - Genap\Perancangan Basis Data\Database dan Query Tugas\dbPENJUALAN0276.Ldf',
  14. SIZE = 5MB,
  15. MAXSIZE = 25MB,
  16. FILEGROWTH = 5MB)
  17.  
  18. USE PENJUALAN0276
  19.  
  20. CREATE TABLE pelanggan(
  21. kd_pelanggan CHAR(5) PRIMARY KEY NOT NULL,
  22. nama_pelanggan VARCHAR(100) NOT NULL,
  23. alamat VARCHAR(100) NOT NULL,
  24. no_telpon VARCHAR(12))
  25.  
  26. CREATE TABLE kasir(
  27. kd_kasir CHAR(5) PRIMARY KEY NOT NULL,
  28. nama_kasir VARCHAR(100) NOT NULL,
  29. password VARCHAR(30) NOT NULL)
  30.  
  31. CREATE TABLE barang(
  32. kode_barang CHAR(5) PRIMARY KEY NOT NULL,
  33. nama_barang VARCHAR(100) NOT NULL,
  34. harga_satuan NUMERIC(18,0) NOT NULL)
  35.  
  36. CREATE TABLE nota(
  37. no_nota CHAR(5) PRIMARY KEY NOT NULL,
  38. kd_pelanggan CHAR(5) FOREIGN KEY REFERENCES pelanggan(kd_pelanggan) NOT NULL,
  39. kd_kasir CHAR(5) FOREIGN KEY REFERENCES kasir(kd_kasir) NOT NULL)
  40.  
  41. CREATE TABLE detail_nota(
  42. kd_nota CHAR(5) FOREIGN KEY REFERENCES nota(no_nota) NOT NULL,
  43. kd_barang CHAR(5) NOT NULL,
  44. jumlah_barang INT NOT NULL,
  45. tgl_transaksi datetime NOT NULL)
  46.  
  47. ALTER TABLE detail_nota DROP COLUMN tgl_transaksi //Hapus FIELD tgl_transaksi dari tabel detail nota
  48.  
  49. ALTER TABLE nota ADD tgl_nota datetime NOT NULL //Tambahkan FIELD tgl_nota pada tabel Nota
  50.  
  51. ALTER TABLE detail_nota ADD harga_barang NUMERIC(18,0) NOT NULL //Tambahkan FIELD harga_barang pada detail_nota
  52.  
  53. ALTER TABLE detail_nota  ADD FOREIGN KEY (kd_barang) REFERENCES barang(kode_barang) //Tambahkan FOREIGN KEY pada FIELD kd_barang tabel detailnota mengacu pada kode_barang di tabel barang
  54.  
  55. ALTER TABLE kasir ALTER COLUMN nama_kasir VARCHAR(50) //Ubah tipe DATA nama_kasir menjadi VARCHAR(50)
  56.  
  57. //Isikan DATA berikut pada tabel yang sudah dibuat
  58. INSERT INTO barang VALUES ('B0001','Rinso 50 Gram',3000)
  59. INSERT INTO barang VALUES ('B0002','Nestle 300 ml',2500)
  60. INSERT INTO barang VALUES ('B0003','Taro 450 Gram',8500)
  61. INSERT INTO barang VALUES ('B0004','Bolpen Snowman',1500)
  62. INSERT INTO barang VALUES ('B0005','Gulaku 1Kg',20000)
  63.  
  64. INSERT INTO kasir VALUES ('K0001','Karno','abc123')
  65. INSERT INTO kasir VALUES ('K0002','Mirna','jesica123')
  66.  
  67. INSERT INTO pelanggan (kd_pelanggan,nama_pelanggan,alamat,no_telpon) VALUES ('P0001','Aprilia','Bantul','0812000111')
  68. INSERT INTO pelanggan (kd_pelanggan,nama_pelanggan,alamat,no_telpon) VALUES ('P0002','Zulkarnain','Yogyakarta','')
  69. INSERT INTO pelanggan (kd_pelanggan,nama_pelanggan,alamat,no_telpon) VALUES ('P0003','Andika','Sleman','')
  70. INSERT INTO pelanggan (kd_pelanggan,nama_pelanggan,alamat,no_telpon) VALUES ('P0004','Parno','Yogyakarta','0856222999')
  71.  
  72. SELECT *FROM barang
  73. SELECT *FROM detail_nota
  74. SELECT *FROM kasir
  75. SELECT *FROM nota
  76. SELECT *FROM pelanggan
  77.  
  78. -- PERTEMUAN 2 - DML --
  79.  
  80. *1*
  81. USE PENJUALAN0276
  82.  
  83. *2*
  84. ALTER TABLE kasir ADD Level_Kasir CHAR(2)
  85.  
  86. *3*
  87. ALTER TABLE barang ADD Stok INT
  88.  
  89. INSERT INTO kasir VALUES ('K0003','Mirnawati rahmasari','mirna5678','')
  90. INSERT INTO kasir VALUES ('K0004','Endang sari sukarno','endang123','')
  91. INSERT INTO kasir VALUES ('K0005','Edi rahmawan','edi99','')
  92.  
  93. INSERT INTO pelanggan VALUES ('P0005','Indah','Yogya',NULL)
  94. INSERT INTO pelanggan VALUES ('P0006','Raihan eka', 'Sleman',NULL)
  95. INSERT INTO pelanggan VALUES ('P0007','Ekasari','Yogya', '876265')
  96.  
  97. INSERT INTO barang VALUES ('B0006','Rinso 100 gram',5000,'')
  98. INSERT INTO barang VALUES ('B0007','Detergen cair Rinso 100 ml',6000,'')
  99. INSERT INTO barang VALUES ('B0008','Gulaku stick',1000,'')
  100.  
  101. INSERT INTO nota VALUES('N0001','P0001','K0001','2019-03-03 10:15:00')
  102. INSERT INTO nota VALUES('N0002','P0002','K0002','2019-03-04 10:10:00')
  103. INSERT INTO nota VALUES('N0003','P0004','K0002','2019-03-04 10:13:00')
  104. INSERT INTO nota VALUES('N0004','P0001','K0004','2019-03-05 11:15:00')
  105. INSERT INTO nota VALUES('N0005','P0004','K0001','2019-03-05 15:20:00')
  106. INSERT INTO nota VALUES('N0006','P0002','K0004','2019-03-05 15:25:00')
  107. INSERT INTO nota VALUES('N0007','P0003','K0002','2019-03-06 12:03:00')
  108.  
  109. INSERT INTO detail_nota VALUES('N0001','B0001',3,2850)
  110. INSERT INTO detail_nota VALUES('N0001','B0002',2,2500)
  111. INSERT INTO detail_nota VALUES('N0001','B0005',1,18500)
  112. INSERT INTO detail_nota VALUES('N0002','B0007',1,6000)
  113. INSERT INTO detail_nota VALUES('N0003','B0003',2,8450)
  114. INSERT INTO detail_nota VALUES('N0003','B0004',10,1500)
  115. INSERT INTO detail_nota VALUES('N0004','B0001',3,2800)
  116. INSERT INTO detail_nota VALUES('N0004','B0008',10,1000)
  117. INSERT INTO detail_nota VALUES('N0004','B0003',1,8500)
  118. INSERT INTO detail_nota VALUES('N0005','B0003',5,8500)
  119. INSERT INTO detail_nota VALUES('N0006','B0007',1,6000)
  120. INSERT INTO detail_nota VALUES('N0006','B0002',1,2500)
  121. INSERT INTO detail_nota VALUES('N0006','B0005',1,20000)
  122. INSERT INTO detail_nota VALUES('N0007','B0003',4,8500)
  123.  
  124. *5*
  125. UPDATE kasir SET Level_Kasir = 'AK' WHERE kd_kasir = 'K0001'
  126.  
  127. *6*
  128. UPDATE kasir SET level_Kasir = 'SK' WHERE kd_kasir <> 'K0001'
  129.  
  130. *7*
  131. UPDATE barang SET stok = 100
  132.  
  133. *8*
  134. UPDATE kasir SET password = 'jogja0912' WHERE kd_kasir = 'K0001'
  135.  
  136. *9*
  137. UPDATE pelanggan SET nama_pelanggan = 'andika zulkarnain', alamat = 'Jl.Nusa indah 101 Concat Depok Sleman', no_telpon = 0819243666 WHERE kd_pelanggan = 'P0002'
  138.  
  139. *10*
  140. UPDATE barang SET harga_satuan = 21500 WHERE kode_barang = 'B0005'
  141.  
  142. *11*
  143. DELETE FROM pelanggan WHERE kd_pelanggan = 'P0007'
  144.  
  145. *12*
  146. UPDATE pelanggan SET alamat = 'yogyakarta' WHERE alamat ='yogya'
  147.  
  148. *13*
  149. SELECT kd_kasir, nama_kasir FROM kasir WHERE nama_kasir LIKE '%mirna%'
  150.  
  151. *14*
  152. SELECT kd_pelanggan, nama_pelanggan, no_telpon FROM pelanggan WHERE no_telpon IS NOT NULL
  153.  
  154. *15*
  155. SELECT DISTINCT(alamat) FROM pelanggan
  156.  
  157. *16*
  158. SELECT *FROM barang ORDER BY nama_barang ASC
  159.  
  160. *17*
  161. SELECT kode_barang, nama_barang, harga_satuan FROM barang WHERE harga_satuan > 3000
  162.  
  163. *18*
  164. SELECT kode_barang, nama_barang, harga_satuan FROM barang WHERE nama_barang LIKE '%rinso%'
  165.  
  166. *19*
  167. SELECT SUM(stok) FROM barang
  168.  
  169. *20*
  170. SELECT n.no_nota, n.tgl_nota, p.nama_pelanggan
  171. FROM nota n JOIN pelanggan p
  172. ON n.kd_pelanggan = p.kd_pelanggan
  173. WHERE p.kd_pelanggan = 'P0001' OR p.kd_pelanggan = 'P0004'
  174.  
  175. *21*
  176. SELECT b.kode_barang, b.nama_barang, SUM(d.jumlah_barang) AS jumlah_terjual
  177. FROM barang b JOIN detail_nota d
  178. ON b.kode_barang = d.kd_barang
  179. GROUP BY b.kode_barang, b.nama_barang
  180.  
  181. *22*
  182. SELECT p.nama_pelanggan, p.kd_pelanggan, COUNT(n.no_nota) AS jumlah_transaksi
  183. FROM pelanggan p JOIN nota n
  184. ON p.kd_pelanggan = n.kd_pelanggan
  185. GROUP BY p.nama_pelanggan, p.kd_pelanggan
  186. ORDER BY COUNT(n.no_nota) DESC
  187.  
  188. *23*
  189. SELECT n.no_nota, n.tgl_nota, p.nama_pelanggan, COUNT(n.no_nota) AS total_transaksi, SUM(d.jumlah_barang) AS total_item
  190. FROM nota n JOIN pelanggan p
  191. ON n.kd_pelanggan = p.kd_pelanggan
  192. JOIN detail_nota d
  193. ON n.no_nota = d.kd_nota
  194. GROUP BY n.no_nota, n.tgl_nota, p.nama_pelanggan
  195.  
  196. *24*
  197. SELECT n.no_nota, n.tgl_nota, p.nama_pelanggan, COUNT(n.no_nota) AS total_transaksi
  198. FROM nota n JOIN pelanggan p
  199. ON n.kd_pelanggan = p.kd_pelanggan
  200. WHERE n.kd_pelanggan = 'P0002'
  201. GROUP BY n.no_nota, n.tgl_nota, p.nama_pelanggan
  202.  
  203. *25*
  204. SELECT n.no_nota, b.kode_barang, b.nama_barang, d.jumlah_barang, d.harga_barang, SUM(d.harga_barang*d.jumlah_barang) AS subtotal
  205. FROM nota n JOIN detail_nota d
  206. ON n.no_nota = d.kd_nota
  207. JOIN barang b
  208. ON d.kd_barang = b.kode_barang
  209. GROUP BY n.no_nota, b.kode_barang, b.nama_barang, d.jumlah_barang, d.harga_barang
  210.  
  211. *26*
  212. SELECT *
  213. FROM detail_nota d JOIN nota n
  214. ON d.kd_nota = n.no_nota
  215. WHERE n.tgl_nota BETWEEN '2019-03-05' AND '2019-03-10'
  216.  
  217. *27*
  218. SELECT k.kd_kasir, k.nama_kasir, SUM(d.harga_barang*d.jumlah_barang) AS total_uang
  219. FROM kasir k JOIN nota n
  220. ON k.kd_kasir = n.kd_kasir
  221. JOIN detail_nota d
  222. ON n.no_nota = d.kd_nota
  223. GROUP BY k.kd_kasir, k.nama_kasir
  224.  
  225. *28*
  226. SELECT k.kd_kasir, k.nama_kasir, COUNT(n.no_nota) AS jumlah_transaksi, COUNT(n.no_nota)*250 AS bonus
  227. FROM kasir k JOIN nota n
  228. ON k.kd_kasir = n.kd_kasir
  229. GROUP BY k.kd_kasir, k.nama_kasir
  230.  
  231. *29*
  232. SELECT n.no_nota, n.tgl_nota, k.kd_kasir, k.nama_kasir, p.kd_pelanggan, p.nama_pelanggan, b.kode_barang, b.nama_barang, d.jumlah_barang, d.harga_barang,
  233. SUM(d.jumlah_barang*d.harga_barang)
  234. FROM nota n JOIN kasir k
  235. ON n.kd_kasir = k.kd_kasir
  236. JOIN pelanggan p
  237. ON p.kd_pelanggan = n.kd_pelanggan
  238. JOIN detail_nota d
  239. ON d.kd_nota = n.no_nota
  240. JOIN barang b
  241. ON b.kode_barang = d.kd_barang
  242. GROUP BY n.no_nota, n.tgl_nota, k.kd_kasir, k.nama_kasir, p.kd_pelanggan, p.nama_pelanggan, b.kode_barang, b.nama_barang, d.jumlah_barang, d.harga_barang
  243.  
  244. *30*
  245. SELECT b.kode_barang, b.nama_barang, b.harga_satuan, SUM(d.jumlah_barang) AS terjual, b.stok-SUM(d.jumlah_barang) AS tersedia
  246. FROM barang b JOIN detail_nota d
  247. ON b.kode_barang = d.kd_barang
  248. GROUP BY b.kode_barang, b.nama_barang, b.harga_satuan, b.stok
  249.  
  250. -- Pertemuan 3 - VIEW dan Stored Procedure --
  251.  
  252. --1. Buat View DaftarHargaBarang  untuk menampilkan Kode barang, nama barang, harga barang --
  253. CREATE VIEW VDaftarHargaBarang AS SELECT kode_barang, nama_barang, harga_satuan FROM barang
  254.  
  255. SELECT * FROM VDaftarHargaBarang
  256.  
  257. -- 2. Simpan query no 26 ke view VTampilBonusKasir --
  258. CREATE VIEW VTampilBonusKasir AS
  259. SELECT *
  260. FROM detail_nota d JOIN nota n
  261. ON d.kd_nota = n.no_nota
  262. WHERE n.tgl_nota BETWEEN '2019-03-05' AND '2019-03-10'
  263.  
  264. SELECT * FROM VTampilBonusKasir
  265.  
  266. -- 3. Simpan query no 27 ke view VTampilPenjualan --
  267. CREATE VIEW VTampilPenjualan AS
  268. SELECT k.kd_kasir, k.nama_kasir, SUM(d.harga_barang*d.jumlah_barang) AS total_uang
  269. FROM kasir k JOIN nota n
  270. ON k.kd_kasir = n.kd_kasir
  271. JOIN detail_nota d
  272. ON n.no_nota = d.kd_nota
  273. GROUP BY k.kd_kasir, k.nama_kasir
  274.  
  275. SELECT * FROM VTampilPenjualan
  276.  
  277. -- 4. Simpan query no 28 ke view VDaftarBarang --
  278. CREATE VIEW VDaftarBarang AS
  279. SELECT k.kd_kasir, k.nama_kasir, COUNT(n.no_nota) AS jumlah_transaksi, COUNT(n.no_nota)*250 AS bonus
  280. FROM kasir k JOIN nota n
  281. ON k.kd_kasir = n.kd_kasir
  282. GROUP BY k.kd_kasir, k.nama_kasir
  283.  
  284. SELECT * FROM VDaftarbarang
  285.  
  286. -- 5. Simpan query no 16 ke sebuah stored procedure, mencari data barang berdasarkan kemiripan nama yang diinputkan --
  287. CREATE PROC SpDataBarang
  288. AS BEGIN
  289. SELECT
  290.     *
  291.     FROM
  292.     barang
  293.     ORDER BY
  294.     nama_barang ASC
  295. END
  296.  
  297. EXEC SpDataBarang
  298.  
  299. -- 6. Buat stored procedure untuk menampilkan penjualan berdasarkan no_nota yang diinputkan (gunakan query no 27) --
  300.  
  301. -- 7. Buat stored procedure untuk menampilkan penjualan berdasarkan tanggal awal dan tanggal akhir yang diinputkan (gunakan query no 27) --
  302.  
  303. -- 8. Buat stored procedure untuk insert nota --
  304. CREATE PROC InsertNota (@no_nota CHAR(5),
  305. @kd_pel CHAR(5), @kd_kas CHAR(5), @tgl_not datetime)
  306. AS
  307. INSERT INTO kasir(no_nota, kd_pelanggan, kd_kasir, tgl_nota)
  308. VALUES (@no_nota, @kd_pel, @kd_kas, @tgl_not)
  309.  
  310. -- 9. Buat stored procedure untuk insert detail_nota yang sekaligus mengurangi nilai stok dibarang --
  311. CREATE PROC Insert_Detail_Nota
  312. (
  313. @kd_nota CHAR(5),
  314. @kd_barang CHAR(5),
  315. @jumlah_barang INT,
  316. @harga_barang NUMERIC(18,0),
  317. @StatementType nvarchar(20) = ''
  318. )
  319. AS
  320. BEGIN
  321. IF @StatementType = 'Insert'
  322. BEGIN
  323. INSERT INTO detail_nota (kd_nota, kd_barang, jumlah_barang, harga_barang)
  324. VALUES(@kd_nota, @kd_barang, @jumlah_barang, @harga_barang)
  325. END
  326. IF @StatementType = 'Update'
  327. BEGIN
  328. UPDATE detail_nota SET
  329. jumlah_barang = @jumlah_barang
  330. WHERE kd_nota = @kd_nota
  331. END
  332. END
  333.  
  334. EXEC Insert_Detail_Nota 'N0006','B0005','9','5000','Update';
  335.  
  336. SELECT *FROM detail_nota
  337.  
  338. -- 10. Buat stored procedure untuk mengubah password kasir lama dengan password kasir baru (inputan : kode, pwd_lama, pwd_baru) --
  339. CREATE PROC SpGantiPassKasir
  340.  @kd_kasir CHAR(5),
  341.  @pOldPassword VARCHAR(50),
  342.  @pNewPassword VARCHAR(50)
  343. AS
  344. BEGIN
  345. SET NOCOUNT ON;
  346.  
  347. UPDATE dbo.kasir
  348.     SET st01Password = HASHBYTES('md5', @pNewPassword)
  349.     WHERE st01Guid = @pGuid
  350.     AND st01Password = HASHBYTES('md5', @pOldPassword);
  351.  
  352. IF @@ROWCOUNT = 0
  353.     RETURN -1;
  354.  
  355.   RETURN 0;
  356. END
  357. GO
  358.  
  359. SELECT *FROM kasir
Advertisement
Add Comment
Please, Sign In to add comment