feature-sql1-618x350-618x350

Lohikal na Paghiling ng Query sa SQL Server

tampok-sql1-618x350

Upang matutunan ang mga pangunahing kaalaman ng SQL Server, kailangan mong magkaroon ng pag-unawa sa kung paano gumagana ang query engine ng SQL Server ng query sa SQL. Ang T-SQL ay nagsasangkot ng parehong lohikal at pisikal na pagproseso ng query. Ang pisikal na pagproseso ng query ay tungkol sa kung paano ang isang database engine ay nagproseso ng query. Lohikal na pagproseso ng query ay isang haka-haka na daloy, isang pagkakasunud-sunod ng mga clause na alam kung paano sinusuri ng SQL Server ang mga clause habang nagsasagawa ng isang query.

Karamihan sa mga programming language ay sumusunod sa pundamental ng pagpoproseso ng isang linya ng programa ayon sa linya, ngunit ang SQL server ay may tinukoy na lohikal na query sa pagpoproseso ng query upang magsagawa ng mga query.

Ang lohikal na order sa pagproseso ay nahati sa dalawang magkakaibang sangay batay sa kung ang UNION ay kasama o hindi.

Lohikal na Pag-uulit ng Query sa SQL Server Nang walang Sugnay ng Sugnay

1. MULA, SUMALI, IPINAHAYAG at SA: Sumali sa mga kondisyon ay sinusuri, at pagkatapos ay ang query filter ON ay inilalapat.

2. SAAN: Ito ay isa pang query filter na inilapat upang makuha ang mga tala na tumutugma sa WHERE filter na kundisyon.

3. GROUP BY at Aggregate Functions: Mga pagpapatakbo ng Pagpapangkat at Pagsasama-sama

4. Nagkakaroon: Ito ang ikatlong filter na inilapat sa isang pinagsama-samang resulta na nakuha mula sa grupo upang i-filter ang mga grupo

5. Piliin: Listahan ng mga hanay na ibabalik sa resulta ng query

6. DISTINCT: Upang alisin ang mga dobleng rekord

7. INIUTOS NI: Pag-aayos ng resulta Pataas / Descending

8. TOP: Naka-apply ang TOP filter upang piliin ang tinukoy na bilang ng mga hilera ng X

9. PARA SA XML: Upang bumalik ang mga resulta ng query bilang XML na format

Lohikal na Pag-uulit ng Query sa SQL Server na may Sugnay ng Sugnay

1. MULA, SUMALI, IPINAHAYAG at SA: Sumali sa mga kondisyon ay sinusuri, at pagkatapos ay ang query filter ON ay inilalapat.

2. SAAN: Ang isa pang query filter na inilalapat sa pagkuha ng mga tala na tumutugma SAAN filter ng mga kondisyon

3. GROUP BY at Aggregate Functions: Mga pagpapatakbo ng Pagpapangkat at Pagsasama-sama

4. Nagkakaroon: Ang ikatlong filter, na inilalapat sa isang pinagsamang resulta na nakuha mula sa grupo upang i-filter ang mga grupo

5. TOP: Ang TOP filter ay inilalapat upang piliin ang tinukoy na bilang ng mga hilera ng X.

6. PUMILI at UNION: Upang pagsamahin ang dalawang hanay ng resulta ng query at ibalik ito gamit ang SELECT statement

7. DISTINCT: Upang alisin ang mga dobleng rekord

8. INIUTOS NI: Pag-aayos ng resulta Pataas / Descending

9. PARA SA XML: Upang bumalik ang mga resulta ng query bilang XML na format

Mga Halimbawa upang Magpakita ng Lohikal na Pag-order ng Query Processing

KUNG OBJECT_ID ('Employee') AY HINDI NULL DROP TABLE Employee; Gumawa ng TALAAN Employee (ID INT HINDI NULL IDENTITY (1,1) PRIMARYONG KEY, FirstName VARCHAR (50) HINDI null, MiddleName VARCHAR (50) HINDI null, LastName VARCHAR (50) ); Ipasok ang mga halaga ng empleyado ('Vishwanath', 'D', 'D', '10', 9999955555); Ipasok ang mga halaga ng empleyado ('Niraj', 'Y', 'Y', '12000', 9911223344); Ipasok ang mga halaga ng empleyado ('Chetan', 'V', 'G', '14000', 989898989); Ipasok ang mga halaga ng empleyado ('Atul', 'K', 'K', '700000', 9876780987); Ipasok ang mga halaga ng empleyado ('Vishal', 'M', 'P', '40000', 7777711111);

