รหัส | ชื่อ |
1 | aa |
2 | bb |
3 | cc |
1 | aa |
2 | bb |
3 | cc |
รหัส | ชื่อ |
1 | aa |
2 | bb |
3 | cc |
เลือก ID ที่แตกต่าง ชื่อ เข้าสู่ #t จากตารางที่ 1 ลบตารางที่ 1 แทรก เข้าสู่ตารางที่ 1 เลือก * จาก #t |
รหัส | ทักษะ | พนักงาน |
1 | 1 | VB |
2 | 1 | PHP |
3 | 1 | ASP |
4 | 2 | PHP |
5 | 3 | ASP |
6 | 4 | VB |
7 | 4 | ASP |
เลือกพนักงานจาก [ตาราง] WHERE พนักงานใน (เลือกพนักงานจาก [ตาราง] WHERE ทักษะ='VB' ) และทักษะ='PHP' |
3. ปัญหาการควบรวมฐานข้อมูล
มีสองตารางในการเข้าถึง ฉันต้องการรวมเนื้อหาของทั้งสองตาราง
ตาราง [a] มีโครงสร้างดังต่อไปนี้:
[id] | หมายเลข | หมายเลขอัตโนมัติ |
[ชื่อ] | ข้อความ | ชื่อ |
[ราคา] | หมายเลข | ราคา |
[guige] | ข้อความ | ข้อมูลจำเพาะ |
[changjia] | ข้อความ | ของผู้ผลิต |
[baozhuang] | ข้อความ | บรรจุภัณฑ์ |
[danwei] | ข้อความ | หน่วย |
มีทั้งหมด 900 ระเบียน ยกเว้นช่องรหัสและชื่อ ส่วนข้อมูลอื่นๆ ทั้งหมดสามารถเว้นว่างได้
ตาราง [b] มีโครงสร้างดังต่อไปนี้:
[id] | หมายเลข | หมายเลขอัตโนมัติ |
[ชื่อ] | ข้อความ | ชื่อ |
[ราคา] | หมายเลข | ราคา |
[changjia] | ข้อความ | ของผู้ผลิต |
[danwei] | ข้อความ | หน่วย |
[xingzhi] | ข้อความ | คุณสมบัติ |
มีทั้งหมด 800 รายการ ยกเว้นช่อง id และชื่อ มีบางช่องที่น้อยกว่าตาราง [a] แต่มีอักขระ [xingzhi] อีกหนึ่งตัวที่สามารถเว้นว่างได้
ตอนนี้ฉันต้องการสร้างตารางใหม่ [c] โดยมีโครงสร้างดังต่อไปนี้ และเนื้อหาคือผลรวมของเนื้อหาของทั้งสองตาราง
[id] | หมายเลข | หมายเลขอัตโนมัติ |
[ชื่อ] | ข้อความ | ชื่อ |
[ราคา] | หมายเลข | ราคา |
[guige] | ข้อความ | ข้อมูลจำเพาะ |
[changjia] | ข้อความ | ของผู้ผลิต |
[baozhuang] | ข้อความ | บรรจุภัณฑ์ |
[danwei] | ข้อความ | หน่วย |
[xingzhi] | ข้อความ | ธรรมชาติ |
คุณสามารถใช้คำสั่ง sql การดำเนินการด้วยตนเองหรือ xml ไม่ต้องกังวลว่าจะนำไปใช้อย่างไร ฉันจะหดหู่ใจมาก หากเราต้องป้อน 800 รายการจริงๆ ฉันจะตาย
คำตอบ:
1. ทางนี้
ใส่เข้าไปใน c(id,name,.....) เลือกไอดี,ชื่อ,..... จากก ใส่เข้าไปใน c(id,name,.....) เลือกสูงสุด(id)+1,ชื่อ,..... จากข |
2.การแก้ไข:
หากดำเนินการโดยตรงใน Query Analyzer:
ใส่เข้าไปใน c(name,....) เลือกชื่อ,..... จากก ใส่เข้าไปใน c(name,....) เลือกชื่อ,..... จากข |
3. ใช้วิธียูเนี่ยน
ใส่ลงใน [c] ([id], ตัวเลข, ตัวเลขอัตโนมัติ) เลือก [id], หมายเลข, หมายเลขอัตโนมัติจาก [a] สหภาพแรงงาน เลือก [id], หมายเลข, หมายเลขอัตโนมัติจาก [b] |
โซลูชัน 4.asp
<% 'การตรวจจับลูปของตาราง a ตั้ง rs = Server.CreateObject("ADODB.RECORDSET") rs.open "select * จากคำสั่งซื้อด้วย id",conn,1,1 ทำในขณะที่ไม่ใช่ rs.eof โทร actAdd(rs("name")) 'เรียกใช้ฟังก์ชันเช่นการเพิ่มเนื้อหาลงในตาราง b! rs.MoveNext วนซ้ำ rs.ปิด Setrs=ไม่มีอะไร การกระทำย่อยเพิ่ม(txt) ติ่มซำ, sql sql = "ใส่เข้าไปในค่า b(ชื่อ)('"& txt &"')" ตั้งค่า ts = Conn.Execute (sql) ts.ปิด เซต ts = ไม่มีเลย จบย่อย - |
โซลูชัน 5.asp
- สลัว arr_temp1,arr_temp2,arr_data set rs=conn.execute("เลือก id,name,price,guige,changjia,baozhuang,danwei จาก a") arr_temp1=rs.getrows ฿.ปิด ตั้งค่า rs=nothing set rs=conn.execute("select id,name,price,guige,changjia,danwei,xingzhi from b") arr_temp2=rs.getrows ฿.ปิด ตั้งค่า rs=nothing rem เริ่มการประมวลผล ทำซ้ำ arr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7) rem คัดลอกเนื้อหาของอาร์เรย์ทั้งสองเข้าไป ฉันเขียนส่วนนี้เอง สร้างสองลูป แล้วเก็บไว้ในฐานข้อมูล %> |
สุดท้ายแปลงคำสั่ง SQL แบบคลาสสิกบางส่วน:
1. แนะนำโดย Wawa: คำสั่ง SQL ที่สวยงามบางส่วน
คำอธิบาย: คัดลอกตาราง (คัดลอกเฉพาะโครงสร้าง ชื่อตารางต้นฉบับ: a ชื่อตารางใหม่: b)
SQL: เลือก * เป็น b จาก a โดยที่ 1<>1
คำอธิบาย: คัดลอกตาราง (คัดลอกข้อมูล ชื่อตารางต้นฉบับ: a ชื่อตารางเป้าหมาย: b)
SQL: แทรกลงใน b(a, b, c) เลือก d,e,f จาก b;
คำอธิบาย: แสดงบทความ ผู้ส่ง และเวลาตอบกลับล่าสุด
SQL: เลือก a.title,a.username,b.adddate จากตาราง a,(เลือก max(adddate) adddate จากตารางโดยที่ table.title=a.title) b
คำอธิบาย: แบบสอบถามการรวมภายนอก (ชื่อตาราง 1: ชื่อตาราง 2: b)
SQL: เลือก aa, ab, ac, bc, bd, bf จากด้านซ้าย JOIN b ON aa = bc
คำอธิบาย: ตั้งเวลาเตือนล่วงหน้าห้านาที
SQL: เลือก * จากกำหนดการโดยที่ datediff('minute',f start time,getdate())>5
คำอธิบาย: สองตารางที่เกี่ยวข้องกัน ลบข้อมูลในตารางหลักที่ไม่ได้อยู่ในตารางรอง
ฐานข้อมูล SQL:
ลบออกจากข้อมูลที่ไม่มีอยู่ ( เลือก * จาก infobz โดยที่ info.infid=infobz.infid )
อธิบาย:--
ฐานข้อมูล SQL:
เลือก A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
จากตารางที่ 1
(เลือก X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
จาก (เลือก NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
จากตารางที่ 2
โดยที่ TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
(SELECT NUM, UPD_DATE, STOCK_ONHAND
จากตารางที่ 2
โดยที่ TO_CHAR(UPD_DATE,'YYYY/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'ปปปป/ดด') || '/01','ปปปป/ดด/วว') - 1, 'ปปปป/ดด') ) Y,
โดยที่ X.NUM = Y.NUM (+)
และ X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
โดยที่ A.NUM = B.NUM
อธิบาย:--
ฐานข้อมูล SQL:
เลือก * จากข้อมูลนักเรียนที่ไม่มีอยู่ (เลือก * จากนักเรียนโดยที่ Studentinfo.id=student.id) และชื่อแผนก='"&strdepartmentname&"' และชื่อหลัก='"&strprofessionname&"' เรียงลำดับตามเพศ แหล่งกำเนิดของนักศึกษา รวมวิทยาลัย คะแนนสอบเข้า
แสดงให้เห็น:
รับสถิติค่าโทรศัพท์ของแต่ละหน่วยเป็นเวลา 1 ปี จากฐานข้อมูล (โควต้าค่าโทรศัพท์, ขอแสดงความยินดี, รายการโทรเลขและปุ๋ย, แหล่งที่มาสองตาราง)
ฐานข้อมูล SQL:
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) ตามที่อาจ
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
SUM(ถอดรหัส(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
จาก (เลือก a.userper, a.tel, a.standfee, b.telfeedate, b.factration
จาก TELFEESTAND a, TELFEEb
โดยที่ a.tel = b.telfax)
จัดกลุ่มตาม a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
คำอธิบาย: ปัญหาแบบสอบถามร่วมสี่ตาราง:
SQL: เลือก * จากการรวมด้านในด้านซ้าย b บน aa=bb การรวมด้านในด้านขวา c บน aa=cc การรวมด้านใน d บน aa=dd โดยที่ .....
คำอธิบาย: รับหมายเลข ID ที่ไม่ได้ใช้น้อยที่สุดในตาราง
ฐานข้อมูล SQL:
SELECT (กรณีที่มีอยู่ (SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) เป็น HandleID
จากที่จับ
ที่ไม่มี HandleID ใน (เลือก a.HandleID - 1 จาก Handle a)
2. ลบข้อมูลที่ซ้ำกัน
1. กรณีมีคีย์หลัก
ก. รหัสฟิลด์ที่ไม่ซ้ำ (คีย์หลักเฉพาะ)
ลบตาราง
โดยที่ id ไม่ได้อยู่
-
เลือก max(id) จากกลุ่มตารางโดย col1,col2,col3...
-
ฟิลด์ที่อยู่ต่อจาก group by clause คือเงื่อนไขที่คุณใช้ในการระบุการซ้ำซ้อน ตัวอย่างเช่น หากมีเพียง col1 ตราบใดที่เนื้อหาของฟิลด์ col1 เหมือนกัน แสดงว่าระเบียนนั้นเหมือนกัน
b.มีคีย์หลักร่วมกัน
สมมติว่า col1+','+col2+','...col5 เป็นคีย์หลักร่วม
เลือก * จากตารางโดยที่ col1+','+col2+','...col5 ใน (
เลือก max(col1+','+col2+','...col5) จากตาราง
โดยที่มีการ count(*)>1
จัดกลุ่มตาม col1,col2,col3,col4
-
ฟิลด์ที่อยู่ต่อจาก group by clause คือเงื่อนไขที่คุณใช้ในการระบุการซ้ำซ้อน ตัวอย่างเช่น หากมีเพียง col1 ตราบใดที่เนื้อหาของฟิลด์ col1 เหมือนกัน แสดงว่าระเบียนนั้นเหมือนกัน
c: ตัดสินทุกสาขา
เลือก * ลงใน #aa จากกลุ่มตารางโดย id1,id2,....
ลบตาราง
แทรกลงในตาราง
เลือก * จาก #aa
2. สถานการณ์ที่ไม่มีคีย์หลัก
a: ดำเนินการโดยใช้ตารางชั่วคราว
เลือกตัวตน (int, 1,1) เป็น id, * ลงใน #temp จาก ta
ลบ #อุณหภูมิ
โดยที่ id ไม่ได้อยู่
-
เลือก max(id) จาก # group โดย col1,col2,col3...
-
ลบตารางตา
ใส่เข้าไปใน ta(...)
เลือก ..... จาก #temp
b: ดำเนินการโดยการเปลี่ยนโครงสร้างตาราง (เพิ่มเขตข้อมูลเฉพาะ)
แก้ไขตารางตารางเพิ่ม newfield int identity (1,1)
ลบตาราง
ที่นิวฟิลด์ไม่อยู่
-
เลือก min(newfield) จากกลุ่มตารางตามฟิลด์ทั้งหมด ยกเว้น newfield
-
แก้ไขตารางตารางวางคอลัมน์นิวฟิลด์