টেবিলের নাম থেকে * নির্বাচন করুন 1


129

আমি কৌতুহল ছিল। এই সম্পর্কিত প্রশ্নের মধ্যে পার্থক্য কি:

  1. SELECT * FROM `tablename`

  2. SELECT * FROM `tablename` WHERE 1

  3. SELECT * FROM `tablename` WHERE 1=1


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

3
@ ড্লিটিক্যা আপনি ট্যাগগুলি সম্পাদনা করতে পারবেন ...
ব্রায়াম

2
HM। কেন সহজভাবে নয় ... WHERE TRUE? আমি সচেতন যে (সর্বাধিক এসকিউএল সহ, মাইএসকিউএল সহ) সত্য সত্যই অভিনব ম্যাক্রো 1- তবে এখনও, এটি পাঠকের কাছে কিছুটা স্পষ্ট নয় কি?

2
2 বেশিরভাগ এসকিউএল উপভাষায় অবৈধ
edc65

উত্তর:


177

মাইএসকিউএলে 2 এবং 3 একই, ক্রিয়াকলাপ 1ও একই।

where 1 স্ট্যান্ডার্ড নয় তাই অন্যরা যেমন উল্লেখ করেছেন, অন্যান্য উপভাষায় কাজ করবে না।

যাদেরকে যোগ where 1বা where 1 = 1তাই whereঅবস্থার সহজে আউট মন্তব্য কিছু "/ মধ্যে যোগ করে একটি ক্যোয়ারী থেকে যোগ করা যেতে পারে বা মুছে ফেলা / থেকে and..." উপাদান।

অর্থাত

SELECT * FROM `tablename` WHERE 1=1
--AND Column1 = 'Value1'
AND Column2 = 'Value2'

11
এবং আপনি যখন প্রোগ্রামিকভাবে কোনও স্ট্রিংয়ের পরে এটি সম্পাদন করার জন্য কোনও ক্যোয়ারী তৈরি করছেন, আপনি WHERE 1=1যদি যুক্ত করেন তবে আপনাকে স্ট্রিংয়ের সাথে যুক্ত করার চেষ্টা করা শর্তটি প্রথমটি রয়েছে কিনা তাই যত্ন নেওয়ার প্রয়োজন হবে না (সুতরাং এটির WHEREসামনে একটি প্রয়োজন হবে ) অথবা না.
ভিনসেন্ট অলিভার্ট রিরা

45
6 বছর ধরে প্রোগ্রামিং হয়েছে এবং কখনও এটি করার কথা ভাবেনি - ধন্যবাদ!
সাইমনগেটস

6
ORDER BY 1আপনি যদি দুটি বা ততোধিক নির্বাচনী বক্তব্যের ইউনিয়ন করে থাকেন তবে ড্ল্যাটিকয়ে সিনট্যাক্সের প্রয়োজন (কলামের নামের পরিবর্তে)।
মার্ক স্টুয়ার্ট

5
@ সিমোনগেটস আমি years বছর ধরে প্রোগ্রামিং করছি এবং কখনও অন্য কিছু করার কথা ভাবিনি
ওয়ার্নারসিডি

4
@ ওয়ার্ননারসিডি আমার মনে হয় যে কোনও ধরণের তালিকায় ফিল্টার ক্লজের একটি তালিকা তৈরি করা আরও বেশি বুদ্ধিমান, এবং তারপরে " AND "ডিলিমিটার হিসাবে যুক্ত হয়ে স্ট্রিং করুন।
জেভ স্পিট্জ

76

আপনি জানেন যে, তিনটিই একই ফলাফল উত্পাদন করে। (একটি বুলিয়ান প্রসঙ্গে, মাইএসকিউএল "1" পূর্ণসংখ্যাকে সত্য হিসাবে বিবেচনা করে - আসলে, "0" নয় এমন কোনও সংখ্যা সত্য হিসাবে গণ্য করা হয়)।

মাইএসকিউএল অপ্টিমাইজারটি ধারাটিতে ধ্রুবক শর্তগুলি অপসারণ করার জন্য স্পষ্টভাবে নথিভুক্ত করা হয়েছে WHERE:

  • নিয়মিত শর্ত অপসারণ। । ।

    (বি> = 5 এবং বি = 5) বা (বি = 6 এবং 5 = 5) বা (বি = 7 এবং 5 = 6) -> বি = 5 বা বি = 6

