INSERT INTO বনাম নির্বাচন নির্বাচন করুন


127

ব্যবহারের মধ্যে পার্থক্য কী

SELECT ... INTO MyTable FROM...

এবং

INSERT INTO MyTable (...)
SELECT ... FROM ....

?

BOL [থেকে ঢোকান , নির্বাচন করুন ... এমনটা ], আমি জানি যে নির্বাচন ব্যবহার ... মধ্যে সন্নিবেশ টেবিল তৈরি করবে ডিফল্ট ফাইল দলের উপর এটি ইতিমধ্যেই বিদ্যমান নয়, এবং এই বিবৃতি জন্য লগিং পুনরুদ্ধারের উপর নির্ভর করে যে ডাটাবেসের মডেল।

  1. কোন বিবৃতি পছন্দনীয়?
  2. অন্যান্য কর্মক্ষমতা জড়িত আছে?
  3. নির্বাচন করার জন্য ভাল ব্যবহারের ক্ষেত্রে কী কী ... INSERT INTO INTO ...?

সম্পাদনা: আমি ইতিমধ্যে জানিয়েছি যে আমি জানি যে নির্বাচন নির্বাচন ... একটি টেবিল তৈরি করে যেখানে এটি বিদ্যমান নেই। আমি যা জানতে চাই যে এসকিউএল একটি কারণের জন্য এই বিবৃতি অন্তর্ভুক্ত করে, এটি কী? সারি সন্নিবেশ করানোর জন্য কি এটি পর্দার আড়ালে কিছু আলাদা করছে বা এটি কেবল একটি CREATE TABLEএবং এর শীর্ষে সিনট্যাকটিক চিনি INSERT INTO


একটি ছোট ফ্যাক্টর: INSERT INTOডানদিকের সামনে দুটি মূল শব্দ রয়েছে (নির্বাচন করুন এবং এর মধ্যে) যা বিশ্বকে জানতে দিন এটি কোনও সাধারণ এসকিউএল স্টেটমেন্ট নয়, SELECT ... INTOকমপক্ষে, সাধারণ এসকিউএল স্টেটমেন্টের মতো দেখতে begins একটি ছোট কারণ প্রাক্তন পক্ষে।
মার্টিন এফ

উত্তর:


122
  1. তারা বিভিন্ন কাজ করে। INSERTটেবিল উপস্থিত থাকলে ব্যবহার করুন । SELECT INTOএটি না হলে ব্যবহার করুন ।

  2. হ্যাঁ. INSERTকোন টেবিল ইঙ্গিত সহ সাধারণত লগ হয়। SELECT INTOযথাযথ ট্রেস পতাকা সেট করা আছে ধরে নিয়ে ন্যূনতমভাবে লগ করা হয়েছে।

  3. আমার অভিজ্ঞতাটি SELECT INTOসর্বাধিক সাধারণত মধ্যবর্তী ডেটা সেটগুলির সাথে ব্যবহৃত হয়, যেমন #tempটেবিলগুলির মতো , বা কোনও ব্যাকআপের মতো একটি সম্পূর্ণ টেবিল অনুলিপি করতে। INSERT INTOআপনি যখন একটি পরিচিত কাঠামো সহ কোনও বিদ্যমান টেবিলটিতে প্রবেশ করান তখন ব্যবহৃত হয়।

সম্পাদনা

আপনার সম্পাদনা সম্বোধন করতে, তারা বিভিন্ন জিনিস করে। আপনি যদি একটি সারণী তৈরি করে থাকেন এবং কাঠামোগত ব্যবহারটি CREATE TABLEএবং সংজ্ঞা দিতে চান INSERT। তৈরি করা যায় এমন সমস্যার উদাহরণ: আপনার কাছে একটি ভার্চার ক্ষেত্র সহ একটি ছোট টেবিল রয়েছে। আপনার টেবিলের বৃহত্তম স্ট্রিংটি 12 বাইট। আপনার আসল ডেটা সেটটির 200 বাইট পর্যন্ত প্রয়োজন হবে। আপনি যদি SELECT INTOনিজের ছোট টেবিল থেকে একটি নতুন তৈরি করতে থাকেন তবে পরে INSERTক্ষেত্রগুলি খুব ছোট হওয়ায় একটি ছাঁটাই ত্রুটির সাথে ব্যর্থ হবে।


