انتقال از نمودار ER به مدل جدولی

کار با پایگاه های داده مستقیماً با تغییر جداول و داده های موجود در آنها مرتبط است. اما قبل از شروع، جداول باید ایجاد شوند. برای خودکار کردن این فرآیند، یک ویژه وجود دارد - "ایجاد جدول".

اولین چیز!

قبل از درک فرآیند ایجاد جداول با استفاده از دستور MS SQL "CREATE TABLE"، ارزش آن را دارد که قبل از استفاده از تابع، در مورد آنچه باید بدانید صحبت کنید.

اول از همه، شما باید یک نام برای جدول بیاورید - باید در مقایسه با سایرین در پایگاه داده منحصر به فرد باشد و چندین قانون را دنبال کند. نام باید با یک حرف (a-z) شروع شود و به دنبال آن حروف، اعداد یا زیرخط‌ها قرار گیرد و عبارت حاصل نباید یک کلمه رزرو شده باشد. طول نام جدول نباید بیشتر از 18 کاراکتر باشد.

پس از تصمیم گیری در مورد نام، باید یک ساختار ایجاد کنید: نام هایی برای ستون ها بیابید، در مورد نوع داده استفاده شده در آنها فکر کنید و کدام قسمت ها را باید پر کنید. در اینجا ارزش آن را دارد که فوراً فیلدهای کلیدهای خارجی و اصلی و همچنین محدودیت های احتمالی در مقادیر داده را تعریف کنیم.

تفاوت های ظریف باقی مانده از جدول را می توان به راحتی اصلاح کرد، بنابراین در مرحله ایجاد جدول ممکن است به طور کامل به آنها فکر نشود.

نحو

با توسعه ساختار جدول، می توانید به ایجاد آن ادامه دهید. این کار را می توان به سادگی با استفاده از تابع SQL "CREATE TABLE" انجام داد. در آن، کاربر باید نام جدول اختراع شده قبلی و لیست ستون ها را مشخص کند و نوع و نام هر یک از آنها را مشخص کند. سینتکس تابع به صورت زیر است:

CREATE TABLE table_name
((نوع داده نام_ستون…| جدول_محدودیت)
[،(نوع داده_نام_ستون…| محدودیت_جدول)]…)

آرگومان های مورد استفاده در ساخت تابع به معنای زیر است:

  • جدول_نام - نام جدول
  • ستون_نام - نام ستون
  • datatype - نوع داده مورد استفاده در این زمینه
  • DEFAULT عبارت پیش فرض استفاده شده در ستون است.

همچنین می توان از دو آرگومان تابع دیگر استفاده کرد:

  • column_constraint - پارامترهای ستون
  • table_constraint - پارامترهای جدول

در آنها کاربر می تواند محدودیت های مورد نیاز برای کار یا شرایط پرکردن جدول را مشخص کند.

ویژگی های ایجاد جداول

هنگام نوشتن یک پرس و جو با یک تابع، گاهی اوقات لازم است قوانینی برای پر کردن فیلدها تنظیم کنید. برای انجام این کار، باید ویژگی های تابع خاصی را اضافه کنید که مجموعه خاصی از شرایط را تعریف می کند.

برای تعیین اینکه آیا یک سلول می تواند حاوی مقدار خالی باشد، پس از تعیین نام و نوع ستون، باید یکی از کلمات کلیدی را وارد کنید: NULL (ممکن است مقادیر خالی وجود داشته باشد) یا NOT NULL (فیلد باید پر شود).

هنگام ایجاد جدول، در بیشتر موارد باید هر رکورد را یکسان کنید تا از داشتن دو رکورد یکسان جلوگیری کنید. برای انجام این کار، اغلب از شماره گذاری خطوط استفاده می شود. و برای اینکه نیازی به دانستن کاربر نباشد آخرین شمارهموجود در جدول، در تابع "CREATE TABLE" کافی است ستون کلید اصلی را با نوشتن مشخص کنید. کلمه کلیدی"کلید اصلی" بعد از فیلد مربوطه. بیشتر اوقات، جداول توسط کلید اصلی به یکدیگر متصل می شوند.

برای اطمینان از الحاق با کلید اصلی، از ویژگی کلید خارجی "FREIGN KEY" استفاده می شود. با تعیین این ویژگی برای یک ستون، می توانید اطمینان حاصل کنید که این فیلد حاوی مقداری است که با یکی از موارد موجود در ستون کلید اصلی همان جدول یا جدول دیگر مطابقت دارد. به این ترتیب می توان از سازگاری داده ها اطمینان حاصل کرد.

برای ارائه چک در برابر یک مجموعه یا تعریف مشخص، باید از ویژگی CHECK استفاده کنید. آخرین در لیست آرگومان های تابع نوشته شده است و برخی پارامترهای شخصی دارد بیان منطقی. با کمک آن، می توانید لیست مقادیر ممکن را محدود کنید، به عنوان مثال، فقط از حروف "M" و "F" در قسمت جدول "جنسیت" استفاده کنید.

علاوه بر موارد ارائه شده، این تابع دارای بسیاری از ویژگی های خاص است، اما آنها در عمل بسیار کمتر مورد استفاده قرار می گیرند.

مثال ها

برای درک کامل اصل عملکرد تابع، ارزش دارد که در عمل نحوه عملکرد CREATE TABLE (SQL) را در نظر بگیرید. مثال زیر جدول نشان داده شده در شکل را ایجاد می کند:

