Fadak - Programming - SQL (Structured Query Language — «язык структурированных запросов»)
: 2018-11-05Visitor Count : 401

SQL (Structured Query Language — «язык структурированных запросов»)



آموزش SQL

foreach ($_POST as $key => $value) {
$_POST[$key] = htmlspecialchars($value, ENT_QUOTES,"UTF-8");
}

$newpost = array_map ( 'htmlspecialchars' , $_POST );

 

SELECT (9) DISTINCT (11) TOP (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) WITH {CUBE | ROLLUP} (7) HAVING (10) ORDER BY

The first noticeable aspect of SQL that is different than other programming languages is the order in which the code is processed. In most programming languages, the code is processed in the order in which it is written. In SQL, the first clause that is processed is the FROM clause, while the SELECT clause, which appears first, is processed almost last.

Each step generates a virtual table that is used as the input to the following step. These virtual tables are not available to the caller (client application or outer query). Only the table generated by the final step is returned to the caller. If a certain clause is not specified in a query, the corresponding step is simply skipped. Brief Description of Logical Query Processing Phases

Don't worry too much if the description of the steps doesn't seem to make much sense for now. These are provided as a reference. Sections that come after the scenario example will cover the steps in much more detail.

01 FROM: A Cartesian product (cross join) is performed between the first two tables in the FROM clause, and as a result, virtual table VT1 is generated.

02 ON: The ON filter is applied to VT1. Only rows for which the is TRUE are inserted to VT2.

03 OUTER (join): If an OUTER JOIN is specified (as opposed to a CROSS JOIN or an INNER JOIN), rows from the preserved table or tables for which a match was not found are added to the rows from VT2 as outer rows, generating VT3. If more than two tables appear in the FROM clause, steps 1 through 3 are applied repeatedly between the result of the last join and the next table in the FROM clause until all tables are processed.

04 WHERE: The WHERE filter is applied to VT3. Only rows for which the is TRUE are inserted to VT4.

05 GROUP BY: The rows from VT4 are arranged in groups based on the column list specified in the GROUP BY clause. VT5 is generated.

06 CUBE | ROLLUP: Supergroups (groups of groups) are added to the rows from VT5, generating VT6.

07 HAVING: The HAVING filter is applied to VT6. Only groups for which the is TRUE are inserted to VT7.

08 SELECT: The SELECT list is processed, generating VT8.

09 DISTINCT: Duplicate rows are removed from VT8. VT9 is generated.

10 ORDER BY: The rows from VT9 are sorted according to the column list specified in the ORDER BY clause. A cursor is generated (VC10).

11 TOP: The specified number or percentage of rows is selected from the beginning of VC10. Table VT11 is generated and returned to the caller.

 

سوالات SQL در مصاحبه‎ها هستند، می‌پردازیم:
1. دستور SQL برای یافتن دومین حقوق بیشتر کارمندان را بنویسید
به روش‎های مختلفی می‌توانید به این سوال پاسخ دهید. می‌توانید از SQL Joint یا Subquery برای حل این مسأله استفاده کنید. این سوال را می‌توان با استفاده از دستور زیر حل کرد:


select MAX(Salary) from Employee WHERE Salary NOT IN (select MAX(Salary) from Employee);.


2. دستور SQL برای یافتن حقوق ماکسیمم در هر بخش را بنویسید
می توانید حقوق ماکسیمم در هر بخش را با گروه بندی کردن همه پرونده‎ها انجام دهید. با استفاده از DepID و سپس با کمک دستور Max، حقوق ماکسیمم در هر گروه یا بخش را محاسبه کنید:

SELECT DepID,Max(Salary) FROM Empoloyee GROUP BY DepID

.
3. دستور SQL برای نشان دادن تاریخ را بنویسید
SQLدستوری دارد که می‌توانید با آن تاریخ را بیابید. اگر از این دستور استفاده کنید، نمایش تاریخ برمی گردد. این دستور در سرورSQL مایکروسافت و دیگر نرم افزارها، مثل Oracle و MySQL کار می‌کند.


SELECT GetDate();

4. دستور SQLرا بنویسید تا بررسی کند که آیا تاریخی که در دستور عنوان شده با تاریخ فرمت یکی است یا خیر
SQL فرمانی در خودش دارد که فرمت خاص تاریخ داده شده را بررسی کند. می‌توانید از فرمان IaDate() برای این هم استفاده کنید. فرمان MSSQL هم هست که شاید در Oracle یا MySQL یا هر پایگاه داده‎ای دیگری پشتیبانی نشود.


SELECT ISDate)’1/08/13’) AS “MM/DD/YY”);