4
আমার দুটি সেন্ট, আমি মনে করি ব্যর্থতা পরিচয় করিয়ে দেওয়া ভাল জিনিস। আমি জানতে চাই যে আমার ডেটা আমার প্রত্যাশিত ডেটা ফর্ম্যাট / আকারের সাথে মেলে না। আমি সর্বদা ব্যবহার করে আমার টেবিলটি সংজ্ঞায়িত করার চেষ্টা করি CREATE TABLEএবং তারপরে , sertোকানো কার্যকর না করে নিজেই বিবৃতিটি INSERT INTOপরীক্ষা করা আরও সহজ SELECT
ডগ চেম্বারলাইন

1
@ ডগ - আমি সম্মত আমি প্রায় একচেটিয়াভাবে SELECT INTOএকটি টেম্প টেবিল তৈরি করতে বা বিদ্যমান বানানো টেবিলের একটি দ্রুত ব্যাকআপ করতে ব্যবহার করি যা আমি বানর করছি।
জেএনকে

1
@ জেএনকে - বিওএল থেকে, নির্বাচন করুন নির্বাচন তালিকার কলামগুলির ডেটা ধরণের ভিত্তিতে কাঠামোগত একটি সারণী তৈরি করে। সুতরাং আপনার উদাহরণে আপনি স্পষ্টভাবে ভার্চারটি এমন আকারে কাস্ট করে পরিস্থিতি সংশোধন করতে পারেন যা যথেষ্ট হবে। সঠিক?
জোভিনিস

2
@ জোভিনিস - হ্যাঁ আমিও তাই আশা করি। আমি যদি সেই সমস্যায় যাচ্ছি তবে আমি এগিয়ে যাব এবং CREATEযদিও একটি বিবৃতি ব্যবহার করব ।
জেএনকে

24
  1. কোন বিবৃতি পছন্দনীয়? আপনি যা করছেন তার উপর নির্ভর করে।

  2. অন্যান্য কর্মক্ষমতা জড়িত আছে? যদি টেবিলটি একটি স্থায়ী টেবিল হয়, আপনি সারণী তৈরির সময় সূচী তৈরি করতে পারেন যা নেতিবাচক এবং ইতিবাচক উভয়ই পারফরম্যান্সের জন্য জড়িত। বর্তমান টেবিলগুলিতে বিদ্যমান সূচীগুলি পুনরায় তৈরি না করে এর মধ্যে নির্বাচন করুন এবং ফলস্বরূপ পরবর্তীকালে সারণীর এটির প্রয়োজনের তুলনায় ধীর হতে পারে।

  3. নির্বাচন করার জন্য ভাল ব্যবহারের ক্ষেত্রে কী কী ... INSERT INTO INTO ...? আপনি যদি আগে থেকে টেবিলের কাঠামোটি জানেন না তবে মধ্যে সিলেক্ট করা ব্যবহৃত হয়। টেবিল তৈরি করা এবং একটি সন্নিবেশ বিবৃতি তৈরি করার চেয়ে এটি লেখার পক্ষে দ্রুত, তাই এটি সময়ে বিকাশমান গতি বাড়ানোর জন্য ব্যবহৃত হয়। আপনি যখন জিনিস পরীক্ষা করার জন্য একটি দ্রুত টেম্প টেবিল তৈরি করছেন বা কোনও নির্দিষ্ট ক্যোয়ারির ব্যাকআপ টেবিল তৈরি করছেন তখন এটি ব্যবহার করা প্রায়শই দ্রুত হয় (সম্ভবত আপনি মুছে ফেলতে চলেছেন এমন রেকর্ডস)। উত্পাদন কোডে এটি ব্যবহার করা দেখতে বিরল হওয়া উচিত যা একাধিকবার চলবে (টেম্প টেবিলগুলি বাদ দিয়ে) কারণ টেবিলটি ইতিমধ্যে বিদ্যমান থাকলে এটি ব্যর্থ হবে।

