MySQL阿里雲數據庫學習路線黑馬程序員隨課筆記;


開啟/退出:

net start mysql;
net stop mysql;

 登錄與退出

mysql -uroot -pAa8316057 -hlocalhost
exit或quit

常見操作:

DDL  數據庫或表的結構操作(****)
DML 對表的記錄更新(增//改)(****)
DQL  對表的記錄查詢(****,難點)
DCL 用戶創建及授權    

類型:

  標准:

int整型
double(5,2)
decimal精確浮點型
char 固長 字符串255              補
varchar 變長 字符串65535    不補

  方言(mySQL獨有)

MySQL獨有:
text(clob):字符串類型
blob:字節類型
date:日期
time:時間
timestamp:時間戳

DDL:

數據庫(DATABASE)

 (創建CREATE,查看SHOW,進入USE,刪除DROP)

表(TABLE):

查詢表結構: DESC 表名
創建:
CREATE TABLE [IF NOT EXISTS] 表名(
列名 列類型 [PRIMARY KEY] [AUTO_INCREMENT];
...
);
修改:
  ***公共前綴***ALTER TABLE 表名
    添加列:  ***公共前綴*** ADD(列名 列類型,...);
    刪除列:  ***公共前綴*** DROP 列名     
    改列名:  ***公共前綴*** CHANGE 原列名 新列名 列類型     
    改列類型:***公共前綴*** MODIFY 列名 列新類型 
    改表名:  ***公共前綴*** RENAME TO 新表名

 

DQL(基本查詢):

列控制:

查詢所有列(或指定列 丨 查詢但不顯示完全重復行):
SELECT * FROM 表名
查詢指定列: 把 * 變成 列1,..,列n
查詢但不顯示完全重復行: 在 * 前 加DISTINCT
列運算:(光查,並不改變數據)
SELECT 運算 FROM 表名;
  加///除: sal+8   sal+name
  字符串運算: CONCAT('$',sal)
  轉換NULL值(把NULL當0來運算): IFNULL(comm,0)+100
  給列取別名: IFNULL(comm,0)+100 AS 獎金       - (其中AS可以省略)

條件控制:

    條件查詢:(和UPDATE一樣的操作方式)
        SELECT * FROM 表名 WHERE 條件;
    模糊查詢:
        SELECT * FROM 表名 WHERE 列名 like '張_';
            **** 重點:  _ 一個字符     % 0-n個字符;
    排序:
        SELECT * FROM 表名 ORDER BY 列名 ASC;
            升序: ASC(ASC可以省略)
            降序: DESC(DESC不可以省略)
            多列作為排序條件:列名 ASC,列名 DESC

聚合函數:(列縱向運算)

SELECT 聚合函數 FROM 表名;
    1:行數 COUNT(*或列名)  - 不記NULL 
    2:大   MAX(列名) 
    3:小   MIN(列名)    
    4:和   SUM(列名)    
    5:平均 AVG(列名)
    多項:MAX(列名) AS 大 , MIN(列名) AS 小 ,SUM(列名) AS 和;

分組查詢:

SELECT 分組列,聚合函數(支持多項) FROM 表名 [WHERE 條件] GROUP BY 分組列 [HAVING 條件];
  執行順序     
SELECT 查詢     FROM 從     WHERE 去分組前條件     GROUP BY 分組     HAVING 去分組后條件     ORDER BY 排序

LIMIT子句(方言) 

SELECT * FROM 表名 LIMIT 4,3;(從第5行開始查,一共查3行)   -(當前頁-1) * 每頁記錄數 , 每頁記錄數;

DML:

插入數據:

    插入列數據:
        INSERT INTO 表名(列名1,列名2,...) VALUES(列值1,列值2,..);
    修改列值:
        UPDATE 表名 SET 列名=列值,...;(全改)
        UPDATE 表名 SET 列名=列值 WHERE 條件列名 = 條件列值 or ... ;(指定條件改)
    =   !=  <>  >  <  >=  <=  NOT  OR  AND   BETWEEN...AND    IN(...)    IS NULL  
    刪除數據:
        DELETE FROM 表名 [WHERE 條件]; - 一定要加WHERE!!!

DCL:

    創建用戶:
        CREATE USER 用戶名@ip地址 IDENTIFIED BY '密碼';       任意IP登錄: @'%'
    給用戶授權:
        GRANT 權限1,..權限n NO 數據庫.* TO 用戶名@ip地址     所有權限: ALL
    取消權限:
        REVOKE 權限1,..權限n NO 數據庫.* FROM 用戶名@ip地址    
    查看權限:
        SHOW GRANTS FOR 用戶名@ip地址
    刪除用戶:
        DROP USER 用戶名@ip地址

SQL導入(原版和阿里雲版)

/*原版*/
CREATE TABLE emp (
    empno NUMERIC(4) NOT NULL,
    ename VARCHAR(10),
    job VARCHAR(9),
    mgr NUMERIC(4),
    hiredate DATETIME,
    sal NUMERIC(7, 2),
    comm NUMERIC(7, 2),
    deptno NUMERIC(2)
);

INSERT INTO emp VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20);
INSERT INTO emp VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
INSERT INTO emp VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
INSERT INTO emp VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20);
INSERT INTO emp VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
INSERT INTO emp VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30);
INSERT INTO emp VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10);
INSERT INTO emp VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1982-12-09', 3000, NULL, 20);
INSERT INTO emp VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO emp VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
INSERT INTO emp VALUES (7876, 'ADAMS', 'CLERK', 7788, '1983-01-12', 1100, NULL, 20);
INSERT INTO emp VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);
INSERT INTO emp VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20);
INSERT INTO emp VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10);

