* [????](#????) * [???](#???) * [????](#????) * [????](#????) * [????](#????) * [???????](#???????) * [????](#????) * [???????](#???????) * [??????????](#??????????) * [???????](#???????) * [????](#????) * [????](#????) * [????](#????) * [????](#????) * [??????](#??????) * [??????](#??????) * [???????](#???????) * [??????](#??????) * [?????](#?????) * [????](#????) * [????](#????) * [???](#???) * [??????](#??????) * [????](#????) * [???](#???) * [?????](#?????) * [??](#??) * [??????](#??????) * [??????](#??????) * [?????](#?????) * [??????](#??????) # ???? ????????????????ě??????????????????????????????????????????? ??????????????????????????????????????????????????????????????????? SQL??Structured Query Language)????? SQL ?? ANSI ???????????????? ANSI SQL?????? DBMS ??????????????? PL/SQL??Transact-SQL ??? # ??? SQL ???????????????????????????????????????????????? DBMS ??????? **DISTINCT** ?????????????????????????????????????????????????????? ```sql SELECT DISTINCT col1, col2 FROM mytable; ``` **LIMIT** ??????????????????????????????????????????????? 0 ???????????????????????????? ????? 5 ?? SQL?? ```sql SELECT * FROM mytable LIMIT 5; ``` ```sql SELECT * FROM mytable LIMIT 0, 5; ``` ????? 3 \~ 5 ?? ```sql SELECT * FROM mytable LIMIT 2, 3; ``` **???** ```sql # ??? SELECT * FROM mytable -- ??? /* ???1 ???2 */ ``` # ???? **ASC**?????????? **DESC**?????? ???????????????? ```sql SELECT * FROM mytable ORDER BY col1 DESC, col2 ASC; ``` # ???? ????????????????????????????????????????????????????????????????????????????????????? ```sql SELECT * FROM mytable WHERE col IS NULL; ``` ??????? WHERE ???????????? | ?????? | ??? | | ------------ | ------------ | | = < > | ???? ?? ???? | | <> != | ?????? | | <= !> | ????? | | >= !< | ??????? | | BETWEEN | ?????????? | | IS NULL | ?NULL? | ????????NULL ?? 0 ???????????????? **AND OR** ??????????????????????????? AND?????????????????p????? AND ?? OR ????????? () ????????????? **IN** ??????????????????????????????? SELECT ???????????????????????? **NOT** ???????????????????? # ???? ???????????????????????????????? - **%** ??? >=0 ????????????????? \*?? - **\_** ??? ==1 ????????????????? \.?? - **[ ]** ??????????????????????? ^ ?????????? ??? Like ????????????? ```sql SELECT * FROM mytable WHERE col LIKE '[^AB]%' -- ????AB???????????? ``` ????????????????????????????????? # ??????? ????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????? **AS** ???????????????????????????????????? ```sql SELECT col1*col2 AS alias FROM mytable ``` **Concat()** ???????????????????????????????????????????????????????????????????? **TRIM()** ???????????? ```sql SELECT Concat(TRIM(col1), ' (', TRIM(col2), ')') FROM mytable ``` # ???? ???? DBMS ??????????????????????????? ## ??????? | ???? | ??? | | ------------ | ------------ | | LEFT() RIGHT() | ????????????? | | LOWER() UPPER() | ????????? | | LTRIM() RTIM() | ??????????????? | | LENGTH() | ???? | | SUNDEX() | ????????? | ????**SOUNDEX()** ???????????????????????????????????????????????????????????????????? ```sql SELECT * FROM mytable WHERE SOUNDEX(col1) = SOUNDEX('apple') ``` ## ?????????? ????????YYYY-MM-DD ???????HH:MM:SS |?? ?? | ? ??| | --- | --- | | AddDate() | ??????????????????| | AddTime() | ?????????????????| | CurDate() | ?????????? | | CurTime() | ????????? | |Date() |???????????????????| |DateDiff() |???????????????| |Date_Add() |?????????????????| |Date_Format() |??????????????????????| |Day()| ????????????????????| |DayOfWeek() |?????????????????????????| |Hour() |????????????????| |Minute() |?????????????????| |Month() |?????????????????| |Now() |??????????????| |Second() |???????????????| |Time() |????????????????????| |Year() |??????????????????| ```sql mysql> SELECT NOW(); -> '2017-06-28 14:01:52' ``` ## ??????? | ???? | ??? | | --- | --- | | SIN() | ???? | |COS() | ???? | | TAN() | ???? | | ABS() | ????? | | SQRT() | ?????| | MOD() | ????| | EXP() | ???| | PI() | ?????| |RAND() | ?????| ## ???? |?? ?? |? ??| | --- | --- | |AVG() |???????????| |COUNT()| ???????????| |MAX()| ???????????| |MIN()| ??????????| |SUM() |???????????| AVG() ????? NULL ?? DISTINCT ?????????????????? ```sql SELECT AVG(DISTINCT col1) AS avg_col FROM mytable ``` # ???? ?????????????????????????? ??????????????????????????????????????????????? ?? col ???????????? ```sql SELECT col, COUNT(*) AS num FROM mytable GROUP BY col; ``` WHERE ??????HAVING ???????????????????????? ```sql SELECT col, COUNT(*) AS num FROM mytable WHERE col > 2 GROUP BY col HAVING COUNT(*) >= 2; ``` GROUP BY ?????????????????? ORDER BY ?????????????????????? ```sql SELECT col, COUNT(*) AS num FROM mytable GROUP BY col ORDER BY num; ``` ?????? 1. GROUP BY ???????? WHERE ??????ORDER BY ??????? 2. ????????????????SELECT ??????????????? GROUP BY ????????? 3. NULL ??????????? 4. ????? SQL ??????? GROUP BY ????????????????? # ???? ????????????????? ???????????????? WHRER ????????????? ``` SELECT * FROM mytable1 WHERE col1 IN (SELECT col2 FROM mytable2); ``` ?????????????????????????????????????????????????????????? ```sql SELECT cust_name, (SELECT COUNT(*) FROM Orders WHERE Orders.cust_id = Customers.cust_id) AS orders_num FROM Customers ORDER BY cust_name; ``` # ???? ??????????????????? JOIN ???????????????????? ON?? ????????I?????????????????????????? ?????? AS ?????????????????????????????????????????? SQL ??????????????? ## ?????? ??????????????????? INNER JOIN ?????? ``` select a, b, c from A inner join B on A.key = B.key ``` ??????????? INNER JOIN????????????????? WHERE ???????????????????????????????????? ``` select a, b, c from A, B where A.key = B.key ``` ???????????????????????????? ## ?????? ?????????????????????????????????????????? ??????????????????????????????????????? Jim ???????????????????????? **?????** ``` select name from employee where department = ( select department from employee where name = "Jim"); ``` **??????** ``` select name from employee as e1, employee as e2 where e1.department = e2.department and e1.name = "Jim"; ``` ?????????????????? ## ??????? ???????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????? ``` select * from employee natural join department; ``` ## ?????? ????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????? ``` select Customers.cust_id, Orders.order_num from Customers left outer join Orders on Customers.cust_id = Orders.curt_id ``` ?????????????????????????????? ``` select Customers.cust_id, COUNT(Orders.order_num) as num_ord from Customers left outer join Orders on Customers.cust_id = Orders.curt_id group by Customers.cust_id ``` # ????? ??? **UNION** ??????????????????????????????????????????????????? ?????????????????????????????? UNION ALL ?? ????????? ORDER BY ??????????????????? ```sql SELECT col FROM mytable WHERE col = 1 UNION SELECT col FROM mytable WHERE col =2; ``` # ???? **???????** ```sql INSERT INTO mytable(col1, col2) VALUES(val1, val2); ``` **?????????????????** ```sql INSERT INTO mytable1(col1, col2) SELECT col1, col2 FROM mytable2; ``` **?????????????????????** ```sql CREATE TABLE newtable AS SELECT * FROM mytable; ``` # ???? ```sql UPDATE mytable SET col = val WHERE id = 1; ``` # ??? ```sql DELETE FROM mytable WHERE id = 1; ``` **TRUNCATE TABLE** ?????????????????????? ????????????????????? WHERE ????????????????????????????????? SELECT ????????????????????? # ?????? ```sql CREATE TABLE mytable ( id INT NOT NULL AUTO_INCREMENT, col1 INT NOT NULL DEFAULT 1, col2 VARCHAR(45) NULL, col3 DATE NULL, PRIMARY KEY (`id`)); ``` # ???? **?????** ```sql ALTER TABLE mytable ADD col CHAR(20); ``` **?????** ```sql ALTER TABLE mytable DROP COLUMN col; ``` **?????** ```sql DROP TABLE mytable; ``` # ??? ????????????????????????????????????????????????????????????????????????? ??????????????? 1. ?????? SQL ?????????y??????? 2. ??????????????????? 3. ??????????????????????????????????? 4. ???????????????? ```sql CREATE VIEW myview AS SELECT Concat(col1, col2) AS concat_col, col3*col4 AS count_col FROM mytable WHERE col5 = val; ``` # ????? ?????????????????? SQL ???????????? **??????????** 1. ??????????????????????????????????? 2. ?????????? 3. ????????????????????????? **?????????** ?????????????????????????????????????????? ; ??????????????????????????????????????????????????????????????? ???? in??out ?? inout ????????? ???????????????? select into ??? ????????????????????????????????? ```sql delimiter // create procedure myprocedure( out ret int ) begin declare y int; select sum(col1) from mytable into y; select y*y into ret; end // delimiter ; ``` ```sql call myprocedure(@ret); select @ret; ``` # ?? ?????????????????????????????????????? ????????????????????????????????????????????????????? **????????????s** 1. ????????????????????????????? 2. ???? 3. ???????? 4. ????? ```sql delimiter // create procedure myprocedure(out ret int) begin declare done boolean default 0; declare mycursor cursor for select col1 from mytable; # ?????????continue handler???? sqlstate '02000' ??????????????????? set done = 1 declare continue handler for sqlstate '02000' set done = 1; open mycursor; repeat fetch mycursor into ret; select ret; until done end repeat; close mycursor; end // delimiter ; ``` # ?????? ??????????????????????????????????DELETE??INSERT??UPDATE ???????????????????????????????????????????? BEFORE ??????????????? AFTER ??????BEFORE ?????????????????? INSERT ???????????????? NEW ??????? ```sql CREATE TRIGGER mytrigger AFTER INSERT ON mytable FOR EACH ROW SELECT NEW.col; ``` DELETE ???????????????? OLD ??????????????????? UPDATE ???????????????? NEW ???????? OLD ??????????? NEW ????????????? OLD ???????? ???????????????????????????????????????????? MySQL ?????????????????? CALL ??? ?????????????????? # ?????? **????????** 1. ????transaction?????? SQL ??? 2. ?????rollback?????????? SQL ???????? 3. ????commit???????? SQL ????????????? 4. ??????savepoint????????????????????????placeholder????????????????????????????????????????? ??????? SELECT ??????? SELECT ???????????????? CRETE ?? DROP ??? MySQL ???????????????????????????????????????????????? START TRANSACTION ??????????????????? COMMIT ?? ROLLBACK ??????????????????????????????? ??????? autocommit ? 0 ????????????????? autocommit ??????? 1 ???????autocommit ??????????????????????????????? ???????????????ROLLBACK ?????? START TRANSACTION ????????????????????????? ROLLBACK ?????????????????????????? ```sql START TRANSACTION // ... SAVEPOINT delete1 // ... ROLLBACK TO delete1 // ... COMMIT ``` # ????? **????????** 1. ??????????????????? 2. ?????????????????????????? 3. ??????????????????????????? ?????????????????????????????????? ```sql CREATE TABLE mytable (col VARCHAR(10) CHARACTER SET latin COLLATE latin1_general_ci ) DEFAULT CHARACTER SET hebrew COLLATE hebrew_general_ci; ``` ???????????????????? ```sql SELECT * FROM mytable ORDER BY col COLLATE latin1_general_ci; ``` # ?????? MySQL ?????????????? mysql ?????????? ```sql USE mysql; SELECT user FROM user; ``` **???????** ```sql CREATE USER myuser IDENTIFIED BY 'mypassword'; ``` ??????????????????? **????????** ```sql RENAME myuser TO newuser; ``` **??????** ```sql DROP USER myuser; ``` **?????** ```sql SHOW GRANTS FOR myuser; ``` ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/c73aa08e-a987-43c9-92be-adea4a884c25.png) ????? username@host ????????username@% ????????????????? **???????** ```sql GRANT SELECT, INSERT ON mydatabase.* TO myuser; ``` **??????** ```sql REVOKE SELECT, INSERT ON mydatabase.* FROM myuser; ``` GRANT ?? REVOKE ?????????????????????? - ??????????????? GRANT ALL?? REVOKE ALL?? - ???????????? ON database.\*?? - ????????? ON database.table?? - ??????? - ?????????? **????????** ??????? Password() ???? ```sql SET PASSWROD FOR myuser = Password('newpassword'); ```