X
تبلیغات

آموزش حرفه ای وپیشرفتهSQL

ایجاد محدودیت برای فیلد ها (Constraints) در SQL

ایجاد محدودیت برای فیلد ها (Constraints) در SQL
در این قسمت از مقالات طراحی سایت و آموزش SQL ، ایجاد محدودیت برای فیلدها ( Constraints ) را برای شما توضیح می دهیم.
از این ویژگی برای محدود کردن نوع داده هایی که می تواند در جدول تعریف شود مورد استفاده می شود.این محدودیت ها را باید زمانی که یک جدول جدید ایجاد میکنیم یا زمانی که نوع داده ای جدول را تغییر میدهیم بایستی در نظر داشته باشیم.
Constraint ها شامل موارد زیر می شوند:

√  NOT NULL
√  UNIQUE
√  PRIMARY KEY
√  FOREIGN KEY
√  CHECK
DEFAULT

محدودیت Foreign Key در SQL

در این قسمت از طراحی سایت ، محدودیت Foreign Key را توضیح می دهیم.
یک FOREIGN KEY در یک جدول به یک PRIMARY KEY در جدولی دیگر اشاره می کند.برای ارتباط بین جداول از محدودیت Foreign Key استفاده می‌شود و در اصل Relational Integrity را فراهم می‌کند. به عبارت ساده‌تر، کلید خارجی همان مقدار کلید اصلی از جدول دیگر است.به عبارتی کلید خارجی همان مقدار کلید اصلی از جدول دیگر است.

همچنین کلید خارجی می تواند مقدار تکراری داشته باشد. Foreign Key سه نوع محدودیت را ایجاد می کند که عبارتند از:
√ اجازه حذف رکوردی از جدول پدر نداریم که فرزندی داشته باشد.
√ اجازه insert رکورد در جدول فرزند با کد پدری که در جدول پدر موجود نیست را نداریم.
√ مقدار کلید پدری را که دارای فرزند هست را نمی‌توانیم تغییر دهیم.
همچنین محدودیت FOREIGN KEY  از وارد کردن داده های نامعتبر در جدول جلوگیری میکند.(در ستون foreign key)، دلیل آن هم، این است که بامقادیر جدول دیگر که به آن اشاره می کند تطابق ندارد.

برای تعریف یک محدودیت FOREIGN KEY روی یک ستون از دستور SQL زیر استفاده می کنیم:



CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)


برای تعریف یک محدودیت FOREIGN KEY  روی چند ستون از دستور SQL زیر استفاده می کنیم:



CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)


برای تغییر دادن یک محدودیت FOREIGN KEY  روی یک ستون از دستور SQL زیر استفاده می کنیم:



ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)


برای تغییر دادن محدودیت FOREIGN KEY  روی چند ستون، از دستور SQL زیر استفاده می کنیم:


ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)


برای از بین بردن محدودیت FOREIGN KEY ، از دستور SQL زیر استفاده می کنیم:


ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders


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


CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)


 برای تعریف یک محدودیت Check  روی چند ستون از دستور SQL زیر استفاده می کنیم:


 CREATE TABLE Persons
 (P_Id int NOT NULL,
  LastName varchar(255) NOT NULL,
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255),
  CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
    )


برای تغییر دادن یک محدودیت Check  روی یک ستون از دستور SQL زیر استفاده می کنیم:


ALTER TABLE Persons
ADD CHECK (P_Id>0)


برای تغییر دادن یک محدودیت Check  روی چند ستون از دستور SQL زیر استفاده می کنیم:



ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')



برای از بین بردن محدودیت Check از دستور زیر استفاده می کنیم:


ALTER TABLE Persons
DROP CHECK chk_Person


ادامه مطلب


برچسب ها : کدهای Check ،Foreign Key،Constraintsدر SQLبه صورت پیشرفته ،
[ چهارشنبه ۲ اسفند ۱۳۹۶ ] [ ۱۹:۱۲ ] [ alisaadat ] [۴ بازدید]

دستور Create Table در SQL
در این بخش از  مقالات و اطلاعات طراحی سایت ،  دستور Create Table را برای شما توضیح می دهیم.
از دستور Create Table برای ایجاد جدول جدید در پایگاه داده استفاده می شود.توجه داشته باشید که برای ایجاد یک جدول بایستی موارد زیر را رعایت کرد:
√ تعيين يک نام منحصر به فرد برای جدول .
√ تعيين تعداد ستون های ( فيلد ها ) جدول و نام آنها که نباید تکراری باشد.
√ تعيين نوع داده ای ستون های جدول و اندازه آنها در صورت نياز

مثال زیر کاربرد دستور Create Table را در بخش آموزش SQL نشان می دهد.


    CREATE TABLE table_name
    (
    column_name1 data_type,
    column_name2 data_type,
    column_name3 data_type,
    ....
    )