ایجاد جدول سفارشی
(ID CHAR(10) NOT NULL کلید اصلی،
Custom_name CHAR(20)،
آدرس_سفارشی CHAR(30)،
Custom_city CHAR(20)،
Custom_Country CHAR(20)،
ArcDate CHAR(20))

همانطور که می بینید، پارامتر غیبت احتمالیمقادیر موجود در یک سلول (NULL) را می توان به عنوان پیش فرض حذف کرد.

پس از ایجاد جداول خالی، مرحله منطقی بعدی پر کردن آنها با داده ها و به روز رسانی آن داده ها است. برای این کار چند عبارت در Transact-SQL وجود دارد: درج - به روز رسانی.

با این حال، اغلب در مراحل پایانی طراحی نیاز به تغییر خود طرح جدول وجود دارد. به عنوان مثال، اگر کلید اصلی یا نوع داده یک ستون تغییر کرده باشد. برای حذف نشدن جداول قدیمی و ایجاد نشدن دوباره آنها به کمک CREATE TABLE با پارامترهای صحیح، از دستور ALTER TABLE استفاده می شود. کاربرد این سه ساختار در زیر مورد بحث قرار گرفته است.

پر کردن جداول

شما می توانید با استفاده از دستور CREATE TABLE یک جدول را با داده ها پر کنید، اما روش کارآمدتر جداسازی ایجاد جدول و پر کردن آن است، به خصوص برای مبتدیان در SQL، زیرا:

  • از نظر بصری واضح تر؛
  • اگر جداول به صورت مرحله ای پر شوند راحت تر است.

برای دریافت نمای جدول زیر:

شناسه. مستاجر

تاریخ تولد

شماره آپارتمان

آدرس ایمیل

الکسین. V.V.

گوربونوف D.D.

[ایمیل محافظت شده]

سیمونووا K.R.

دورمیتووا K.S.

[ایمیل محافظت شده]

شما باید آن را با استفاده از آن ایجاد کنید ایجاد جدولو با استفاده از عبارت INSERT آن را پر کنید. دستورالعمل های بعدییک ردیف به جدول هم خانه ای که قبلا ایجاد کرده بودیم اضافه می کند:

حذف نسخه پیشینمیز DROP TABLE هم خانه; - یک جدول ایجاد کنید. CREATE TABLE housemates(housemeateID int NOT NULL CONSTRAINTprimary_id PRIMARY KEY، housemateName nvarchar(30) NOT NULL، تاریخ بیت NOT NULL، شماره آپارتمان int NOT NULL، ایمیل nvarchar(30)); - داده‌ها را در جدول قرار دهید. استفاده از GO INSERT INTO ( , , , ,) VALUES (100"Aleksin V.V.""19721122",11," [ایمیل محافظت شده]")، (101"Gorbunov D.D.","19220525"،25," [ایمیل محافظت شده]")، (102," Simonova K.R. "," 19560211 ", 13," [ایمیل محافظت شده]")، (103"Dormitotova K.S.","19770815"،9," [ایمیل محافظت شده]")

در مثال بالا، باید بین دو بلوک ساختار INSERT تمایز قائل شویم:

به- اشاره به جدولی که داده ها به آن اضافه شده است

ارزش های- ورودی خط اولیه

در پارامترهای (در پرانتز) بلوک بهستون ها به ترتیبی که ظاهر می شوند فهرست می شوند. رکورد بدون پارامتر در صورتی قابل قبول است که ترتیب ستون ها هنگام ایجاد جدول و هنگام پر کردن آن یکسان باشد. کد زیر مشابه کد قبلی است:

درج در مقادیر (100"Aleksin. V.V.","19721122",11," [ایمیل محافظت شده]")، (101"Gorbunov D.D.","19220525"،25," [ایمیل محافظت شده]")، (102," Simonova K.R. "," 19560211 ", 13," [ایمیل محافظت شده]")، (103"Dormitotova K.S.","19770815"،9," [ایمیل محافظت شده]")

اگر نیاز به تغییر ترتیب پر کردن دارید، باید به صراحت نشان داده شود:

درج در مقادیر (،،،،) ("Alexin. V.V."،101"19721122"،" [ایمیل محافظت شده]"،11)، ("Gorbunov D.D.",102,"19220525"،" [ایمیل محافظت شده]"،25)، ("Simonova K.R",103,"19560211"،" [ایمیل محافظت شده]"،13) ("Dormitotova K.S.",104,"19770815"،" [ایمیل محافظت شده]",9)

در بلوک VALUES، مقدار دهی اولیه سطر به ردیف به ترتیب ستون های بلوک INTO انجام می شود. روکش ردیف لیستی از مقادیر سلول در پرانتز است. مقادیر با کاما از هم جدا می شوند و خطوط از یکدیگر جدا می شوند.

می‌توانید ساختار INSERT را فقط برای ستون‌هایی اعمال کنید که هنوز حاوی داده نیستند. در غیر این صورت خطای اجرای درخواست رخ خواهد داد.

به روز رسانی یک جدول

در صورتی که نیاز به تغییر داده های وارد شده به جدول باشد، نیاز به به روز رسانی جداول وجود دارد. با استفاده از دستورالعمل ها انجام شد به روز رسانی. اگر INSERT فقط با جداول خالی کار می کند، UPDATE فقط با جداول پر کار می کند. اگر درخواست به سلول های خالی خطاب شود، خطایی رخ می دهد.