CREATE TABLE dept (
    deptno NUMERIC(2),
    dname VARCHAR(14),
    loc VARCHAR(13)
);

INSERT INTO dept VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO dept VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO dept VALUES (40, 'OPERATIONS', 'BOSTON');

CREATE TABLE bonus (
    empno NUMERIC(4),
    job VARCHAR(9),
    sal NUMERIC,
    comm NUMERIC
);

CREATE TABLE salgrade (
    grade NUMERIC,
    losal NUMERIC,
    hisal NUMERIC
);

INSERT INTO salgrade VALUES (1, 700, 1200);
INSERT INTO salgrade VALUES (2, 1201, 1400);
INSERT INTO salgrade VALUES (3, 1401, 2000);
INSERT INTO salgrade VALUES (4, 2001, 3000);
INSERT INTO salgrade VALUES (5, 3001, 9999);


/*阿里雲emp表*/
CREATE TABLE `emp` (
  `empno` INT(11) NOT NULL,
  `ename` VARCHAR(255) DEFAULT NULL,
  `job` VARCHAR(255) DEFAULT NULL,
  `mgr` INT(11) DEFAULT NULL,
  `hiredate` DATE DEFAULT NULL,
  `sal` DECIMAL(10,2) DEFAULT NULL,
  `COMM` DECIMAL(10,2) DEFAULT NULL,
  `deptno` INT(11) DEFAULT NULL,
  PRIMARY KEY  (`empno`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
 
INSERT INTO `emp` VALUES ('1001', '甘寧', '文員', '1013', '2000-12-17', '8000.00', NULL, '20');
INSERT INTO `emp` VALUES ('1002', '黛綺絲', '銷售員', '1006', '2001-02-20', '16000.00', '3000.00', '30');
INSERT INTO `emp` VALUES ('1003', '殷天正', '銷售員', '1006', '2001-02-22', '12500.00', '5000.00', '30');
INSERT INTO `emp` VALUES ('1004', '劉備', '經理', '1009', '2001-04-02', '29750.00', NULL, '20');
INSERT INTO `emp` VALUES ('1005', '謝遜', '銷售員', '1006', '2001-09-28', '12500.00', '14000.00', '30');
INSERT INTO `emp` VALUES ('1006', '關羽', '經理', '1009', '2001-05-01', '28500.00', NULL, '30');
INSERT INTO `emp` VALUES ('1007', '張飛', '經理', '1009', '2001-09-01', '24500.00', NULL, '10');
INSERT INTO `emp` VALUES ('1008', '諸葛亮', '分析師', '1004', '2007-09-01', '30000.00', NULL, '20');
INSERT INTO `emp` VALUES ('1009', '曾阿牛', '董事長', NULL, '2001-11-17', '50000.00', NULL, '10');
INSERT INTO `emp` VALUES ('1010', '韋一笑', '銷售員', '1006', '2001-09-08', '15000.00', '0.00', '30');
INSERT INTO `emp` VALUES ('1011', '周泰', '文員', '1008', '2007-05-28', '11000.00', NULL, '20');
INSERT INTO `emp` VALUES ('1012', '程普', '文員', '1006', '2001-12-03', '9500.00', NULL, '30');
INSERT INTO `emp` VALUES ('1013', '龐統', '分析師', '1004', '2001-12-09', '30000.00', NULL, '20');
INSERT INTO `emp` VALUES ('1014', '黃蓋', '文員', '1007', '2002-01-23', '13000.00', NULL, '10');
INSERT INTO `emp` VALUES ('1015', '張三', '保潔員', '1001', '2019-09-02', '80000.00', '50000.00', '50');

SELECT * FROM emp;

CREATE TABLE dept (
    deptno NUMERIC(2),
    dname VARCHAR(14),
    loc VARCHAR(13)
);
INSERT INTO dept VALUES (10, '財務部', '北京');
INSERT INTO dept VALUES (20, '業務部', '上海');
INSERT INTO dept VALUES (30, '銷售部', '廣州');
INSERT INTO dept VALUES (40, '運營部', '昆明');

SELECT * FROM dept;

單表查詢練習

/*單表查詢*/ 
/*1、查詢出部門編號為30的所有員工*/ 
SELECT * FROM emp WHERE deptno = 30; 

/*2、查詢所有銷售員的名字、編號和部門編號*/ 
SELECT ename AS 姓名, empno AS 編號, deptno AS 部門編號 
FROM emp 
WHERE job = '銷售員'; 

/*3、找出獎金高於工資的員工*/ 
SELECT * 
FROM emp 
WHERE COMM > sal; 

/*4、找出獎金高於工資60%的員工*/ 
SELECT *,(IFNULL(sal,0)*0.6) AS `工資的60%` 
FROM emp 
WHERE COMM > sal*0.6; 
/*注意: 其中IFNULL是聚合函數:表示將null值變為數值0,便於數學計算 別名中要輸出特殊字符 必須使用``反引號(鍵盤左上角第二排第一個)包含輸出內容*/ 

/*5、找出部門編號為10中所有經理和部門編號為20中所有銷售人員的詳細資料*/ 
SELECT * 
FROM emp 
WHERE (deptno = '10' AND job = '經理') OR (deptno='20' AND job='銷售員'); 

/*6、找出部門編號為10中所有經理,部門編號為20中所有銷售員,還有既不是經理又不是銷售員但其工資大於或等於20000的所有員工詳細資料*/ 
SELECT * 
FROM emp 
WHERE (deptno = '10' AND job = '經理') OR (deptno='20' AND job='銷售員') OR (job != '經理' AND job != '銷售員' AND sal > 20000); 
/*或者*/
 SELECT * 
 FROM emp 
 WHERE (deptno = '10' AND job = '經理') OR (deptno='20' AND job='銷售員') OR (job NOT IN('經理', '銷售員') AND sal >= 20000); 
 
 /*7、無獎金或獎金低於1000的員工*/ 
 SELECT * 
 FROM emp 
 WHERE COMM IS NULL OR COMM < 1000; 
 
 /*8、 查詢名字由三個字組成的員工*/ 
 SELECT * 
 FROM emp 
 WHERE ename LIKE '___'; 
 
 /*9、查詢2000年入職的員工*/ 
 SELECT * 
 FROM emp 
 WHERE hiredate BETWEEN '2000-01-01' AND '2000-12-31'; 
 /*或者*/ 
 SELECT * 
 FROM emp 
 WHERE hiredate LIKE '2000-%'; 
 
 /*10、查詢所有員工詳細信息,用編號降序排序*/ 
 SELECT * 
 FROM emp 
 ORDER BY empno DESC; 
 
 /*11、查詢所有員工詳細信息,用工資降序排序,如果工資相同使用入職日期升序排序*/ 
 SELECT * 
 FROM emp 
 ORDER BY sal DESC, hiredate ASC; 
 
 /*12、查詢每個部門的平均工資*/ 
 SELECT deptno, AVG(sal) AS 平均工資 
 FROM emp 
 GROUP BY deptno; 
 
 /*13、查詢每個部門的雇員數量*/ 
 SELECT deptno, COUNT(*) AS 部門人數 
 FROM emp 
 GROUP BY deptno; 
 
 /*14、查詢每種工作的最高工資、最低工資、人數*/ 
 SELECT job, MAX(sal) AS 最高工資, MIN(sal) AS 最低工資, COUNT(*) 
 FROM emp 
 GROUP BY job; 

 

查看數據庫編碼:

    SHOW VARIABLES LIKE 'char%';
    改:C:\ProgramData下my.ini文件 : default-character-set=gbk
         可以改3個變量client(進).connection.results(出)

備份/恢復 數據庫內容:

備份數據庫內容(退出狀態下輸入):    mysqldump -u用戶名 -p密碼 據庫名>f:/a.sql
恢復數據庫內容(退出狀態下輸入):    mysql -u用戶名 -p密碼 據庫名<f:/a.sql
                        第二種方式:進入數據庫后 source f:/a.sql

約束:

1:主鍵約束:

    非空,唯一,被引用
  創建: 創建時候在 列名 列類型 后加 PRIMARY KEY []; 創建后: ALTER TABLE 表名 ADD PRIMARY KEY(列名); 刪除: ALTER TABLE 表名 DROP PRIMARY KEY;

2:主鍵自增長:

    創建:AUTO_INCREMENT(在主鍵后面加 , 詳看創建列) - 只能加在整數

uuid

CREATE TABLE person(
    uid VARCHAR(50) PRIMARY KEY,
    ename VARCHAR(10)
);

INSERT INTO person VALUES(REPLACE(UUID(),"-",""),'張三');

3:非空約束:

NOT NULL;

4:唯一約束:

UNIQUE;一般和NOT NULL一起用

5:概念模型:

6:外鍵約束:

語法:CONSTRAINT fk_子表_父表   FOREIGN KEY(外鍵列名) REFERENCES 關系表(關聯表的主鍵)
    例:CONSTRAINT fk_student_class FOREIGN KEY(s_cid) REFERENCES class(cid)

1對1(從表的主鍵即是外鍵,鏈接主表主鍵)

 /*--------1對1--------*/ 
   
   /*創建表*/
CREATE TABLE hashand(/*主表*/
hid INT PRIMARY KEY AUTO_INCREMENT,
hname VARCHAR(50)
);
/*修改表名*/
ALTER TABLE hashand
RENAME TO hasband
/*插入記錄*/
INSERT INTO hasband VALUES(NULL,'劉備');
INSERT INTO hasband VALUES(NULL,'關羽');
INSERT INTO hasband VALUES(NULL,'張飛');
/*查看*/
SELECT * FROM hasband

/*這是1對多,違反了婚姻法
CREATE TABLE wife(
  wid int primary KEY auto_increment,
  wname VARCHAR(50),
  hid int,
  CONSTRAINT fk_wife_hasband foreign key(hid) references hasband(hid)
  );
  */
  
  /*創建1對1*/
CREATE TABLE wife(
  wid INT PRIMARY KEY AUTO_INCREMENT,
  wname VARCHAR(50),
  CONSTRAINT fk_wife_hasband FOREIGN KEY(wid) REFERENCES hasband(hid)/*把主鍵作為了外鍵*/
  );
  /*
  wid
  1:非空
  2:唯一
  3:引用hid
  */
  /*滿足以上3個條件*/
  INSERT INTO wife VALUES(1,'楊貴妃');
  INSERT INTO wife VALUES(2,'妲己');
  INSERT INTO wife VALUES(3,'大喬');
  /*查詢*/
  SELECT * FROM wife;

 1對多(從表新創建列作為外鍵,連接主表主鍵)

 /*--------1對多--------*/ 

CREATE TABLE class(
cid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(15) NOT NULL ); INSERT INTO class VALUES(NULL,'六年級一班'); INSERT INTO class VALUES(NULL,'六年級二班'); SELECT * FROM class; /*在sql語句末端添加*/ CREATE TABLE student( sid INT AUTO_INCREMENT, sname VARCHAR(10), s_cid INT, PRIMARY KEY(sid), FOREIGN KEY (s_cid) REFERENCES class(cid) ); INSERT INTO student VALUES(NULL,'王大錘',2); INSERT INTO student VALUES(NULL,'胡漢三',3);/*約束生效  插入失敗*/ SELECT * FROM student; /*fk的使用*/ CREATE TABLE student( sid INT AUTO_INCREMENT, sname VARCHAR(10) NOT NULL, s_cid INT , PRIMARY KEY(sid), CONSTRAINT fk_student_class FOREIGN KEY(s_cid) REFERENCES class(cid) ); INSERT INTO student VALUES(NULL,'王大錘',2); INSERT INTO student VALUES(NULL,'胡漢三',3);/*約束生效  插入失敗*/ SELECT * FROM student; /*在建表后添加外鍵*/ CREATE TABLE student( sid INT AUTO_INCREMENT, sname VARCHAR(10) NOT NULL, s_cid INT , PRIMARY KEY(sid) ); ALTER TABLE student ADD FOREIGN KEY (s_cid) REFERENCES class(cid); INSERT INTO student VALUES(NULL,'王大錘',2); INSERT INTO student VALUES(NULL,'胡漢三',3); /*約束生效  插入失敗*/ SELECT * FROM student;

多對多(創建中間表,列分別作為外鍵,鏈接對應主表主鍵)

   /*--------多對多--------*/ 
/*創建學生表*/
CREATE TABLE student(
  sid INT PRIMARY KEY AUTO_INCREMENT,
  sname VARCHAR(50));

/*創建教師表*/
CREATE TABLE teacher(
  tid INT PRIMARY KEY AUTO_INCREMENT,
  tname VARCHAR(50));
  
/*創建關聯表*/
CREATE TABLE stu_tea(
  sid INT,
  tid INT,
  CONSTRAINT fk_student FOREIGN KEY(sid) REFERENCES student(sid),
  CONSTRAINT fk_teacher FOREIGN KEY(tid) REFERENCES teacher(tid)
);
/*往2張表插記錄*/
INSERT INTO student VALUES(NULL,'劉德華');
INSERT INTO student VALUES(NULL,'梁朝偉');
INSERT INTO student VALUES(NULL,'謝霆鋒');
INSERT INTO student VALUES(NULL,'張含韻');
INSERT INTO student VALUES(NULL,'小虎樂隊');

INSERT INTO teacher VALUES(NULL,'李代萍');
INSERT INTO teacher VALUES(NULL,'童林');
INSERT INTO teacher VALUES(NULL,'張老師');

/*分別查出來*/
SELECT * FROM student;
SELECT * FROM teacher;

/*建立關系*/
INSERT INTO stu_tea VALUES(1,1);
INSERT INTO stu_tea VALUES(2,1);
INSERT INTO stu_tea VALUES(3,1);
INSERT INTO stu_tea VALUES(4,1);
INSERT INTO stu_tea VALUES(5,1);

INSERT INTO stu_tea VALUES(2,2);
INSERT INTO stu_tea VALUES(3,2);
INSERT INTO stu_tea VALUES(4,2);

INSERT INTO stu_tea VALUES(3,3);
INSERT INTO stu_tea VALUES(4,3);
INSERT INTO stu_tea VALUES(5,3);

/*查關系表*/
SELECT * FROM stu_tea;

 多表查詢

  1:分類:

    合並結果集

  *要求被合並的表中,列的類型和列數相同
  *UNION,去除重復行
  *UNION ALL,不去除重復行
SELECT * FROM cd UNION ALL SELECT * FROM ab
   /*--------課時11 合並結果集--------*/ 
/*創建2個表結構一樣的表*/ 
CREATE TABLE ab (a INT , b VARCHAR(50));
CREATE TABLE cd (c INT , d VARCHAR(50));
/*插入記錄*/ 
INSERT INTO ab VALUES(1,'1');
INSERT INTO ab VALUES(2,'2');
INSERT INTO ab VALUES(3,'3');

INSERT INTO cd VALUES(3,'3');
INSERT INTO cd VALUES(4,'4');
INSERT INTO cd VALUES(5,'5');

/*鏈接2個表結構一樣的表(合並結果集))*/
SELECT * FROM ab
UNION ALL
SELECT * FROM cd

/*鏈接2個表結構一樣的表(合並結果集))*/
SELECT * FROM ab
UNION /*完全相同的行會被去除*/
SELECT * FROM cd

    鏈接查詢

內鏈接
    *方言: SELECT * FROM 表1 別名1,表2 別名2 WHERE 別名1.xx = 別名2.xx
    *標准: SELECT * FROM 表1 別名1 INNER JOIN 表2 別名2 ON 別名1.xx = 別名2.xx
    *自然: SELECT * FROM 表1 別名1 NATURAL JOIN 表2 別名2
    *內鏈接查詢出的所有記錄都滿足條件
 
        
/*方言內鏈接*/
SELECT *
FROM emp,dept
WHERE emp.deptno = dept.deptno; /*去除笛卡爾積*/

/*打印所有員工的姓名,工資,以及部門名稱*/
SELECT emp.ename,emp.sal,dept.dname
FROM emp,dept
WHERE emp.deptno = dept.deptno; 
/*取別名*/
SELECT e.ename,e.sal,d.dname
FROM emp e,dept d
WHERE e.deptno = d.deptno; 

   /*標准內連接*/
SELECT e.ename,e.sal,d.dname
FROM emp e INNER JOIN dept d /*逗號改為 INNER JOIN */
ON e.deptno = d.deptno; /*WHERE 改為 ON */

/*自然內連接*/ /*這種不用記*/ SELECT e.ename,e.sal,d.dname FROM emp e NATURAL JOIN dept d ;/*INNER JOIN 改為 NATURAL JOIN */
外鏈接
   >左外連接
   >右外連接
   >全外連接(MySQL不支持)
  *自然鏈接(屬於一種簡化方式)
   /*--------課時14 連接查詢之外連接--------*/ 
/*外連接之左外*/
SELECT e.ename,e.sal,IFNULL(d.dname,'無部門')
FROM emp e LEFT OUTER JOIN dept d
ON e.deptno = d.deptno;

/*外連接之右外*/
SELECT e.ename,e.sal,IFNULL(d.dname,'無部門')
FROM emp e RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno;

/*外連接之全外*/
SELECT e.ename,e.sal,d.dname
FROM emp e LEFT OUTER JOIN dept d
ON e.deptno = d.deptno
UNION
SELECT e.ename,e.sal,d.dname
FROM emp e RIGHT OUTER JOIN dept d
ON e.deptno = d.deptno

 

子查詢

/*查詢本公司工資最高的員工的詳細信息*/
第一步:SELECT MAX(SAL) FROM emp;/*查詢最高工資*/
第二步:SELECT * FROM emp WHERE sal=()/*把最高工資放到括號里*/
第三步:SELECT * FROM emp WHERE sal=(SELECT MAX(SAL) FROM emp);/*這就是子查詢*/

 

  子查詢可以出現的位置

/*FROM方式查詢*/
SELECT *
FROM/*這里可以*/
WHERE 條件 /*這里可以*/

 

/*單行單列案例:高於平均工資的所有人*/
SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp)

/*多行單列案例1:高於30部門最高工資的所有員工*/
SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno = 30)  /*ALL 所有的意思*/
/*案例2:大於任意1個經理工資的所有員工*/
SELECT * FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE job='經理')  /*ANY 任意的意思*/