برای مثال برای ایجاد جدول Persons با فیلدهای زیر به صورت زیر عمل میکنیم :
    CREATE TABLE Persons
    (
    P_Id int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )

دستور Drop در SQL

در این بخش از وب سایت طراحی سایت  ، دستور Drop را برای شما توضیح می دهیم.
 با استفاده از دستور Drop می توان تمامی جدول ها،اندیس ها و حتی دیتابیس ها را حذف کرد.همچنین از دستور Drop Index برای حذف یک اندیس موجود در یک فیلد جدول استفاده می کنند.

مثال زیر کاربرد دستور Drop Index را در بخش آموزش SQL نشان می دهد.


        DROP INDEX table_name.index_name


 از دستور DROP TABLE برای حذف يک جدول در پايگاه داده استفاده می شود.

        DROP TABLE table_name


 از دستور DROP DATABASE برای حذف  يک پايگاه داده به صورت کامل استفاده می شود

        DROP DATABASE database_name


برای حذف کليه اطلاعات موجود در يک جدول بدون حذف ستون های آن از دستور RUNCATE استفاده می کنیم :

        TRUNCATE TABLE table_name


اين دستور باعث خالی شدن جدول از اطلاعات می شود ، بدون اينکه خود آن و ساختارش تغييری کند.

         Truncate Table Mydb;

دستور Create Index در SQL
در این قسمت دستور Create Index را در مقالات طراحی سایت برای شما توضیح می دهیم.

از دستور Create Index برای ایجاد اندیس در دسته های جدول استفاده می شود.در يک جدول می توان برای يک يا چند ستون جدول انديس ايجاد کرد ، که اين انديس ها باعث بالا رفتن سرعت جستجو در رکوردهای جدول مي شود.اندیس ها به صورت شماره نمایش داده می شوند و معمولا از صفر شروع می شوند.این اندیس ها توسط کاربر دیده نمی شود و هر اندیس به صورت اختصاصی می باشد.

برای ایجاد یک اندیس با داده های تکراری به صورت زیر عمل میکنیم :


            CREATE INDEX index_name
            ON table_name (column_name)
 برای مثال :


             CREATE INDEX PIndex
             ON Persons (LastName)

برای ایجاد یک اندیس با داده های منحصر به فرد (unique) به صورت زیر عمل میکنیم :

            CREATE UNIQUE INDEX index_name
            ON table_name (column_name)


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

        CREATE INDEX PIndex
        ON Persons (LastName, FirstName)
    
دستور Alter در SQL

 در این قسمت از مقالات طراحی سایت ،  دستور Alter را برای شما توضیح می دهیم.

از دستور Alter برای حذف یا اضافه کردن کامل یک ستون از یک جدول موجود در پایگاه داده استفاده می شود.برای اضافه کردن يک ستون ( فيلد ) جديد به يک جدول موجود از دستور ALTER TABLE  استفاده می شود:



            ALTER TABLE table_name
            ADD column_name datatype


برای حذف يک ستون از يک جدول موجود به روش زير عمل می شود:


            ALTER TABLE table_name
            DROP COLUMN column_name

ادامه مطلب

[ يکشنبه ۲۹ بهمن ۱۳۹۶ ] [ ۱۹:۲۱ ] [ alisaadat ] [۵۴ بازدید]

عملگر UNION در دستورات اس کیو ال

در این قسمت از آموزش SQL ، عملگر Union را به شما علاقه مندان به طراحی سایت آموزش می دهیم.
در دستور Unoin برای ترکیب و ادغام دو یا چند ستون مختلف از دو یا چند جدول و نشان دادن آن ها در یک ستون مشترک استفاده می کنند.در عملگر Union نوع داده ی ستون های انتخاب شده برای ترکیب باید یکسان باشد.این دستور در هنگام ترکیب فیلدها,در صورت برخورد با مقادیر تکراری آن ها را حذف می کندو از هر مقدار فقط یک نمونه را نشان می دهد.برای غیر فعال کردن این خاصیت (نمایش فیلدهای تکراری) باید از دستور Union All استفاده کرد.

فیلد زیر دستور کلی عملگر Union را نشان می دهد.

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2


همچنین باکس زیر دستور Union All را نشان می دهد.
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2


مثالهای زیر کاربرد عملگر Union را در بخش آموزش SQL را نشان می دهد.
SELECT E_Name FROM Employees_Norway
UNION
SELECT E_Name FROM Employees_USA

SELECT E_Name FROM Employees_Norway
UNION ALL
SELECT E_Name FROM Employees_USA
Result


دستور SELECT INTO