کد زیر یک کد جدید اختصاص می دهد صندوق پستیبه یکی از ساکنان خانه ای به شماره شناسایی 103.

به روز رسانی هم خانه ها تنظیم ایمیل = " [ایمیل محافظت شده] WHERE housemeateID = 103

مسدود کردن تنظیم- این یک بلوک از تغییرات است. اگر شما نیاز به به روز رسانی مقدار چندین سلول دارید، آنها با کاما از هم جدا شده اند.

به روز رسانی هم خانه ها تنظیم ایمیل = " [ایمیل محافظت شده]", housemateName = "Rurik S.S." WHERE housemeateID = 103

تعویض میز

در مراحل بعدی طراحی یا پس از توسعه پایه، اغلب نیاز به موارد زیر ایجاد می شود:

  • اضافه کردن یا حذف یک ستون.
  • تغییر نوع ستون؛
  • ستون یا گروهی از ستون ها را به عنوان کلید اصلی یا خارجی تعیین کنید یا این محدودیت ها را حذف کنید.

برای همه این عملیات یک دستورالعمل لغو وجود دارد. میز ATER.

برای افزودن یک ستون، عبارت ALTER TABLE همراه با عبارت ADD استفاده می شود. بیایید یک ستون جدید به جدول هم خانه از قسمت قبل اضافه کنیم:

ALTER TABLE هم خانه ها اضافه کردن شماره تلفن nvarchar(12) NULL;

شما باید یک جمله را به آن اعمال کنید ستون جایگزینداخل ALTER TABLE:

ALTER TABLE هم خانه ALTER COLUMN شماره تلفن char(25) NOT NULL;

یک ستون را با استفاده از رها کردن ستونداخل ALTER TABLE:

ALTER TABLE هم خانه ها DROP COLUMN PhoneNumber;

کلید اصلی یا خارجی به ترتیب با استفاده از ساختارهای ALTER TABLE ADD CONSTRAINT/DROP CONSTRAINT حذف و اضافه می شود:

یک محدودیت کلید اصلی را از ستون housemeateID حذف کنید ALTER TABLE housemates DROP CONSTRAINT primar_id; - ستون housemeateID را به عنوان کلید اصلی اختصاص دهید.

اگر سعی کنید یک کلید اصلی را به جدولی که قبلاً در آنجا وجود دارد اختصاص دهید، مترجم پرس و جو خطایی را برمی‌گرداند. بنابراین، اگر جدول از قبل دارای یک کلید اصلی است، باید آن را حذف کرده و گروهی از ستون ها را به عنوان کلید اصلی تعیین کنید. به عنوان مثال، مانند این:

ALTER TABLE هم خانه ها DROP CONSTRAINT PK_ID; ALTER TABLE هم خانه ها ADD CONSTRAINT PK_ID,PK_AN PRIMARY KEY (شناسه گوشت خانه، شماره آپارتمان).

SQL - درس 3. ایجاد جداول و پر کردن آنها با اطلاعات

بنابراین، ما با انواع داده ها آشنا شدیم، اکنون جداول انجمن خود را بهبود می دهیم. بیایید ابتدا به آنها نگاه کنیم. و بیایید با جدول کاربران شروع کنیم. ما 4 ستون در آن داریم:

Id_user مقادیر صحیح هستند، به این معنی که نوع آن int خواهد بود، اجازه دهید آن را به 10 کاراکتر محدود کنیم - int (10).
name یک مقدار رشته varchar است، اجازه دهید آن را به 20 کاراکتر محدود کنیم - varchar(20).
ایمیل یک مقدار رشته varchar است، اجازه دهید آن را به 50 کاراکتر محدود کنیم - varchar(50).
رمز عبور یک مقدار رشته varchar است، ما آن را به 15 کاراکتر محدود می کنیم - varchar(15).

همه مقادیر فیلد مورد نیاز است، به این معنی که باید نوع NOT NULL را اضافه کنید.

Id_user int (10) NOT NULL
نام varchar(20) NOT NULL
ایمیل varchar(50) NOT NULL

ستون اول، همانطور که از مدل مفهومی پایگاه داده ما به یاد دارید، کلید اصلی است (یعنی مقادیر آن منحصر به فرد هستند و رکورد را به طور منحصر به فرد شناسایی می کنند). نظارت بر منحصر به فرد بودن به تنهایی امکان پذیر است، اما منطقی نیست. یک ویژگی خاص در SQL برای این وجود دارد - افزایش خودکار، که هنگام دسترسی به جدول برای افزودن داده، حداکثر مقدار این ستون را محاسبه کرده، مقدار حاصل را 1 افزایش داده و وارد ستون می کند. بنابراین، یک عدد منحصر به فرد به طور خودکار در این ستون تولید می شود و بنابراین نوع NOT NULL اضافی است. بنابراین، بیایید یک ویژگی به ستون با کلید اصلی اختصاص دهیم:


نام varchar(20) NOT NULL
ایمیل varchar(50) NOT NULL
رمز عبور varchar(15) NOT NULL

حال باید مشخص کنیم که فیلد id_user کلید اصلی است. برای انجام این کار، SQL از کلمه کلیدی استفاده می کند کلید اولیه ()، نام فیلد کلید در داخل پرانتز مشخص شده است. بیایید تغییراتی ایجاد کنیم:

