ã¯ããã«ãšDDL-ããŒã¿å®çŸ©èšèª
ããŒã1-habrahabr.ru/post/255361
DML-ããŒã¿æäœèšèª
æåã®éšåã§ã¯ãMERGEã³ãã³ããé€ããã»ãŒãã¹ãŠã®ã³ãã³ãã»ããã䜿çšããŠãDMLèšèªã«ã€ããŠå°ã觊ããŸããã
ç§èªèº«ã®çµéšã®ã·ãŒã±ã³ã¹ã«åŸã£ãŠDMLã«ã€ããŠã話ããŸãã éäžã§ã泚ç®ãã¹ããã€ãã€ããããå Žæã«ã€ããŠã説æããŸãããããã®ãã€ãã€ããããå Žæã¯ãSQLèšèªã®å€ãã®æ¹èšã§äŒŒãŠããŸãã
ãªããªã æç§æžã¯ïŒããã°ã©ããŒã ãã§ãªãïŒå¹ åºãèªè å±€ã«åœãŠãããŠããããã説æãé©åãªå ŽåããããŸãã é·ããŠéå±ã§ãã ããã¯ãå°éçãªæŽ»åã®çµæãšããŠå®éã«äž»ã«åŸãããè³æã«å¯Ÿããç§ã®ããžã§ã³ã§ãã
ãã®ãã¥ãŒããªã¢ã«ã®äž»ãªç®çã¯ãSQLèšèªã®æ¬è³ªãå®å šã«ç解ãããã®æ§é ãæ£ãã䜿çšããæ¹æ³ãæããããšã§ãã ãã®åéã®å°é家ã¯ããã®è³æããããããšã«èå³ããããããããŸãããå€å圌ãã¯èªåèªèº«ã®ããã«äœãæ°ãããã®ãåŒãåºãããšãã§ããããèšæ¶ããªãã¬ãã·ã¥ããããã«èªãã ãã§åœ¹ç«ã€ãããããŸããã ã¿ããªãèå³ãæã£ãŠãããããšãé¡ã£ãŠããŸãã
ãªããªã MS SQLããŒã¿ããŒã¹æ¹èšã®DMLã¯ãSELECTã³ã³ã¹ãã©ã¯ãã®æ§æãšéåžžã«é¢é£ããŠããã®ã§ãããããDMLã«ã€ããŠè©±ãå§ããŸãã ç§ã®æèŠã§ã¯ãSELECTã³ã³ã¹ãã©ã¯ãã¯DMLèšèªã®æãéèŠãªã³ã³ã¹ãã©ã¯ãã§ãã éšåãç ç²ã«ããŠãå¿ èŠãªããŒã¿ãããŒã¿ããŒã¹ããéžæãããŸãã
DMLèšèªã«ã¯ã次ã®æ§æèŠçŽ ãå«ãŸããŠããŸãã
- SELECT-ããŒã¿éžæ
- INSERT-æ°ããããŒã¿ãæ¿å ¥ããŸã
- æŽæ°-ããŒã¿æŽæ°
- DELETE-ããŒã¿åé€
- MERGE-ããŒã¿ã®ããŒãž
ãã®ããŒãã§ã¯ã次ã®ãããªSELECTã³ãã³ãã®åºæ¬çãªæ§æã®ã¿ãæ€èšããŸãã
SELECT [DISTINCT] _ * FROM WHERE ORDER BY _
SELECTã¹ããŒãã¡ã³ãã®ãããã¯ã¯éåžžã«åºç¯å²ã§ããããããã®ããŒãã§ã¯ãã®åºæ¬çãªæ§æã®ã¿ã«çŠç¹ãåœãŠãŸãã åºç€ãããç¥ããªããšããã£ãšè€éãªæ§é ãç 究ãå§ããããšãã§ããªããšæããŸãã ãã®åŸããã¹ãŠããã®åºæ¬èšèšïŒãµãã¯ãšãªãé¢é£ä»ããªã©ïŒãäžå¿ã«å±éãããŸãã
ãŸãããã®ããŒãã®äžéšãšããŠãTOPãªãã¡ãŒã«ã€ããŠã説æããŸãã ç§ã¯æå³çã«ãã®æ§æãåºæ¬çãªæ§æã§ç€ºããŸããã§ããã SQLèšèªã®æ¹èšããšã«ç°ãªãæ¹æ³ã§å®è£ ãããŸãã
DDLèšèªãããéçãªå Žåãã€ãŸã ããã䜿çšããŠãåäœæ§é ïŒããŒãã«ããªã¬ãŒã·ã§ã³ã·ãããªã©ïŒãäœæãããDMLèšèªã¯æ¬è³ªçã«åçã§ããããã§ã¯ãããŸããŸãªæ¹æ³ã§æ£ããçµæãåŸãããšãã§ããŸãã
ãã¬ãŒãã³ã°ã¯ãã¹ããããã€ã¹ãããã¢ãŒãã§ãç¶ç¶ãããŸãã èªããšãã¯ãããã«èªåã®æã§äŸãè©ŠããŠã¿ãŠãã ããã çµæã®åæãè¡ã£ãåŸãçŽæçã«ç解ããŠã¿ãŠãã ããã ããšãã°ãé¢æ°ã®å€ãªã©ãç解ã§ããªããã®ãæ®ã£ãŠããå Žåã¯ãã€ã³ã¿ãŒãããã«åãåãããŠãã ããã
äŸã¯ãæåã®éšåã§DDL + DMLã䜿çšããŠäœæããããã¹ãããŒã¿ããŒã¹ã«è¡šç€ºãããŸãã
æåã®éšåã§ããŒã¿ããŒã¹ãäœæããªãã£ã人ïŒèª°ããDDLèšèªã«èå³ãããããã§ã¯ãªãããïŒã«ã¯ã次ã®ã¹ã¯ãªããã䜿çšã§ããŸãã
ããŒã¿ããŒã¹ãã¹ããäœæããã¹ã¯ãªãã
-- CREATE DATABASE Test GO -- Test USE Test GO -- CREATE TABLE Positions( ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar(30) NOT NULL ) CREATE TABLE Departments( ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Departments PRIMARY KEY, Name nvarchar(30) NOT NULL ) GO -- SET IDENTITY_INSERT Positions ON INSERT Positions(ID,Name)VALUES (1,N''), (2,N''), (3,N''), (4,N' ') SET IDENTITY_INSERT Positions OFF GO SET IDENTITY_INSERT Departments ON INSERT Departments(ID,Name)VALUES (1,N''), (2,N''), (3,N'') SET IDENTITY_INSERT Departments OFF GO -- CREATE TABLE Employees( ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, HireDate date NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME(), ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES Employees(ID), CONSTRAINT UQ_Employees_Email UNIQUE(Email), CONSTRAINT CK_Employees_ID CHECK(ID BETWEEN 1000 AND 1999), INDEX IDX_Employees_Name(Name) ) GO -- INSERT Employees (ID,Name,Birthday,Email,PositionID,DepartmentID,ManagerID)VALUES (1000,N' ..','19550219','i.ivanov@test.tt',2,1,NULL), (1001,N' ..','19831203','p.petrov@test.tt',3,3,1003), (1002,N' ..','19760607','s.sidorov@test.tt',1,2,1000), (1003,N' ..','19820417','a.andreev@test.tt',4,3,1000)
ããã§ãDMLèšèªã®åŠç¿ãéå§ããæºåãæŽããŸããã
SELECT-ããŒã¿ãµã³ããªã³ã°æŒç®å
ãŸããã¢ã¯ãã£ããªã¯ãšãªãšãã£ã¿ãŒã®å ŽåãããããããŠã³ãªã¹ãã§éžæããããUSE Testã³ãã³ãã䜿çšããŠãçŸåšã®ãã¹ãããŒã¿ããŒã¹ãäœæããŸãã
SELECTã®æãåºæ¬çãªåœ¢åŒããå§ããŸãããã
SELECT * FROM Employees
ãã®ã¯ãšãªã§ã¯ãEmployeesããŒãã«ãããã¹ãŠã®åïŒããã¯ã*ãã§ç€ºãããŸãïŒãè¿ãããã«æ±ããããŸã-ãSELECT all_fields from the employees_tableããšããŠèªã¿åãããšãã§ããŸãã ã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ãååšããå Žåãè¿ãããããŒã¿ã¯ã»ãšãã©ã®å ŽåãIDåã§ãœãŒããããŸãïŒãã ããããã¯ãã€ã³ãã§ã¯ãããŸãããã»ãšãã©ã®å ŽåãORDER BY ...ã䜿çšããŠæ瀺çã«ãœãŒããæå®ããããã§ãïŒ ïŒ
ID | ãåå | èªçæ¥ | ã¡ãŒã« | äœçœ®ID | DepartmentID | éã | ãããŒãžã£ãŒID |
---|---|---|---|---|---|---|---|
1000 | ã€ã¯ããI.I. | 1955-02-19 | i.ivanov@test.tt | 2 | 1 | 2015-04-08 | ãã« |
1001 | ããããP.P. | 1983-12-03 | p.petrov@test.tt | 3 | 3 | 2015-04-08 | 1003 |
1002 | ã·ãããS.S. | 1976-06-07 | s.sidorov@test.tt | 1 | 2 | 2015-04-08 | 1000 |
1003 | ã¢ã³ãã¬ãšãA.A. | 1982-04-17 | a.andreev@test.tt | 4 | 3 | 2015-04-08 | 1000 |
äžè¬ã«ãMS SQLãã€ã¢ã¬ã¯ãã§ã¯ãæãåçŽãªåœ¢åŒã®SELECTã¯ãšãªã«ã¯FROMãããã¯ãå«ãŸããªãå ŽåããããŸãããã®å Žåãããã䜿çšããŠå€ãååŸã§ããŸãã
SELECT 5550/100*15, SYSDATETIME(), -- SIN(0)+COS(0)
ïŒååãªãïŒ | ïŒååãªãïŒ | ïŒååãªãïŒ |
---|---|---|
825 | 2015-04-11 12ïŒ12ïŒ36.0406743 | 1 |
åŒïŒ5550/100 * 15ïŒã®çµæã¯825ã§ããããèšç®æ©ã«é Œããšå€ïŒ832.5ïŒãåŸãããããšã«æ³šæããŠãã ããã 825ã®çµæã¯ããã®åŒã§ã¯ãã¹ãŠã®æ°å€ãæŽæ°ã§ãããããçµæãæŽæ°ã§ããããšãå€æããŸããã ïŒ5550/100ïŒã¯ïŒ55.5ïŒã§ã¯ãªã55ãäžããŸãã
MS SQLã®æ¬¡ã®ããžãã¯ãæãåºããŠãã ããã
- æŽæ°/æŽæ°=æŽæ°ïŒã€ãŸãããã®å ŽåæŽæ°ã®é€ç®ãè¡ãããŸãïŒ
- å®æ°/å šäœ=å®æ°
- å šäœ/ãªã¢ã«=ãªã¢ã«
ã€ãŸã çµæã¯ãã倧ããªåã«å€æããããããæåŸã®2ã€ã®ã±ãŒã¹ã§ã¯å®æ°ãååŸããŸãïŒæ°åŠã®ããã«ãå®æ°ã®ç¯å²ã¯æŽæ°ã®ç¯å²ãã倧ãããããçµæã¯ããã«å€æãããŸãïŒã
SELECT 123/10, -- 12 123./10, -- 12.3 123/10. -- 12.3
ããã§ïŒ123.ïŒ=ïŒ123.0ïŒããã®å Žåã¯0ãç Žæ£ã§ãããã€ã³ãã®ã¿ãæ®ãããšãã§ããŸãã
ä»ã®ç®è¡æŒç®ã«ã€ããŠããåãããžãã¯ãé©çšãããŸããé€ç®ã®å Žåã¯ããã®ãã¥ã¢ã³ã¹ãããé©åã§ãã
ãããã£ãŠãæ°å€åã®ããŒã¿åã«æ³šæããŠãã ããã ãã®å Žåãå šäœã§ãããå®éã®çµæãååŸããå¿ èŠãããå Žåã¯ãå€æã䜿çšããããå®æ°ïŒ123.ïŒãšããŠæå®ãããæ°å€ã®åŸã«ããããé 眮ããŸãã
CASTãŸãã¯CONVERTé¢æ°ã䜿çšããŠããã£ãŒã«ããå€æã§ããŸãã ããšãã°ãIDãã£ãŒã«ãã䜿çšããŸããã¿ã€ãã¯intã§ãã
SELECT ID, ID/100, -- CAST(ID AS float)/100, -- CAST float CONVERT(float,ID)/100, -- CONVERT float ID/100. -- FROM Employees
ID | ïŒååãªãïŒ | ïŒååãªãïŒ | ïŒååãªãïŒ | ïŒååãªãïŒ |
---|---|---|---|---|
1000 | 10 | 10 | 10 | 10.000000 |
1001 | 10 | 10.01 | 10.01 | 10.010000 |
1002 | 10 | 10.02 | 10.02 | 10.020000 |
1003 | 10 | 10.03 | 10.03 | 10.030000 |
ã¡ã¢ãžã ORACLEããŒã¿ããŒã¹ã§ã¯ãFROMãããã¯ã®ãªãæ§æã¯ç¡å¹ã§ã;ããã§ããã®ç®çã®ããã«ã1è¡ãå«ãDUALã·ã¹ãã ããŒãã«ã䜿çšãããŸãã
SELECT 5550/100*15, -- ORACLE 832.5 sysdate, sin(0)+cos(0) FROM DUAL
ã泚æ å€ãã®RDBã®ããŒãã«åã®åã«ã¯ãã¹ããŒãã®ååãä»ããããšãã§ããŸãã
SELECT * FROM dbo.Employees -- dbo â
ã¹ããŒãã¯ãç¬èªã®ååãæã€ããŒã¿ããŒã¹ã®è«çãŠãããã§ãããããŒãã«ããã¥ãŒãªã©ã®ããŒã¿ããŒã¹ãªããžã§ã¯ããã°ã«ãŒãåã§ããŸãã
ç°ãªãããŒã¿ããŒã¹ã®ã¹ããŒãã®å®çŸ©ã¯ç°ãªãå ŽåããããŸããã¹ããŒããããŒã¿ããŒã¹ã®ãŠãŒã¶ãŒã«çŽæ¥é¢é£ããŠããå Žåãã€ãŸã ãã®å Žåãã¹ããŒã ãšãŠãŒã¶ãŒã¯å矩èªã§ãããã¹ããŒã ã§äœæããããã¹ãŠã®ãªããžã§ã¯ãã¯åºæ¬çã«ãã®ãŠãŒã¶ãŒã®ãªããžã§ã¯ãã§ãããšèšããŸãã MS SQLã§ã¯ãã¹ããŒãã¯ç¬ç«ããŠäœæã§ããç¬ç«ããè«çãŠãããã§ãïŒCREATE SCHEMAãåç §ïŒã
ããã©ã«ãã§ã¯ãdboïŒããŒã¿ããŒã¹ææè ïŒãšåŒã°ããMS SQLããŒã¿ããŒã¹ã«åäžã®ã¹ããŒããäœæãããäœæããããã¹ãŠã®ãªããžã§ã¯ãã¯ããã©ã«ãã§ãã®ã¹ããŒãã«äœæãããŸãã ãããã£ãŠãã¯ãšãªã§ããŒãã«ã®ååãåã«æå®ãããšãçŸåšã®ããŒã¿ããŒã¹ã®dboã¹ããŒãã§æ€çŽ¢ãããŸãã ç¹å®ã®ã¹ããŒãã§ãªããžã§ã¯ããäœæããå Žåããªããžã§ã¯ãã®ååã®åã«ã¹ããŒãã®ååãä»ããå¿ èŠããããŸãïŒäŸïŒãCREATE TABLE schema_name.table_nameïŒ...ïŒãïŒã
MS SQLã®å Žåãã¹ããŒãåã®åã«ãæå®ãããã¹ããŒããååšããããŒã¿ããŒã¹ã®ååãä»ããããšãã§ããŸãã
SELECT * FROM Test.dbo.Employees -- _._.
ãã®ãããªæ¹è¯ã¯ãããšãã°æ¬¡ã®å Žåã«åœ¹ç«ã¡ãŸãã
- 1ã€ã®ãªã¯ãšã¹ãã§ãç°ãªãã¹ããŒã ãŸãã¯ããŒã¿ããŒã¹ã«ãããªããžã§ã¯ããåç §ããŸã
- ããã¹ããŒããŸãã¯ããŒã¿ããŒã¹ããå¥ã®ã¹ããŒããŸãã¯ããŒã¿ããŒã¹ã«ããŒã¿ã転éããå¿ èŠããããŸã
- 1ã€ã®ããŒã¿ããŒã¹ã«ããå Žåãå¥ã®ããŒã¿ããŒã¹ããããŒã¿ãèŠæ±ããå¿ èŠããããŸã
- ãªã©
ã¹ããŒãã¯ãããŒã¿ããŒã¹ã¢ãŒããã¯ãã£ãç¹ã«å€§èŠæš¡ãªããŒã¿ããŒã¹ãéçºãããšãã«äœ¿çšãããšäŸ¿å©ãªéåžžã«äŸ¿å©ãªããŒã«ã§ãã
ãŸãããªã¯ãšã¹ãã®ããã¹ãã§ã¯ãåäžè¡ã®ã-...ããšè€æ°è¡ã®ã/ * ... * /ãã³ã¡ã³ãã®äž¡æ¹ã䜿çšã§ããããšãå¿ããªãã§ãã ããã ãªã¯ãšã¹ãã倧ããè€éãªå Žåãã³ã¡ã³ãã¯ãããªããä»ã®èª°ããããã°ããããŠããã®æ§é ãèŠãããç解ãããããã®ã«å€§ãã«åœ¹ç«ã¡ãŸãã
ããŒãã«ã«å€ãã®åããããç¹ã«ããŒãã«ã«ãŸã å€ãã®è¡ãããå Žåãããã«ãããã¯ãŒã¯çµç±ã§ããŒã¿ããŒã¹ã«ã¯ãšãªãè¡ãå Žåã¯ãå¿ èŠãªãã£ãŒã«ããã«ã³ãã§çŽæ¥ãªã¹ãããŠéžæããããšããå§ãããŸãã
SELECT ID,Name FROM Employees
ã€ãŸã ããã§ã¯ãããŒãã«ããIDãšNameãã£ãŒã«ãã®ã¿ãè¿ãå¿ èŠããããšèšããŸãã çµæã¯æ¬¡ã®ããã«ãªããŸãïŒãšããã§ãããã§ãªããã£ãã€ã¶ãŒã¯Nameãã£ãŒã«ãã«ãã£ãŠäœæãããã€ã³ããã¯ã¹ã䜿çšããããšã«ããŸããïŒã
ID | ãåå |
---|---|
1003 | ã¢ã³ãã¬ãšãA.A. |
1000 | ã€ã¯ããI.I. |
1001 | ããããP.P. |
1002 | ã·ãããS.S. |
ã¡ã¢ãžã ããšãã°ãã©ã®ã€ã³ããã¯ã¹ã䜿çšãããŠãããã調ã¹ããªã©ãããŒã¿ã®ãµã³ããªã³ã°æ¹æ³ã確èªãããšåœ¹ç«ã€å ŽåããããŸãã ããã¯ããæšå®å®è¡èšç»ã®è¡šç€º-èšç®èšç»ã®è¡šç€ºããã¿ã³ãã¯ãªãã¯ãããããå®éã®å®è¡èšç»ãå«ãã-çµæã«ã¯ãšãªå®è¡ã®å®éã®èšç»ãå«ããããèšå®ããå Žåã«å®è¡ã§ããŸãïŒ
å®è¡èšç»ã®åæã¯ãã¯ãšãªã®æé©åã«éåžžã«åœ¹ç«ã¡ãŸããã©ã®ã€ã³ããã¯ã¹ãæ¬ èœããŠãããããŸãã¯ã©ã®ã€ã³ããã¯ã¹ããŸã£ãã䜿çšãããŠãããåé€ã§ããããèŠã€ããããšãã§ããŸãã
DMLãç¿åŸãå§ããã°ããã®å Žåã¯ãããã»ã©éèŠã§ã¯ãªãã®ã§ãã¡ã¢ãåããå®å šã«å¿ããããšãã§ããŸãïŒããã¯åœ¹ã«ç«ããªããããããŸããïŒ-ç§ãã¡ã®æåã®ç®æšã¯ãDMLèšèªã®åºæ¬ãåŠã³ãæ£ãã䜿çšããæ¹æ³ãåŠã¶ããšã§ããæé©åã¯å¥ã®æè¡ã§ãã 客芳çãªèŠ³ç¹ããæ£ããçµæãè¿ãã¯ãšãªãæã«æã£ãŠããã ãã§ãåã ã®äººããã§ã«æé©åã«åãçµãã§ããããšãããéèŠãªå ŽåããããŸãã æåã«ãç®æšãéæããããã®æ段ã䜿çšããŠã¯ãšãªãæ£ããèšè¿°ããæ¹æ³ãåŠç¿ããå¿ èŠããããŸãã ããã§éæããªããã°ãªããªãäž»ãªç®æšã¯ãã¯ãšãªãæ£ããçµæãè¿ãããšã§ãã
ããŒãã«ã®ãšã€ãªã¢ã¹ãå®çŸ©ãã
åããªã¹ããããšããåã®åã«FROMãããã¯ã«ããããŒãã«ã®ååãä»ããããšãã§ããŸãã
SELECT Employees.ID,Employees.Name FROM Employees
ãã ããéåžžããã®æ§æã¯äœ¿çšããã®ã«äžäŸ¿ã§ãã ããŒãã«åãé·ãå ŽåããããŸãã ãããã®ç®çã®ããã«ãéåžžãçãååãæå®ããã³é©çšãããŸã-ãšã€ãªã¢ã¹ïŒ
SELECT emp.ID,emp.Name FROM Employees AS emp
ãŸãã¯
SELECT emp.ID,emp.Name FROM Employees emp -- AS ( )
ããã§ãempã¯ããã®SELECTã¹ããŒãã¡ã³ãã®ã³ã³ããã¹ãã§äœ¿çšã§ããEmployeesããŒãã«ã®ãšã€ãªã¢ã¹ã§ãã ã€ãŸã ãã®SELECTã¹ããŒãã¡ã³ãã®ã³ã³ããã¹ãã§ã¯ãããŒãã«ã«æ°ããååãä»ãããšèšããŸãã
ãã¡ããããã®å Žåãã¯ãšãªçµæã¯ãSELECT IDãName FROM EmployeesããšãŸã£ããåãã«ãªããŸãã ãããå¿ èŠãªçç±ã¯ïŒãã®éšåã§ãïŒããã«ç解ãããŸãããçŸæç¹ã§ã¯ãããŒãã«åãçŽæ¥ãŸãã¯ãšã€ãªã¢ã¹ã䜿çšããŠååã®åã«æå®ïŒæå®ïŒã§ããããšãèŠããŠããŸãã ããã§ã¯ã2ã€ã®ãã¡1ã€ã䜿çšã§ããŸãã ãšã€ãªã¢ã¹ãèšå®ããå Žåããšã€ãªã¢ã¹ã䜿çšããå¿ èŠããããŸãããããŒãã«åã¯äœ¿çšã§ããªããªããŸãã
ã¡ã¢ãžã ORACLEã§ã¯ãASããŒã¯ãŒããªãã§ããŒãã«ãšã€ãªã¢ã¹ãæå®ãããªãã·ã§ã³ã®ã¿ãèš±å¯ãããŸãã
DISTINCT-éè€ããè¡ãåé€ãã
DISTINCTããŒã¯ãŒãã¯ãã¯ãšãªçµæããéè€ããè¡ãåé€ããããã«äœ¿çšãããŸãã 倧ãŸãã«èšãã°ãæåã«DISTINCTãªãã·ã§ã³ãªãã§ã¯ãšãªãå®è¡ããããã®åŸããã¹ãŠã®éè€ãçµæããã¹ããŒããããšæ³åããŠãã ããã äŸã䜿çšããŠããæ確ã«ããããã«ããã瀺ããŸãããïŒ
-- CREATE TABLE #Trash( ID int NOT NULL PRIMARY KEY, Col1 varchar(10), Col2 varchar(10), Col3 varchar(10) ) -- INSERT #Trash(ID,Col1,Col2,Col3)VALUES (1,'A','A','A'), (2,'A','B','C'), (3,'C','A','B'), (4,'A','A','B'), (5,'B','B','B'), (6,'A','A','B'), (7,'A','A','A'), (8,'C','A','B'), (9,'C','A','B'), (10,'A','A','B'), (11,'A',NULL,'B'), (12,'A',NULL,'B') -- DISTINCT SELECT Col1,Col2,Col3 FROM #Trash -- DISTINCT SELECT DISTINCT Col1,Col2,Col3 FROM #Trash -- DROP TABLE #Trash
ããã¯èŠèŠçã«æ¬¡ã®ããã«ãªããŸãïŒãã¹ãŠã®è€è£œã«ã¯åãè²ã®ããŒã¯ãä»ããããŸãïŒã
次ã«ãããå®çšçãªäŸã䜿çšããŠããããé©çšã§ããå ŽæãèŠãŠã¿ãŸããã-EmployeesããŒãã«ããéšéã®äžæã®èå¥åã®ã¿ãè¿ããŸãïŒã€ãŸããåŸæ¥å¡ãç»é²ãããŠããéšéã®IDãèŠã€ããŸãïŒïŒ
SELECT DISTINCT DepartmentID FROM Employees
DepartmentID |
---|
1 |
2 |
3 |
ããã«3è¡ãããŸããã 1ã€ã®éšéïŒITïŒã«2人ã®åŸæ¥å¡ãããŸãã
次ã«ãã©ã®éšçœ²ã§ã©ã®æçš¿ã衚瀺ããããã確èªããŸãã
SELECT DISTINCT DepartmentID,PositionID FROM Employees
DepartmentID | äœçœ®ID |
---|---|
1 | 2 |
2 | 1 |
3 | 3 |
3 | 4 |
ããã§ã¯4è¡ã«ãªããŸããã ãã®è¡šã«ã¯éè€ããçµã¿åããïŒDepartmentIDãPositionIDïŒã¯ãããŸããã
ãã°ããDDLã«æ»ã
ãã¢äŸã®ããŒã¿ãäžè¶³ãå§ããŠããã®ã§ãããåºç¯å²ãã€æ確ã«èª¬æãããã®ã§ãEmployessããŒãã«ãå°ãæ¡åŒµããŸãããã ããã«ããç¹°ãè¿ãã¯åŠç¿ã®æ¯ã§ãããšèšã£ãŠããå°ããªDDLãæãåºããŸããããäžåºŠãå°ãé²ãã§UPDATEã¹ããŒãã¡ã³ããé©çšããŸãããã
-- ALTER TABLE Employees ADD LastName nvarchar(30), -- FirstName nvarchar(30), -- MiddleName nvarchar(30), -- Salary float, -- - BonusPercent float -- GO -- ( ) UPDATE Employees SET LastName=N'',FirstName=N'',MiddleName=N'', Salary=5000,BonusPercent= 50 WHERE ID=1000 -- .. UPDATE Employees SET LastName=N'',FirstName=N'',MiddleName=N'', Salary=1500,BonusPercent= 15 WHERE ID=1001 -- .. UPDATE Employees SET LastName=N'',FirstName=N'',MiddleName=NULL, Salary=2500,BonusPercent=NULL WHERE ID=1002 -- .. UPDATE Employees SET LastName=N'',FirstName=N'',MiddleName=NULL, Salary=2000,BonusPercent= 30 WHERE ID=1003 -- ..
ããŒã¿ãæ£åžžã«æŽæ°ãããããšã確èªããŸãã
SELECT * FROM Employees
ID | ãåå | ... | å§ | å | ããã«ããŒã | 絊æ | ããŒãã¹ããŒã»ã³ã |
---|---|---|---|---|---|---|---|
1000 | ã€ã¯ããI.I. | ã€ã¯ãã | ã€ã¯ã³ | ã€ããããã | 5000 | 50 | |
1001 | ããããP.P. | ãããã | ããŒã¿ãŒ | ãããããã | 1500 | 15 | |
1002 | ã·ãããS.S. | ã·ããã | ã·ããŒã« | ãã« | 2500 | ãã« | |
1003 | ã¢ã³ãã¬ãšãA.A. | ã¢ã³ãã¬ãšã | ã¢ã³ãã¬ã€ | ãã« | 2000幎 | 30 |
ã¯ãšãªåã®ãšã€ãªã¢ã¹ã®å®çŸ©
ããã«æžããããããã«è¡šç€ºããæ¹ãç°¡åã ãšæããŸãïŒ
SELECT -- LastName+' '+FirstName+' '+MiddleName AS , -- , .. HireDate AS " ", -- , .. Birthday AS [ ], -- AS Salary ZP FROM Employees
æ°å | å ¥åŠæ¥ | ç幎ææ¥ | Zp |
---|---|---|---|
ã€ã¯ããã€ã¯ã³ã€ã¯ãããã | 2015-04-08 | 1955-02-19 | 5000 |
ããããããã«ãããããã | 2015-04-08 | 1983-12-03 | 1500 |
ãã« | 2015-04-08 | 1976-06-07 | 2500 |
ãã« | 2015-04-08 | 1982-04-17 | 2000幎 |
ã芧ã®ãšãããèšå®ããåãšã€ãªã¢ã¹ã¯çµæã®ããŒãã«ã®ããããŒã«åæ ãããŸãã å®éããããåãšã€ãªã¢ã¹ã®äž»ãªç®çã§ãã
泚æããŠãã ããã æåŸã®2人ã®åŸæ¥å¡ã«ã¯ããã«ããŒã ïŒNULLå€ïŒããªããããåŒãLastName + '' + FirstName + '' + MiddleNameãã®çµæãNULLãè¿ããŸããã
MS SQLã§æååãæ¥ç¶ïŒè¿œå ãé£çµïŒããã«ã¯ãã+ãèšå·ã䜿çšããŸãã
NULLãé¢ä¿ãããã¹ãŠã®åŒïŒããšãã°ãNULLã«ããé€ç®ãNULLã«ããå ç®ïŒã¯NULLãè¿ãããšã«æ³šæããŠãã ããã
ã¡ã¢ãžã
ORACLEã®å Žåã||æŒç®åã¯æååãé£çµããããã«äœ¿çšãããé£çµã¯ãLastName ||ãã®ããã«ãªããŸãã '|| FirstName ||' '|| MiddleName "ã ORACLEã®å Žåãæåååã«ã¯äŸå€ããããNULLãšç©ºã®æåå ''ã¯åãã§ããããšã«æ³šæããŠãã ããããããã£ãŠãORACLEã§ã¯ããã®åŒã¯æåŸã®2人ã®åŸæ¥å¡ã«å¯ŸããŠSidorov SidorãšAndreyev Andreyãè¿ããŸãã ããŒãžã§ã³ORACLE 12cã®æç¹ã§ã¯ãç§ã®ç¥ãéãããã®åäœãå€æŽãããªãã·ã§ã³ã¯ãããŸããïŒæ£ãããªãå Žåã¯ä¿®æ£ããŠãã ããïŒã ããã§ããããè¯ããæªãããå€æããã®ã¯é£ããã§ãããªããªãã å Žåã«ãã£ãŠã¯ãMS SQLã®ããã«NULLæååã®åäœããã䟿å©ã§ãããORACLEã®ããã«ä»ã®å Žåã«äŸ¿å©ã§ãã
ORACLEã¯ã[...]ãé€ãäžèšã®ãã¹ãŠã®åãšã€ãªã¢ã¹ãåãå ¥ããŸãã
ISNULLé¢æ°ã䜿çšããŠæ§é ãæå·ããªãããã«ããããã«ãMS SQLã§ã¯CONCATé¢æ°ã䜿çšã§ããŸãã 3ã€ã®ãªãã·ã§ã³ãæ€èšããŠæ¯èŒããŸãã
SELECT LastName+' '+FirstName+' '+MiddleName FullName1, -- 2 NULL '' ( ORACLE) ISNULL(LastName,'')+' '+ISNULL(FirstName,'')+' '+ISNULL(MiddleName,'') FullName2, CONCAT(LastName,' ',FirstName,' ',MiddleName) FullName3 FROM Employees
Fullname1 | Fullname2 | æ°å3 |
---|---|---|
ã€ã¯ããã€ã¯ã³ã€ã¯ãããã | ã€ã¯ããã€ã¯ã³ã€ã¯ãããã | ã€ã¯ããã€ã¯ã³ã€ã¯ãããã |
ããããããã«ãããããã | ããããããã«ãããããã | ããããããã«ãããããã |
ãã« | ã·ãããã»ã·ããŒã« | ã·ãããã»ã·ããŒã« |
ãã« | ã¢ã³ãã¬ã€ãšãã¢ã³ãã¬ã€ | ã¢ã³ãã¬ã€ãšãã¢ã³ãã¬ã€ |
MS SQLã§ã¯ãçå·ã䜿çšããŠãšã€ãªã¢ã¹ãæå®ã§ããŸãã
SELECT ' '=HireDate, -- "âŠ" [âŠ] 'âŠ' [ ]=Birthday, ZP=Salary FROM Employees
ASããŒã¯ãŒããŸãã¯çå·ã䜿çšããŠãšã€ãªã¢ã¹ãæå®ããããšã¯ããããã奜ã¿ã®åé¡ã§ãã ããããä»ã®äººã®èŠæ±ã解æãããšãããã®ç¥èã¯åœ¹ã«ç«ã¡ãŸãã
çµè«ãšããŠããšã€ãªã¢ã¹ã«ã€ããŠã¯ãã©ãã³æåãšæ°åã®ã¿ã䜿çšããŠååãèšå®ããã...ããã...ããããã³[...]ã®äœ¿çšãé¿ããæ¹ããããšèšããŸããã€ãŸããããŒãã«ã«ååãä»ãããšãã«äœ¿çšããã®ãšåãã«ãŒã«ã䜿çšããŸãã ããã«ãäŸã§ã¯ããã®ãããªååã®ã¿ã䜿çšããã...ããã...ãã[...]ã¯äœ¿çšããŸããã
åºæ¬çãªç®è¡SQLã¹ããŒãã¡ã³ã
ãªãã¬ãŒã¿ãŒ | ã¢ã¯ã·ã§ã³ |
---|---|
+ | å ç®ïŒx + yïŒãŸãã¯åé ãã©ã¹ïŒ+ xïŒ |
- | æžç®ïŒxyïŒãŸãã¯åé ãã€ãã¹ïŒ-xïŒ |
* | ä¹ç®ïŒx * yïŒ |
/ | é€ç®ïŒx / yïŒ |
ïŒ | é€ç®ã®æ®ãïŒxïŒ yïŒã ããšãã°ã15ïŒ 10ã¯5ã«ãªããŸã |
ç®è¡æŒç®åã®åªå é äœã¯ãæ°åŠãšåãã§ãã å¿ èŠã«å¿ããŠãæ¬åŒ§ã䜿çšããŠæŒç®åã®é©çšé åºãå€æŽã§ããŸã-ïŒa + bïŒ*ïŒx /ïŒyzïŒïŒã
ãããŠããäžåºŠãNULLã䜿çšããæäœãNULLãäžããããšãç¹°ãè¿ããŸããäŸãã°ã10 + NULLãNULL * 15 / 3ã100 / NULL-ããã¯ãã¹ãŠNULLã«ãªããŸãã ã€ãŸã åã«äžå®ã®å€ãæå®ãããšãæ確ãªçµæãåŸãããŸããã ã¯ãšãªã®ã³ã³ãã€ã«æã«ãããèæ ®ããå¿ èŠã«å¿ããŠãISNULLãCOALESCEé¢æ°ã䜿çšããŠNULLå€ãåŠçããŸãã
SELECT ID,Name, Salary/100*BonusPercent AS Result1, -- NULL Salary/100*ISNULL(BonusPercent,0) AS Result2, -- ISNULL Salary/100*COALESCE(BonusPercent,0) AS Result3 -- COALESCE FROM Employees
ID | ãåå | çµæ1 | çµæ2 | çµæ3 |
---|---|---|---|---|
1000 | ã€ã¯ããI.I. | 2500 | 2500 | 2500 |
1001 | ããããP.P. | 225 | 225 | 225 |
1002 | ã·ãããS.S. | ãã« | 0 | 0 |
1003 | ã¢ã³ãã¬ãšãA.A. | 600 | 600 | 600 |
1004 | ãã³ã©ãšãN.N. | ãã« | 0 | 0 |
1005 | ã¢ã¬ã¯ãµã³ãããA.A. | ãã« | 0 | 0 |
COALESCEé¢æ°ã«ã€ããŠå°ãã話ãããŸãã
COALESCE (expr1, expr2, ..., exprn) - NULL .
äŸïŒ
SELECT COALESCE(f1, f1*f2, f2*f3) val -- FROM (SELECT null f1, 2 f2, 3 f3) q
ç§ã¯äž»ã«DMLèšèªã®æ§æèŠçŽ ã«çŠç¹ãåœãŠãŸãããã»ãšãã©ã®å ŽåãäŸã§èŠãããé¢æ°ã«ã€ããŠã¯èª¬æããŸããã ç¹å®ã®é¢æ°ã®æ©èœãããããªãå Žåã¯ãã€ã³ã¿ãŒãããã§ãã®èª¬æãæ¢ããŠãã ãããããšãã°ãGoogleæ€çŽ¢ã§ãMS SQLæååé¢æ°ãããMS SQLæ°åŠé¢æ°ãããMS SQLé¢æ°ããªã©ãæå®ããŠãé¢æ°ã°ã«ãŒãã®æ å ±ãçŽæ¥æ€çŽ¢ããããšãã§ããŸãNULLåŠçãã é¢æ°ã«é¢ããå€ãã®æ å ±ããããç°¡åã«èŠã€ããããšãã§ããŸãã ããšãã°ãMSDNã©ã€ãã©ãªã§ã¯ãCOALESCEé¢æ°ã«ã€ããŠè©³ããç¥ãããšãã§ããŸãã
COALESCEãšCASEãæ¯èŒããMSDNã¯ãªããã³ã°
COALESCEåŒã¯ãCASEåŒã®æ§æã·ã§ãŒãã«ããã§ãã ããã¯ãã³ãŒãCOALESCEïŒexpression1ã... nïŒãã¯ãšãªãªããã£ãã€ã¶ãŒã«ãã£ãŠæ¬¡ã®CASEåŒãšããŠæžãæããããããšãæå³ããŸãã
CASE WHEN (expression1 IS NOT NULL) THEN expression1 WHEN (expression2 IS NOT NULL) THEN expression2 ... ELSE expressionN END
ããšãã°ãé€ç®ã®æ®ãïŒïŒ ïŒã®äœ¿çšæ¹æ³ãæ€èšããŸãããã®æŒç®åã¯ãã¬ã³ãŒããã°ã«ãŒãã«åå²ããå Žåã«éåžžã«äŸ¿å©ã§ããããšãã°ãå¶æ°ã®åŸæ¥å¡çªå·ïŒIDïŒãæã€ãã¹ãŠã®åŸæ¥å¡ãåŒãåºããŸãã2ã§å²ãåããID
SELECT ID,Name FROM Employees WHERE ID%2=0 -- 2 0
ID | ãåå |
---|---|
1000 | ã€ã¯ããI.I. |
1004 | ãã³ã©ãšãN.N. |
1002 | ã·ãããS.S. |
ORDER BY-ã¯ãšãªã®çµæã®äžŠã¹æ¿ã
ORDER BYå¥ã¯ãã¯ãšãªã®çµæããœãŒãããããã«äœ¿çšãããŸãã
SELECT LastName, FirstName, Salary FROM Employees ORDER BY LastName,FirstName -- 2- â ,
å§ | å | 絊æ |
---|---|---|
ã¢ã³ãã¬ãšã | ã¢ã³ãã¬ã€ | 2000幎 |
ã€ã¯ãã | ã€ã¯ã³ | 5000 |
ãããã | ããŒã¿ãŒ | 1500 |
ã·ããã | ã·ããŒã« | 2500 |
ORDER BYå¥ã®ãã£ãŒã«ãåã®åŸã«ãéé ã§ãã®ãã£ãŒã«ãã䞊ã¹æ¿ããããã«äœ¿çšãããDESCãªãã·ã§ã³ãæå®ã§ããŸãã
SELECT LastName,FirstName,Salary FROM Employees ORDER BY -- Salary DESC, -- 1. LastName, -- 2. FirstName -- 3.
å§ | å | 絊æ |
---|---|---|
ã€ã¯ãã | ã€ã¯ã³ | 5000 |
ã·ããã | ã·ããŒã« | 2500 |
ã¢ã³ãã¬ãšã | ã¢ã³ãã¬ã€ | 2000幎 |
ãããã | ããŒã¿ãŒ | 1500 |
ã泚æãã ãããæé ã®äžŠã¹æ¿ãã«ã¯ASCããŒã¯ãŒãããããŸãããæ¢å®ã§ã¯æé ã®äžŠã¹æ¿ãã䜿çšãããããããã®ãªãã·ã§ã³ãå¿ããããšãã§ããŸãïŒãã®ãªãã·ã§ã³ãäžåºŠäœ¿çšããå Žåã¯èŠããŠããŸããïŒã
ORDER BYå¥ã§ã¯ãSELECTå¥ã«ãªã¹ããããŠããªããã£ãŒã«ãã䜿çšã§ããããšã«æ³šæããŠãã ããïŒDISTINCTã䜿çšããå Žåãé€ãããã®ã±ãŒã¹ã«ã€ããŠã¯åŸè¿°ããŸãïŒãããšãã°ãTOPãªãã·ã§ã³ã䜿çšããŠå°ãåã«é²ã¿ãããšãã°ããã©ã€ãã·ãŒã®ç®çã§çµŠäžèªäœã衚瀺ããŠã¯ãªããªãããšãèæ ®ããŠã絊äžãæãé«ã3人ã®åŸæ¥å¡ãéžæããæ¹æ³ã瀺ããŸãã
SELECT TOP 3 -- 3 ID,LastName,FirstName FROM Employees ORDER BY Salary DESC --
ID | å§ | å |
---|---|---|
1000 | ã€ã¯ãã | ã€ã¯ã³ |
1002 | ã·ããã | ã·ããŒã« |
ãã¡ãããããã§ã¯è€æ°ã®åŸæ¥å¡ãåã絊äžãæã£ãŠããå Žåãããããã®èŠæ±ãã©ã®ç¹å®ã®3人ã®åŸæ¥å¡ã«è¿ãããããèšãã®ã¯å°é£ã§ããããã¯ã¿ã¹ã¯ãã£ã¬ã¯ã¿ãŒã§è§£æ±ºããå¿ èŠããããŸãããã®ã¿ã¹ã¯ã«ã€ããŠãã£ã¬ã¯ã¿ãŒãšè©±ãåã£ãåŸã次ã®ãªãã·ã§ã³ã䜿çšããããšã«åæãã決å®ãããšä»®å®ããŸã-ç幎ææ¥ãã£ãŒã«ãã§è¿œå ã®ãœãŒããå®è¡ããŸãïŒã€ãŸããç§ãã¡ã¯è¡ãã®ã«é·ãéã®ãããããŸãïŒããããŠè€æ°ã®åŸæ¥å¡ã®ç幎ææ¥ãäžèŽããå¯èœæ§ãããå Žåé€å€ïŒããã®åŸãIDå€ã®éé ã§3çªç®ã®ãœãŒããå®è¡ã§ããŸãïŒæåŸã«éžæãããã®ã¯ãIDãæãé«ããã®ã§ã-ããšãã°ãæåŸã«åãå ¥ãããã人ãããšãã°ãåŸæ¥å¡çªå·ãé çªã«çºè¡ãããŸãïŒïŒ
SELECT TOP 3 -- 3 ID,LastName,FirstName FROM Employees ORDER BY Salary DESC, -- 1. Birthday, -- 2. ID DESC -- 3. ID
ã€ãŸãã¯ãšãªçµæãäºæž¬å¯èœã«ããããã«ããŠãã ãããããã«ããããã©ã€ãã®çµæå ±åã®å Žåã«ããªããããã®äººã ããã©ãã¯ãªã¹ãã«ç»é²ãããã®ããã€ãŸããæ¿èªãããèŠåã«åŸã£ãŠããã¹ãŠãæ£çŽã«éžæãããŸããã
ORDER BYå¥ã§ç°ãªãåŒã䜿çšããŠãœãŒãããããšãã§ããŸãã
SELECT LastName,FirstName FROM Employees ORDER BY CONCAT(LastName,' ',FirstName) --
ãŸããORDER BYã§ã¯ãåã«å®çŸ©ããããšã€ãªã¢ã¹ã䜿çšã§ããŸãã
SELECT CONCAT(LastName,' ',FirstName) fi FROM Employees ORDER BY fi --
DISTINCTå¥ã䜿çšããå ŽåãSELECTãããã¯ã«ãªã¹ããããŠããåã®ã¿ãORDER BYå¥ã§äœ¿çšã§ããããšã«æ³šæããŠãã ããã ã€ãŸãDISTINCTæäœãé©çšããåŸãæ°ããåã®ã»ãããæã€æ°ããããŒã¿ã»ãããååŸããŸãããã®ããã次ã®äŸã¯æ©èœããŸããã
SELECT DISTINCT LastName,FirstName,Salary FROM Employees ORDER BY ID -- ID , DISTINCT
ã€ãŸã çµæããŠãŒã¶ãŒã«è¿ãããåã«ãORDER BYå¥ããã§ã«æçµã»ããã«é©çšãããŠããŸãã
1. ORDER BY , SELECT:
SELECT LastName,FirstName,Salary FROM Employees ORDER BY -- 3 DESC, -- 1. 1, -- 2. 2 -- 3.
, .
( ), , «*» . â , -, , , ( ), , , .. , .
, , , , (.. ), , .
, .
2.
MS SQL NULL .
SELECT BonusPercent FROM Employees ORDER BY BonusPercent
DESC
SELECT BonusPercent FROM Employees ORDER BY BonusPercent DESC
NULL , , :
SELECT BonusPercent FROM Employees ORDER BY ISNULL(BonusPercent,100)
ORACLE 2 NULLS FIRST NULLS LAST ( ). äŸïŒ
SELECT BonusPercent FROM Employees ORDER BY BonusPercent DESC NULLS LAST
.
TOP â
MSDNããã®ã¯ãªããã³ã°ãTOP-ã¯ãšãªã®çµæã»ããã§è¿ãããè¡ã®æ°ããæå®ãããæ°ãŸãã¯ããŒã»ã³ãå€ã«å¶éããŸããTOPå¥ãORDER BYå¥ãšçµã¿åãããŠäœ¿çšââãããå Žåãçµæã»ããã¯ãœãŒããããçµæã®æåã®Nè¡ã«å¶éãããŸãããã以å€ã®å Žåãæåã®Nè¡ã¯æªå®çŸ©ã®é åºã§è¿ãããŸãã
éåžžããã®åŒã¯ORDER BYå¥ãšãšãã«äœ¿çšãããçµæã»ããããNçªç®ã®è¡ãè¿ãå¿ èŠãããå Žåã®äŸããã§ã«èŠãŸããã
ORDER BYããªãå Žåããã®ææ¡ã¯éåžžãå€ãã®ã¬ã³ãŒããååšããå¯èœæ§ã®ããæªç¥ã®ããŒãã«ãèŠãå¿ èŠãããå Žåã«é©çšãããŸãããã®å Žåãããšãã°ãæåã®10è¡ã®ã¿ãè¿ãããã«äŸé Œã§ããŸãããæ確ã«ããããã«ã2ã€ã ããèšããŸãã
SELECT TOP 2 * FROM Employees
çµæã»ãããã察å¿ããå²åã®è¡ãè¿ãããã«ãåèªPERCENTãæå®ããããšãã§ããŸãã
SELECT TOP 25 PERCENT * FROM Employees
ç§ã®ç·Žç¿ã§ã¯ãè¡æ°ã«ããéžæãããé »ç¹ã«äœ¿çšãããŸãã
ãŸããTOPã䜿çšãããšãWITH TIESãªãã·ã§ã³ã䜿çšã§ããŸããããã¯ããããŸããªãœãŒãã®å Žåã«ãã¹ãŠã®è¡ãè¿ãã®ã«åœ¹ç«ã¡ãŸãããã®æã¯ãTOP Nã®éžæã«è©²åœããè¡ãšæ§æãçãããã¹ãŠã®è¡ãè¿ããŸãããã®çµæãNããå€ãã®è¡ãéžæã§ããŸãããã¢çšã«çµŠäžã1500ã®å¥ã®ãããã°ã©ãããè¿œå ããŸãããã
INSERT Employees(ID,Name,Email,PositionID,DepartmentID,ManagerID,Salary) VALUES(1004,N' ..','n.nikolayev@test.tt',3,3,1003,1500)
2000幎ã®çµŠäžã§åœ¹è·ãšéšéãæå®ããã«å¥ã®åŸæ¥å¡ã玹ä»ããŸãã
INSERT Employees(ID,Name,Email,PositionID,DepartmentID,ManagerID,Salary) VALUES(1005,N' ..','a.alexandrov@test.tt',NULL,NULL,1000,2000)
ããã§ãWITH TIESãªãã·ã§ã³ã䜿çšããŠã絊äžã3人ã®åŸæ¥å¡ã®çµŠäžãšåãã§ã絊äžãæå°ã®ãã¹ãŠã®åŸæ¥å¡ãéžæããŸãïŒåŸã§æããã«ãªãããšãé¡ã£ãŠããŸãïŒã
SELECT TOP 3 WITH TIES ID,Name,Salary FROM Employees ORDER BY Salary
ããã§ã¯ãTOP 3ã瀺ãããŠããŸãããã¯ãšãªã¯4ã€ã®ã¬ã³ãŒããè¿ããŸããã4人ã®åŸæ¥å¡ã«ã¯ãTOP 3ãè¿ãã絊äžå€ããããŸããïŒ1500ããã³2000ïŒãããã¯æ¬¡ã®ããã«èŠèŠçã«æ©èœããŸãã
ã¡ã¢ãžã
ããŸããŸãªããŒã¿ããŒã¹ã§ã¯ãTOPã¯ããŸããŸãªæ¹æ³ã§å®è£ ãããŸããMySQLã«ã¯ããã®ããã®LIMITå¥ããããè¿œå ã§åæãªãã»ãããèšå®ã§ããŸãã
ORACLE 12cã§ã¯ãTOPæ©èœãšLIMITæ©èœãçµã¿åãããåçã®æ©èœãå°å ¥ããŸããããORACLE OFFSET FETCHããšããèšèãæ¢ããŠãã ãããããŒãžã§ã³12cããåã¯ãéåžžãROWNUMç䌌åããã®ç®çã§äœ¿çšãããŠããŸããã
ããããDISTINCTæãšTOPæãåæã«é©çšãããšã©ããªããŸããïŒå®éšãè¡ãããšã«ããããã®ãããªè³ªåã«ç°¡åã«çããããšãã§ããŸããäžè¬çã«ãæããããšãªããå®éšããã®ãæ ããªãã§ãã ããããã®ã»ãšãã©ã¯å®éã«åŠç¿ãããŸããSELECTã¹ããŒãã¡ã³ãã®èªé ã¯æ¬¡ã®ãšããã§ããæåã®èªã¯DISTINCTã§ããããã®åŸã«TOPãç¶ããŸããè«ççã«æšè«ããå·Šããå³ã«èªãå Žåãæåã¯éè€ã®æåŠã§ããã次ã«ãã®ã»ããã§TOPãäœæãããŸããããŠã次ã®ããšã確èªããŠç¢ºèªããŸãããã
SELECT DISTINCT TOP 2 Salary FROM Employees ORDER BY Salary
絊æ |
---|
1500 |
2000幎 |
ã€ãŸããã®çµæãç§ãã¡ã¯ãã¹ãŠã®çµŠäžã®ãã¡æäœã®2ã€ãåãåããŸããããã¡ãããäžéšã®åŸæ¥å¡ã®RFPãæå®ãããŠããªãïŒNULLïŒå ŽåããããŸãããã®ã¹ããŒã ã«ããããããè¡ãããšãã§ããŸãããããã£ãŠãã¿ã¹ã¯ã«å¿ããŠãORDER BYå¥ã§NULLå€ãåŠçããããSalaryãNULLã§ãããã¹ãŠã®ã¬ã³ãŒããåçŽã«ç Žæ£ããããšã決å®ãããã®ããã«WHEREå¥ã®æ€èšã«é²ã¿ãŸãã
WHERE-è¡ãã§ããæ¡ä»¶
ãã®æã¯ãç¹å®ã®æ¡ä»¶ã§ã¬ã³ãŒãããã£ã«ã¿ãªã³ã°ããããã«äœ¿çšãããŸããããšãã°ããITãéšéã§åããã¹ãŠã®åŸæ¥å¡ãéžæããŸãïŒID = 3ïŒïŒ
SELECT ID,LastName,FirstName,Salary FROM Employees WHERE DepartmentID=3 -- ORDER BY LastName,FirstName
ID | å§ | å | 絊æ |
---|---|---|---|
1004 | ãã« | ãã« | 1500 |
1003 | ã¢ã³ãã¬ãšã | ã¢ã³ãã¬ã€ | 2000幎 |
1001 | ãããã | ããŒã¿ãŒ | 1500 |
WHEREå¥ã¯ãORDER BYã³ãã³ãã®åã«èšè¿°ãããŸãã
ã³ãã³ããå ã®åŸæ¥å¡ã»ããã«é©çšãããé åºã¯æ¬¡ã®ãšããã§ãã
- WHERE-æå®ãããŠããå ŽåãåŸæ¥å¡ã®ã»ããå šäœããæåã«å¿ èŠãªã®ã¯ãæ¡ä»¶ãæºããã¬ã³ãŒãã®ã¿ã®éžæã§ã
- DISTINCT-æå®ãããå Žåããã¹ãŠã®éè€ã¯ç Žæ£ãããŸã
- ORDER BY-æå®ãããŠããå Žåãçµæã¯ãœãŒããããŸã
- TOP-æå®ãããŠããå Žåãæå®ãããæ°ã®ã¬ã³ãŒãã®ã¿ããœãŒãçµæããè¿ãããŸã
æ確ã«ããããã«äŸãèããŠã¿ãŸãããã
SELECT DISTINCT TOP 1 Salary FROM Employees WHERE DepartmentID=3 ORDER BY Salary
ããã¯æ¬¡ã®ããã«
ãªããŸããNULLã®ãã§ãã¯ã¯çå·ã§ã¯ãªããIS NULLããã³IS NOT NULLæŒç®åã䜿çšããŠè¡ãããããšã«æ³šæããŠãã ãããã=ãæŒç®åïŒçå·ïŒã䜿çšããŠNULLãšæ¯èŒã§ããªãããšãå¿ããªãã§ãã ãããåŒã®çµæãNULLã«ãªããŸãã
ããšãã°ãéšéãæããªããã¹ãŠã®åŸæ¥å¡ãéžæããŸãïŒã€ãŸããDepartmentID IS NULLïŒïŒ
SELECT ID,Name FROM Employees WHERE DepartmentID IS NULL
ID | ãåå |
---|---|
1005 | ã¢ã¬ã¯ãµã³ãããA.A. |
次ã«ãäŸãšããŠãBonusPercentå€ã瀺ãããŠãããã¹ãŠã®åŸæ¥å¡ã®ããŒãã¹ãèšç®ããŸãããïŒã€ãŸããBonusPercent IS NOT NULLïŒïŒ
SELECT ID,Name,Salary/100*BonusPercent AS Bonus FROM Employees WHERE BonusPercent IS NOT NULL
ã¯ãããšããã§ãèããŠã¿ããšãBonusPercentã®å€ã¯ãŒãïŒ0ïŒã«ãªãå¯èœæ§ããããŸãããŸãããã®ãã£ãŒã«ãã«å¶éã課ããŠããªãããããã€ãã¹èšå·ãä»ããŠå€ãå ¥åããããšãã§ããŸãã
åé¡ã«ã€ããŠèª¬æããåŸããããŸã§ã®ãšããïŒBonusPercent <= 0ãŸãã¯BonusPercent IS NULLïŒã§ããã°ãããã¯åŸæ¥å¡ã«ãããŒãã¹ããªãããšãæå³ããŸããæåã«ãèšãããããã«ããããå®è¡ããŸããè«çæŒç®åORããã³NOTã䜿çšããŠãããå®è£ ããŸãã
SELECT ID,Name,Salary/100*BonusPercent AS Bonus FROM Employees WHERE NOT(BonusPercent<=0 OR BonusPercent IS NULL)
ã€ãŸãããã§ããŒã«æŒç®åã®ç 究ãå§ããŸãããæ¬åŒ§å ã®åŒïŒïŒBonusPercent <= 0 OR BonusPercent IS NULLïŒïŒã¯ãåŸæ¥å¡ã«ããŒãã¹ããªãããšã確èªãããã®å€ãå転ãããŸããããããŒãã¹ã®ãªãåŸæ¥å¡ã§ã¯ãªããã¹ãŠã®åŸæ¥å¡ãè¿ãããšè¿°ã¹ãŠããŸãã
ãŸãããã®åŒãæžãæããŠãåŒïŒBonusPercent> 0ããã³BonusPercent IS NOT NULLïŒã§è¡šãããšã«ãããããã«ãããŒãã¹ã®ãããã¹ãŠã®åŸæ¥å¡ãè¿ãããšèšãããšãã§ããŸãã
SELECT ID,Name,Salary/100*BonusPercent AS Bonus FROM Employees WHERE BonusPercent>0 AND BonusPercent IS NOT NULL
WHEREãããã¯ã§ããç®è¡æŒç®åãšé¢æ°ã䜿çšããŠããŸããŸãªçš®é¡ã®åŒã確èªã§ããŸããããšãã°ãISNULLé¢æ°ã§åŒã䜿çšããŠåæ§ã®ãã§ãã¯ãå®è¡ã§ããŸãã
SELECT ID,Name,Salary/100*BonusPercent AS Bonus FROM Employees WHERE ISNULL(BonusPercent,0)>0
ããŒã«æŒç®åãšåçŽæ¯èŒæŒç®å
ã¯ããããã§ã¯æ°åŠãªãã§ã¯ã§ããŸããããã®ãããããŒã«æŒç®åãšåçŽãªæ¯èŒæŒç®åã«ã€ããŠç°¡åã«èª¬æããŸãã
SQLã«ã¯ãANDãORãNOTã®3ã€ã®ããŒã«æŒç®åã®ã¿ããããŸãã
ãã㊠| è«çIã2ã€ã®æ¡ä»¶ïŒcondition1 AND condition2ïŒã®éã«çœ®ãããŸããåŒãTrueãè¿ãã«ã¯ãäž¡æ¹ã®æ¡ä»¶ãtrueã§ãªããã°ãªããŸããã |
---|---|
ãŸã㯠| è«çORã2ã€ã®æ¡ä»¶ïŒcondition1 OR condition2ïŒã®éã«çœ®ãããŸããåŒãTrueãè¿ãã«ã¯ã1ã€ã®æ¡ä»¶ã®ã¿ãTrueã§ããã°ååã§ãã |
ãªã | æ¡ä»¶/è«çåŒãå転ããŸããå¥ã®åŒïŒNOT logical_expressionïŒã«ã¹ãŒããŒã€ã³ããŒãºãããlogical_expression = Falseã®å ŽåTrueãè¿ããlogical_expression = Trueã®å ŽåFalseãè¿ããŸã |
ããŒã«æŒç®åããšã«ãæ¡ä»¶ãNULLã«ãªãå¯èœæ§ãããå Žåã®çµæãããã«ç€ºãããççå€è¡šãæäŸã§ããŸãã
æ¡ä»¶ã圢æããããã«äœ¿çšããã次ã®åçŽãªæ¯èŒæŒç®åããããŸãã
ç¶æ | äŸ¡å€ |
---|---|
= | åæ§ã« |
< | å°ãªã |
> | ãã£ãš |
<= | ããå°ãããçãã |
> = | ãã倧ãããçãã |
<>
ïŒ= | çãããªã |
ããã«ãNULLã®å€/åŒããã§ãã¯ããããã®2ã€ã®æŒç®åããããŸãã
NULLã§ã | NULLç䟡ãã§ã㯠|
---|---|
NULLã§ã¯ãªã | NULLäžçåŒã®ç¢ºèª |
åªå 床ïŒ1ïŒãã¹ãŠã®æ¯èŒæŒç®åã2ïŒNOT; 3ïŒAND; 4ïŒãŸãã¯ã
è€éãªè«çåŒãæ§ç¯ããå Žåãæ¬åŒ§ã䜿çšãããŸãã
((1 AND 2) OR NOT(3 AND 4 AND 5)) OR (âŠ)
ãŸããæ¬åŒ§ã䜿çšããŠãèšç®ã®æšæºã·ãŒã±ã³ã¹ãå€æŽã§ããŸãã
ããã§ã¯ãä»äºã«ååãªéã®ããŒã«ä»£æ°ã®ã¢ã€ãã¢ãäžããããšããŸãããã芧ã®ãšãããããè€éãªæ¡ä»¶ãèšè¿°ããããã«ãããžãã¯ãªãã§ã¯ã§ããŸãããããããã®ããã€ãïŒANDãORãNOTïŒãããã人ã ãæãã€ããã®ã§ããã¹ãŠãéåžžã«è«ççã§ãã
第äºéšãå®æãããŸã
ã芧ã®ãšãããSELECTæŒç®åã®åºæ¬çãªæ§æã«ã€ããŠãéåžžã«é·ãé話ãããšãã§ããŸãããèšäºã®ãã¬ãŒã ã¯ãŒã¯å ã«ãšã©ãŸãããã«ãè¿œå ã®è«çæŒç®å-BETWEENãINãLIKEã瀺ããŸãã
BETWEEN-ç¯å²ã®ç¢ºèª
ãã®æŒç®åã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
_ [NOT] BETWEEN _ AND _
å€ã¯åŒã«ããããšãã§ããŸãã
äŸãèŠãŠã¿ãŸãããïŒ
SELECT ID,Name,Salary FROM Employees WHERE Salary BETWEEN 2000 AND 3000 -- 2000-3000
ID | ãåå | 絊æ |
---|---|---|
1002 | ã·ãããS.S. | 2500 |
1003 | ã¢ã³ãã¬ãšãA.A. | 2000幎 |
1005 | ã¢ã¬ã¯ãµã³ãããA.A. | 2000幎 |
å®éãBETWEENã¯æ¬¡ã®åœ¢åŒã®ç°¡ç¥åãããã¬ã³ãŒãã§ãã
SELECT ID,Name,Salary FROM Employees WHERE Salary>=2000 AND Salary<=3000 -- 2000-3000
åèªBETWEENã®åã«ãåèªNOTã䜿çšã§ããŸããããã«ãããæå®ãããç¯å²ã«è©²åœããªãå€ããã§ãã¯ãããŸãã
SELECT ID,Name,Salary FROM Employees WHERE Salary NOT BETWEEN 2000 AND 3000 -- NOT(Salary>=2000 AND Salary<=3000)
ãããã£ãŠãBETWEENãINãLIKEã䜿çšããå ŽåãANDããã³ORã䜿çšããŠä»ã®æ¡ä»¶ãšçµã¿åãããããšãã§ããŸãã
SELECT ID,Name,Salary FROM Employees WHERE Salary BETWEEN 2000 AND 3000 -- 2000-3000 AND DepartmentID=3 -- 3
IN-å€ã®ãªã¹ããžã®ãšã³ããªã確èªããŸã
ãã®æŒç®åã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
_ [NOT] IN (1, 2, âŠ)
äŸã§ç€ºãæ¹ãç°¡åã ãšæããŸãïŒ
SELECT ID,Name,Salary FROM Employees WHERE PositionID IN(3,4) -- 3 4
ID | ãåå | 絊æ |
---|---|---|
1001 | ããããP.P. | 1500 |
1003 | ã¢ã³ãã¬ãšãA.A. | 2000幎 |
1004 | ãã³ã©ãšãN.N. | 1500 |
ã€ãŸã åºæ¬çã«ãããã¯æ¬¡ã®åŒã«äŒŒãŠããŸãã
SELECT ID,Name,Salary FROM Employees WHERE PositionID=3 OR PositionID=4 -- 3 4
NOTã®å Žåãããã¯åæ§ã«ãªããŸãïŒéšé3ãšéšé4以å€ã®å šå¡ãååŸããŸãïŒã
SELECT ID,Name,Salary FROM Employees WHERE PositionID NOT IN(3,4) -- NOT(PositionID=3 OR PositionID=4)
NOT INã䜿çšãããªã¯ãšã¹ãã¯ãANDã§è¡šçŸããããšãã§ããŸãã
SELECT ID,Name,Salary FROM Employees WHERE PositionID<>3 AND PositionID<>4 -- PositionID NOT IN(3,4)
INã³ã³ã¹ãã©ã¯ãã§NULLå€ãæ€çŽ¢ããããšã¯æ©èœããªãããšã«æ³šæããŠãã ãããNULL = NULLããã§ãã¯ãããšãTrueã§ã¯ãªãNULLãè¿ãããŸãã
SELECT ID,Name,DepartmentID FROM Employees WHERE DepartmentID IN(1,2,NULL) -- NULL
ãã®å Žåããã¹ããããã€ãã®æ¡ä»¶ã«åå²ããŸãã
SELECT ID,Name,DepartmentID FROM Employees WHERE DepartmentID IN(1,2) -- 1 2 OR DepartmentID IS NULL -- NULL
ãŸãã¯ã次ã®ããã«æžãããšãã§ããŸãã
SELECT ID,Name,DepartmentID FROM Employees WHERE ISNULL(DepartmentID,-1) IN(1,2,-1) -- , ID=-1
ãã®å Žåãæåã®ãªãã·ã§ã³ã¯ããæ£ç¢ºã§ä¿¡é Œæ§ãé«ããšæããŸããããŠãããã¯ä»ã®æ§é ãæ§ç¯ã§ããããšã瀺ãããã®åãªãäŸã§ãã
ãŸããNULLã«é¢é£ããããã«é°æ¹¿ãªãšã©ãŒã«èšåãã䟡å€ããããŸããããã¯ãNOT INæ§æã䜿çšãããšçºçããå¯èœæ§ããããŸããããšãã°ãéšéã1ã§ããããéšéããŸã£ããæå®ãããŠããªãåŸæ¥å¡ãé€ãããã¹ãŠã®åŸæ¥å¡ãéžæããŠã¿ãŸããããnullã«çããã解決çãšããŠããªãã·ã§ã³ã¯ããèªäœãææ¡ããŸãïŒ
SELECT ID,Name,DepartmentID FROM Employees WHERE DepartmentID NOT IN(1,NULL)
ãããããªã¯ãšã¹ããå®è¡ãããšã次ã®ããã«è¡šç€ºããããšäºæ³ãããŠããŸãããã1è¡ã¯ååŸãããŸããã
ID | ãåå | DepartmentID |
---|---|---|
1001 | ããããP.P. | 3 |
1002 | ã·ãããS.S. | 2 |
1003 | ã¢ã³ãã¬ãšãA.A. | 3 |
1004 | ãã³ã©ãšãN.N. | 3 |
ç¹°ãè¿ããŸãããå€ã®ãªã¹ãã§æå®ãããNULLãããã§åè«ãæŒããŸããã
ãã®å Žåãè«çãšã©ãŒãçºçããçç±ãåæããŸããANDã䜿çšããŠã¯ãšãªãå±éããŸãã
SELECT ID,Name,DepartmentID FROM Employees WHERE DepartmentID<>1 AND DepartmentID<>NULL -- - NULL - NULL
æ£ããæ¡ä»¶ïŒDepartmentID <> NULLïŒã¯ãããã§åžžã«äžç¢ºå®æ§ãäžããŸããNULL ããã§ãïŒTRUE AND NULLïŒãNULLãäžããANDæŒç®åã®ççå€è¡šãæãåºããŠãã ãããã€ãŸãæªå®çŸ©ã®å³æ¡ä»¶ã«ããå·Šã®æ¡ä»¶ïŒDepartmentID <> 1ïŒãæºãããããšãçµæãšããŠåŒå šäœã®äžå®å€ïŒDepartmentID <> 1 AND DepartmentID <> NULLïŒãååŸããããããè¡ã¯çµæã«å«ãŸããŸããã
æ¡ä»¶ã¯æ¬¡ã®ããã«æ£ããæžãæããããŸãã
SELECT ID,Name,DepartmentID FROM Employees WHERE DepartmentID NOT IN(1) -- DepartmentID<>1 AND DepartmentID IS NOT NULL -- NOT NULL
INã¯åŒãç¶ããµãã¯ãšãªã§äœ¿çšã§ããŸããããã®ãã¥ãŒããªã¢ã«ã®ä»¥éã®éšåã§æ¢ã«ãã®ãã©ãŒã ã«æ»ããŸãã
LIKE-ãã¿ãŒã³ã«ããæååã®ç¢ºèª
ãã®æŒç®åã«ã€ããŠã¯ãæãåçŽãªåœ¢åŒã§ã®ã¿èª¬æããŸããããã¯æšæºã§ãããSQLèšèªã®ã»ãšãã©ã®æ¹èšã§ãµããŒããããŠããŸãããã®åœ¢åŒã§ããæååã®å 容ã確èªããå¿ èŠãããå€ãã®åé¡ã解決ããããã«äœ¿çšã§ããŸãã
ãã®æŒç®åã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
_ [NOT] LIKE _ [ESCAPE _]
次ã®ç¹æ®æåãpattern_stringã§äœ¿çšã§ããŸãã
- ã¢ã³ããŒã¹ã³ã¢ã_ã-代ããã«ä»»æã®åäžæåã䜿çšã§ããããšã瀺ããŸã
- ããŒã»ã³ãèšå·ãïŒ ã-代ããã«ãåäžã®æåãå«ããä»»æã®æ°ã®æåã䜿çšã§ããããšã瀺ããŸã
èšå·ãïŒ ãã®äŸãæ€èšããŸãïŒå®éã«ã¯ãããé »ç¹ã«äœ¿çšãããæ¹æ³ã§ïŒã
SELECT ID,Name FROM Employees WHERE Name LIKE '%' -- "" SELECT ID,LastName FROM Employees WHERE LastName LIKE '%' -- "" SELECT ID,LastName FROM Employees WHERE LastName LIKE '%%' -- ""
èšå·ã_ãã®äŸãæ€èšããŠãã ããã
SELECT ID,LastName FROM Employees WHERE LastName LIKE '_' -- "" SELECT ID,LastName FROM Employees WHERE LastName LIKE '____' -- ""
ESCAPEã䜿çšãããšãç¹æ®æåã_ããšãïŒ ãã®ãã§ãã¯ã¢ã¯ã·ã§ã³ããã£ã³ã»ã«ãããã£ã³ã»ã«æåãæå®ã§ããŸãããã®æã¯ãè¡ã®ããŒã»ã³ãèšå·ãŸãã¯ã¢ã³ããŒã¹ã³ã¢ãçŽæ¥ç¢ºèªããå¿ èŠãããå Žåã«äœ¿çšãããŸãã
ESCAPEã瀺ãããã«ããŽãã1ã€ã®ãšã³ããªã«å ¥ããŸãããã
UPDATE Employees SET FirstName='_, %' WHERE ID=1005
ãããŠã次ã®ã¯ãšãªãè¿ããã®ã確èªããŠãã ããã
SELECT * FROM Employees WHERE FirstName LIKE '%!%%' ESCAPE '!' -- "%" SELECT * FROM Employees WHERE FirstName LIKE '%!_%' ESCAPE '!' -- "_"
æååã®å®å šãªäžèŽã確èªããå Žåã¯ãLIKEã®ä»£ããã«ãåã«ã=ãèšå·ã䜿çšããããšããå§ãããŸãã
SELECT * FROM Employees WHERE FirstName=''
ã¡ã¢ãžã
MS SQLã§ã¯ãLIKEæŒç®åãã³ãã¬ãŒãã§æ£èŠè¡šçŸãæ€çŽ¢ããããšãã§ããŸã;ãã®æŒç®åã®æšæºæ©èœã§ã¯äžååãªå Žåã¯ãã€ã³ã¿ãŒãããã§ãããèªãã§ãã ããã
ORACLEã¯ãREGEXP_LIKEé¢æ°ã䜿çšããŠæ£èŠè¡šçŸã§æ€çŽ¢ããŸãã
è¡ã«ã€ããŠå°ã
Unicodeæåã®ååšã«ã€ããŠæååããã§ãã¯ããå ŽåãåŒçšç¬Šã®åã«Næåã眮ãå¿ èŠããããŸãã N '...'ããã ããããŒãã«ã«ã¯ãã¹ãŠã®æåãã£ãŒã«ããUnicode圢åŒïŒnvarcharåïŒã§ããããããããã®ãã£ãŒã«ãã«ã¯åžžã«ãã®åœ¢åŒã䜿çšã§ããŸããäŸïŒ
SELECT ID,Name FROM Employees WHERE Name LIKE N'%' SELECT ID,LastName FROM Employees WHERE LastName=N''
æ£ããè¡ãããå ŽåãvarcharåïŒASCIIïŒã®ãã£ãŒã«ããšæ¯èŒããå Žåãã...ãã䜿çšããŠãã§ãã¯ã䜿çšããå¿ èŠããããnvarcharåïŒUnicodeïŒã®ãã£ãŒã«ããšæ¯èŒããå Žåã¯ãNã...ãã䜿çšããŠãã§ãã¯ã䜿çšããå¿ èŠããããŸããããã¯ãã¯ãšãªå®è¡äžã®æé»çãªåå€æãåé¿ããããã«è¡ãããŸãããã£ãŒã«ãã«å€ãæ¿å ¥ïŒINSERTïŒãŸãã¯æŽæ°ïŒUPDATEïŒãããšãã«åãã«ãŒã«ã䜿çšããŸãã
æååãæ¯èŒãããšããããŒã¿ããŒã¹æ§æïŒç §åïŒã«å¿ããŠãæååã¯å€§æåãšå°æåãåºå¥ããªãïŒãããããã=ãPETROVãã®å ŽåïŒãŸãã¯å€§æåãšå°æåãåºå¥ããïŒãããããã<>ã®å ŽåïŒãããã 'ïŒã
倧æåãšå°æåãåºå¥ããèšå®ã®å Žåã倧æåãšå°æåãåºå¥ããªãæ€çŽ¢ãè¡ãã«ã¯ãããšãã°ãå³åŒãšå·ŠåŒã1ã€ã®å€§æåãŸãã¯å°æåã«äºåå€æããŸãã
SELECT ID,Name FROM Employees WHERE UPPER(Name) LIKE UPPER(N'%') -- LOWER(Name) LIKE LOWER(N'%') SELECT ID,LastName FROM Employees WHERE UPPER(LastName)=UPPER(N'') -- LOWER(LastName)=LOWER(N'')
æ¥ä»ã«ã€ããŠå°ã
æ¥ä»ã確èªãããšãã¯ãæååãšåæ§ã«ãåäžåŒçšç¬Šã...ãã䜿çšã§ããŸãã
MS SQLã®å°åèšå®ã«é¢ä¿ãªãã次ã®æ¥ä»æ§æ 'YYYYMMDD'ïŒå¹Žãæãæ¥ãã¹ããŒã¹ãªãã§ããŒãžïŒã䜿çšã§ããŸãããã®ãããªMS SQLã®æ¥ä»åœ¢åŒã¯åžžã«ç解ããŸãïŒ
SELECT ID,Name,Birthday FROM Employees WHERE Birthday BETWEEN '19800101' AND '19891231' -- 80- ORDER BY Birthday
å Žåã«ãã£ãŠã¯ãDATEFROMPARTSé¢æ°ã䜿çšããŠæ¥ä»ãèšå®ããæ¹ã䟿å©ã§ãã
SELECT ID,Name,Birthday FROM Employees WHERE Birthday BETWEEN DATEFROMPARTS(1980,1,1) AND DATEFROMPARTS(1989,12,31) ORDER BY Birthday
ãŸããåæ§ã®é¢æ°DATETIMEFROMPARTSããããŸããããã¯ãæ¥æãèšå®ããã®ã«åœ¹ç«ã¡ãŸãïŒdatetimeåã®å ŽåïŒã
æååãdateåãŸãã¯datetimeåã®å€ã«å€æããå Žåã¯ãCONVERTé¢æ°ã䜿çšããããšãã§ããŸãã
SELECT CONVERT(date,'12.03.2015',104), CONVERT(datetime,'2014-11-30 17:20:15',120)
å€104ããã³120ã¯ãæååã§äœ¿çšãããæ¥ä»åœ¢åŒã瀺ããŸããæ€çŽ¢ã§ãMS SQL CONVERTããèšå®ãããšãMSDNã©ã€ãã©ãªã§ãã¹ãŠã®æå¹ãªåœ¢åŒã®èª¬æãèŠã€ããããšãã§ããŸãã
MS SQLã§æ¥ä»ãæäœããããã®é¢æ°ã¯ãããããããŸãããæ¥ä»ãæäœããããã®ms sqlé¢æ°ããæ¢ããŠãã ããã
ã泚æ SQLèšèªã®ãã¹ãŠã®æ¹èšã«ã¯ãæ¥ä»ãæäœããããã®ç¬èªã®é¢æ°ã»ããããããæ¥ä»ãæäœããç¬èªã®ã¢ãããŒããé©çšããŸãã
æ°åãšãã®å€æã«ã€ããŠå°ã
ãã®ã»ã¯ã·ã§ã³ã®æ å ±ã¯ãããããITãããã§ãã·ã§ãã«ã«ãšã£ãŠãã圹ç«ã€ã§ããããããªãã1人ã§ã¯ãªããããŒã¿ããŒã¹ããå¿ èŠãªæ å ±ãååŸããããã®ã¯ãšãªã®æžãæ¹ãåŠã¶ããšãç®æšã§ããå Žåããã®ãããªåŸ®åŠãªããšã¯å¿ èŠãªããããããŸãããããããã«ããŠãããã¹ãããã£ãšèªãã§äœããèæ ®ããããšãã§ããŸãã SQLã®å匷ãå§ããã®ã§ããã°ããã§ã«ITã«æºãã£ãŠããŸãã
CASTå€æé¢æ°ãšã¯ç°ãªããCONVERTé¢æ°ã§ã¯ãå€æã¹ã¿ã€ã«ïŒãã©ãŒãããïŒãæ åœãã3çªç®ã®ãã©ã¡ãŒã¿ãŒãèšå®ã§ããŸããããŸããŸãªã¿ã€ãã®ããŒã¿ã«å¯ŸããŠãç¬èªã®ã¹ã¿ã€ã«ã»ããã䜿çšã§ããŸããããã¯ãè¿ãããçµæã«åœ±é¿ãäžããå¯èœæ§ããããŸãã CONVERTé¢æ°ã䜿çšããŠæååãæ¥ä»åããã³æ¥ä»æå»åã«å€æããããšãæ€èšããå Žåãã¹ã¿ã€ã«ã®äœ¿çšã«ã€ããŠã¯æ¢ã«è§ŠããŸããã
CASTãCONVERTé¢æ°ãããã³ã¹ã¿ã€ã«ã®è©³çŽ°ã«ã€ããŠã¯ãMSDNã®ãCASTããã³CONVERTé¢æ°ïŒTransact-SQLïŒããåç §ããŠãã ãããmsdn.microsoft.com / en - us / library / ms187928.aspx
ããã§ã¯äŸãç°¡åã«ããããã«ãTransactèšèªã®æ瀺ã䜿çšããŸãã SQL-DECLAREããã³SETã
ãã¡ãããæŽæ°ãå®æ°ã«å€æããå ŽåïŒæŽæ°ãšå®æ°ã®é€ç®ã®éãã瀺ãããã«ããã®ã¬ãã¹ã³ã®åé ã§åŒçšããŸããïŒãå€æã®ãã¥ã¢ã³ã¹ã«é¢ããç¥èã¯ããã»ã©éèŠã§ã¯ãããŸãããããã§ãæŽæ°ãå®æ°ã«å€æããŸããïŒãã®ç¯å²ã¯æŽæ°ã®ç¯å²ããã¯ããã«å€§ããã§ãïŒïŒ
DECLARE @min_int int SET @min_int=-2147483648 DECLARE @max_int int SET @max_int=2147483647 SELECT -- (-2147483648) @min_int,CAST(@min_int AS float),CONVERT(float,@min_int), -- 2147483647 @max_int,CAST(@max_int AS float),CONVERT(float,@max_int), -- numeric(16,6) @min_int/1., -- (-2147483648.000000) @max_int/1. -- 2147483647.000000
ããããïŒ1.ïŒã§å²ãããšã«ãã£ãŠåŸãããæé»çãªå€æã®æ¹æ³ã瀺ãå¿ èŠã¯ãªãã£ãã§ããããååŸããçµæã®ã¿ã€ããããã«å¶åŸ¡ããããã«ãæ瀺çãªå€æãè¡ãããšããå§ãããŸãããã ããå°æ°ç¹ä»¥äžã®æå®æ¡æ°ã§æ°å€åã®çµæãååŸããå Žåã¯ãæŽæ°å€ã«ïŒ1.ã1.0ã1.00ãªã©ïŒãæããŠMS SQLã§ããªãã¯ãé©çšã§ããŸãã
DECLARE @int int SET @int=123 SELECT @int*1., -- numeric(12, 0) - 0 @int*1.0, -- numeric(13, 1) - 1 @int*1.00, -- numeric(14, 2) - 2 -- CAST(@int AS numeric(20, 0)), -- 123 CAST(@int AS numeric(20, 1)), -- 123.0 CAST(@int AS numeric(20, 2)) -- 123.00
å Žåã«ãã£ãŠã¯ãå€æã®è©³çŽ°ãéåžžã«éèŠã«ãªãããšããããŸããããšãã°ãæ°å€ã®æååïŒvarcharïŒãžã®å€æãè¡ãããå Žåãçµæã®æ£ç¢ºæ§ã«åœ±é¿ããŸããmoneyåãšfloatåã®å€ãvarcharã«å€æããäŸãèããŠã¿ãŸãããã
-- money varchar DECLARE @money money SET @money = 1025.123456789 -- 1025.1235, .. money 4 SELECT @money, -- 1025.1235 -- CAST CONVERT (.. 0) CAST(@money as varchar(20)), -- 1025.12 CONVERT(varchar(20), @money), -- 1025.12 CONVERT(varchar(20), @money, 0), -- 1025.12 ( 0 - 2 ( )) CONVERT(varchar(20), @money, 1), -- 1,025.12 ( 1 - 2 ) CONVERT(varchar(20), @money, 2) -- 1025.1235 ( 2 - 4 )
-- float varchar DECLARE @float1 float SET @float1 = 1025.123456789 DECLARE @float2 float SET @float2 = 1231025.123456789 SELECT @float1, -- 1025.123456789 @float2, -- 1231025.12345679 -- CAST CONVERT (.. 0) -- 0 - 6 . -- varchar CAST(@float1 as varchar(20)), -- 1025.12 CONVERT(varchar(20), @float1), -- 1025.12 CONVERT(varchar(20), @float1, 0), -- 1025.12 CAST(@float2 as varchar(20)), -- 1.23103e+006 CONVERT(varchar(20), @float2), -- 1.23103e+006 CONVERT(varchar(20), @float2, 0), -- 1.23103e+006 -- 1 - 8 . . -- float CONVERT(varchar(20), @float1, 1), -- 1.0251235e+003 CONVERT(varchar(20), @float2, 1), -- 1.2310251e+006 -- 2 - 16 . . -- CONVERT(varchar(30), @float1, 2), -- 1.025123456789000e+003 - OK CONVERT(varchar(30), @float2, 2) -- 1.231025123456789e+006 - OK
äŸãããããããã«ãç¹ã«æååã«èžçãããšãããŸãã¯ãã®éã®å Žåãå®éã«ã¯å€§ããªæµ®åå°æ°ç¹ãšã©ãŒãçºçããããšããããŸãïŒããšãã°ãããã·ã¹ãã ããå¥ã®ã·ã¹ãã ã«ããŒã¿ãããã¹ããã¡ã€ã«ã§è»¢éãããå ŽåãããŸããŸãªçš®é¡ã®çµ±åãå¯èœã§ãïŒ ã
ç¹å®ã®æåïŒ4æå以äžïŒã®ç²ŸåºŠãæ瀺çã«å¶åŸ¡ããå¿ èŠãããå Žåã¯ãããŒã¿ãæ ŒçŽããããã«ãdecimal / numericåã䜿çšããæ¹ãããå ŽåããããŸããååãª4æåãããå Žåãã¿ã€ãmoneyã䜿çšã§ããŸããããã¯ããããæ°å€ïŒ20,4ïŒã«å¯Ÿå¿ããŸãã
-- decimal numeric DECLARE @money money SET @money = 1025.123456789 -- 1025.1235 DECLARE @float1 float SET @float1 = 1025.123456789 DECLARE @float2 float SET @float2 = 1231025.123456789 DECLARE @numeric numeric(28,9) SET @numeric = 1025.123456789 SELECT CAST(@numeric as varchar(20)), -- 1025.12345679 CONVERT(varchar(20), @numeric), -- 1025.12345679 CAST(@money as numeric(28,9)), -- 1025.123500000 CAST(@float1 as numeric(28,9)), -- 1025.123456789 CAST(@float2 as numeric(28,9)) -- 1231025.123456789
ã泚æ
MS SQL 2008ã®æç¹ã§ã¯ã以äžãæ§ç¯ãã代ããã«äœ¿çšã§ããŸãã
DECLARE @money money SET @money = 1025.123456789
ããçãå€æ°åæåæ§æïŒ
DECLARE @money money = 1025.123456789
第äºéšã®çµè«
ãã®ããŒãã§ã¯ãåºæ¬çãªæ§æã«é¢ããæãéèŠãªç¹ãæãåºããŠåæ ããããšããŸãããåºæ¬çãªæ§é ã¯ããã¯ããŒã³ã§ãããããããªããšãSQLèšèªã®ããè€éãªæ§é ã®åŠç¿ãéå§ã§ããŸããã
ãã®è³æããSQLèšèªãåŠç¿ããæåã®äžæ©ãèžã¿åºãã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãã®èšèªãåŠç¿ããå®è·µã«ç§»ããŠãã ããã
ããŒã3-habrahabr.ru/post/255825