/*單行多列案例(很少使用):查詢工資和部門與張學友完全相同的員工*/
SELECT * FROM emp WHERE (job,deptno,sal) IN (SELECT job,deptno,sal FROM emp WHERE ename='殷天正')

/*多行多列案例:30部門所有人*/
SELECT * FROM emp WHERE deptno=30;

 

 

作業:

 

/*
1. 查出至少有一個員工的部門。顯示部門編號、部門名稱、部門位置、部門人數。
列:d.deptno, d.dname, d.loc, 部門人數
表:dept d, emp e
條件:e.deptno=d.deptno
*/
SELECT d.*, z1.cnt 
FROM dept d, (SELECT deptno, COUNT(*) cnt FROM emp GROUP BY deptno) z1
WHERE d.deptno = z1.deptno

/*
2. 列出所有員工的姓名及其直接上級的姓名。
列:員工姓名、上級姓名
表:emp e, emp m
條件:員工的mgr = 上級的empno
*/
SELECT * 
FROM emp e, emp m
WHERE e.mgr=m.empno

SELECT e.ename, IFNULL(m.ename, 'BOSS') 領導
FROM emp e LEFT OUTER JOIN emp m
ON e.mgr=m.empno


/*
3. 列出受雇日期早於直接上級的所有員工的編號、姓名、部門名稱。
列:e.empno, e.ename, d.dname
表:emp e, emp m, dept d
條件:e.hiredate<m.hiredate
思路:
1. 先不查部門名稱,只查部門編號!
列:e.empno, e.ename, e.deptno
表:emp e, emp m
條件:e.mgr=m.empno, e.hiredate<m.hireadate
*/
SELECT e.empno, e.ename, e.deptno
FROM emp e, emp m
WHERE e.mgr=m.empno AND e.hiredate<m.hiredate