ID_user int (10) AUTO_INCREMENT
نام varchar(20) NOT NULL
ایمیل varchar(50) NOT NULL
رمز عبور varchar(15) NOT NULL
کلید اولیه (id_user)

بنابراین، جدول آماده است و نسخه نهایی آن به شکل زیر است:

ایجاد کاربران جدول (
id_user int (10) AUTO_INCREMENT،
نام varchar(20) NOT NULL،
ایمیل varchar(50) NOT NULL،
رمز عبور varchar(15) NOT NULL،
کلید اولیه (id_user)
);

حالا بیایید به جدول دوم - موضوعات نگاه کنیم. با استدلال مشابه، فیلدهای زیر را داریم:



id_author int (10) NOT NULL
کلید اولیه (id_topic)

اما در مدل پایگاه داده ما، فیلد id_author یک کلید خارجی است، یعنی. فقط می تواند مقادیری را داشته باشد که در قسمت id_user جدول کاربران هستند. برای نشان دادن این موضوع در SQL یک کلمه کلیدی وجود دارد کلید خارجی()، که دارای نحو زیر است:

FOREIGN KEY (column_name_which_is_foreign_key) مراجع نام والدین_جدول (parent_column_name);

بیایید نشان دهیم که id_author یک کلید خارجی است:

Id_topic int (10) AUTO_INCREMENT
topic_name varchar(100) NOT NULL
id_author int (10) NOT NULL
کلید اولیه (id_topic)
کلید خارجی (id_author) مراجع کاربران (id_user)

جدول آماده است و نسخه نهایی آن به شکل زیر است:

ایجاد موضوعات جدول (
id_topic int (10) AUTO_INCREMENT،
topic_name varchar(100) NOT NULL،

کلید اولیه (id_topic)،
کلید خارجی (id_author) مراجع کاربران (id_user)
);

آخرین جدول باقی مانده پست ها است. همه چیز در اینجا مشابه است، فقط دو کلید خارجی:

ایجاد پست های جدول (
id_post int (10) AUTO_INCREMENT،
متن پیام NOT NULL،
id_author int (10) NOT NULL،
id_topic int (10) NOT NULL،
کلید اولیه (id_post)،
کلید خارجی (id_author) مراجع کاربران (id_user)،
موضوعات کلید خارجی (id_topic) مراجع (id_topic)
);

لطفاً توجه داشته باشید که یک جدول می تواند چندین کلید خارجی داشته باشد، اما در MySQL فقط یک کلید اصلی می تواند وجود داشته باشد. در اولین درس ما پایگاه داده انجمن خود را حذف کردیم، زمان آن است که دوباره آن را ایجاد کنیم.

راه اندازی کنیم سرور MySQL(شروع - برنامه ها - MySQL - MySQL Server 5.1 - MySQL Command Line Client)، رمز عبور را وارد کنید، یک انجمن پایگاه داده ایجاد کنید (ایجاد انجمن پایگاه داده؛)، آن را برای استفاده انتخاب کنید (استفاده از انجمن؛) و سه جدول خود را ایجاد کنید:

لطفاً توجه داشته باشید که با استفاده از کلید Enter می توان یک دستور را در چندین خط نوشت (MySQL به طور خودکار نماد را جایگزین می کند. خط جدید->)، و تنها پس از جداکننده (نقطه ویرگول) با فشردن کلید Enter کوئری اجرا می شود.

به یاد داشته باشید، اگر کار اشتباهی انجام داده اید، همیشه می توانید یک جدول یا کل پایگاه داده را با استفاده از دستور DROP رها کنید. یه چیزی رو درست کن خط فرمانبسیار ناخوشایند است، بنابراین گاهی اوقات (به ویژه در مرحله اولیه) نوشتن پرس و جو در برخی از ویرایشگرها، به عنوان مثال، Notepad، و سپس کپی و چسباندن آنها در یک پنجره سیاه آسان تر است.

بنابراین، جداول ایجاد شده است، برای اطمینان از این، بیایید تیم را به یاد بیاوریم نمایش جداول:

و در نهایت، بیایید به ساختار جدول آخرین پست های خود نگاه کنیم:

حال معانی تمام فیلدهای ساختار به جز فیلد DEFAULT مشخص می شود. این فیلد مقدار پیش فرض است. ما می توانیم یک مقدار پیش فرض برای برخی از ستون ها (یا همه) تعیین کنیم. به عنوان مثال، اگر فیلدی به نام "Married" داشته باشیم و ENUM ("بله"، "خیر") را تایپ کنیم، پس منطقی است که یکی از مقادیر را به عنوان مقدار پیش فرض قرار دهیم. نحو خواهد بود:

شماره متاهل ("بله"، "نه") NOT NULL پیش فرض ("بله")

آن ها این کلمه کلیدی با فاصله بعد از نوع داده جدا شده نوشته می شود و مقدار پیش فرض در پرانتز نشان داده می شود.

اما بیایید به میزهای خود برگردیم. اکنون باید داده ها را در جداول خود وارد کنیم. در وب سایت ها معمولاً اطلاعات را در برخی از فرم های html وارد می کنید، سپس یک اسکریپت به زبانی (php، java...) این داده ها را از فرم استخراج می کند و وارد پایگاه داده می کند. او این کار را از طریق پرس و جوی SQL انجام می دهد تا داده ها را به پایگاه داده وارد کند. ما هنوز نمی دانیم که چگونه اسکریپت ها را در PHP بنویسیم، اما اکنون یاد می گیریم که چگونه پرس و جوهای SQL را برای وارد کردن داده ارسال کنیم.

