11.SQL - YukaKoshiba/MyknowledgeDocs GitHub Wiki
SQL @Japanese Version
Create DateïŒ2025/3/31
Last Update DateïŒ2025/4/23
SQLïŒ
çšèªã ãäœæ³ã ã³ã¡ã³ãæã ãšã€ãªã¢ã¹ã ã³ãã³ãå®è¡é åº
Clause(å¥)
DML(Data Manipulation Language:ããŒã¿æäœèšèª)ïŒ
SELECT/FROM/DISTINCTã
WHEREã
GROUP BYã
HAVINGã
ORDER BYã
LIMIT
INSERTã
UPDATEã
DELETEã
DDL(Data Definition Language:ããŒã¿å®çŸ©èšèª)ïŒ CREATEã ALTERã DROP TRUNCATE
DCL(Data Control Language:ããŒã¿å¶åŸ¡èšèª)ïŒ GRANTã REVOKE
TCL(Transaction Control Language:ãã©ã³ã¶ã¯ã·ã§ã³å¶åŸ¡èšèª)ïŒ
ã¬ãŒã¹ã³ã³ãã£ã·ã§ã³è§£æ¶ã
BEGIN TRANSACTIONã
COMMITã
ROLLBACK
æŒç®åïŒ
ç®è¡æŒç®åã
æ¯èŒæŒç®åã
è«çæŒç®åã
ãã®ä»æŒç®åã
éåæŒç®å (
JOINã
UNIONã
INTERSECTã
EXCEPT/MINUS )
ç¹æ®ãªå€ïŒ NULLã ã¯ã€ã«ãã«ãŒã (%, _)
颿°ïŒ ç®è¡é¢æ°ã éçŽé¢æ°ã æåå颿°ã WINDOW颿°ã NULLé¢é£ã®é¢æ°
æ¡ä»¶åå² (
CASE )ã
ç¹°ãè¿ãåŠç
倿°ïŒ
ããŒã«ã«å€æ°ã
ã¹ãã¢ãããã·ãŒãžã£ã«ããã倿°å®£èš
äžæããŒãã«ã®äœæïŒ WITHå¥ã å¯ååã(ãµãã¯ãšãª) ( 掟çããŒãã«ã çžé¢çå¯ååã )
äžæããŒãã«ã®äœæ(ç©çäž)ïŒ ãã¥ãŒã äžæããŒãã«ã
åŠçæéãæ©ããïŒ INDEXã
åã蟌ã¿SQLïŒ æ©èœã
SQL(Structured Query Language,æ§é åç
§äŒèšèª)ã¯ãããŒã¿ããŒã¹å°çšã«èšèšãããããã°ã©ãã³ã°èšèª
é¢ä¿ããŒã¿ããŒã¹ã«ãããæšæºçãªæäœèšèªã§ãçŸåšã§ã¯ã»ãšãã©ã®RDBMSãSQLãæ¡çšããŠãã
äž»ã«ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ç®¡çã·ã¹ãã (RDBMS)ã§äœ¿çšããããã
è¿å¹Žã§ã¯NoSQLããŒã¿ããŒã¹ãªã©ãä»ã®çš®é¡ã®ããŒã¿ããŒã¹ã§ã䜿çšãããããšããã
SQLã§ã§ããããšã¯ãããŒã¿ããŒã¹ã«ãããåºæ¬çãª4ã€ã®æäœã§ããCRUDã«åºã¥ããŠãã
ãŸããé¢ä¿ããŒã¿ããŒã¹ã«ãããæ°é¢ä¿ããŒã¿ããŒã¹ã®çè«çãªåºç€ãæ
ã£ãŠããé¢ä¿ä»£æ°ãå®éã«è¡šçŸããDBãŸãã¯ããŒã¿ãæäœããããã®èšèªãSQLãšãèšãã
- ããŒãã«ïŒDBã®è¡šã®ããš
- ãã¹ã¿ïŒããŒãã«ã®å ãæ» å€ã«å€ããããšãç¡ãåºæ¬æ å ±ãæ ŒçŽãããããŒãã«(顧客æ å ±,äŒæ¥æ å ±ãªã©)
- ãã©ã³ã¶ã¯ã·ã§ã³ïŒããŒãã«ã®å ãã·ã¹ãã éçšäžãæ¥ã ã®èšé²ãæ ŒçŽãããããŒãã«(ååŒæ å ±,ååãæ å ±ãªã©)
- ãªãã©ã«ïŒåºå®æåå
- ã·ããã ïŒDBãªããžã§ã¯ã(ããŒãã«,ãã¥ãŒ,ã·ãŒã±ã³ã¹ãªã©)ã«å¯Ÿããå¥å
- ãšã€ãªã¢ã¹ïŒSQLã¯ãšãªå ã§ããŒãã«ãã«ã©ã ã«äžæçãªå¥åããŸãã¯æ©èœ
-- Comment with only one sentence
/*
Comment with multiple sentences
*/
åç§°ãã€ã³ãã³ããªã©ã詳现ã¯SQLã¹ã¿ã€ã«ã¬ã€ãåç §ã®ããš
- SQLããŒã¯ãŒã(SELECT,FROMãªã©)ã¯ã倧æå/å°æåã®åºå¥ã¯ãããªãããšãå€ã
ãã ããDBã«ãã£ãŠç°ãªã£ãããèšå®ã§å€æŽåºæ¥ã - å¯èªæ§åäžã®çºã«ãSQLããŒã¯ãŒãã¯å€§æåãã«ã©ã åã¯å°æåã§æžã
- ããã©ãŒãã³ã¹åäžã®çºã«ãå¿
èŠãªåã®ã¿ããŒã¿ååŸã®å¯Ÿè±¡ãšãã
WHEREå¥ãªã©ãé§äœ¿ããŠçµã蟌ã¿ãèªã¿èŸŒã¿ããŒã¿æ°ãæžãã - ãµãã¯ãšãª(å¯ååã)ã䜿çšããå Žåã¯ãå¯èœã§ããã°JOINå¥ã«æžãæãããªã©ãæé©åãæ€èšãã
- DBã«ãã£ãŠãåºæã®ã«ãŒã«ãããçºã䜿çšããDBã«ãã£ãŠäœ¿ãåãã
- ææ«ã«;(ã»ãã³ãã³)ãåºåãæåã§äœ¿çšãã
å€ãã®DBMSã§ã¯å¿ é ã§ã¯ãªãããã;ããªããŠãå®è¡ã§ãã
ããããè€æ°ã®ã¯ãšãª(SQLæ)ãå®è¡ããéã¯ãå¿ ã;ã§åºåãå¿ èŠããã
SQLã¯ãšãªå
ã§ããŒãã«ãã«ã©ã ã«äžæçãªå¥åãä»ããæ©èœ
ASã䜿çšããŠããšã€ãªã¢ã¹ãä»äžãã
CTE(Common Table Expression,å
±éããŒãã«åŒ)ããµãã¯ãšãª(å¯ååã),JOINã®éãªã©ã
ããããããåç§°ãžå€æŽããããåç§°ãçããªãããšã§ãå¯èªæ§ãåäžãã
SELECT AVG(clumn1) AS AVERAGE FROM table
SELECT column1, column1, ...
FROM table1 AS T1
JOIN table2 AS T2 ON T1.join-key1 = T2.join-key2;
WITH temp-table AS (
SELECT column1, column2, ...
FROM table1
WHERE ....
)
SQLã¯ãšãªã®è«ççãªå®è¡é åº
å®éã®ããŒã¿ããŒã¹ãšã³ãžã³ã¯ãã¯ãšãªã®æé©åã®ããã«ãç°ãªãé åºã§åŠçãå®è¡ããå Žåããã
ç¹ã«ãããŒã¿ããŒã¹ã®"SQLãªããã£ãã€ã¶"ãšåŒã°ããæ©èœããã¯ãšãªã®å®è¡èšç»ãåæããæãå¹ççãªå®è¡é åºã決å®ãã
- FROM / JOIN
- WHERE
- GROUP BY
- éçŽé¢æ°(COUNT,SUM,AVG,MAX.MIN)
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- LIMIT / OFFSET
ããŒã¿ããŒã¹ã·ã¹ãã ã«ãã£ãŠã¯ãEXPLAINã³ãã³ãã䜿çšããããšã§ãå®éã®å®è¡èšç»ã確èªã§ãã
ããã¯ãã¯ãšãªã®ããã©ãŒãã³ã¹ãåæããæ¹åããããã«åœ¹ç«ã€
éçŽé¢æ°ã®çµæã«åºã¥ããŠã°ã«ãŒãããã£ã«ã¿ãªã³ã°ããéã¯ãWHEREå¥ã§ã¯ãªããHAVINGå¥ã䜿çšããããš
DBããããŒã¿ã®ååŸã远å ãæŽæ°ãåé€ãªã©ãDBã®ããŒã¿ãæäœããããã®èšèª
è¡ã®ååŸãè¡ã
SELECT FROM 衚æ ããŒã¿ãååŸãããååâŠ
*ãããŠããããšãå
šãŠã®åãéžæãããããã¬ã¹ãã³ã¹ãäœäžãããããå¿
èŠãªåã®ã¿éžæãã
DISTINCTå¥ãå©çšãããšãçµæã»ããããéè€ããè¡ãæé€ã§ãã
DISTINCTã¯ãSELECTå¥äžã§äœ¿ãããšãã§ããSELECTã®åŸãã«èšè¿°ãã
â»DISTINCTã¯ãDML(ããŒã¿æäœèšèª)ã§ã¯ãªããDQL(ããŒã¿åãåããèšèª)ã«åé¡ããã
ã¬ã³ãŒãã®äžŠã³æ¿çµµãè¡ã
ASCïŒæé (ããã©ã«ã)ãDESCïŒéé
䞊ã³å€ããããååãè€æ°ããå Žåã¯ã察象ã®åã®åŸãã«æé /éé ãèšå®ãã
SELECT CITY,LENGTH(CITY) AS LEN
FROM STATION
ORDER BY LEN DESC, CITY ASC
GROUP BYãå©çšããå ŽåãSELECTã§æå®ã§ããåã¯ã以äžã®ãããããšããå¶éããã
ã»éçŽé¢æ°ã䜿çšããå
ã»GROUP BYå¥ã«æå®ãããå
WHEREãšåãæ§ã«æœåºçµæã®çµã蟌ã¿ãè¡ã
ã³ãã³ãå®è¡é åºãWHEREã¯GROUP BYã®åã§ãããããã°ã«ãŒãååã®ããŒã¿ã®æœåºãåºæ¥ãã®ã«å¯Ÿãã
HAVINGã¯GROUP BYåŸã§ãããããã°ã«ãŒãåããåŸã®ããŒã¿ã®æœåºæ¡ä»¶ã®æå®ãåºæ¥ã
ã¬ã³ãŒãã®äžŠã³æ¿ã
䞊ã³å€ããããååãè€æ°ããå Žåã¯ã察象ã®åã®åŸãã«æé /éé ãèšå®ãã
ASC:æé (ããã©ã«ã) DESC:éé
GROUP BYå¥ã§æå®ããå ŽåãSELECTå¥ã§æå®ããåºæ¥ãã®ã¯ãGROUP BYããå or éèšé¢æ° or 宿°åŒã®ã¿
SELECT CITY,LENGTH(CITY) AS LEN FROM STATION ORDER BY LEN DESC, CITY ASC
倧éã®ããŒã¿ã®äžãããæå®ã®è¡æ°ã ãæœåºãã
-- 5è¡ã ãèªã¿èŸŒã
SELECT column
FROM table
LIMIT 5;
è¡ã®æ¿å ¥ãè¡ã
INSERT INTO ããŒãã«å (åå1, åå2, åå3) SELECT (åå1, åå2, åå3) FROM TableName;
INSERT INTO table_name (column1, column2, column3) VALUES ('abc', 10, 'XX'), ('def', 11, 'YY');
ã
è¡ã®å€ãæŽæ°ãã
UPDATE ããŒãã«å SET åå = å€ WHERE (æ¡ä»¶æ);
UPDATE table_name SET column1 = 'abc' WHERE (column2 = 10);
è¡ã®å€ãåé€ãã
DELETE FROM ããŒãã«å WHERE (æ¡ä»¶åŒ);
DELETE FROM table_name WHERE column1 = 'abc';
DBã®è¡šã®äœæã倿Žãªã©ãDBã®æ§é ãå®çŸ©ããèšèª
衚ã®äœæ
CREATE TABLE table_name
(data-type column name1, data-type column name2, data-type column name3);
CREATE TABLE rental_dvd
(int id, name varchar, int price, date date);
è¡šã®æŽæ°(åã®è¿œå /åé€/倿Žãäž»ããŒ/å€éšããŒã屿§å€æŽãªã©)
-- 衚ã®ååã倿Žãã
ALTER TABLE old_table_name RENAME new_table_name
-- åã®å¶çŽã远å
ALTER TABLE ããŒãã«å ADD CONSTRAINT å¶çŽåãæå® å¶çŽã®çš®é¡ (åå);
-- åã®å¶çŽãåé€
ALTER TABLE ããŒãã«å DROP CONSTRAINT å¶çŽå;
-- åã®è¿œå
ALTER TABLE ããŒãã«å ADD åå ããŒã¿å å¶çŽ;
-- åã®åé€
ALTER TABLE ããŒãã«å DROP COLUMN åå;
-- åã®ããŒã¿åã®å€æŽ
ALTER TABLE ããŒãã«å MODIFY COLUMN åå ããŒã¿å;
-- ååã®å€æŽ
ALTER TABLE ããŒãã«å RENAME COLUMN å€ãåå TO æ°ããåå;
[åå] [ããŒã¿å/å®çŸ©å] [DEFAULTå¥] [åå¶çŽå®çŸ©]
| çš®é¡ | 説æ | å®çŸ©ã®ä»æ¹ |
|---|---|---|
| UNIQUE | èšå®ãããåãä»è¡ããã€å€ãšã®éè€ãèªããªãå¶çŽ NULLã蚱容(1åã®ã¿)ãã |
UNIQUE (column1, column2) |
| PRIMARY KEY | èšå®ãããåãä»è¡ããã€å€ãšã®éè€ãèªããªãå¶çŽ NULLã蚱容ããªã äž»ããŒãšããŠã€ã³ããã¯ã¹ãèªåäœæãã ç¹åŸŽïŒ1.äžææ§(UNIQUE) 2.NOT NULL 3.æ°žç¶æ§(äžå€) |
PRIMARY KEY(column) |
| FOREIGN KEY | å€éšã㌠FKæ ã£ãŠããå€ã¯åé€ã§ããªã åç §ããã衚ã«ãããã®ããåç §ã§ããªã NULLã§ãå¯ |
FOREIGN KEY (column) REFERENCES external table(referenced_column) |
| CHECK | åã«æ ŒçŽãããå€ãç¹å®ã®æ¡ä»¶ãæºããããæ€èšŒ | CHECK (column condition) CHECK (num BETWEEN 1 AND 5) |
| DEFAULT | åã®å€ãæå®ãããªãã£ãéãèªåçã«ããã©ã«ãå€ãæ¿å
¥ããUPDATEå¥ã§ç¹å®ã®è¡ã«ã®ã¿é©çšã¯äžå¯ |
CHAR(4) DEFAULT '1234' NOT NULL |
ããŒã¿ããŒã¹å
ã®ãªããžã§ã¯ã(ããŒãã«ããã¥ãŒãã€ã³ããã¯ã¹ãªã©)ãå®å
šã«åé€ããããã«äœ¿çšããã
DROPã¯éåžžã«åŒ·åãªã³ãã³ãã§ãäžåºŠå®è¡ãããšåé€ããããªããžã§ã¯ãã埩å
ããããšã¯å°é£
DROPæãå®è¡ããåã«ãåé€ãããªããžã§ã¯ãããã確èªããããã¯ã¢ãããåã£ãŠããããšãåŒ·ãæšå¥š
DROP OBJECT_TYPE OBJECT_NAME;
OBJECT_TYPEïŒåé€ãããªããžã§ã¯ãã®çš®é¡(TABLE,VIEW,INDEX,DATABASEãªã©)
TRUNCATE TABLE table_name;
ããŒãã«ã®æ§é ãä¿æãããŸãŸãããŒã¿ãåæåã§ãã
ããŒãã«å
ã®ãã¹ãŠã®ããŒã¿ãé«éã«åé€ãã
æ¡ä»¶ãæå®ããŠç¹å®ã®ããŒã¿ãåé€ããDELETEãããé«éã«åŠçã§ãã
ããŒã«ããã¯ã§ããªãå Žåãããããã䜿çšã®éã¯æ³šæãå¿
èŠ
â»ããŒãã«ã®æ§é (ã¹ããŒã)ã¯ä¿æ
â»èªåã€ã³ã¯ãªã¡ã³ãã«ãŠã³ã¿ã¯ãªã»ããããã
ã¢ã¯ã»ã¹æš©ã®èšå®ããã©ã³ã¶ã¯ã·ã§ã³åŠçãªã©ãDBãå¶åŸ¡ããèšèª
ãŠãŒã¶æš©éã®ä»äž
衚ã®ç¹å®ã®å©çšè
ã«å¯Ÿãã衚ãžã®ååããæŽæ°/远å /åé€ãªã©ã®æäœæš©éãä»äžãã
æš©éã®çš®é¡ïŒ
SELEC(ããŒã¿ã®é²èЧ), INSERT(ããŒã¿ã®æ¿å
¥), UPDATE(ããŒã¿ã®æŽæ°), DELETE(ããŒã¿ã®åé€),
REFERENCES(å€éšããŒå¶çŽã®åç
§), EXECUTE(ããã·ãŒãžã£ãå®è¡ã§ããæš©é), ALL(äžèšãã¹ãŠã®æš©é)
-- ããŒãã«ã®ã¢ã¯ã»ã¹æš©ãä»äžãã
GTANT SELECT, INSERT, UPDATE ON Table1 TO user1
-- ç¹å®ã®åã ããæå®ãã
GTANT SELECT(å1, å2) ON Table1 TO user1
ããŒã¿ããŒã¹ãªããžã§ã¯ãã«å¯ŸãããŠãŒã¶ãŒãããŒã«ã®æš©éãåãæ¶ãããã«äœ¿çšãã
REVOKE æš©éãªã¹ã
ON ãªããžã§ã¯ãã®çš®é¡ ãªããžã§ã¯ãå
FROM ãŠãŒã¶ãŒãŸãã¯ããŒã«ãªã¹ã;
æš©éãªã¹ã:
åãæ¶ãæš©éã®çš®é¡(SELECT, INSERT, UPDATE, DELETEãªã©)ãã«ã³ãåºåãã§æå®
ALL PRIVILEGESãæå®ãããšããã¹ãŠã®æš©éãåãæ¶ããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã®éå§
BEGIN TRANSACTION;
è¡šã®ææè
ãèš±å¯ããã人ã ãåŠçã§ãã
COMMIT;/code>
ROLLBACK;
æŒç®å
説æ
æŒç®å
説æ
+
å ç®
-
æžç®
*
ä¹ç®
/
é€ç®
%
å°äœ
æŒç®å
説æ
äŸæ
< ãŸã㯠>
<= ãŸã㯠>=
å°ãªã/倧ãªã
以äž/以äž
æ¥ä»ã«çšããããšãåºæ¥ã
X < Y (XããYãæªæ¥)
NULLå€ã¯å€å¥ã§ããªã
âIS NULL以å€å
šãŠFALSE
=
çå·
X = Y -- XãšYã1察1ã§çãããã©ãããæ¯èŒ
<>ãŸãã¯=!
äžçå·
SQLã¯åºæ¬çã«èšå·ã§ã¯ãªããæåã§è«çæŒç®åãæžã
ãã ããäžéšã®DBMS(äŸãã°MySQL)ã§ã¯ã&&(AND), ||(OR), !(NOT)ãªã©ã®èšå·ã䜿çšã§ããããæšæºçãªSQLã§ã¯ãªã
äžããåŠçã®åªå
é 床ãé«ãé
æŒç®å
説æ
äŸæ
IS NULL
IS NOT NULL
æå®ãããåãNULLå€ãã©ãããå€å®ãã
æå®ãããåãNULLå€ã§ã¯ãªããã©ãããå€å®ãã
SELECT *ãFROM table_nameãWHERE column_name(s) IS NULL;
SELECT *ãFROM table_nameãWHERE column_name(s) IS NOT NULL;
NOT
åŠå®
AND
è«çç©
OR
è«çå
XOR
æä»çè«çå
2ã€ã®æ¡ä»¶ã®ãã¡ãã©ã¡ããäžæ¹ãçã®å Žåã®ã¿çãè¿ã
â»äžéšã®DBMSã§ã¯ãµããŒããããŠããªãå Žåããã
çš®é¡
åŠç
BETWEEN
NOT BETWEEN
ç¯å²æå®
ç¯å²å€ã®æå®
WHERE num BETWEEN 0 AND 10;
IN
NOT IN
å€ã®ãªã¹ããŸãã¯ãµãã¯ãšãªã®çµæãš
å€ã®å®å
šäžèŽ/äžäžèŽãæ¯èŒ
SELECT column_name(s)
FROM table_name
WHERE åå IN (value1, value2, ...);
EXISTS
NOT EXISTS
ãµãã¯ãšãªã®çµæã®ååšç¢ºèª
ãµãã¯ãšãªä»¥å€ã«äœ¿çšã§ããªã
æ¯èŒããå€ãäºåã«ããããªããã£ããã
æ¯èŒããå€ã®æ°ãå€ãéã«æå¹
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT * FROM subquery);
ALL
ãµãã¯ãšãªã®å
šãŠã®å€ãæå®ãããæ¡ä»¶ãæºããå Žåã«ç(TRUE)ãè¿ã
SELECT column
FROM table_name
WHERE column relational operator ALL (subquery);
ANY/SOME
ãµãã¯ãšãªã®å€ãæå®ãããæ¡ä»¶ãããããæºããå Žåã«ç(TRUE)ãè¿ã
SELECT column
FROM table_name
WHERE column relational operator ANY (subquery);
PIVOT
è¡ãåã«å€æããããŒã¿ãéèšãã
ã¯ãã¹éèšè¡šãäœæãã
SQL Server,Oracle Databaseã§ãµããŒããããŠãã
è€æ°ã®çµæã»ãã(ã¯ãšãªã®çµæ)ãçµåããŠãåäžã®çµæã»ãããçæããããã«äœ¿çšãããSQLã®æŒç®å
æ°åŠçãªéåæŒç®ã®æŠå¿µã«åºã¥ããŠãããããŒã¿ããŒã¹å
ã®ããŒã¿ãæäœãã匷åãªããŒã«
è€æ°ã®ããŒãã«ãé¢é£ã«ã©ã ã«åºã¥ããŠæšªæ¹åã«çµåãã1ã€ã®çµæã»ãããšããŠååŸãã
UNIONå¥ãINTERSECTå¥ã®ããã«ãåæ°ããã³é çªãäžèŽããŠããå¿
èŠã¯ãªããéåžžã«æè»ãªçµåãå¯èœ
çš®é¡
åŠç
INNER JOIN/JOIN
2ã€ã®ããŒãã«ã§å
±éã®ã«ã©ã ã®å€ãäžèŽããè¡ã®ã¿ãçµåãã
JOINã ãèšèŒãããšãINNER JOINãçç¥åœ¢ãšããŠæ±ããã
LEFT JOIN
å·ŠåŽã®ããŒãã«ã®å
šãŠã®è¡ãšãå³åŽã®ããŒãã«ã§å
±éã®ã«ã©ã ã®å€ãäžèŽããè¡ãçµåãã
RIGHT JOIN
å³åŽã®ããŒãã«ã®å
šãŠã®è¡ãšãå·ŠåŽã®ããŒãã«ã§å
±éã®ã«ã©ã ã®å€ãäžèŽããè¡ãçµåãã
FULL OUTER JOIN
2ã€ã®ããŒãã«ã®ãã¹ãŠã®è¡ãçµåãã
å
±éã®ã«ã©ã ã®å€ãäžèŽããªãå Žåã¯ãNULLå€ãå«ãŸãã
CROSS JOIN
çŽç©(å
šãŠã®çµã¿åãã)æŒç®åããã«ã«ãç©,ã¯ãã¹çµåãšãåŒã°ãã
2ã€ã®ããŒãã«ã®ãã¹ãŠã®è¡ã®çµåããçæããçµåæäœãè¡ã
çµåæ¡ä»¶ã®æå®
çµåæ¡ä»¶ã®æå®æ¹æ³ã¯ãONå¥ã䜿çšããæ¹æ³ãšãUSINGå¥ã䜿çšããæ¹æ³ããã
ONå¥ïŒ
çµåããããŒãã«éã§çµåæ¡ä»¶ãæè»ã«æå®ã§ãã
çµåããã«ã©ã åãç°ãªãå Žåããè€æ°ã®çµåæ¡ä»¶ãæå®ããå Žåã«äœ¿çšãã
USINGå¥ïŒ
çµåããããŒãã«éã§å
±éã®ã«ã©ã åã1ã€ã®ã¿çµåæ¡ä»¶ãšããŠæå®ã§ãã
ONå¥ã®ãããªæè»æ§ã¯ç¡ãããç°¡æœã«èšè¿°ã§ãã
SELECT * FROM Table1 JOIN Table2 ON Table1.columnA = Table1.columnB;
SELECT * FROM Table1 JOIN Table2 USING (CommonColumnName);
ããŒãã«ã®å·Šå³
JOINå¥ã䜿ã£ãŠ2ã€ã®ããŒãã«ãæå®ããå ŽåãLEFT JOINãRIGHT JOINãªã©ãJOINã®çš®é¡ã«å¯ããã以äžã®éãã«ãªã
SELECT column1, column2, column3
FROM Table1 -- the table on the left
JOIN Table2 -- the table on the right
ON/USING ....;
åéåæŒç®å
è€æ°ã®SELECTæã®çµæã»ããã瞊æ¹åã«çµåãã1ã€ã®çµæã»ãããšããŠååŸãã
NULLå€ã蚱容ãã
çµåãã衚ã¯ãåæ°ããã³é çªãäžèŽããŠããå¿
èŠããã
çš®é¡
åŠç
UNION
éè€ããè¡ãåé€ããŠçµæãçµåãã
UNION ALL:
éè€ããè¡ãæ®ããŠçµæãçµåãã
(SELECT CITY,LENGTH(CITY) AS LEN FROM STATION ORDER BY LEN ASC, CITY LIMIT 1)
UNION
(SELECT CITY,LENGTH(CITY) AS LEN FROM STATION ORDER BY LEN DESC, CITY LIMIT 1)
è€æ°ã®SELECTæã®çµæã»ããã«å
±éããè¡ãæœåºãã
çµæã»ããå
ã®éè€ããè¡ãåé€ãã
çµæã»ããã®é åºã¯ä¿èšŒãããªã
çµåãã衚ã¯ãåæ°ããã³é çªãäžèŽããŠããå¿
èŠããã
å·®éåæŒç®å
æåã®SELECTæã®çµæã»ããããã2çªç®ã®SELECTæã®çµæã»ããã«å«ãŸããè¡ãé€å€ãã
çµæã»ããå
ã®éè€ããè¡ãåé€ãã
çµæã»ããã®é åºã¯ä¿èšŒãããªã
INNER JOINãšINTERSECTã®éãïŒ
INNER JOIN
ã»DISTINCTã䜿ããªãéããåãå€ãè€æ°æ±ã
ã»çµåããããŒãã«ã®åæ°ãšé çªãç°ãªã£ãŠããŠãæ§ããªã
INTERSECT
ã»éè€ã¯æé€ããã
ã»çµåããããŒãã«ã®åæ°ãšé çªãäžèŽããŠããå¿
èŠããã
OUTER JOINãšUNIONã®éããã
INNER JOINãšINTERSECTã®éããšåæ§ã§ãã
å€
æå³
NULL
å€ãã®ãã®ãååšããªã
IS NULLããã³IS NOT NULL以å€ã§ã
TRUEãè¿åŽãããããšã¯ç¡ã
NaN
(Not a Number)
æ°å€ãšããŠè¡šçŸã§ããªãå€
äž»ã«æµ®åå°æ°ç¹æ°ã®æŒç®çµæãšããŠçŸãã
(äŸ)0ã§å²ã£ãå Žåãè² ã®æ°ã®å¹³æ¹æ ¹ãèšç®ããå Žåãªã©
DBMSã«ãã£ãŠã¯ãµããŒããããŠããªãå Žåããã
Infinity
(ç¡é倧)
æ°å€ã®æå€§å€ãè¶
ããå€
äž»ã«æµ®åå°æ°ç¹æ°ã®æŒç®çµæãšããŠçŸãã
(äŸ)éåžžã«å€§ããæ°ã0ã§å²ã£ãå Žåãªã©
DBMSã«ãã£ãŠã¯ãµããŒããããŠããªãå Žåããã
''(空æå)
é·ãã0ã®æåå
NULLãšã¯ç°ãªããå€ãååšããç¶æ
0
æ°åã®0
NULLãšã¯ç°ãªããå€ãååšããç¶æ
LIKEæŒç®åãšãšãã«äœ¿çšãããæååã®ãã¿ãŒã³ãããã³ã°ãè¡ãããã®ç¹æ®æå
ã¯ã€ã«ãã«ãŒã
çšé
äŸæ
%
0æå以äžã®ä»»æã®æåå
'abc%'
'abc'ã§å§ãŸããã¹ãŠã®æåå
_
ä»»æã®1æå
'a_c'
'abc', 'adc'ãªã©3æåã®æåå
è€åã
ã®ããŒã¿ã«å¯ŸããæŒç®ãè¡ã颿°
颿°
説æ
äŸæ
ABS()
絶察å€ãç®åº
ABS(-5) -> 5
FLOOR()
ã¬ã³ãŒãæ°ãç®åº
FLOOR(5.9) -> 5
ROUND()
æå®æ¡æ°ã§åæšäºå
¥ãã
ROUND(5.45, 1) -> 5.5
CEIL()
åŒæ°ä»¥äžã®æå°ã®æŽæ°ãè¿ã
CEIL(5.1) -> 6
MOD()
é€ç®ã®å°äœ
MOD(10, 3) -> 1
POWER()
æ°å€ã®ã¹ãä¹ãè¿ã
POWER(2, 3) -> 8
SQRT()
æ°å¹³æ¹æ ¹ãè¿ã
SQRT(16) -> 4
LOG()
èªç¶å¯Ÿæ°ãè¿ã
LOG(10, 100) -> 2
è€æ°ã®ããŒã¿ã«å¯Ÿããéèšãã颿°
éçŽé¢æ°ã®äœ¿çšã«ããã£ãŠããã€ã泚æç¹ããã
- 䜿çšç®æã®å¶é
WHEREå¥å
ãGROUP BYå¥å
ã§ãçŽæ¥éçŽé¢æ°ã䜿çšã§ããªã
SELECTå¥å
ãŸãã¯GROUP BYå¥å
ã§ãã䜿çšã§ããªã
éçŽé¢æ°ã䜿ããã®ã¯ãSELECTå¥å
ãHAVINGå¥å
ãORDER BYå¥å
- WHEREå¥ã®å¶é/HAVINGã®å©çš
åŠçã®åªå
é ã®éœåã§ãéçŽé¢æ°ã䜿çšããéãWHEREå¥ã®çµã蟌ã¿ã¯é©çšãããªã
ïŒWHEREå¥ã¯è¡ã®ãã£ã«ã¿ãªã³ã°ãè¡ããéçŽé¢æ°ã®çµæ(éèšå€)ã«åºã¥ããŠè¡ãçµã蟌ãããšã¯ã§ããªã
éçŽé¢æ°ã®çµæã§ãã£ã«ã¿ãªã³ã°ãè¡ãããå Žåã¯ãHAVINGå¥ã䜿çšããå¿
èŠããã
- NULLå€ã®æ±ã
éçŽé¢æ°ã¯ãäžè¬çã«NULLå€ãç¡èŠããŠéèšãè¡ãçºãæå®ã®ã«ã©ã åå¿
ããéžæããããš
COUNT(*)ïŒNULLå€ãå«ããã¹ãŠã®è¡æ°ãã«ãŠã³ããã
COUNT(column_name)ïŒNULLå€ãå«ãŸãªãè¡æ°ãã«ãŠã³ããã
â»SUM(), AVG(), MAX(), MIN()ãªã©ã®ç®è¡ç³»ã®é¢æ°ã¯ãNULLå€ãç¡èŠãã
颿°
説æ
äŸæ
AVG
åèšå€ãç®åº
COUNT
ã¬ã³ãŒãæ°ãç®åº
MIN
MAX
æå€§å€ã®ç®åº
æå°å€ã®ç®åº
颿°
説æ
äŸæ
LIKE
ãã¿ãŒã³ãããã³ã°
ã¯ã€ã«ãã«ãŒãã«ããææ§æ€çŽ¢ãã§ãã
[]ã«ããç¯å²æå®ãå¯
WHERE name = LIKE('%a%')
LIKE '[abcd]%'
LOWER
UPPER
å°æåã«ãã
倧æåã«ãã
CONCAT()
æååãé£çµ
CONCAT('Hello', ' ', 'World')
-> 'Hello World'
SUBSTRING()
æååã®äžéšãæœåºã
SUBSTRING('HelloWorld', 6, 5)
-> 'World'
LENGTH()
æååã®é·ããååŸ
LENGTH('HelloWorld')
-> 10
TRIM()
æååã®å
é ãšæ«å°Ÿã®
ç©ºçœæåãåé€
TRIM(' HelloWorld ')
-> 'HelloWorld'
REPLACE()
æååã®çœ®æ
REPLACE('HelloWorld', 'World', 'SQL')
-> 'HelloSQL'
INSTR()
æå®ã®æååãæåã«åºçŸ
ããäœçœ®ãååŸãã
INSTR('HelloWorld', 'World')
-> 6
SQLã®åŒ·åãªåææ©èœã§ãããããŒã¿ã»ããå
ã®ç¹å®ã®"ãŠã£ã³ããŠ"(è¡ã®éå)ã«å¯ŸããŠèšç®ãè¡ã颿°
åŸæ¥ã®éçŽé¢æ°ãšã¯ç°ãªããè¡ãã°ã«ãŒãåããã«ãè¡ããšã«ããšãªãèšç®ãè¡ãããšãã§ãã
2000幎代åé ããååšãã颿°ã§ã¯ããããè¿å¹Žã®ããŒã¿åæã®éèŠæ§ãé«ãŸãã«ã€ããŠãWINDOW颿°ã®å©çšãå¢å ããŠãã
ç¹åŸŽïŒ
ã»ããŒã¿åæã«ç¹åïŒããŒã¿ã®åŸåãé äœãç§»åå¹³åãªã©ãåæããããã«èšèšãããŠãããåŸæ¥ã®éçŽé¢æ°(SUM,AVGãªã©)ãšç°ãªããåè¡ã«å¯ŸããŠè©³çްãªåæçµæãæäŸã§ãã
ã»ãŠã£ã³ããŠã®å®çŸ©ïŒOVERå¥ã䜿çšããŠãèšç®å¯Ÿè±¡ãšãªããŠã£ã³ããŠãå®çŸ©ããããŒãã£ã·ã§ã³(ã°ã«ãŒã)ãé åºãæå®ããæè»ãªå®çŸ©ãå¯èœ
éåžžã®éçŽé¢æ°ãOVERå¥ãæå®ããŠãŠã£ã³ããŠãå®çŸ©ããããšã§ãWINDOW颿°ãšããŠäœ¿çšã§ãã
ãŸãããã®ä»ã«ã以äžã®ãããªåæå°çšã®WINDOW颿°ã®ç¬èªã®é¢æ°ãååšãã
颿°å
åŠç
ROW_NUMBER()
è¡ã«é£ç¶ããçªå·ãå²ãåœãŠã
RANK()
DENSE_RANK()
è¡ã«ã©ã³ã¯ãå²ãåœãŠã
DENSE_ç¡ïŒåé äœåŸã«çªå·ãé£ã¶
DENSE_æïŒåé äœåŸã«çªå·ãé£ã°ãªã
PERCENT_RANK()
ããŒãã£ã·ã§ã³ãŸãã¯ã¯ãšãªçµæã»ããã®å€ã®çžå¯Ÿã©ã³ã¯ãèšç®
NTILE()
è¡ãNåã®ã°ã«ãŒãã«åå²ãã
åã°ã«ãŒãã«çªå·ãå²åœãŠã
FIRST_VALUE()
ãŠã£ã³ããŠã®æåã®è¡ã®å€ãè¿ã
FIRST_VALUE()
LAST_VALUE()
ãŠã£ã³ããŠã®æå/æåŸã®è¡ã®å€ãè¿ã
LAG()
LAG()
çŸåšã®è¡ããæå®ããããªãã»ããå/åŸã®è¡ã®å€ãè¿ã
CUME_DIST()
ããŒãã£ã·ã§ã³ãŸãã¯ã¯ãšãªçµæã»ããã®å€ã®çޝç©ååžãèšç®
æžãæ¹ã¯ã颿°å() OVER (PARTITION BY column1 ORDER BY column2)
PARTITION BYïŒcolumn1ã®å€ã«åºã¥ããŠè¡ãã°ã«ãŒãã«åå²ãã â»çç¥å¯èœ
ORDER BYïŒcolumn2ã«åºã¥ããŠãœãŒããã â»çç¥å¯èœ
SELECT
product,
sales,
RANK() OVER (ORDER BY sales DESC) AS sales_rank
FROM
sales_table;
颿°å
åŠç
äŸæ
COALESCE(AïŒB, ...)
åŒæ°ãªã¹ãã®äžã§NULLã§ãªãæåã®å€ãè¿ã
åŒæ°ã®æ°ã2ã€ä»¥äžã®å Žåã«å©çšå¯èœã§ã
SELECT COALESCE(column1, column2, 'default value') FROM table_name;
NVL(AïŒB)
AãNULLã§ãªããšãã¯AãïŒAãNULLã®ãšãã¯Bãè¿ã
OracleããŒã¿ããŒã¹ã®ã¿å©çšã§ããåŒæ°ã¯2ã€
SELECT NVL(column1, 'alternative value') FROM table_name;
NVL2(AïŒB, C)
AãNULLã§ãªããšãã¯BãïŒAãNULLã®ãšãã¯Cãè¿ã
OracleããŒã¿ããŒã¹ã®ã¿å©çšã§ããåŒæ°ã¯3ã€
SELECT NVL2(column1, 'NOT NULL', 'NULL') FROM table_name;
ä»ã®ããã°ã©ãã³ã°èšèªã®SWITCHæã®ãããªäœ¿ãæ¹ãåºæ¥ã
SELECT
product_name,
price,
CASE
WHEN price >= 100 THEN 'high'
WHEN price >= 50 THEN 'middle'
ELSE 'low'
END AS prce_range
FROM
products;
SQLã«ããã倿°ã¯ãäžæçãªããŒã¿å€ãæ ŒçŽããããã®ååä»ãã®èšæ¶é åã§ã
倿°ã¯ãSQLæã®äžã§å€ãä¿æããæäœããããã«äœ¿çšããã
æ¡ä»¶åå²ãã«ãŒãåŠçãªã©ãåçãªSQLæãçæãããæã«åœ¹ç«ã€
SQLã«ããã倿°ã¯ãäž»ã«ä»¥äžã®2ã€ã®å Žé¢ã§äœ¿çšãããïŒ
ã»ããŒã«ã«å€æ°ïŒ
ãã¹ãã¢ãããã·ãŒãžã£ã颿°å
ã§äžæçã«äœ¿çšããã倿°
ãç¹å®ã®åŠçãããã¯å
ã§ã®ã¿æå¹
ã»ã¹ãã¢ãããã·ãŒãžã£ã®ãã©ã¡ãŒã¿(åŒæ°)
ãåŒã³åºãå
ããå€ãåãæž¡ãããã«äœ¿çšããã
倿°ã®äœ¿ç𿹿³ã¯ãDBMSã«ããç°ãªã
SETã¹ããŒãã¡ã³ããšã倿°ã®å
é ã«@ã䜿çšãã
SET @my_variable = 10;
SELECT @my_variable;
DECLAREã¹ããŒãã¡ã³ãã§å®£èšãã
SETã¹ããŒãã¡ã³ããŸãã¯SELECTã¹ããŒãã¡ã³ãã䜿çšããŠå€æ°ãåæåãã
倿°ã®å
é ã«@ã䜿çšãã
DECLARE @my_variable INT;
SET @my_variable = 10;
SELECT @my_variable;
DECLAREã¹ããŒãã¡ã³ãã§å®£èšãã
:=æŒç®åãŸãã¯ãDEFAULTå¥ã䜿çšããŠå€æ°ãåæåãã
DO $$
DECLARE
my_variable INT := 10;
BEGIN
RAISE NOTICE '%', my_variable;
END $$;
DECLAREã»ã¯ã·ã§ã³ã§å€æ°ã宣èšãã:=æŒç®åã䜿çšããŠå€æ°ãåæåãã
DECLARE
my_variable NUMBER := 10;
BEGIN
DBMS_OUTPUT.PUT_LINE(my_variable);
END;
/
DECLAREã¹ããŒãã¡ã³ãã䜿çšããŠå€æ°ã宣èšãã
CREATE PROCEDURE my_procedure()
BEGIN
DECLARE my_variable INT DEFAULT 10;
-- Processing using variables
END;
DECLAREã¹ããŒãã¡ã³ãã䜿çšããŠå€æ°ã宣èšãã
CREATE PROCEDURE my_procedure
AS
BEGIN
DECLARE @my_variable INT = 10;
-- Processing using variables
END;
DECLAREã»ã¯ã·ã§ã³ã§å®£èšãã
CREATE OR REPLACE PROCEDURE my_procedure()
LANGUAGE plpgsql
AS $$
DECLARE
my_variable INT := 10;
BEGIN
-- Processing using variables
END;
$$;
DECLAREã»ã¯ã·ã§ã³ã§å€æ°ã宣èšãã
CREATE OR REPLACE PROCEDURE my_procedure
AS
my_variable NUMBER := 10;
BEGIN
-- Processing using variables
END;
/
æå®ãããæååãæå®ãããåæ°ã ãç¹°ãè¿ããæååãè¿ã颿°ã§ã
DBMSã«ãã£ãŠã䜿ãã颿°ãåäœãè¥å¹²ç°ãªã
åºæ¬æ§æã¯ãç¹°ãè¿ã颿°(æåå, ç¹°ãè¿ãåæ°);ã§èšè¿°ãã
ç¹°ãè¿ãåæ°ã0以äžã®å Žåã空æååãè¿ã
SELECT REPEAT('abc', 3); -- 'abcabcabc'
REPLICATE(æåå, ç¹°ãè¿ãåæ°);
SELECT REPLICATE('abc', 3); --ã'abcabcabc'
SELECT REPEAT('abc', 3); -- 'abcabcabc'
SELECT LPAD('abc', 9, 'abc'); -- 'abcabcabc'
倿°ãšREPEAT()ãªã©ã®ç¹°ãè¿ãåŠçœ®ãè¡ã颿°ãçµã¿åããããšã
ä»ã®ããã°ã©ãã³èšèªã®foræã®æ§ãªåŠçã宿œããããšãåºæ¥ã
MySQLã®äŸ
-- Variable Declaration
SET @row := 0;
-- Repeat data get by SELECT while @row < 21
SELECT REPEAT('* ', @row := @row + 1) AS PATTERN
FROM information_schema.tables
WHERE @row < 21;
ãã®ã¯ãšãªãå®è¡ãããšã以äžã®ãããªçµæãåŸãã
*
* *
* * *
(omission)
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
information_schema.tablesã¯MySQLã«ãããä»®æ³ããŒãã«
information_schemaïŒ
DBã®ã¡ã¿ããŒã¿(ããŒã¿ã«é¢ããããŒã¿)ãæäŸããä»®æ³çãªDB
ããŒã¿ããŒã¹ãããŒãã«ãã«ã©ã ãã€ã³ããã¯ã¹ãªã©ãããŒã¿ããŒã¹ãªããžã§ã¯ãã«é¢ããæ
å ±ãæ ŒçŽãããŠãã
information_schemaå
ã®ããŒãã«ããã¥ãŒã¯ãå®éã®ããŒã¿ãã¡ã€ã«ãšããŠãã£ã¹ã¯ã«ä¿åãããŠããããã§ã¯ãªããMySQLãµãŒããŒãèµ·åæã«åçã«çæããã¡ã¢ãªäžã«ä¿æããŠãããã®
âãŠãŒã¶ãŒã¯information_schemaã«å¯ŸããŠã¯ãšãªãå®è¡ããŠæ
å ±ãååŸã§ããããããŒã¿ã®æ¿å
¥/æŽæ°/åé€ãªã©ã®æäœã¯ã§ããªã
.tablesã¯ããŒãã«æ
å ±ã®ååŸãã·ãŠããããã®ä»ã«ãæ§ã
ãªéžæåºæ¥ãæ
å ±ããã
information_schemaã§éžæã§ããæ
å ±ã¯ãDBMSã«ãã£ãŠç°ãªã
äŸãã°ãOracleã§ã¯ãããŒã¿ãã£ã¯ã·ã§ããªãã¥ãŒããšããåç§°ã§åæ§ã®æ©èœãæäŸãããŠãã
CREATE TABLEã§äœæãããç©ççãªããŒãã«ãšéããã¡ã¢ãªäžã«äžæçã«äœæãããããŒãã«
SQLã¯ãšãªå
ã§äžæçãªååä»ãçµæã»ãããå®çŸ©ããæ©èœ
SQLã¯ãšãªãããå¹ççãã€å¯èªæ§ã®é«ããã®ã«ãã匷åãªããŒã«
å
±éããŒãã«åŒ(CTE:Common Table Expression)
SQLã¯ãšãªå
ã§äžæçãªååä»ãçµæã»ãããå®çŸ©ããæ©èœ
SQLã¯ãšãªãããå¹ççãã€å¯èªæ§ã®é«ããã®ã«ãã匷åãªããŒã«
å¯ååããšéã£ãŠãåŸãã䜿ããŸãããåºæ¥ã
WITH NewTableName AS (
-- Write Query
SELECT ...
)
SELECT column FROM NewTableName;
1床ã®ã¯ãšãªã§ãè€æ°ã®å
±éããŒãã«ãäœæãããå ŽåãSQLã®æšæºçãªæ§æã§ã¯ã
WITHå¥ã¯ã¯ãšãªã®å
é ã«äžåºŠã ãèšè¿°ãã
ã«ã³ãåºåãã§è€æ°ã®CTE(Common Table Expression)ãå®çŸ©ãã
WITH T1 AS (
-- Write Query
SELECT ...
),
T2 AS (
-- Write Query
SELECT ...
)
SELECT T1.column
FROM T1
JOIN T2 ON T1.key = T2.key
SELECTã¹ããŒãã¡ã³ãå
ã§å¥ã®SELECTã¹ããŒãã¡ã³ãã䜿çšããæ¹æ³
WHEREå¥ãFROMå¥ãSELECTå¥ãHAVINGå¥ãªã©ãSQLã¯ãšãªã®ããŸããŸãªéšåã§äœ¿çšã§ãã
äž»ã«ããŒã¿ã®ãã£ã«ã¿ãªã³ã°ãéèšããŸãã¯ä»ã®ã¯ãšãªã§äœ¿çšããå€ã®ååŸã«äœ¿çšããã
WITHå¥ãšéã£ãŠã1床ãã䜿çšã§ããªã
-- ãµãã¯ãšãª (WHEREå¥ã§äœ¿çš)
SELECT *
FROM customers
WHERE customer_id IN (SELECT customer_id FROM orders WHERE order_total > 100);
掟çããŒãã«ã¯ãFROMå¥ã§äœ¿çšãããç¹å®ã®ã¿ã€ãã®ãµãã¯ãšãª
ãšã€ãªã¢ã¹ãå¿
èŠ
-- 掟çããŒãã« (FROMå¥ã§äœ¿çš)
SELECT avg(order_total)
FROM (SELECT order_total FROM orders WHERE order_date >= '2023-01-01') AS recent_orders;
ãµãã¯ãšãªïŒã®äžçš®ã§ãå€åŽã®ã¯ãšãª(芪ã¯ãšãª)ã®è¡ã«äŸåããŠå®è¡ããããã®ãæã
å€éšã¯ãšãªãåŠçããè¡ããšã«ãå
éšã®å¯åãåãããç¹°ãè¿ãè©äŸ¡ããã
å¯åãåãããå€éšã¯ãšãªã®åè¡ã«å¯ŸããŠç°ãªãçµæãè¿ãå¿
èŠãããå Žåã«ç¹ã«åœ¹ç«ã€äžæ¹ã§ã
å€éšã¯ãšãªã®è¡ããšã«å¯åãåãããå®è¡ããããããããŒã¿éãå€ãå Žåã«ã¯ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããã
-- Example
SELECT employee_name
FROM employees e1
WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e1.department_id = e2.department_id);
CREATE TABLEã§äœæãããããŒãã«ãšåæ§ã«ãç©ççã«ããŒã¿ããŒã¹å
ã«ä¿åããã
SQLã®æ©èœã®1ã€ã§ãRDBã«ãããŠäœ¿çšãããæŠå¿µ
ä»®æ³çãªããŒãã«ãšããŠããŒã¿ããŒã¹å
ã«å®çŸ©ãããæ°žç¶çã«ååšãã
å®éã®ããŒã¿ã¯æ ŒçŽããããå®çŸ©ãããã¯ãšãªã«åºã¥ããŠåçã«çµæãçæããã
ããŒã¿ããŒã¹ã®ã¡ã¿ããŒã¿ãšããŠä¿åããããã£ã¹ã¯äžã«ç©ççãªããŒãã«ãšããŠã¯ååšããªã
çšéïŒ
ã»è€éãªã¯ãšãªãç°¡ç¥åããé »ç¹ã«äœ¿çšãããããŒã¿ã»ãããä»®æ³çãªããŒãã«ãšããŠæäŸ
ã»ã»ãã¥ãªãã£äžã®çç±ãããç¹å®ã®åãè¡ã®ã¿ããŠãŒã¶ãŒã«å
¬éãã
ã»ããŒã¿ã®æŽåæ§ãä¿ã¡ãã¢ããªã±ãŒã·ã§ã³ã®å€æŽã«å¯Ÿãã圱é¿ã軜æžãã
ã»ãã¥ãŒäœæã®å
ã®è¡š(åºåºè¡š)ãšã¯å¥ã®åç§°ãä»ããããšãåºæ¥ã
ã»SQLæã®ç¹°ãè¿ããé¿ãããã
âWebã¢ããªã±ãŒã·ã§ã³ã«ãããŠããµãŒããŒåŽãšã®ããåãã®æžå°ãç°¡æœãªSQLæã«ãªããã¬ã¹ãã³ã¹ã®åäžã«ç¹ãã
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
ãã¥ãŒã®æš©éã¯ãåºãšãªãããŒãã«ã®æš©éãšå¯æ¥ã«é¢é£ããŠãããäžè¬çã«åºãšãªãããŒãã«ã®æš©éãç¶æ¿ãã
ãã¥ãŒäœææã®SQLæã®æ§é ã«ãã£ãŠããã¥ãŒã®æŽæ°å¯åŠãç°ãªã
ãã¥ãŒã®çš®é¡
SQLæã®æ§é
æŽæ°å¯èœãªãã¥ãŒ
(æŽæ°äžå¯èœãªãã¥ãŒã§ç€ºããæ§é ãæããªããã®)
åºåºè¡š(å
ã®è¡š)ã«å¯ŸããŠè¡ãæ¿å
¥/æŽæ°/åé€ãå¯èœ
æŽæ°äžå¯èœãªãã¥ãŒ
1.éçŽé¢æ°(AVGãCOUNTãSUMãMINãMAXãªã©)
2.2ã€ä»¥äžã®è¡šã®çµå(æŽæ°å¯èœãªçµåïŒåéååã³åãé€ã)
3.GROUP BY,ORDER BY,MODEL,CONNECT BY,START WITH,DISTINCTã®ãããããå©çšããŠãã
4.SELECTæ§æã®ãªã¹ãã«ã³ã¬ã¯ã·ã§ã³åŒ
5.SELECTæ§æã®ãªã¹ãã«ãããµãã¯ãšãª(å¯ååã)
6.WITH READ ONLYãæå®ãããå¯ååã
åºåºè¡š(å
ã®è¡š)ã«å¯ŸããŠè¡ãæ¿å
¥/æŽæ°/åé€ãã§ããªã
éèšé¢æ°ãçµåãå«ãè€éãªãã¥ãŒã¯ãåºããŒãã«ã®ããŒã¿ãš1:1ã§å¯Ÿå¿ããªãå Žåããã
ãã®ãããªãã¥ãŒãæŽæ°ãããšãã©ã®åºããŒãã«ã®ããŒã¿ã倿Žãã¹ãããææ§ã«ãªãã
ããŒã¿ã®æŽåæ§ãæãªãããå¯èœæ§ããã
äžæçã«ããŒã¿ããŒã¹å
ã«äœæãããããŒãã«ã§ãããã»ãã·ã§ã³ãŸãã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®çµäºæã«èªåçã«åé€ããã
CREATE TEMPORARY TABLEã¹ããŒãã¡ã³ãã§äœæãã
CREATE TEMPORARY TABLE temp_table AS
SELECT column1, column2
FROM table1
WHERE condition;
SELECT *
FROM temp_table
WHERE column1 = 'value';
DBãžã®ã¢ã¯ã»ã¹å¹çãåäžãããçºã«ãDBã®ã¡ã¢ãªå
ã«ç¬èªã®ã€ã³ããã¯ã¹ãäœãããšãã§ãã
ã€ã³ããã¯ã¹ãäœæãããšãç¹å®ã®ã¯ãšãªã«å¯ŸããŠãã€ã³ããã¯ã¹äœæåãããé«éã«ããŒã¿æäœãè¡ãããšãã§ããããã«ãªã
CREATE INDEX indeName ON tableName (columnName);
äžèšã®ã¯ãšãªã«ãããã€ã³ããã¯ã¹ãäœæãããšã衚é¢äžã¯äœãå€ãããªããã
ããŒã¿æ§é ãBæšãžå€åããŠãããé«éã«ããŒã¿æäœãè¡ãããšãã§ããããã«ãªã
ããŒã¿ããŒã¹æäœãè¡ãSQLæããCãJavaãªã©ã®ããã°ã©ãã³ã°èšèªã®ãœãŒã¹ã³ãŒãã«çŽæ¥èšè¿°ããæè¡
ããã«ãããããã°ã©ã ã®å®è¡äžã«ããŒã¿ããŒã¹ãšé£æºããæè»ãªããŒã¿åŠçãå¯èœã«ãªã
åã蟌ã¿SQLã«ã¯ãéçSQLãšåçSQLãšãã2ã€ã®äž»èŠãªã¿ã€ããããïŒ
çš®é¡
説æ
éçSQL
ããã°ã©ã ã®ã³ã³ãã€ã«æã«SQLæã確å®ããŠãããã®
ïŒSQLæãããã°ã©ã ã®ãœãŒã¹ã³ãŒãã«åºå®çã«èšè¿°ãããŠãããã®
SQLæãåºå®ãããŠãããããæè»æ§ã«æ¬ ãããã
å®è¡æã®ãªãŒããŒããããå°ãªããé«éã«åŠçã§ãã
åçSQL
ããã°ã©ã ã®å®è¡æã«SQLæãçµã¿ç«ãŠãŠå®è¡ãããã®
ïŒSQLæãããã°ã©ã ã®å®è¡äžã«åçã«çæããã
ãŠãŒã¶ãŒã®å
¥åãå®è¡æã®ç¶æ³ã«å¿ããŠãSQLæãåçã«å€æŽãã
å®è¡æã«SQLæãçµã¿ç«ãŠããããæè»ãªããŒã¿åŠçãå¯èœã ãã
SQLæã®çµã¿ç«ãŠãå®è¡èšç»ã®äœæã«æéããããããã
éçSQLãããåŠçãé
ããªãããšããã
ãŸããSQLã€ã³ãžã§ã¯ã·ã§ã³æ»æã«å¯Ÿãã察çãéèŠã«ãªã
ããŒã¿ããŒã¹ããè€æ°ã®è¡ãå¹ççã«åŠçããããã«ãåã蟌ã¿SQLã«ã¯ã«ãŒãœã«ãšãã§ãããšããæ©èœããã
ã«ãŒãœã«ïŒ
ã»ããŒã¿ããŒã¹ã®åãåããçµæ(è€æ°ã®è¡ãããªãããŒã¿ã»ãã)ããããã°ã©ã å
ã§äžã€ãã€é çªã«åŠçããããã®ä»çµã¿
ã»ããŒã¿ããŒã¹ããååŸããçµæã»ããå
šäœãäžåºŠã«ã¡ã¢ãªã«èªã¿èŸŒãã®ã§ã¯ãªããã«ãŒãœã«ã䜿ã£ãŠå¿
èŠãªè¡ã ããé çªã«èªã¿èŸŒãããšã§ãã¡ã¢ãªã®äœ¿çšéãæããå¹ççãªåŠçãå®çŸãã
ã»ã«ãŒãœã«ã¯ãããŒã¿ããŒã¹ã®åãåããçµæãæã瀺ããã€ã³ã¿ã®ãããªãã®
â»å
šãŠã®DBãµããŒããããŠããããã§ã¯ãªã
ãã§ããïŒ
ã»ã«ãŒãœã«ã䜿ã£ãŠãçŸåšã«ãŒãœã«ãæã瀺ããŠããè¡ã®ããŒã¿ãããã°ã©ã ã®å€æ°ã«åãåºãæäœ
ã»ãã§ãããç¹°ãè¿ãããšã§ãã«ãŒãœã«ã¯çµæã»ããã®æ¬¡ã®è¡ãžãšç§»åããå
šãŠã®è¡ãé çªã«åŠçã§ãã
å®éã«ãŒãœã«åŠçãã³ãŒãã«ç€ºã
ãã¹ã倿°ïŒ
åã蟌ã¿SQLã«ãããŠãããã°ã©ã ã®å€æ°ãšããŒã¿ããŒã¹ã®ããŒã¿ãããåãããããã«äœ¿çšããã倿°ã®ããš
SQLæã®äžã§ãããã°ã©ã ã®å€æ°ã®å€ãåç
§ããããSQLæã®å®è¡çµæãããã°ã©ã ã®å€æ°ã«æ ŒçŽãããããããã«äœ¿çšããã
ç¹åŸŽ(éåžžã®å€æ°ãšã®éã)
ã»SQLæãšã®é£æºã§ãã
ã»å®£èšæã§ã¯ãªãã宣èšã»ã¯ã·ã§ã³ã§å®£èšãã
ã»éåžžã®å€æ°ãšã¯ç°ãªãã¹ã³ãŒããšã©ã€ããµã€ã¯ã«ãæã€å Žåããã
ã»éåžžã®å€æ°ãšããŠãã¢ã¯ã»ã¹ã§ããSELECTæã®æ¡ä»¶ãšããŠäœ¿çšå¯èœ
éã«ãŒãœã«åŠç
ïŒã«ãŒãœã«ãçšããŠ1è¡ãã€èªã¿èŸŒãã®ã§ã¯ãªããäžåºŠã«å
šãŠãèªã¿èŸŒã
EXEC SQL SELECT åå(ååŸãããããŒã¿) INTO :ãã¹ã倿°å(ããŒã¿ãæ ŒçŽãã)
// The example of C
#include
// ãã¹ã倿°ã®å®£èšã»ã¯ã·ã§ã³
EXEC SQL BEGIN DECLARE SECTION;
int emp_id;
char emp_name[50];
char department[50];
EXEC SQL END DECLARE SECTION;
int main() {
emp_id = 123; // åŸæ¥å¡IDãæå®
EXEC SQL SELECT emp_name, department INTO :emp_name, :department FROM employees WHERE emp_id = :emp_id;
printf("åŸæ¥å¡å: %s, éšçœ²: %s\\n", emp_name, department);
return 0;
}
ã«ãŒãœã«åŠç
ïŒã«ãŒãœã«ãçšããŠ1è¡ãã€èªã¿èŸŒãåŠç
SELECTæã®çµæãè€æ°è¡ã«ãªãå¯èœæ§ãããå Žåã«äœ¿çšãã
// The example of C
#include <stdio.h>
// ãã¹ã倿°ã®å®£èšã»ã¯ã·ã§ã³
EXEC SQL BEGIN DECLARE SECTION;
char emp_name[50];
char department[50];
EXEC SQL END DECLARE SECTION;
int main() {
// ã«ãŒãœã«ã®å®£èš
EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT emp_name, department FROM employees;
// ã«ãŒãœã«ãéã
EXEC SQL OPEN emp_cursor;
// ãã§ããããŠçµæã衚瀺(ïŒ1è¡ãã€ãã¹ã倿°ããããŒã¿ãåãåºã)
EXEC SQL FETCH emp_cursor INTO :emp_name, :department;
while (SQLCODE == 0) { // SQLCODEã0ã®éã¯ã«ãŒã
printf("åŸæ¥å¡å: %s, éšçœ²: %s\\n", emp_name, department);
EXEC SQL FETCH emp_cursor INTO :emp_name, :department; // 次ã®è¡ããã§ãã
}
// ã«ãŒãœã«ãéãã
EXEC SQL CLOSE emp_cursor;
return 0;
}