এটি কখনও কখনও লোকেরা অনুপযুক্ত ব্যবহার করে যা তারা জানে না যে তারা কী করছে। এবং ফলস্বরূপ তারা ডিবিতে বিপর্যয় সৃষ্টি করতে পারে। আমি দৃ strongly়ভাবে অনুভব করি যে থ্রোওয়ে টেবিল (অস্থায়ী ব্যাকআপ, একটি টেম্প টেবিল যা সঞ্চিত প্রকোপের শেষে চলে যাবে ইত্যাদি) ছাড়া অন্য কোনও কিছুর জন্য নির্বাচন করা অনুচিত। স্থায়ী টেবিলগুলির আসল চিন্তাভাবনা দরকার তাদের নকশা সম্পর্কে এবং এটি নির্বাচন করুন যা কোনও কলাম এবং কোন ডেটাটাইপগুলি এমনকি মৌলিক হিসাবে কিছু চিন্তা করা এড়ানো সহজ করে তোলে।

সাধারণভাবে, আমি তৈরি সারণী এবং সন্নিবেশ বিবৃতিটি ব্যবহার পছন্দ করি - আপনার আরও নিয়ন্ত্রণ রয়েছে এবং এটি পুনরাবৃত্তিযোগ্য প্রক্রিয়াগুলির জন্য ভাল। তদ্ব্যতীত, যদি টেবিলটি স্থায়ী টেবিল হয়, তবে এটি পৃথক তৈরি টেবিল স্ক্রিপ্ট থেকে তৈরি করা উচিত (যেটি উত্স নিয়ন্ত্রণে থাকে) স্থায়ী অবজেক্ট তৈরি করা উচিত নয়, সাধারণভাবে, কোডটিতে সন্নিবেশ / মুছে ফেলা / আপডেটগুলি বা কোনওটি থেকে নির্বাচন করা উচিত নয় টেবিল। অবজেক্টের পরিবর্তনগুলি ডেটা পরিবর্তনগুলি থেকে পৃথকভাবে পরিচালনা করা উচিত কারণ কোনও নির্দিষ্ট সন্নিবেশ / আপডেট / নির্বাচন / মোছার প্রয়োজনের বাইরে অবজেক্টগুলির অন্তর্ভুক্ত রয়েছে। আপনাকে সেরা ডেটা প্রকারগুলি বিবেচনা করতে হবে, এফকে সীমাবদ্ধতা, পিকে এবং অন্যান্য সীমাবদ্ধতা সম্পর্কে চিন্তা করতে হবে, নিরীক্ষণের প্রয়োজনীয়তাগুলি বিবেচনা করতে হবে, সূচীকরণ সম্পর্কে চিন্তাভাবনা করা ইত্যাদি।


5

প্রাথমিক পার্থক্যটি হ'ল সিলেক্ট ইনটো মাইটিবেল ফলাফলের সাথে মাইটিবেল নামে একটি নতুন টেবিল তৈরি করবে, যখন ইনসার্ট ইনটো আবশ্যক যে মাইটিবেল ইতিমধ্যে বিদ্যমান রয়েছে।

আপনি কেবল সে ক্ষেত্রে সারণি ব্যবহার করবেন যেখানে টেবিলটি বিদ্যমান ছিল না এবং আপনি আপনার প্রশ্নের ফলাফলের ভিত্তিতে এটি তৈরি করতে চেয়েছিলেন। এই হিসাবে, এই দুটি বিবৃতি সত্যই তুলনাযোগ্য নয়। তারা খুব আলাদা জিনিস করে।