برای این منظور از اپراتور استفاده می شود درج کنید. دو نوع نحو وجود دارد که می توانید استفاده کنید. گزینه اول برای وارد کردن داده ها در تمام فیلدهای جدول استفاده می شود:

INSERT INTO table_name VALUES ("first_column_value"، "second_column_value"، ...، "Last_column_value");


بیایید سعی کنیم مقادیر زیر را به جدول کاربران خود اضافه کنیم:

INSERT INTO users VALUES ("1"، "sergey"، " [ایمیل محافظت شده]", "1111");

گزینه دوم برای وارد کردن داده ها در برخی از فیلدهای جدول استفاده می شود:

INSERT INTO table_name ("column_name"، "column_name") VALUES ("first_column_value"، "second_column_value");


در جدول کاربران ما، همه فیلدها ضروری هستند، اما اولین فیلد ما دارای کلمه کلیدی AUTO_INCREMENT است (یعنی به طور خودکار پر می شود)، بنابراین می توانیم از این ستون بگذریم:

INSERT INTO کاربران (نام، ایمیل، رمز عبور) VALUES ("valera"، " [ایمیل محافظت شده]", "2222");

اگر فیلدهایی با نوع NULL داشتیم، یعنی. اختیاری است، ما نیز می توانیم آنها را نادیده بگیریم. اما اگر سعی کنید فیلدی را با مقدار NOT NULL خالی بگذارید، سرور یک پیغام خطا نمایش می دهد و درخواست را تکمیل نمی کند. علاوه بر این، هنگام وارد کردن داده ها، سرور روابط بین جداول را بررسی می کند. بنابراین، نمی‌توانید به فیلدی که یک کلید خارجی است که در جدول مربوطه وجود ندارد، مقدار اضافه کنید. با وارد کردن داده ها در دو جدول باقیمانده، این موضوع را تأیید خواهید کرد.

اما ابتدا، اجازه دهید اطلاعاتی در مورد چند کاربر دیگر اضافه کنیم. برای اضافه کردن چندین خط به طور همزمان، فقط باید پرانتزها را با مقادیر جدا شده با کاما فهرست کنید:

حالا بیایید داده ها را در جدول دوم - موضوعات وارد کنیم. همه چیز یکسان است، اما باید به یاد داشته باشیم که مقادیر در قسمت id_author باید در جدول کاربران وجود داشته باشد:

حالا بیایید سعی کنیم موضوع دیگری را اضافه کنیم، اما با id_author که در جدول کاربران نیست (از آنجایی که فقط 5 کاربر به جدول کاربران اضافه کردیم، پس id=6 وجود ندارد):

سرور ارور میده و میگه نمیتونه وارد همچین خطی بشه چون فیلدی که یک کلید خارجی است حاوی مقداری است که در جدول کاربران مرتبط وجود ندارد.

حالا بیایید چند ردیف به جدول پست ها اضافه کنیم، به یاد داشته باشید که ما 2 کلید خارجی در آن داریم، یعنی. id_author و id_topic که وارد می کنیم باید در جداول مرتبط با آنها وجود داشته باشد:

بنابراین ما 3 جدول داریم که داده در آنها وجود دارد. این سوال مطرح می شود - چگونه می توان دید چه داده هایی در جداول ذخیره می شود. این کاری است که در درس بعدی انجام خواهیم داد.

اگر نیاز به ذخیره مجموعه نتایج داده‌هایی که توسط یک پرس و جوی SQL برگردانده شده بودید، این مقاله برای شما جالب خواهد بود، زیرا در آن به بررسی خواهیم پرداخت عبارت SELECTبه، به کمک آن مایکروسافت SQLسرور، می توانید یک جدول جدید ایجاد کنید و آن را با نتیجه پر کنید پرس و جوی SQL.

البته با توضیح خود عبارت SELECT INTO شروع می کنیم و سپس به سراغ مثال هایی می رویم.

عبارت SELECT INTO در Transact-SQL

INTO را انتخاب کنید– دستورالعملی در زبان T-SQL که یک جدول جدید ایجاد می کند و سطرهای حاصل از پرس و جوی SQL را در آن قرار می دهد. ساختار جدول، یعنی تعداد و نام ستون‌ها، و همچنین انواع داده‌ها و ویژگی‌های پوچ‌پذیری، بر اساس ستون‌ها ( اصطلاحات) در لیست انتخاب منبع در عبارت SELECT مشخص شده است. به طور معمول، دستور SELECT INTO برای ترکیب داده ها از چندین جدول و نما، از جمله برخی از داده های محاسباتی، در یک جدول استفاده می شود.

برای استفاده از دستور SELECT INTO، باید مجوز CREATE TABLE را در پایگاه داده ای که جدول جدید در آن ایجاد می شود، داشته باشید.

دستور SELECT INTO دو آرگومان دارد:

  • new_table - نام میز جدید;
  • گروه فایل – گروه فایل. اگر هیچ آرگومانی مشخص نشده باشد، از گروه فایل پیش فرض استفاده می شود. این فرصتاز Microsoft SQL Server 2017 در دسترس است.