1.WHERE Clause Evaluated bago PUMILI

Kadalasan ang mga developer na hindi maintindihan ang lohikal na pagproseso ng query ay gumagawa ng pagkakamali na ito: Sinusubukan nilang gamitin ang isang haligi alias na tinukoy sa isang pamagat na PUMILI sa isang Sugnay na SAAN. Hindi ito pinapahintulutan dahil ang isang SELECT clause ay sinusuri pagkatapos ng isang WHERE clause, kaya ang haligi ng alias ay hindi kilala sa Sugnay ng WHERE. Nagtataas ito ng error ng "Di-wastong pangalan ng haligi."

Upang malutas ang isyung ito, maaari mong gamitin ang konsepto ng talahanayan na nagmula o (Salary * 12) sa kung saan ang sugnay (na kung saan ay talagang hindi isang mahusay na kasanayan na isinasaalang-alang ang pag-optimize ng pagganap).

Piliin ang Id, (Salary * 12) bilang YearlySalary FROM Employee WHERE YearlySalary> 10000;

Msg 207, Antas 16, Estado 1, Line 3
Di-wastong pangalan ng hanay na 'Taong Siyal'.

2.WHERE Clause Evaluated before HAVING

Ang pinakamahalagang kaibahan na makilala sa pagitan ng WHERE at HAVING clause ay ang WHERE clause ay sinusuri bago ang HAVING clause. Ang WHERE clause ay inilalapat sa mga hilera at ang HAVING clause ay inilalapat sa mga grupo na nilikha gamit ang sugnay NG GROUP.

Subukan nating hanapin ang mga kagawaran mula sa talahanayan ng empleyado na mayroong isang Sum na suweldo na mas malaki kaysa sa 300000. Ang sumusunod na tanong ay nagbibigay sa amin ng isang resulta, ngunit hindi ito tinutupad ang kinakailangan sa query. Nagdagdag kami ng isang filter sa Sugnay ng WHERE na sinasala ang mga empleyado na may suweldo na higit sa 300000, hindi mga kagawaran.

Ang mga ito ay mga maling pagtatangka upang salain ang mga kagawaran na ang suweldo ay mas malaki kaysa sa 300000.

Piliin ang DeptId, SUM (Salary) bilang SumOfSalary FROM Employee WHERE Salary> 300000 GROUP BY DeptId;
DeptId SumOfSalary 2 700000

Mag-right Query sa pag-filter sa HAVING clause.

Piliin ang DeptId, SUM (Salary) bilang SumOfSalary FROM Employee GROUP NG DeptId HAVING SUM (Salary)> 300000;
DeptId SumOfSalary 2 752000

3.Referring Haligi Alias ​​sa isang SELECT Clause

Ang mga haligi ng mga aliases ay hindi nakikita sa ibang expression sa parehong SELECT clause. Ito ay nagpapataas ng isang error na "Di-wastong pangalan ng haligi YearlySalary" dahil sinusubukan nating i-refer ang mga alyas na nilikha sa parehong listahan ng piling. Ang dahilan kung bakit sinusuri ng T-SQL ang lahat ng mga expression na lumilitaw sa parehong logical query processing phase sa isang all-at-minsan na paraan.

PUMILI (Salary * 12) bilang YearlySalary, YearlySalary / 100 FROM Employee;

Msg 207, Antas 16, Estado 1, Line 13
Di-wastong pangalan ng hanay na 'Taong Siyal'.

4.Referring Column Alias ​​sa ORDER BY Clause

Kapag lumikha kami ng isang haligi alias sa isang PUMILI sugnay at subukan upang ayusin ang resulta batay sa nilikha pangalan ng alias haligi, ito ay pinapayagan dahil sa bawat lohikal na pagproseso ng query, isang piling haligi ay sinusuri bago ang isang ORDER BY sugnay.

PUMILI (Salary * 12) bilang YearlySalary FROM Employee ORDER BY YearlySalary DESC;
YearlySalary

8400000
480000
168000
144000
144000

Magbasa pa tungkol sa Database at SQL programming mula sa Tech-Recipe.

pinagmulan

Mag-iwan ng komento