সাধারণভাবে, নির্বাচন বন্ধ একটি কাজের জন্য আরও প্রায়শই ব্যবহৃত হয়, যখন INSERT INTO নিয়মিত সারণিতে সারি যুক্ত করতে ব্যবহৃত হয়।

সম্পাদনা করুন:
আপনি নির্বাচন করুন এবং সিলেক্ট ইনটো যা করেন তা সম্পাদন করার জন্য ক্রেট টেবিল এবং ইনসার্ট ইনট ব্যবহার করতে পারেন, সারণি নির্বাচন করে আপনার আগে সারণির সংজ্ঞাটি জানতে হবে না। নির্বাচন INTO সম্ভবত এসকিউএল অন্তর্ভুক্ত করা হয়েছে কারণ এটি অ্যাডহক প্রতিবেদন করা বা টেবিলগুলি অনুলিপি করার মতো কাজগুলি আরও সহজ করে তোলে।


টেবিল তৈরি করুন এবং নির্বাচন নির্বাচন করুন একই জিনিস (নির্বাচন করুন যা করেন তা সম্পাদন করার জন্য সংযোজন হিসাবে সংযোজন হিসাবে প্রয়োজন হয় না) এবং নির্বাচন করুন আমার কাছে প্রস্তাবিত নয়। দেখুন ডিবিএ.স্ট্যাকেক্সেঞ্জার.কম / সেকশনস / 156105/…
রিক

4

প্রতিটি বিবৃতি পৃথক ব্যবহারের কেস আছে। এগুলি বিনিময়যোগ্য নয়।

SELECT...INTO MyTable...এমন একটি নতুন তৈরি করে MyTableযেখানে এর আগে কোনও অস্তিত্ব ছিল না।

INSERT INTO MyTable...SELECT...MyTableইতিমধ্যে উপস্থিত থাকলে ব্যবহার করা হয় ।


4
আপনি আমার প্রশ্নের কোনও উত্তর দেননি এবং আমি ইতিমধ্যে আপনার উত্তরটি জানিয়ে দিয়েছি।
জোভিনিস

5
আপনার প্রশ্নের উত্তর অন্তর্ভুক্ত করা হয়। এটি পরিষ্কার করার জন্য, কোনও "পছন্দসই" বিবৃতি নেই কারণ প্রত্যেকটির আলাদা আলাদা ব্যবহারের কেস রয়েছে। বিবৃতিগুলি বিনিময়যোগ্য নয়। আপনি যখন একটি নতুন টেবিল তৈরি করতে চান না তখন প্রথম সংস্করণটি ব্যবহার করুন that টেবিলটি ইতিমধ্যে উপস্থিত থাকলে দ্বিতীয় সংস্করণটি ব্যবহার করুন।
জো স্টেফেনেলি

2
আমি কেন এটি বনাম একটি টেম্প টেবিল তৈরি করে এবং তারপরে tingোকাতে চাই? কোন সুবিধা আছে?
জোভিনিস

4

প্রকৃতপক্ষে নির্বাচন করুন ... INTO কেবল টেবিলটি তৈরি করে না তবে এটি ইতিমধ্যে উপস্থিত থাকলে ব্যর্থ হবে, সুতরাং আপনি কেবলমাত্র একবার ব্যবহার করবেন যখন আপনি সারণী সারণিটি সারণীটি বিদ্যমান নেই তখন উপস্থিত থাকে।

আপনার EDIT সম্পর্কিত:

যখন আমি একটি টেম্প টেবিল তৈরি করি তখন আমি ব্যক্তিগতভাবে প্রধানত নির্বাচন করুন ... INTO ব্যবহার করি। আমার কাছে এটিই প্রধান ব্যবহার। তবে আমি অন্যান্য টেবিলের অনুরূপ কাঠামোযুক্ত অনেক কলাম সহ নতুন টেবিল তৈরি করার সময়ও এটি ব্যবহার করি এবং সময় সাশ্রয়ের জন্য এটি সম্পাদনা করি।