نکات مهم در مورد عبارت SELECT INTO

  • این دستورالعمل می تواند برای ایجاد جدول در سرور فعلی استفاده شود؛ ایجاد جدول در سرور راه دور پشتیبانی نمی شود.
  • شما می توانید یک جدول جدید را با داده هایی از پایگاه داده فعلی و سرور فعلی یا از پایگاه داده دیگری یا از یک سرور راه دور پر کنید. برای مثال نشان دهید نام و نام خانوادگیپایگاه داده در فرم database_schema.table_nameیا در مورد سرور راه دور، linked_server.database.schema.table_name;
  • یک ستون هویت در یک جدول جدید ویژگی IDENTITY را به ارث نمی برد اگر: عبارت حاوی یک join (JOIN، UNION)، یک بند GROUP BY، تابع کل، همچنین اگر ستون هویت بخشی از یک عبارت باشد، از یک منبع داده از راه دور به دست آمده باشد یا بیش از یک بار در لیست انتخاب ظاهر شود. در همه موارد مشابهستون هویت ویژگی IDENTITY را به ارث نمی برد و به صورت NOT NULL ایجاد می شود.
  • شما نمی توانید از دستور SELECT INTO برای ایجاد جدول پارتیشن بندی شده استفاده کنید، حتی اگر جدول منبع پارتیشن بندی شده باشد.
  • شما می توانید یک جدول معمولی و همچنین یک جدول موقت را به عنوان یک جدول جدید مشخص کنید، اما نمی توانید یک متغیر جدول یا یک پارامتر با ارزش جدول را تعیین کنید.
  • یک ستون محاسبه شده، اگر در لیست انتخاب عبارت SELECT INTO وجود داشته باشد، در جدول جدید عادی می شود، یعنی. محاسبه نشده؛
  • SELECT INTO را نمی توان با عبارت COMPUTE استفاده کرد.
  • با استفاده از SELECT INTO، شاخص‌ها، محدودیت‌ها و محرک‌ها به جدول جدید منتقل نمی‌شوند، آنها باید بعد از اجرای دستور، در صورت نیاز ایجاد شوند.
  • بند ORDER BY تضمین نمی کند که ردیف های جدول جدید به ترتیب مشخص شده درج شوند.
  • ویژگی FILESTREAM به جدول جدید منتقل نمی شود. اشیاء BLOB FILESTREAM در جدول جدید، اشیاء BLOB از نوع varbinary(max) خواهند بود و دارای محدودیت 2 گیگابایت هستند.
  • مقدار داده های نوشته شده در گزارش تراکنش در طول عملیات SELECT INTO به مدل بازیابی بستگی دارد. در پایگاه های داده ای که از مدل بازیابی bulk-logg استفاده می کنند و مدل ساده، عملیات انبوه، که شامل SELECT INTO می شود، حداقل ثبت می شود. به همین دلیل، دستور SELECT INTO می تواند کارآمدتر از دستورات جداگانه برای ایجاد جدول و دستورات INSERT برای پر کردن آن با داده باشد.

نمونه هایی از استفاده از SELECT INTO

من تمام نمونه ها را در Microsoft SQL Server 2016 Express DBMS اجرا خواهم کرد.

اطلاعات اولیه

ابتدا بیایید دو جدول بسازیم و آنها را با داده پر کنیم؛ این جداول را در مثال ها ترکیب می کنیم.

CREATE TABLE TestTable( IDENTITY(1,1) NOT NULL, NOT NULL, (100) NOT NULL, NULL) ON GO CREATE TABLE TestTable2( IDENTITY(1,1) NOT NULL, (100) NOT NULL) ON GO INSTableINTO VALUES (1"Keyboard"، 100)، (1، "Mouse"، 50)، (2، "Phone"، 300) GO INSERT INTO TestTable2 VALUES (" اجزای کامپیوتر"), ("دستگاه های موبایل") GO SELECT * FROM TestTable SELECT * FROM TestTable2

مثال 1 - ایجاد جدول با استفاده از SELECT INTO با اتصال داده

بیایید تصور کنیم که باید دو جدول را ادغام کنیم و نتیجه به دست آمده را در یک جدول جدید ذخیره کنیم ( به عنوان مثال، ما باید محصولاتی را با نام دسته ای که به آن تعلق دارند دریافت کنیم).

عملیات SELECT INTO SELECT T1.ProductId, T2.CategoryName, T1.ProductName, T1.Price INTO TestTable3 FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId TestableTesting3 از --S


در نتیجه جدولی به نام TestTable3 ایجاد کردیم و آن را با داده های ترکیبی پر کردیم.

مثال 2 - ایجاد یک جدول موقت با استفاده از SELECT INTO با گروه بندی داده ها

حال فرض کنید به داده های گروه بندی شده نیاز داریم، به عنوان مثال، اطلاعاتی در مورد تعداد محصولات در یک دسته خاص، و باید این داده ها را در یک جدول موقت ذخیره کنیم، به عنوان مثال، ما از این اطلاعات فقط در دستورات SQL استفاده خواهیم کرد، بنابراین نیازی به ایجاد یک جدول کامل نیست.