সুতরাং, তিনটিই একই কোডে সংকলিত হবে।

এগুলি সমস্ত কার্যকরীভাবে সমতুল্য এবং একই কর্মক্ষমতা বৈশিষ্ট্য থাকতে হবে।

এটি বলেছিল, প্রথম এবং তৃতীয়টি স্ট্যান্ডার্ড এসকিউএল। দ্বিতীয়টি অনেক ডেটাবেজে কোনও ধরণের বুলিয়ান এক্সপ্রেশন ত্রুটির কারণ ঘটায়। সুতরাং, আমি আপনাকে এড়াতে পরামর্শ দেব (এটি নিশ্চিত নয় যে এটি মাইএসকিউএল এর কঠোর এসকিউএল মোডে কাজ করে কি না)।

গতিশীল WHEREক্লজগুলি নির্মাণ করার সময় প্রায়শই তৃতীয়টি ব্যবহৃত হয় । এটি AND <condition>দীর্ঘায়িত হওয়া নিয়ে উদ্বিগ্ন না হয়ে অতিরিক্ত শর্ত যুক্ত করা সহজ করে তোলে AND


6
এটি অন্য উত্তরগুলি যা বলে তা বলার জন্য এটি একটি উচ্চতর উত্তর তবে গুরুত্বপূর্ণভাবে এই পার্থক্যটি নির্দেশ করে যে # 2 এএনএসআই-সম্মতিযুক্ত নয়।
আন্ডারস্কোর_ডে

16

যদি আপনি পারফরম্যান্স এবং ফলাফলগুলির পার্থক্য সম্পর্কে জিজ্ঞাসা করেন তবে কোনও কিছুই নেই, 2 এবং 3 একই WHERE TRUEএবং সেগুলি প্রথমটির মতোই হবে।

1 - SELECT * FROM table_name

থেকে সমস্ত ডেটা ফলাফল table_name(কোন ফিল্টার নেই)

2 - SELECT * FROM table_name WHERE 1

1 এর হিসাবে মূল্যায়ন করা হবে TRUE- কোনও ফিল্টার নেই - প্রতিটি রেকর্ড ফিরিয়ে দেওয়া হবে।

3 - SELECT * FROM table_name where 1=1

শেষ হিসাবে একই, 1 = 1 একটি TRUEঅভিব্যক্তি, সুতরাং - কোন ফিল্টার - প্রতিটি রেকর্ড নির্বাচন করা হবে।


14

সবগুলি একই তবে 2 এবং 3 সহজেই AND/ORশর্তাদি পরিচালনা করতে ব্যবহৃত হয় :

SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value')

8

1-এ, মাইএসকিউএল-এর কোনও WHERE শর্তাদি মূল্যায়ন করার প্রয়োজন নেই।

2 এবং 3 এ, যেখানে শর্তটি স্থির এবং সারিগুলির মানগুলির ভিত্তিতে নয়। এটি বুলিয়ান যুক্তি দিয়ে মূল্যায়ন করা হবে এবং সর্বদা সত্য হবে।

কার্যকরীভাবে, কোনও পার্থক্য নেই। কোডের স্পষ্টতার জন্য আপনার 1 টি পছন্দ করা উচিত।


7

সবগুলি একই তবে 2 এবং 3 টি AND এবং OR শর্তগুলির জন্য ডায়নামিক ক্যোয়ারী তৈরি করতে ব্যবহৃত হয়

sqlquery ="  SELECT * FROM `tablename` where 1 =1 "

ডায়নামিক ক্যোয়ারী তৈরি করতে আমরা 2 এবং 3 ফর্ম্যাট ব্যবহার করি যাতে আমরা ইতিমধ্যে জানি "কোথায়" কীওয়ার্ড যুক্ত হয়েছে এবং আমরা আরও ফিল্টার যুক্ত করতে থাকি। মত

sqlquery  = sqlquery + "and columna =a"
"AND columna =a " then

কয়েকটি লাইনের পরে যদি আমাদের নতুন ফিল্টার থাকে তবে আমরা "এবং কুলম্নব = বি" এবং আরও কিছু যুক্ত করব

আপনাকে কী কীওয়ার্ডটি প্রথম বা প্রাথমিক ক্যোয়ারিতে রাখা হয়েছে সেই জন্য বর্গ কোয়েরি পরীক্ষা করতে হবে না