1
আমি সাধারণত টেম্প টেবিলগুলির জন্যও নির্বাচন করুন..আইএনটিও এর ব্যবহার দেখতে পাচ্ছি, তবে সেখানে একটি ক্রিয়েট টেবিল বিবৃতি দিয়ে কোনও টেম্প টেবিল তৈরি করার চেয়ে পছন্দ করার কোনও কারণ আছে কি? উদাহরণস্বরূপ - পারফরম্যান্স লাভ?
জোভিনিস

3
@ জোভেনেস আমি মনে করি মূলত সরলতার জন্য ... এছাড়াও বলুন আপনার একটি গতিশীল ক্যোয়ারী রয়েছে। আমি কাঠামোটি জানি না, আপনি হাতের আগে টেবিলটি তৈরি করতে পারবেন না, এবং ডাইনামিকভাবে একটি টেবিল তৈরি করার চেয়ে নির্বাচন করুন ... নির্বাচন করা সহজ।
এজেসি

3

নির্বাচন INTO সাধারণত টেম্প টেবিলগুলি তৈরি করতে বা অন্য একটি সারণী (ডেটা এবং / বা কাঠামো) অনুলিপি করতে ব্যবহৃত হয়।

প্রতিদিনের কোডে আপনি INSERT ব্যবহার করেন কারণ আপনার টেবিলগুলি ইতিমধ্যে পঠন, আপডেট করা, মুছে ফেলা, যোগ হওয়া ইত্যাদি থাকা উচিত exist দ্রষ্টব্য: INTO কীওয়ার্ড INSERT এর সাথে optionচ্ছিক

এটি হ'ল, অ্যাপ্লিকেশনগুলি সাধারণ ক্রিয়াকলাপের অংশ হিসাবে টেবিলগুলি সাধারণত তৈরি এবং ড্রপ করে না যদি না এটি কিছু সুযোগ সীমিত এবং নির্দিষ্ট ব্যবহারের জন্য অস্থায়ী সারণী হয়।

নির্বাচনের মাধ্যমে তৈরি করা একটি টেবিলের কোনও বাস্তব বা অস্তিত্বযুক্ত, ইতিমধ্যে বিদ্যমান টেবিলের বিপরীতে কোনও কী বা সূচি বা বাধা থাকবে না

2 সরাসরি তুলনামূলক নয় কারণ তাদের ব্যবহারে প্রায় কোনও ওভারল্যাপ নেই


2

পারফরম্যান্সের সাথে সম্পর্কিত প্রশ্নের দ্বিতীয় পয়েন্টটি আমি কেবল coverাকতে চাই, কারণ অন্য কোনও শরীর এটি thisাকেনি। বড় ডাটাবেস সহ টেবিলের ক্ষেত্রে এটি প্রবেশ করা sertোকানোর চেয়ে অনেক বেশি দ্রুত নির্বাচন করুন। যখন আমাকে খুব বড় টেবিলটি পড়তে হয় তখন আমি নির্বাচন করতে পছন্দ করি। 10 মিলিয়ন সারি সহ একটি টেবিলের জন্য সন্নিবেশ করতে কয়েক মিনিট সময় লাগতে পারে এবং নতুন টেবিলের সূচীগুলি হারাতে উত্সাহিত হওয়ার সাথে সম্পর্কিত আপনি প্রশ্নগুলি অনুসারে সূচিগুলি পুনরায় তৈরি করতে পারেন এবং তুলনায় যখন এখনও অনেক বেশি সময় বাঁচাতে পারেন দ্রন.


এটি সত্য, তবে এটি বেশিরভাগ কারণ এসকিউএল সার্ভার জানে যে গন্তব্য সারণির জন্য কোনও বিতর্ক নেই। এর জন্য পারফরম্যান্স insert into #temp with(tablock) select * from ..মোটামুটি একইভাবে হয়select * into #temp from ...
ব্রায়ান