یک جدول موقت (#TestTable) با استفاده از عبارت SELECT INTO SELECT T2.CategoryName، COUNT(T1.ProductId) AS CntProduct INTO #TestTable FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryCategoryId-T1. - بازیابی داده ها از یک جدول موقت SELECT * FROM #TestTable


همانطور که می بینید، ما توانستیم یک جدول موقت #TestTable ایجاد کنیم و آن را با داده های گروه بندی شده پر کنیم.

بنابراین ما به عبارت SELECT INTO در زبان T-SQL نگاه کردیم؛ در کتابم "راه برنامه نویس T-SQL" من به طور مفصل در مورد تمام ساختارها صحبت می کنم. زبان T-SQL (خواندن آن را توصیه می کنم) و این فعلا تمام است!

قبل از اینکه بتوانید یک جدول SQL ایجاد کنید، باید مدل پایگاه داده را تعریف کنید. یک نمودار ER را طراحی کنید که در آن موجودیت ها، ویژگی ها و روابط را تعریف کنید.

مفاهیم اساسی

موجودیت ها اشیا یا حقایقی هستند که اطلاعات باید در مورد آنها ذخیره شود. به عنوان مثال، کارمند یک شرکت یا پروژه های اجرا شده توسط شرکت. ویژگی ها اجزایی هستند که یک موجودیت را توصیف یا واجد شرایط می کنند. به عنوان مثال، ویژگی موجودیت "کارمند" است حق الزحمهو ویژگی واحد «پروژه» هزینه برآورد شده است. اتصالات ارتباط بین دو عنصر هستند. می تواند دو طرفه باشد. یک ارتباط بازگشتی نیز وجود دارد، یعنی ارتباط یک موجود با خودش.

همچنین تعیین کلیدها و شرایطی که در آن یکپارچگی پایگاه داده حفظ خواهد شد، ضروری است. چه مفهومی داره؟ به عبارت دیگر، محدودیت‌هایی که به حفظ پایگاه‌های اطلاعاتی در شکل صحیح و سازگار کمک می‌کنند.

انتقال از نمودار ER به مدل جدولی

قوانین انتقال به مدل جدولی:

  1. همه موجودیت ها را به جداول تبدیل کنید.
  2. همه صفات را به ستون تبدیل کنید، یعنی هر ویژگی موجودیت باید در نام ستون جدول ظاهر شود.
  3. شناسه های منحصر به فرد را به کلیدهای اصلی تبدیل کنید.
  4. تمام روابط را به کلیدهای خارجی تبدیل کنید.
  5. جدول SQL را ایجاد کنید.

ایجاد پایگاه داده

ابتدا باید سرور MySQL را راه اندازی کنید. برای راه اندازی آن، به منوی Start، سپس Programs، سپس MySQL و MySQL Server بروید، MySQL-Command-Line-Client را انتخاب کنید.

برای ایجاد پایگاه داده از دستور Create Database استفاده کنید. این تابعدارای فرمت زیر است:

ایجاد پایگاه داده نام پایگاه داده.

محدودیت های نام پایگاه داده به شرح زیر است:

  • طول تا 64 کاراکتر است و می تواند شامل حروف، اعداد، نمادهای "" و "" باشد.
  • نام می تواند با یک عدد شروع شود، اما باید دارای حروف باشد.

شما باید قانون کلی را به خاطر بسپارید: هر درخواست یا دستوری با یک جداکننده خاتمه می یابد. در SQL، استفاده از نقطه ویرگول به عنوان جداکننده رایج است.

سرور باید مشخص کند که با کدام پایگاه داده باید کار کند. یک بیانیه USE برای این وجود دارد. این عملگر یک نحو ساده دارد: USE n نام پایگاه داده.

ایجاد یک جدول SQL

بنابراین، مدل طراحی می شود، پایگاه داده ایجاد می شود و به سرور دقیقاً نحوه کار با آن گفته می شود. اکنون می توانید شروع به ایجاد جداول SQL کنید. زبان تعریف داده (DDL) وجود دارد. برای ایجاد جدول MS SQL و همچنین برای تعریف اشیا و کار با ساختار آنها استفاده می شود. DDL شامل مجموعه ای از دستورات است.

ایجاد جدول SQL Server

تنها با استفاده از یک دستور DDL، می توانید اشیاء پایگاه داده مختلفی را با تغییر پارامترهای آن ایجاد کنید. از دستور Create Table استفاده می شود. فرمت tt به شکل زیر است:

TADLE را ایجاد کنید جدول_نام،(ستون_نام1 نام _ستون ۲نوع داده [constraint_column], [table_constraints]).

سینتکس این دستور باید با جزئیات بیشتری توضیح داده شود:

  • نام جدول باید حداکثر 30 کاراکتر باشد و با یک حرف شروع شود. فقط کاراکترهای الفبایی، حروف و نمادهای "_"، "$" و "#" مجاز هستند. استفاده از الفبای سیریلیک مجاز است. توجه به این نکته ضروری است که نام جداول نباید با نام سایر اشیاء یا کلمات رزرو شده سرور پایگاه داده مانند Column، Table، Index و غیره یکسان باشد.
  • باید برای هر ستون یک نوع داده مشخص کنید. یک مجموعه استاندارد وجود دارد که توسط اکثر افراد استفاده می شود. به عنوان مثال، Char، Varchar، Number، Date، نوع Null و غیره.

  • پارامتر Default به شما امکان می دهد یک مقدار پیش فرض را تنظیم کنید. این تضمین می کند که هیچ مقدار تهی در جدول وجود ندارد. چه مفهومی داره؟ مقدار پیش فرض می تواند یک نماد، یک عبارت، یک تابع باشد. مهم است که به یاد داشته باشید که این نوع داده پیش فرض باید با نوع داده ورودی ستون مطابقت داشته باشد.
  • محدودیت ها در هر ستون برای اعمال شرایط یکپارچگی برای داده ها در سطح جدول استفاده می شود. تفاوت های ظریف دیگری نیز وجود دارد. حذف جدول در صورت وجود جداول دیگر وابسته به آن ممنوع است.

نحوه کار با دیتابیس

پروژه های بزرگ اغلب نیاز به ایجاد چندین پایگاه داده دارند که هر کدام به جداول زیادی نیاز دارند. البته برای کاربران غیرممکن است که تمام اطلاعات را در ذهن خود حفظ کنند. برای این کار امکان مشاهده ساختار بانک های اطلاعاتی و جداول موجود در آنها وجود دارد. چندین دستور وجود دارد که عبارتند از:

  • SHOW Databases - تمام پایگاه های داده SQL ایجاد شده را روی صفحه نمایش می دهد.
  • SHOW TABLES - لیستی از تمام جداول پایگاه داده فعلی را که با دستور USE انتخاب شده اند را نمایش می دهد.
  • توصیف کردن جدول_نام- شرح تمام ستون های جدول را نشان می دهد.
  • ALTER TABLE - به شما امکان می دهد ساختار جدول را تغییر دهید.

آخرین دستور اجازه می دهد:

  • یک ستون یا محدودیت به جدول اضافه کنید.
  • تغییر یک ستون موجود؛
  • حذف ستون یا ستون؛
  • حذف محدودیت های یکپارچگی

نحو این دستور عبارت است از: ALTER TABLE جدول_نام( | | | | [(فعال کردن | غیرفعال کردن) ثابت constraint_name ] | }.

دستورات دیگری نیز وجود دارد:

  • RENAME - نام جدول را تغییر دهید.
  • TRUNCATE TABLE - تمام سطرها را از جدول حذف می کند. این تابع ممکن است زمانی مورد نیاز باشد که نیاز به پر کردن مجدد جدول باشد، اما نیازی به ذخیره داده های قبلی نیست.

همچنین شرایطی وجود دارد که ساختار پایگاه داده تغییر کرده و جدول باید حذف شود. برای این کار دستور DROP وجود دارد. البته ابتدا باید پایگاه داده ای را که می خواهید جدول را از آن حذف کنید، در صورتی که با جدول فعلی متفاوت است، انتخاب کنید.

دستور دستور بسیار ساده است: DROP TABLE نام_جدول

که در دسترسی SQLایجاد جداول و اصلاح آنها با استفاده از همان دستورات ذکر شده در بالا انجام می شود.

با استفاده از CREATE TABLE می توانید یک جدول خالی ایجاد کنید و سپس آن را با داده ها پر کنید. اما این همه ماجرا نیست. همچنین می توانید مستقیماً یک جدول از جدول دیگری ایجاد کنید. مثل این؟ یعنی می توان جدولی را تعریف کرد و آن را با داده های جدول دیگری پر کرد. یک کلمه کلیدی خاص AS برای این کار وجود دارد.

نحو بسیار ساده است:

  • ایجاد جدول نام_جدول[(ستون_تعریف)] AS subquery;
  • ستون_تعریف -نام ستون ها، قوانین یکپارچگی برای ستون های جدول جدید ایجاد شده، و مقادیر پیش فرض.
  • subquery - سطرهایی را که باید به جدول جدید اضافه شوند برمی گرداند.

بنابراین، چنین دستوری یک جدول با ستون های خاص ایجاد می کند، ردیف هایی را در آن درج می کند که در پرس و جو برگردانده می شوند.

میزهای موقت

جداول موقت جداولی هستند که اطلاعات آنها در پایان هر جلسه یا قبل از آن پاک می شود. آنها برای ثبت مقادیر یا نتایج میانی استفاده می شوند. می توان از آنها به عنوان کاربرگ استفاده کرد. در هر جلسه می توانید موارد موقت را تعریف کنید، اما می توانید از داده های آنها فقط در جلسه فعلی استفاده کنید. ایجاد جداول SQL موقت مشابه جداول معمولی با استفاده از دستور CREATE TABLE است. برای اینکه به سیستم نشان دهید که جدول موقتی است، باید از پارامتر GLOBAL TEMPORARY استفاده کنید.

بند ON COMMIT طول عمر داده ها را در چنین جدولی تنظیم می کند و می تواند کارهای زیر را انجام دهد:

  • حذف ردیف ها - پس از اتمام هر تراکنش، جدول موقت را پاک کنید (تمام داده های جلسه را حذف کنید). این معمولاً مقدار پیش فرض است.
  • حفظ ردیف ها - داده ها را برای استفاده در تراکنش بعدی بگذارید. علاوه بر این، فقط پس از پایان جلسه می توانید جدول را پاک کنید. اما برخی از ویژگی های خاص وجود دارد. اگر یک تراکنش برگشت داده شود (ROLLBACK)، جدول در پایان تراکنش قبلی به حالت خود برمی گردد.

سینتکس ایجاد یک جدول موقت را می توان به صورت زیر نشان داد: CREATE TABLE نام_جدول،(نامستون_1نوع داده [column_constraint]، نام _ستون ۲نوع داده [constraint_column]، [table_constraints]).