SELECT e.empno, e.ename, d.dname
FROM emp e, emp m, dept d
WHERE e.mgr=m.empno AND e.hiredate<m.hiredate AND e.deptno=d.deptno

 

/*
4. 列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門。
列:* 
表:emp e, dept d
條件:e.deptno=d.deptno
*/
SELECT *
FROM emp e RIGHT OUTER JOIN dept d/*右外*/
ON e.deptno=d.deptno

/*
5. 列出最低薪金大於15000的各種工作及從事此工作的員工人數。
列:job, count(*)
表:emp e
條件:min(sal) > 15000
分組:job
*/
SELECT job, COUNT(*)
FROM emp e
GROUP BY job
HAVING MIN(sal) > 15000/*分組后*/


/*
6. 列出在銷售部工作的員工的姓名,假定不知道銷售部的部門編號。
列:e.ename
表:emp
條件:e.deptno=(select deptno from dept where dname='銷售部')
*/

SELECT *
FROM emp e
WHERE e.deptno=(SELECT deptno FROM dept WHERE dname='銷售部')

 
/*導入工資等級表 答案未正確,帶核實*/
/*
7. 列出薪金高於公司平均薪金的所有員工信息,所在部門名稱,上級領導,工資等級。
列:* 
表:emp e
條件:sal>(查詢出公司的平均工資)
*/
/*第一步*/
SELECT e.*, d.dname, m.ename, s.grade
FROM emp e, dept d, emp m, salgrade s
WHERE e.sal>(SELECT AVG(sal) FROM emp) AND e.deptno=d.deptno AND e.mgr=m.empno AND e.sal BETWEEN s.losal AND s.hisal
/*第二步:表全加左外*/
SELECT e.*, d.dname, m.ename, s.grade
FROM 
emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno
    LEFT OUTER JOIN emp m ON e.mgr=m.empno
    LEFT OUTER JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal
WHERE e.sal>(SELECT AVG(sal) FROM emp)

SELECT * FROM emp;
SELECT * FROM dept;
SELECT * FROM salgrade;

/*
8.列出與龐統從事相同工作的所有員工及部門名稱。
列:e.*, d.dname
表:emp e, dept d
條件:job=(查詢出龐統的工作)
*/

SELECT e.*, d.dname
FROM emp e, dept d
WHERE e.deptno=d.deptno AND job=(SELECT job FROM emp WHERE ename='龐統')

/*
9.列出薪金高於在部門30工作的所有員工的薪金 的員工姓名和薪金、部門名稱。
列:e.ename, e.sal, d.dname
表:emp e, dept d
條件;sal>all (30部門薪金)
*/
SELECT e.ename, e.sal, d.dname
FROM emp e, dept d
WHERE e.deptno=d.deptno AND sal > ALL (SELECT sal FROM emp WHERE deptno=30)

 

 

 

linux或配置相關:

-----------課時3 03.RPM安裝-----------
安裝:https://blog.csdn.net/heian_99/article/details/89326404

linux卸載mysql(完全卸載)https://blog.csdn.net/qq_41829904/article/details/92966943
linux下開啟、關閉、重啟mysql服務:https://www.cnblogs.com/stm32stm32/p/7862503.html