1

সেই সময়ে আপনার জন্য নতুন টেবিল তৈরি করে সিলেক্ট করুন এবং তারপরে উত্স সারণী থেকে এটিতে রেকর্ড সন্নিবেশ করুন। নতুন তৈরি টেবিলটির উত্স টেবিলের মতোই কাঠামো রয়েছে you আপনি যদি বিদ্যমান টেবিলের জন্য নির্বাচনটি ব্যবহার করার চেষ্টা করেন তবে এটি একটি ত্রুটি তৈরি করবে, কারণ এটি একই নামের সাথে নতুন টেবিল তৈরি করার চেষ্টা করবে। সারণি সন্নিবেশ করার আগে সারণিটি সঞ্চার করার আগে আপনার ডাটাবেসে সারণী উপস্থিত থাকা প্রয়োজন।


1

নির্বাচন করুন এবং Iোকান প্রবেশের মধ্যে সহজ পার্থক্য হ'ল: -> নির্বাচন করুন তে বিদ্যমান সারণীর প্রয়োজন নেই। আপনি যদি সারণি A ডেটা অনুলিপি করতে চান তবে আপনি কেবল এ থেকে নির্বাচন করুন * INTO [টেবিলের নাম] টাইপ করুন Here

-> প্রবেশ করুন বিদ্যমান টেবিলের প্রয়োজন নেই। প্রবেশ করুন [টেবিল নাম] এ থেকে * নির্বাচন করুন * এখানে টেবিলের নামটি একটি বিদ্যমান সারণী।

বিশেষত ব্যাকআপ ডেটা ডেটা অনুলিপি করতে সাধারণত নির্বাচন বেশি হয়।

আপনি আপনার প্রয়োজন অনুযায়ী ব্যবহার করতে পারেন, এটি সম্পূর্ণ বিকাশকারী পছন্দ যা তার দৃশ্যে ব্যবহার করা উচিত।

পারফরম্যান্স অনুসারে sertোকানো INTO দ্রুত।

তথ্যসূত্র:

https://www.w3schools.com/sql/sql_insert_into_select.asp https://www.w3schools.com/sql/sql_select_into.asp


-2

বড় ডেটাসেটের জন্য সিলেক্ট করা কেবলমাত্র একক ব্যবহারকারীর পক্ষে ডাটাবেসের সাথে একটি বাল্ক অপারেশন টাস্কের সাথে একক সংযোগ ব্যবহার করা ভাল। আমি ব্যবহার করার পরামর্শ দিচ্ছি না

SELECT * INTO table

যেহেতু এটি একটি বড় লেনদেন তৈরি করে এবং অবজেক্টটি তৈরি করতে স্কিমা লক তৈরি করে, SELECT INTOঅপারেশন সম্পূর্ণ না হওয়া পর্যন্ত অন্যান্য ব্যবহারকারীকে অবজেক্ট তৈরি করতে বা অ্যাক্সেস সিস্টেমের জিনিসগুলি তৈরি করতে বাধা দেয় ।

ধারণার প্রমাণ হিসাবে প্রথম সেশনে 2 সেশন খোলার চেষ্টা করুন

select into temp table from a huge table 

এবং দ্বিতীয় বিভাগে চেষ্টা করুন

create a temp table 

এবং একটি টেম্প টেবিল অবজেক্ট তৈরি করতে লকগুলি, ব্লক করা এবং দ্বিতীয় সেশনের সময়কাল পরীক্ষা করুন। আমার সুপারিশটি তৈরি করা এবং বিবৃতি সন্নিবেশ করা সর্বদা একটি ভাল অনুশীলন এবং যদি নূন্যতম লগিংয়ের প্রয়োজন হয় তবে ট্রেস পতাকা 610 ব্যবহার করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.