در این قسمت از آموزش SQL  ،  دستور Select Into را برای شما توضیح می دهیم.
دستور Select شامل چند حالت می باشد که عبارتنداز:
√ ایجاد نسخه ی پشتیبان از جدول-Back Up
√ ایجادآرشیو از رکوردهای جدول
√ قرار دادن تعدادی از رکوردها ی جدول در یک جدول جدید
√ ایجاد یک نسخه ی پشتیبان از کل پایگاه داده در یک پایگاه داده ی جدید
در مثال زیر حالت برخی رکوردها یا فیلدهای موردنظر از یک جدول در یک جدول جدید نشان می دهد را برای شما کاربران علاقه مند به یادگیری اس کیو ال و طراحی سایت ارائه کرده ایم.


We can select all columns into the new table:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename


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


SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename


این مثال از پایگاه داده یک نسخه ی کپی ایجاد کرده و در یک پایگاه داده دیگر اضافه می شود.
SELECT *
INTO Persons_Backup IN 'Backup.mdb'
FROM Persons


این مثال از پایگاه داده  یک Bach Up در جدول Persons ایجاد می کند.
SELECT *
INTO Persons_Backup
FROM Persons


این مثال تعداد از فیلدها را به جدول جدید کپی کند.
 SELECT LastName,FirstName
 INTO Persons_Backup
 FROM Persons


این مثال یک دستور شرطی فیلدهایی را از جدول Persons را به جدول Persons-Backup اضافه می کند.
SELECT LastName,Firstname
INTO Persons_Backup
FROM Persons
WHERE City='Sandnes'


مثال زیر جدول Persons-Order-Backup شامل داده ها از دو جدول Persons و Orders را نشان می دهد.
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id

توجه داشته باشید که ذکر نام یک پایگاه داده در دستور Select Into الزامی ندارد.

دستور ISNULL در اس کیو ال

در این قسمت از طراحی سایت ، دستور Isnull را  برای شما توضیح می دهیم.
وقتی که می خواهیم تمام فیلدهای Null را در خروجی داشته باشیم از دستور Isnull استفاده می کنیم.مقدار null با space ' ' تفاوت دارد.
مثال زیر کاربرد دستور Isnull را در بخش آموزش SQL نشان می دهد.

SELECT LastName,FirstName,Address FROM Persons

WHERE Address IS NULL


دستور CREATE DATABASE در اس کیو ال

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

    CREATE DATABASE database_name

 برای ایجاد یک دیتابیس با نام mySite_db به صورت زیر عمل میکنیم :
    CREATE DATABASE mySite_db


ادمه مطلب
[ چهارشنبه ۲۵ بهمن ۱۳۹۶ ] [ ۱۷:۵۹ ] [ alisaadat ] [۶۱ بازدید]
دستور Join در SQL
در این قسمت از طراحی سایت ، دستور Join را برای شما توضیح می دهیم.
از دستور Join برای پیوند جدول ها  در پایگاه داده ها استفاده می شود همچنین دستور Join روشی متفاوت برای پیوند جدول هاست که همان خروجی را ایجاد می کند.این پیوند بین جدول ها توسط کلید خارجی صورت می گیرد.روش کلی این دستور به صورت زیر می باشد:

Select  نام ستونهای مورد نظر جهت نمايش از هر 2 جدول
From  نام جدول 1
Inner Join   نام جدول 2
On  برابر قرار دادن فيلدهای مشترک 2 جدول با هم
Where  بقيه شرط ها  ;

تفاوت بین Joins در SQL:

Join : خروجی دستور Join از بین سطرهایی که حداقل یک رابطه در هر دو جدول وجود داشته باشد را انتخاب می کند.
Left Join : خروجی دستور Left Join از جدول سمت راست انتخاب می شود.این دستور حتی در زمانی که هیچ رابطه ای با جدول سمت راست نداشته باشد اجرا می شود.
Right Join : خروجی دستور Right Join از جدول سمت راست انتخاب می شود.این دستور حتی در زمانی که هیچ رابطه ای با جدول  چپ نداشته باشد.
Full Join : خروجی دستور Full Join از بین سطرهایی که حداقل یک رابطه در یکی از جداول داشته باشد انتخاب می شود.

تفاوت Join و Innerjoin:

تفاوت Join و InnerJoin در performance آنها می باشد. نتیجه ی اجرای هر دوی آنها یکسان است اما دستور InnerJoin دارای Prformance بالاتری می باشد و به همین دلیل توصیه می شود که از دستور InnerJoin در طراحی سایت استفاده شود.
دستور INNER JOIN

در این قسمت از آموزش SQL ، دستور Inner Join را برای شما کاربران دوستار طراحی سایت توضیح می دهیم.
خروجی دستور Inner Join از بین سطرهایی انتخاب می شود که حدقل یک رابطه در هر دو جدول داشته باشد.تفاوت دستور Inner Join با دستور Join در Performance آن ها می باشد.
این دو دستور فقط در یک مورد فرق دارند که آن هم دستور Inner Join از Performance بالاتری برخوردار است بنابراین توصیه می شود از دستور Inner Join استفاده شود.دستور کلی Inner Join به صورت زیر می باشد:


SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

توجه داشته باشید که در دستور Inner Join حتما باید یک رابطه در هر دو جدول وجود داشته باشد همچنین لازم به ذکر است که اگرخروجی جدول Persons با خروجی جدول Order تطابق نداشته باشد در خروجی نهایی نمایش داده نمی شود.

دستور LEFT JOIN

در این قسمت از آموزش SQL ، دستور Left Join را برای شما توضیح می دهیم.
در این دستور،خروجی دستور Left Join از جدول سمت چپ انتخاب می شود حتی در شرایطی که هیچ رابطه ای با جدول سمت راست نداشته باشد.
این دستور نیز در تعدادی از پایگاه داده ها با نام Left Outer Join کاربرد دارد. نمونه زیر که در این بخش از طراحی سایت ارائه شده است، دستور کلی Left Join را نشان می دهد.


SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name


همچنین در مثال زیر جدول اصلی جدول Persons می باشد که در سمت چپ Join قرار دارد و خروجی آن بر اساس این جدول تنظیم شده است.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName

دستور RIGHT JOIN

در این قسمت از آموزش SQL ، دستور Right Join را برای شما توضیح می دهیم.
خروجی دستور RIGHT JOIN از جدول سمت راست انتخاب میشود، حتی اگر هیچ رابطه ای با  جدول چپ نداشته باشد.در تعدادی از پایگاه داده ها از دستور Right Join با نام Right Outer Join مورد استفاده قرار می گیرد.

دستور کلی Right Join به صورت زیر می باشد که برای شما کاربران عزیز علاقه مند به طراحی سایت ارائه شده است.


SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name


در مثال زیر جدول اصلی  جدول orders می باشد که join در سمت راست قرار دارد و خروجی ها بر اساس این جدول تنظیم میشود.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName


دستور FULL JOIN

در این قسمت از مقالات طراحی سایت ، دستور Full Join را برای شما توضیح می دهیم.
هنگامی که در یک رابطه  یکی از جداول را در نظر بگیریم  و بخواهیم خروجی دستور Full Join از بین سطرها انتخاب می شود از این دستور استفاده می کنیم.به طور کل دستور Full Join را به صورت زیر می نویسند:


SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name


در مثال زیر افراد و سفارشاتشان را در دستور Full Join به این شکل نمایش  می دهند.

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.P_Id=Orders.P_Id

ORDER BY Persons.LastName


ادامه مطلب


برچسب ها : کدهای پیشرفته و آسان SQL ،
[ سه شنبه ۲۴ بهمن ۱۳۹۶ ] [ ۲۲:۱۱ ] [ alisaadat ] [۶۰ بازدید]

علامت های شرطی در Like
در این قسمت از آموزش SQL ،علامت های شرطی در Like را برای شما توضیح می دهیم که می توانید از آنها در طراحی سایت  استفاده نمایید.
زمانیکه می خواهیم با رشته ها کار کنیم وو از رشته یا الگوی خاصی استفاده کنیم می توانیم از عبارت Like به جای علامت (=) استفاده کنیم.در این دستور کاراکتر % به معنی یک کاراکتر و کاراکتر _ به معنای بیشتر از یک کاراکتر به کار می رود.
مثال : اسامی کليه مشتريانی که آدرس آنها شامل کلمه Main است را پيدا کن.


    SELECT customer_name
    FROM customer
    WHERE customer_street LIKE '%Main%';


عملگر In در شرط ها

در این قسمت از مقالات طراحی سایت ،  عملگر In را برای شما توضیح می دهیم.

 از عملگر In برای مشاهده اطلاعات رکوردهایی از جدول به کار می رود که شما مقدار دقیق حداقل یکی از فیلدهای آن را می دانید.شکل کلی دستور In به صورت زیر می باشد:
 select نام ستون From نام جدول
 Where نام فیلد In مقدار 1،مقدار2و...

مثال زیر کاربردی از عملگر In را در بخش آموزش SQL نشان می دهد.


        Select * From  Persons

        Where Family IN( "رضایی" , "حاجیلو" );


 عملگر BETWEEN در شرط

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


            SELECT column_name(s)
            FROM table_name
            WHERE column_name
            BETWEEN value1 AND value2


همچنین برای نمایش اطلاعات بین محدوده از این دستور استفاده می شود.

            SELECT * FROM Persons
            WHERE LastName
            BETWEEN 'Hansen' AND 'Pettersen'


برای نمايش اطلاعات خارج از محدوده تعيين شده از يک عملگر NOT قبل از دستور Between ... And استفاده می شود.


            SELECT * FROM Persons
            WHERE LastName
            NOT BETWEEN 'Hansen' AND 'Pettersen'