5. دستور SQL برای پرینت نام کارمندی مشخص که DOB وی بین 01/01/1960 تا 31/12/1975 باشد
این دستوری زیرکانه است که می‌توانید با استفاده از آن در عبارت، تمام پرونده‎هایی که به شامل این تاریخ هستند را به دست آورید. با ترکیب زیر پاسخ را می‌یابید.


SELECT DISTINCT EmpName FROM Employees WHERE DOB BETWEEN ‘01/01/1960’ AND ‘31/12/1975’;

6. دستور SQL بنویسید که شماره کارمندی را با توجه به جنسیتش بیابد که DOB وی بین 01/01/1960 تا 31/12/1975 باشد
پاسخ به این سوال بسیار آسان است. از عبارتی ساده برای کسب پاسخ استفاده کنید:


SELECT COUNT(*), sex from Employees WHERE DOB BETWEEN '01/01/1960' AND '31/12/1975' GROUP BY sex;

7. دستور SQL بنویسید که کارمندی را بیابد که حقوقش برابر یا بیشتر از 10000باشد


SELECT EmpName FROM Employees WHERE Salary>=10000;

8. دستور SQL برای یافتن سال از تاریخ را بنویسید
می توانید با دستور زیر، در سرور SQL 2008، سال را از تاریخ به دست آورید


SELECT YEAR(GETDATE()) as "Year";

9. دستور SQL برای یافتن سطرهای تکراری در پایگاه داده‎ها را بنویسید. سپس دستور SQL برای حذف آنها را قید کنید.
می توانید از دستور ساده‎ای مثل زیر برای انتخاب داده‎ای مشخص در پرونده‎ای خاص استفاده کنید


SELECT * FROM emp a WHERE rowid = (SELECT MAX(rowid) FROM EMP b WHERE a.empno=b.empno)


و برای حذف:


DELETE FROM emp a WHERE rowid != (SELECT MAX(rowid) FROM emp b WHERE a.empno=b.empno);

10. جدولی با دو ردیف دانش آموز و نمرات وجود دارد، باید دانش آموزانی را بیابید که نمراتشان از متوسط نمره‎ها بیشتر باشد، مثلاً فهرست متوسط نمرات دانش آموزان قید شده.
این دستور را می‌توان با کمک دستور تابعی مثل زیر نوشت:


SELECT student, marks from table where marks > SELECT AVG(marks) from table)

 

 

 

 

 

 

SQL Statement Syntax  
AND / OR SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition
                                 اضافه کردن شرط
ALTER TABLE ALTER TABLE table_name
ADD column_name datatype
or
ALTER TABLE table_name
DROP COLUMN column_name
 
AS (alias) SELECT column_name AS column_alias
FROM table_name
or
SELECT column_name
FROM table_name  AS table_alias
 
BETWEEN SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
 
CREATE DATABASE CREATE DATABASE database_name  ساخت دیتابیس
CREATE TABLE CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...
)
 ساخت جدول
CREATE INDEX CREATE INDEX index_name
ON table_name (column_name)
or
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
یکتا کردن ستون
CREATE VIEW CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
 
DELETE DELETE FROM table_name
WHERE some_column=some_value
or
DELETE FROM table_name
(Note: Deletes the entire table!!)
DELETE * FROM table_name
(Note: Deletes the entire table!!)
 
DROP DATABASE DROP DATABASE database_name  حذف یک دیتابیس
DROP INDEX DROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL)
 
DROP TABLE DROP TABLE table_name  حذف جدول
EXISTS IF EXISTS (SELECT * FROM table_name WHERE id = ?)
BEGIN
--do what needs to be done if exists
END
ELSE
BEGIN
--do what needs to be done if not
END
 
GROUP BY SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
 
HAVING 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
 
IN SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
 
INSERT INTO INSERT INTO table_name
VALUES (value1, value2, value3,....)
or
INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)
درج یک خط
INNER JOIN SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
 
LEFT JOIN SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
 
RIGHT JOIN SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
 
FULL JOIN SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
 
LIKE SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern
شرط جهت جستجو
ORDER BY SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]
 
SELECT SELECT column_name(s)
FROM table_name
انتخاب به همراه ستون‎ها
SELECT * SELECT *
FROM table_name
انتخاب به همرااه همه ستون‎ها
SELECT DISTINCT SELECT DISTINCT column_name(s)
FROM table_name
 
SELECT INTO SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_table_name
or
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name
 
SELECT TOP SELECT TOP number|percent column_name(s)
FROM table_name
 
TRUNCATE TABLE TRUNCATE TABLE table_name  
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
 
UPDATE UPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value
به روز رسانی جدول
WHERE SELECT column_name(s)
FROM table_name
WHERE column_name operator value
 گذاشتن شرط
     
     

 


   

2000-2016 CMS Fadak. ||| Version : 4.2-b1 ||| This page was produced in : 0.002 Seconds