SELECT * FROM `tablename` WHERE 1=1 AND (columnname1 = 'Value' OR columnname2 = 'Value')

অন্যথায় আমরা লিখতে পারি sqlquery = "SELECT * FROM tablename"

তারপর

যদি সেখানে কোন 'যেখানে' দফা হয় sqlquery তারপর

sqlquery  = sqlquery + "where columna =a"

আর

sqlquery  = sqlquery + "and columna =a"

4 শীর্ষস্থানীয় স্পেস একটি কোড ব্লক বোঝায়। দয়া করে সম্পাদনা এটি সঠিকভাবে ফরম্যাট, এবং দেখুন আপনার উত্তর সম্পাদনা সাহায্যের পুরো Markdown বিন্যাস বাইবেল জন্য।
ম্যাথিউ গাইন্ডন

4

তারা সব একই উত্তর আউটপুট। তবে 2 এবং 3 টি যেভাবে লেখা হয় তা বেশিরভাগ ক্ষেত্রে "কোথায়" বিবৃতিটির নিয়ন্ত্রণ থাকে যাতে এটি এটিকে যুক্ত করা বা পরে এটিকে সরানো সহজ করে তোলে।

আমি মনে করি প্রথম এবং তৃতীয় উপায়টি এটির লেখার যথাযথ উপায়। আপনার যদি 3 নম্বর নম্বরে পছন্দ করতে এমন বিবৃতি প্রয়োজন হয় তবে অন্যথায় 1 সংখ্যাটি যথেষ্ট ভাল।


3

এমএস এসকিউএল 1 এবং 3 তে একই, তবে বিকল্প 2 কাজ করবে না, বিকল্প 2 এমএস এসকিউএল হিসাবে একটি অবৈধ বিবৃতি, যেখানে কিছু মানের তুলনা করতে ব্যবহৃত হয়। উদাহরণ স্বরূপ:

  1. আইডি = 3 (বৈধ) যেখানে 'মাই টেবিল' থেকে * নির্বাচন করুন
  2. 'MyTable' থেকে * নির্বাচন করুন যেখানে 1 = 1 একই হিসাবে নির্বাচন করুন 'MyTable যেখানে 2 = 2 একই থেকে নির্বাচন করুন' myTable যেখানে 3 = 3 আপনি ধারণা পাবেন (বৈধ) 'মাই টেবিল' থেকে নির্বাচন করুন *

2
  1. টেবিলের নাম থেকে * নির্বাচন করুন : এটি কোনও বিবৃতি চালিয়ে টেবিলের সমস্ত রেকর্ড আপনাকে দেবে।
  2. টেবিলের নাম থেকে * নির্বাচন করুন যেখানে 1 : এই যেখানে শর্তটি সর্বদা সত্য, এটি বেশিরভাগ সিস্টেমে প্রবেশের জন্য হ্যাকার দ্বারা ব্যবহৃত হয়। আপনি যদি 2 ও 3 এর চেয়ে বেশি স্কয়ার ইনজেকশন সম্পর্কে শুনে থাকেন তবে এমন পরিস্থিতিগুলি যা হ্যাকার দ্বারা সারণীর সমস্ত রেকর্ড পেতে বাধ্য হয়।
  3. টেবিলের নাম থেকে * নির্বাচন করুন যেখানে 1 = 1 : এটি আপনাকে সারণীর সমস্ত রেকর্ড দেবে তবে এটি যেখানে বিবৃতিটি তুলনা করবে এবং তারপরে এগিয়ে যাবে, এটি মূলত এর পরে আরও বিবৃতি যুক্ত করতে বা অপসারণ করতে যুক্ত করা হবে।

1

ফলাফল - তিনটি প্রশ্নের জন্য টেবিলের পরিবর্তে নির্দিষ্ট টেবিলের সমস্ত রেকর্ড দেয়

SELECT * FROM tablename WHERE 1- এই উত্তরটি দেখুন

SELECT * FROM tablename WHERE 1=1- এই উত্তরটি দেখুন

ক্লজ অপ্টিমাইজেশানগুলি সম্পর্কে আরও তথ্যের জন্য এগুলি পরীক্ষা করুন: এমওয়াইএসকিউএল , এসকিউএলাইট , এসকিউএল

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