Alias در اس کیو ال

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


            select نام فیلد As عنوان(Alias (From نام جدول


 مثال زیر کاربرد ویژگی Alias را در جدول نشان می دهد.

                SELECT column_name(s)
                FROM table_name
                AS alias_name
 
مثال زیر کاربر ویژگی Alias را در ستون نشان می دهد.

                SELECT column_name AS alias_name
                FROM table_name


برای جداول با داده های عددی می توان ستون هایی که دارای داده های عددی هستند را انتخاب کرد و سپس نتایج محاسبات را در یک ستون جدید نمایش داد.این درخواست از طریق ویژگی Alias و در خروجی دستور Select ایجاد می شود که در آخر ستون یا ستون هایی برای جدول خروجی اضافه خواهد شد.

ادامه مطلب


برچسب ها : آموزش جرفه ای SQLبا کدهای پیشرفته ،
[ دوشنبه ۲۳ بهمن ۱۳۹۶ ] [ ۲۰:۳۹ ] [ alisaadat ] [۷۵ بازدید]


دستور TOP در SQL

دستور TOP در دستور select اسکیوال ، تعداد رکورهای خروجی را مشخص میکند.

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

مثال : با مثال زیر ما 2 رکورد از جدول را انتخاب می کنیم :



    SELECT TOP 2 * FROM Persons



مثال : با مثال زیر ما میتوانیم 50 درصد از رکوردها در جدول بالا را انتخاب کنیم :


Persons

    SELECT TOP 50 PERCENT * FROM


    عملگر Like در SQL

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



        SELECT column_name(s)
        FROM table_name
        WHERE column_name LIKE pattern



     مثال : دستور زیر افرادی که شهر آنها با حرف s شروع میشوند را انتخاب مبکند.


        SELECT * FROM Persons
        WHERE City LIKE 's%'



     مثال : دستور زیر افرادی که شهر آنها به حرف s ختم میشوند را انتخاب مبکند.


        SELECT * FROM Persons
        WHERE City LIKE '%s'


ادمه مطلب

[ جمعه ۲۰ بهمن ۱۳۹۶ ] [ ۱۱:۰۲ ] [ alisaadat ] [۵۷ بازدید]

دستور شرطی Having در SQL

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

به عبارت ديگر دستور Having در SQLبرای اعمال شرط به ستون ها اعمال می شود و همان کاری را می کند که Where در رکوردها انجام می دهد . دستور Having معمولا با دستور Group By می آيد .

ساختار دستور شرطی Having در sql به صورت زیر است :


    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name
    HAVING aggregate_function(column_name) operator value


مثال : در مثال زیر همچون مثال بخش دستور group by عمل شده ، با این تفاوت که بعد از گروه بندی بر اساس نام دانش آموزان و دادن خروجی جمع نمرات آنها ، خروجی شامل دانش آموزانی است که مجموع نمرات آنها بالاتر از 25 باشد :


    جمع نمره Select Name  , Sum ( Grade ) As مجموع نمرات
    From Students  
    Group By Name
    Having Sum ( Grade ) > 25
    Order By Family


نکته مثال : در مثال بالا به جای having نمیتوان از where استفاده کرد و برای اعمال شرط بر روی فیلدهای محاسباتی آمده در دستور group by باید از جمله شرطی having استفاده کرد.

ادمه مطلب

[ جمعه ۲۰ بهمن ۱۳۹۶ ] [ ۱۰:۵۳ ] [ alisaadat ] [۶۰ بازدید]

سادگی و امنیت SQLبا استفاده از slick

اسلیک (Slick) روشی برای نوشتن پرس و جو های اس کیو ال به صورت رشته هایی با API مناسب برای مدیریت ارتباطات و تهیه نتایج است که با اسکالا یکپارچه شده است. در اینجا به نحوه ی کار با اسلیک خواهیم پرداخت.

اسلیک بر پایه ی بسته ی اتصال یکپارچه زبان اسکالا (Scala Language-Integrated Connection Kit) می باشد. این کتابخانه ای کاربری (FRM) در اسکالاست که کار با پایگاه داده های رابطه ای را آسان می کند. اسلیک روشی برای نوشتن پرس و جو های اس کیو ال، تهیه نتایج و استفاده از یک زبان پرس و جو است که به خوبی با اسکالا یکپارچه شده است. شما می توانید پرس و جو های پایگاه داده ی خود را به جای اس کیو ال، در اسکالا بنویسید تا از قابلیت های بررسی استاتیک، ایمنی زمان کامپایل و سایر امکانات اسکالا بهره مند شوید. اسلیک دارای کامپایلر جستجوهای توسعه پذیر است که می تواند برای بک اندهای گوناگون کد تولید کند.
در حالت معمول، پرس و جو های اس کیو ال در حین اجرای برنامه (runtime)، تنها
cialis 20mg زمانی که واقعا اجرا شوند، بررسی خواهند شد. اما با کمک کتابخانه های موجود در اسلیک، بررسی های ایستا در زمان کامپایل رخ می دهد و از وقفه و شکستن کد (break) در زمان اجرا جلوگیری می کند. بنابراین هنگام استفاده از اسکالا به جای اس کیو ال معمول، برای پرس و جو ها، شما از ویژگی های امنیت و ترکیب در زمان کامپایل بهره مند خواهید شد.
دو ویژگی کلیدی در اسلیک، امنیت نوع و قابلیت ترکیب پرس و جو هاست. اسلیک با کامپایلر scala-to-sql همراه است که اجازه می دهد تا یک زیر مجموعه (کاملا کاربردی) از زبان اسکالا به پرس و جو های اس کیو ال کامپایل شود. با استفاده از کتابخانه های استاندارد در دسترس، توسعه دهندگان اسکالا می توانند با دانشی کم و بدون نیاز به دانستن اس کیو ال یا بخاطر آوردن نحوه ی نگارش خاصی، پرس و جو های زیادی را برای تمام پایگاه داده های ارتباطی پشتیبانی شده بنویسند. چنین پرس و جو هایی در اسلیک قابل خواندن هستند، بدین معنا که شما می توانید آنها را نوشته و در قطعات و توابع متفاوت بارها بکار ببرید تا از تکرار کد جلوگیری شود مانند استفاده از join به جای ترکیبات پیچیده ی رشته های اس کیو ال.
واقعیت این است که این پرس و جو ها ایمنی نوع دارند بدین معنا که نه تنها مشکلات زمان کامپایل را شناسایی می کنند بلکه آسیب های تزریق دستورات اس کیو ال را نیز حذف می کنند.

تبدیل اسکالا به اس کیو ال در زمان کامپایل

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


import slick.driver.MySQLDriver


و اگر از پایگاه داده ی Postgres استفاده می کنید بایستی کد زیر را وارد کنید:


import slick.driver.PostgresDriver


lifted embedding، یک استاندارد API برای پرس و جوهای نوع امن و بروزرسانی در اسلیک است. زمانی که این استاندارد با اسلیک ترکیب شود، اسلیک در برابر تزریق دستورات sql، راهکارهای محافظتی در نظر خواهد گرفت. با این حال، اگر به اس کیو ال در حالت ساده نیاز داشته باشید، به شما اجازه می دهد تا ریسک تزریق دستورات sql را بپذیرید.

تزریق به دیتابیس (SQL Injection) چیست؟

تزریق به پایگاه داده یا دیتابیس (SQL Injection) نوعی از حملات وب است که در آن فرد حمله کننده یا هکر می‌تواند اقدام به اجرا کردن دستورات دلخواه و مخرب خود بر روی پایگاه داده وب سایت مورد هدف کند. در این حمله، حمله کننده با استفاده از دانش خود (یا تنها با استفاده از یک برنامه ساده!) می‌تواند از نقض‌های امنیتی موجود در کدهای نوشته شده توسط برنامه نویس سایت استفاده کرده و به اصطلاح آن‌ها را اکسپلویت کند. چون در این حمله هکر درواقع به کد اسکیوال، کد دلخواه خود را اضافه می‌کند، تزریق SQL نام گرفته است.
یک حمله موفق اس کیو ال اینجکشن می‌تواند به راحتی سبب افشای داده‌های مهم در دیتابیس (ازجمله رمزهای عبور، اطلاعات فردی کاربران و …)، اضافه کردن داده‌های دلخواه حمله کننده به دیتابیس یا حذف کردن داده‌های خاص از دیتابیس گردد.

Lifted Embedding

اسلیک مجموعه های شما را گرفته و آنها را به اشیاء Rep، تبدیل کرده و یا اصطلاحاً آنها را درون اشیاء Rep ، lifts می کند. نوع اصلی داده حفظ شده و به سازنده ی Rep منتقل می شود، که در هنگام برقراری ارتباط با پایگاه داده اجازه ی ایمنی نوع و تمیز جدایی بین کد و داده ها را می دهد. مثال زیر نشان می دهد که پس از lifting، اسلیک داده های integer، string و Double را چگونه در نظر می گیرد.


private[example] class EmployeeTable(tag: Tag) extends Table[Employee](tag, "experienced_employee"){
val id = column[Int]("id",O.PrimaryKey)
val name = column[String]("name")
val experience = column[Double]("experience")
def * = (id,name,experience) <> (Employee.tupled, Employee.unapply)
}


پس از انجام عمل lifting، داده های int به صورت Rep[Int]، داده های string به صورت Rep[String] و داده های Double به شکل Rep[Double] تبدیل می شود.

مثال های اس کیو ال و اسلیک

به عنوان مثال جداول Person و address را در نظر بگیرید.
جدول Person(is,name,age,address_Id) به جدول Address(is,street,city) ارجاع داده می شود. این طرح پایگاه داده با استفاده از کد زیر به اسلیک نگاشت می شود:


type Person = (Int,String,Int,Int)
class People(tag: Tag) extends Table[Person](tag, "PERSON") {
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
def name = column[String]("NAME")
def age = column[Int]("AGE")
def addressId = column[Int]("ADDRESS_ID")
def * = (id,name,age,addressId)
def address = foreignKey("ADDRESS",addressId,addresses)(_.id)
}
lazy val people = TableQuery[People] type Address = (Int,String,String)
class Addresses(tag: Tag) extends Table[Address](tag, "ADDRESS") {
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
def street = column[String]("STREET")
def city = column[String]("CITY")
def * = (id,street,city)
}
lazy val addresses = TableQuery[Addresses] }


برخی از مهمترین پرس و جوهای اس کیو ال و کوئری های نوع امن در اسلیک به شرح زیر هستند:

INSERT

در اس کیو ال:


sqlu"""insert into PERSON (NAME, AGE, ADDRESS_ID) values ('John', 12345, 1) """


با استفاده از اسلیک، شما باید ابتدا یک پرس و جو بنویسید. به جای ایجاد یک اکشن که نتیجه ی این پرس و جو را نمایش دهد، شما باید با استفاده از علامت += و درج مقادیری که مدنظر شماست، عمل درج را انجام دهید. استفاده از ++= به شما این امکان را می دهد که هربار چند ردیف داده را درج کنید.


people.map(p => (p.name, p.age, p.addressId)) += ("xyz",12345,1)


UPDATE

در اس کیو ال:


sqlu"""update PERSON set NAME='John', AGE=54321 where NAME='James' """


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


people.filter(_.name === "xyz").map(p => (p.name,p.age)).update(("abc",54321))


DELETE

در اس کیو ال:


sqlu"""delete PERSON where NAME='John' """


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


people.filter(p => p.name === "John") .delete


* SELECT

در اس کیو ال:


sql"select * from PERSON".as[Person]


در اسلیک، معادل عمل  * select ،گرفتن نتایج جدول مدنظر می باشد:

people.result

SELECT

در اس کیو ال:


sql"""select AGE, concat(concat(concat(NAME,' ('),ID),')') from PERSON """.as[(Int,String)]


هنگام استفاده از اسلیک، برای عمل انتخاب، معادل آن در اسکالا، یعنی map استفاده می شود:


people.map(p => (p.age, p.name ++ " (" ++ p.id.asColumnOf[String] ++ ")")).result


WHERE

در اس کیو ال:


sql"select * from PERSON where AGE >= 18 AND NAME = 'C. Vogt'".as[Person]


هنگام کار با اسلیک، به جای where از معادل آن در اسکالا، یعنی filter استفاده می شود. علاوه براین، برای مقایسه به جای استفاده از == از === استفاده می شود.


people.filter(p => p.age >= 18 && p.name === "abc").result


ORDER BY

در اس کیو ال:


sql"select * from PERSON order by AGE asc, NAME".as[Person]


در اسلیک، به جای order By از معادل آن در اسکالا، یعنی sortBy استفاده می شود. اسلیک از دو متد .asc و .desc برای مرتب سازی استفاده می کند.


people.sortBy(p => (p.age.asc, p.name)).result


GROUP BY

در اس کیو ال:


sql"""select ADDRESS_ID, AVG(AGE) from PERSON group by ADDRESS_ID""".as[(Int,Option[Int])]


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



people.groupBy(p => p.addressId).map{ case (addressId, group) => (addressId, group.map(_.age).avg) }


Having

در اس کیو ال:


sql"""select ADDRESS_ID from PERSON group by ADDRESS_ID having avg(AGE) > 50""".as[Int]


اسلیک روش های مختلفی برای where و having ندارد. برای دستیابی به معانی معادل having، شما باید بعد از group by و نگاشت، به شکل زیر از فیلتر استفاده کنید.



people.groupBy(p => p.addressId).map{ case (addressId, group) => (addressId,group.map(_.age).avg) }.
ادامه مطلب
برچسب ها : آموزش کدهای SQLاز مبتدی تا پیشرفته ،
[ چهارشنبه ۱۸ بهمن ۱۳۹۶ ] [ ۲۰:۱۱ ] [ alisaadat ] [۵۴ بازدید]

Alias در اس کیو ال

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

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

از ويژگی Alias برای در نظر گرفتن يک نام مستعار و مجازی برای قرار گرفتن در بخش عنوان هر ستون در خروجی دستور Select در اسکیوال استفاده می شود .

تعریف Alias  برای جداول SQL: کلمه کلیدی as در اسکیوال این کار را انجام می دهد.


SELECT column_name(s)
FROM table_name
AS alias_name


تعریف Alias  برای ستونها در SQL:


SELECT column_name AS alias_name
FROM table_name


 مثال:


Select Name As نام , Family As خانوادگی From Persons
Where id >15 
Order By Family ; 


می توان بر روی مقادير ستون هايی که داده عددی دارند ، عمليات رياضی ( مثل ضرب ، تقسيم و ... ) انجام داده و سپس نتايج محاسبات را در يک ستون جديد با عنوان دلخواه تعيين شده توسط ويژگی Alias در خروجی دستور Select نمايش داد .در اين حالت ستون يا ستون های به جدول خروجی اضافه می شود .

مثال : مثال زیر کاربردی از این مورد را در دستور Selectنشان میدهد :


Select Name+Family As "نام و نام خانوادگی" From Persons
Where id >15 
Order By Family ;


ادمه مطلب

[ سه شنبه ۱۷ بهمن ۱۳۹۶ ] [ ۱۵:۵۹ ] [ alisaadat ] [۲۲ بازدید]

بررسی ()Row_number در SQL SERVER

این تابع برای هر ردیف یک عدد منحصر بفرد را بر می گرداند ، عدد انتساب داده شده به صورت ترتیبی به هر رکورد انتساب داده می شود که از یک شروع شده و به تعداد رکورد های برگردانده شده افزایش می یابد  .

جدول زیر را در نظر بگیرید :


Split-in-SQlServer

قصدا داریم مقدار ستون Title را که دارای کاما می باشد به چندین رکورد تقسیم کنیم ، یعنی هر عدد در یک رکورد مجزا قرار بگیرد ، برای اینکار می توانیم از کوئری زیر استفاده کنیم :

SELECT
     Split.a.value('.', 'VARCHAR(100)') AS Result  
 FROM  (SELECT Title,  
         CAST ('' + REPLACE(Title, ',', '') + '' AS XML) AS String  
     FROM  mytable where id=1) AS A CROSS APPLY String.nodes ('/M') AS Split(a);  
    

بعد از اجرای کوئری فوق نتیجه حاصل به صورت زیر خواهد بود :

comma separated



استفاده از Partition اختیاری می باشد اما به کاربردن Order by الزامی می باشد .

.  برای درک بهتر ابتدا کوئری زیر را اجرا کنید :

declare @users Table
(
name  varchar(10),
Age      int ,
RoleId    int
)
insert into @users values('osman',23,1)
insert into @users values('ramin',30,2)
insert into @users values('saman',13,1)
insert into @users values('ali',18,3)

select * from @users

 اگر کوئری فوق را اجرا کنیم نتیجه ای زیر را می بینیم :

Sql query

حال دستور select را به صورت زیر تغییر می دهیم :

select *,
ROW_NUMBER() over (order by age) as Row
 from @users

و خروجی به صورت زیر تغییر خواهد کرد :

Sql query

همانطور که مشاهده می کنید در دستور Row_Number از Partition استفاده نکرده ایم . نوشتن دستور Row_Number در دستور فوق باعث شد تا به هر ردیف یک عدد ترتیبی نسبت دهد . چون در قسمت Order by بر اساس Age گذاشته بودیم ، ابتدا بر اساس Age به صورت صعودی مرتب می کند و بعد اعداد ترتیبی را به هر ردیف نسبت می دهد .

اگر در  دستور Row_Number از Parition هم به صورت زیر استفاده کنیم :

select *,
ROW_NUMBER() over ( partition by roleid order by age) as Row
 from @users

 نتیجه حاصل به صورت زیر خواهد بود :

Row_Number

استفاده از Partition باعث می شود ابتدا یک گروه بندی بر اساس ردیف مورد نظر انجام شود و بعد برای هر گروه شمارش ترتیبی را نسبت می دهد . مثلا برای RoleId با مقدار 1 چون دو ردیف وجود داشت ،هر دو رکورد در یک گروه در نظر گرفته و اعداد ترتیبی را به آنها نسبت می دهد .

ادامه مطلب

[ دوشنبه ۱۶ بهمن ۱۳۹۶ ] [ ۱۹:۲۷ ] [ alisaadat ] [۲۵ بازدید]
.: Weblog Themes By pichak :.

درباره وبلاگ

اموزش حرفه ای و ارزان درمورد SQL
آرشيو مطالب
آمار سایت
افراد آنلاین : ۱
بازدید امروز : ۲۴
بازدید دیروز : ۶۲
هفته گذشته : ۲۴۰
ماه گذشته : ۳۹۳
سال گذشته : ۴۱۴
کل بازدید : ۴۱۴
کل مطالب : ۱۶
نظرات : ۳
امکانات وب