查看是否安裝成功3種方式:
cat /etc/passwd|grep mysql
cat /etc/group|grep mysql
mysqladmin --version




mysql啟動於停止
查看:ps -ef|grep mysql
啟動:service mysqld start

為mysql設置密碼
/usr/bin/mysqladmin -u root password 123456

自啟動設置
設置:chkconfig mysqld on
查看:chkconfig --list|grep mysql
原始命令:ntsysv

路徑:
進入:cd /var/lib/mysql/
查看:ls -l
mysql數據庫文件的存放路徑:/var/lib/mysql/
配置文件目錄:/usr/share/mysql
相關命令目錄:/usr/bin
啟停相關腳本:/etc/init.d/mysql

修改配置文件:
進目錄:cd /usr/share/mysql
查:ls -l
mysql的配置文件:
5.5版本:my-huge.cnf 
5.6版本:my-default.cnf 
拷貝:cp /usr/share/mysql/my-default.cnf /etc/my.cnf

修改字符集和路徑
show variables like 'character%';  或者   show variables like '%char%';

cd /etc
ls -l my.cnf
vim my.cnf
:set nu

default-character-set=utf8


character_set_server=utf8

character_set_client=utf8

collation-server=utf8mb4_general_ci

 

default-character-set=utf8

 

esc鍵后保存退出 :wq!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM