1. 程式人生 > 實用技巧 >static關鍵字真能提高Bean的優先順序嗎?答:真能

static關鍵字真能提高Bean的優先順序嗎?答:真能


資料庫的相關概念
**DBMS、DB、SQL**

DB:database資料庫,儲存一系列有組織資料的容器

DBMS:Database Management System資料庫管理系統,使用DBMS管理和維護DB

SQL:StructureQueryLanguage結構化查詢語言,程式設計師用於和DBMS通訊的語言

MySQL服務的登入和退出 ★


**方式一:通過dos命令**

mysql -h主機名 -P埠號 -u使用者名稱 -p密碼

**注意:**

如果是本機,則-h主機名 可以省略

如果埠號是3306,則-P埠號可以省略

**方式二:通過圖形化介面客戶端**

通過sqlyog,直接輸入使用者名稱、密碼等連線進去即可

MySQL的常見命令和語法規範

**①常見命令**

show databases 顯示當前連線下所有資料庫


show tables 顯示當前庫中所有表


show tables from 庫名 顯示指定庫中所有表


show columns from 表名 顯示指定表中所有列


use 庫名 開啟/使用指定庫


**②語法規範**


不區分大小寫


每條命令結尾建議用分號


註釋:


#單行註釋


-- 單行註釋


/*多行註釋*/


補充函式

select version();

select database();

select user();

select ifnull(欄位名,表示式);

select concat(字元1,字元2,字元3);

select length(字元/欄位);獲取位元組長度


邏輯運算子:and or not


模糊查詢

like:一般和萬用字元搭配使用


​ _ 任意單個字元


​ % 任意多個字元


between and:一般用於判斷某欄位是否在指定的區間


a between 10 and 100


in:一般用於判斷某欄位是否在指定的列表


a in(10,30,50)


升序,通過asc


降序,通過desc




基礎查詢:
SELECT 查詢列表 FROM 表名;
特點:
1、查詢的結果集 是一個虛擬表
2、SELECT後面跟的查詢列表,可以有多個部分組成,中間用逗號隔開
例如:
SELECT 欄位1,欄位2,表示式 FROM 表; 3、執行順序 ① FROM子句 ② SELECT子句 4、查詢列表可以是:欄位、表示式、常量、函式等 一、查詢常量 SELECT 100 ; 二、查詢表示式 SELECT 100%3; 三、查詢單個欄位 SELECT `last_name` FROM `employees`; 四、查詢多個欄位 SELECT `last_name`,`email`,`employee_id` FROM employees; 五、查詢所有欄位 SELECT * FROM `employees`; F12:對齊格式 SELECT `last_name`, `first_name`, `last_name`, `commission_pct`, `hiredate`, `salary` FROM employees ; 六、查詢函式(呼叫函式,獲取返回值) SELECT DATABASE(); SELECT VERSION(); SELECT USER(); 七、起別名 方式一:使用AS關鍵字 SELECT USER() AS 使用者名稱; SELECT USER() AS "使用者名稱"; SELECT USER() AS '使用者名稱'; SELECT last_name AS "姓 名" FROM employees; 方式二:使用空格 SELECT USER() 使用者名稱; SELECT USER() "使用者名稱"; SELECT USER() '使用者名稱'; SELECT last_name "姓 名" FROM employees; 八、+的作用 mysql中+的作用: 1、加法運算 ①兩個運算元都是數值型 100+1.5 ②其中一個運算元為字元型 將字元型資料強制轉換成數值型,如果無法轉換,則直接當做0處理 '張無忌'+100--->100 ③其中一個運算元為NULL NULL+NULL--->NULL NULL+100--->NULL #需求:查詢 first_name 和last_name 拼接成的全名,最終起別名為:姓 名 使用CONCAT拼接函式 SELECT CONCAT(first_name,last_name) AS "姓 名" FROM employees; 九、DISTINCT的使用(只返回不同的值) -- 需求:查詢員工涉及到的部門編號有哪些,不重複 SELECT DISTINCT department_id FROM employees; 十、查看錶的結構 ①、DESC employees; ②、SHOW COLUMNS FROM employees;
基礎查詢
條件查詢

語法:
SELECT 查詢列表
FROM  表名
WHERE 篩選條件;

執行順序:
①FROM子句
②WHERE子句
③SELECT子句

SELECT last_name,first_name 
FROM employees 
WHERE salary>20000;
特點:

1、按關係表示式篩選
關係運算符:>   <    >=   <=     =     <>(不等於)     

2、按邏輯表示式篩選

邏輯運算子:AND    OR   NOT

3、模糊查詢
LIKE
IN
BETWEEN AND
IS NULL


一、按關係表示式篩選
#案例1:查詢部門編號不是100的員工資訊
SELECT *
FROM employees
WHERE department_id <> 100;

#案例2:查詢工資<15000的姓名、工資
SELECT last_name,salary
FROM employees
WHERE salary<15000;

二、按邏輯表示式篩選

#案例1:查詢部門編號不是 50-100之間員工姓名、部門編號、郵箱
方式1:
SELECT last_name,department_id,email
FROM employees
WHERE department_id <50 OR department_id>100;

方式2:
SELECT last_name,department_id,email
FROM employees
WHERE NOT(department_id>=50 AND department_id<=100);

#案例2:查詢獎金率>0.03 或者 員工編號在60-110之間的員工資訊
SELECT *
FROM employees
WHERE commission_pct>0.03 OR (employee_id >=60 AND employee_id<=110);

三、模糊查詢
1LIKE
功能:一般和萬用字元搭配使用,對字元型資料進行部分匹配查詢
常見的萬用字元:
_ 任意單個字元
% 任意多個字元,支援0-多個
LIKE/NOT LIKE 

#案例1:查詢姓名中包含字元a的員工資訊
SELECT *
FROM employees
WHERE last_name LIKE '%a%';

#案例2:查詢姓名中包含最後一個字元為e的員工資訊
SELECT *
FROM employees
WHERE last_name LIKE '%e';

#案例3:查詢姓名中包含第一個字元為e的員工資訊
SELECT *
FROM employees
WHERE last_name LIKE 'e%';

#案例4:查詢姓名中包含第三個字元為x的員工資訊
SELECT *
FROM employees
WHERE last_name LIKE '__x%';

#案例5:查詢姓名中包含第二個字元為_的員工資訊
SELECT *
FROM employees
WHERE last_name LIKE '_\_%';

SELECT *
FROM employees
WHERE last_name LIKE '_$_%' ESCAPE '$';

2IN

功能:查詢某欄位的值是否屬於指定的列表之內
a  IN(常量值1,常量值2,常量值3,...)
a NOT IN(常量值1,常量值2,常量值3,...)
IN/NOT IN

#案例1:查詢部門編號是30/50/90的員工名、部門編號
方式1:
SELECT last_name,department_id
FROM employees
WHERE department_id IN(30,50,90);

方式2:
SELECT last_name,department_id
FROM employees
WHERE department_id = 30
OR department_id = 50
OR department_id = 90;

案例2:查詢工種編號不是SH_CLERK或IT_PROG的員工資訊
#方式1:
SELECT *
FROM employees
WHERE job_id NOT IN('SH_CLERK','IT_PROG');
#方式2:
SELECT *
FROM employees
WHERE NOT(job_id ='SH_CLERK'OR job_id = 'IT_PROG');

3BETWEEN AND
功能:判斷某個欄位的值是否介於X,X之間
BETWEEN AND/NOT BETWEEN AND

#案例1:查詢部門編號是30-90之間的部門編號、員工姓名
方式1:
SELECT department_id,last_name
FROM employees
WHERE department_id BETWEEN 30 AND 90;

方式2:
SELECT department_id,last_name
FROM employees
WHERE department_id>=30 AND department_id<=90;

#案例2:查詢年薪不是100000-200000之間的員工姓名、工資、年薪

SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0))<100000 OR salary*12*(1+IFNULL(commission_pct,0))>200000;

SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
WHERE salary*12*(1+IFNULL(commission_pct,0)) NOT BETWEEN 100000 AND 200000;

4IS NULL/IS NOT NULL

#案例1:查詢沒有獎金的員工資訊
SELECT *
FROM employees
WHERE commission_pct IS NULL;

#案例2:查詢有獎金的員工資訊
SELECT *
FROM employees
WHERE commission_pct IS NOT NULL;

SELECT *
FROM employees
WHERE salary IS 10000;(報錯!)

----------------=與IS的對比------------------------------------

=    只能判斷普通的內容

IS     只能判斷NULL值

<=>     安全等於,既能判斷普通內容,又能判斷NULL值,不建議用,閱讀性差

條件查詢
排序查詢
語法:
SELECT 查詢列表
FROM 表名
【WHERE 篩選條件】
ORDER BY 排序列表

執行順序:
①FROM子句
②WHERE子句
③SELECT子句
④ORDER BY 子句

舉例:
SELECT last_name,salary
FROM employees
WHERE salary>20000
ORDER BY salary ;

特點:
1、排序列表可以是單個欄位、多個欄位、表示式、函式、列數、以及以上的組合
2、升序 ,通過 ASC   ,預設行為
   降序 ,通過 DESC

一、按單個欄位排序
#案例1:將員工編號>120的員工資訊進行工資的升序
SELECT * 
FROM employees 
ORDER BY salary ;

#案例1:將員工編號>120的員工資訊進行工資的降序
SELECT * 
FROM employees 
WHERE employee_id>120 
ORDER BY salary DESC;

二、按表示式排序
#案例1:對有獎金的員工,按年薪降序

SELECT *,salary*12*(1+IFNULL(commission_pct,0))  年薪
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;


三、按別名排序
#案例1:對有獎金的員工,按年薪降序
SELECT *,salary*12*(1+commission_pct,0)  年薪
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY 年薪 DESC;

思考為什麼WHERE不能用別名進行判斷?
因為是程式碼執行順序的問題。

四、按函式的結果排序

#案例1:按姓名的字數長度進行升序
SELECT last_name
FROM employees
ORDER BY LENGTH(last_name);

五、按多個欄位排序
#案例1:查詢員工的姓名、工資、部門編號,先按工資升序,再按部門編號降序
SELECT last_name,salary,department_id
FROM employees
ORDER BY salary ASC,department_id DESC;

六、補充選學:按列數排序
SELECT * FROM employees 
ORDER BY 2 DESC;
SELECT * FROM employees 
ORDER BY first_name;

排序查詢

注意:

常見函式

函式:為了實現某個功能,將編寫的一系列的命令集合封裝在一起,對外僅僅顯示方法名,供外部呼叫
1、自定義方法(函式) 2、呼叫方法(函式)★ 叫什麼 :函式名 幹什麼 :函式功能 常見函式(需掌握): 單行函式 字元函式 CONCAT SUBSTR LENGTH(str) CHAR_LENGTH UPPER LOWER TRIM LEFT RIGHT LPAD RPAD INSTR STRCMP 數學函式 ABS CEIL FLOOR ROUND TRUNCATE MOD 日期函式 NOW CURTIME CURDATE DATEDIFF DATE_FORMAT STR_TO_DATE 流程控制函式 IF CASE #一、字元函式 1、CONCAT 拼接字元 SELECT CONCAT('hello,',first_name,last_name) 備註 FROM employees; 2、LENGTH 獲取位元組長度,位元組長度與數字編碼格式有關 SELECT LENGTH('hello,郭襄'); 3、CHAR_LENGTH 獲取字元個數 SELECT CHAR_LENGTH('hello,郭襄'); 4SUBSTRING 擷取子串 /* 注意:起始索引從1開始!!! substr(str,起始索引,擷取的字元長度) substr(str,起始索引)沒有第三個引數的話就是擷取索引之後所有的值 */ SELECT SUBSTR('張三丰愛上了郭襄',1,3);--->張三丰 SELECT SUBSTR('張三丰愛上了郭襄',7);--->郭襄 5、INSTR獲取字元第一次出現的索引 SELECT INSTR('三打白骨精aaa白骨精bb白骨精','白骨精');--->3 6、TRIM去前後指定的字元,預設是去空格 SELECT TRIM(' 虛 竹 ') AS a;--->虛 竹 SELECT TRIM('x' FROM 'xxxxxx虛xxx竹xxxxxxxxxxxxxxxxxx') AS a;--->虛xxx竹 7、LPAD/RPAD 左填充/右填充,10代表總共的字元個數 SELECT LPAD('木婉清',5,'a');--->aa木婉清 SELECT RPAD('木婉清',5,'a');--->木婉清aa 8UPPER/LOWER 變大寫/變小寫 #案例:查詢員工表的姓名,要求格式:姓首字元大寫,其他字元小寫,名所有字元大寫,且姓和名之間用_分割,最後起別名“OUTPUT” SELECT CONCAT(UPPER(SUBSTR(first_name,1,1)),LOWER(SUBSTR(first_name,2)),'_',UPPER(last_name)) "OUTPUT" FROM employees; 9、STRCMP 比較兩個字元大小 SELECT STRCMP('aec','aec'); 引數1大於引數2顯示1,小於顯示-1,等於顯示0 10LEFT/RIGHT 擷取子串 SELECT LEFT('鳩摩智',1);--->鳩 SELECT RIGHT('鳩摩智',1);--->智 #二、數學函式 1ABS 絕對值 SELECT ABS(-2.4);--->2.4 2、CEIL 向上取整 返回>=該引數的最小整數 SELECT CEIL(-1.09); SELECT CEIL(0.09); SELECT CEIL(1.00); 3FLOOR 向下取整,返回<=該引數的最大整數 SELECT FLOOR(-1.09); SELECT FLOOR(0.09); SELECT FLOOR(1.00); 4ROUND 四捨五入 SELECT ROUND(1.8712345); SELECT ROUND(1.8712345,2); 2代表小數點後幾位 5TRUNCATE 截斷 SELECT TRUNCATE(1.8712345,1);引數2表示截斷小數點後幾位 6、MOD 取餘 SELECT MOD(-10,3); a%b = a-a/b*b -10%3 = -10 - (-10)/3*3 = -1 SELECT -10%3; SELECT 10%3; SELECT -10%-3; SELECT 10%-3; #三、日期函式 1、NOW 當前日期,時間 SELECT NOW(); 2、CURDATE 當前日期 SELECT CURDATE(); 3、CURTIME 當前時間 SELECT CURTIME(); 4DATEDIFF 兩個日期差值,引數1減引數2 SELECT DATEDIFF('1998-7-16','2019-7-13'); 5、DATE_FORMAT 將引數1按照轉換成指定格式 SELECT DATE_FORMAT('1998-7-16','%Y年%m月%d日 %H小時%i分鐘%s秒') 出生日期; 1998年07月16日 00小時00分鐘00秒 6、STR_TO_DATE 按指定格式解析字串為日期型別,這樣字串就能和日期比較 SELECT * FROM employees WHERE hiredate<STR_TO_DATE('3/15 1998','%m/%d %Y'); #四、流程控制函式 1、IF函式 SELECT IF(100>9,'',''); 如果 100>9,顯示好,否則顯示壞 #需求:如果有獎金,則顯示最終獎金,如果沒有,則顯示0 SELECT IF(commission_pct IS NULL,0,salary*12*commission_pct) 獎金 FROM employees; 2、CASE函式 情況1 :實現等值判斷 CASE 表示式 WHEN 值1 THEN 結果1 WHEN 值2 THEN 結果2 ... ELSE 結果n END 案例: 部門編號是30,工資顯示為2倍 部門編號是50,工資顯示為3倍 部門編號是60,工資顯示為4倍 否則不變 顯示 部門編號,新工資,舊工資 SELECT department_id,salary, CASE department_id WHEN 30 THEN salary*2 WHEN 50 THEN salary*3 WHEN 60 THEN salary*4 ELSE salary END newSalary FROM employees; ②情況2:類似於多重IF語句,實現區間判斷 CASE WHEN 條件1 THEN 結果1 WHEN 條件2 THEN 結果2 ... ELSE 結果n END 案例:如果工資>20000,顯示級別A 工資>15000,顯示級別B 工資>10000,顯示級別C 否則,顯示D SELECT salary, CASE WHEN salary>20000 THEN 'A' WHEN salary>15000 THEN 'B' WHEN salary>10000 THEN 'C' ELSE 'D' END AS "級別" FROM employees; 常見函式
聚合函式
說明:分組函式往往用於實現將一組資料進行統計計算,最終得到一個值,又稱為統計函式
分組函式清單:
SUM(欄位名):求和
AVG(欄位名):求平均數
MAX(欄位名):求最大值
MIN(欄位名):求最小值
COUNT(欄位名):計算非空欄位值的個數

#案例1 :查詢員工資訊表中,所有員工的工資和、工資平均值、最低工資、最高工資、有工資的個數

SELECT SUM(salary),AVG(salary),MIN(salary),MAX(salary),COUNT(salary) 
FROM employees;

#案例2:新增篩選條件
    #①查詢employee_id表中記錄數:
    SELECT COUNT(employee_id) FROM employees;

    #②查詢employee_id表中有佣金的人數:

    SELECT COUNT(salary) FROM employees;
    
    #③查詢employee_id表中月薪大於2500的人數:
    SELECT COUNT(salary) FROM employees WHERE salary>2500;
    
    #④查詢有領導的人數:
    SELECT COUNT(manager_id) FROM employees;
        
#count的補充介紹★

#1、統計結果集的行數,推薦使用count(*)
    
SELECT COUNT(*) FROM employees;
SELECT COUNT(*) FROM employees WHERE department_id = 30;

COUNT(1)表示給資料添加了一列內容為1的資料,然後計算資料為1的行數
SELECT COUNT(1) FROM employees;
SELECT COUNT(1) FROM employees WHERE department_id = 30;

#2、搭配distinct實現去重的統計

#需求:查詢有員工的部門個數
SELECT COUNT(DISTINCT department_id) FROM employees;

聚合函式
分組查詢

語法:
SELECT 查詢列表
FROM 表名
WHERE 篩選條件
GROUP BY 分組列表
HAVING 分組後篩選
ORDER BY 排序列表;

執行順序:
①FROM子句
②WHERE子句
③GROUP BY 子句
④HAVING子句
⑤SELECT子句
⑥ORDER BY子句


特點:
①查詢列表往往是  聚合函式和被分組的欄位 ★
②分組查詢中的篩選分為兩類
            篩選的基表                    使用的關鍵詞        位置
分組前篩選       原始表(FROM 後面的)        WHERE          GROUP BY 的前面

分組後篩選          分組後的結果集                  HAVING       GROUP BY 的後面

WHERE——GROUP BY ——HAVING

聚合函式做條件只可能放在HAVING後面!!!

簡單的分組
#案例1:查詢每個工種的員工平均工資

SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;

#案例2:查詢每個領導的手下人數

SELECT COUNT(*),manager_id
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id;

可以實現分組前的篩選
#案例1:查詢郵箱中包含a字元的 每個部門的最高工資
SELECT MAX(salary) 最高工資,department_id
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id;

#案例2:查詢每個領導手下有獎金的員工的平均工資
SELECT AVG(salary) 平均工資,manager_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;

可以實現分組後的篩選
#案例1:查詢哪個部門的員工個數>5

SELECT COUNT(*) 員工個數,department_id
FROM employees
GROUP BY department_id
HAVING  COUNT(*)>5;


#案例2:每個工種有獎金的員工的最高工資>12000的工種編號和最高工資

SELECT job_id,MAX(salary)
FROM employees
WHERE commission_pct  IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;


#案例3:領導編號>102的每個領導手下的最低工資大於5000的最低工資

SELECT MIN(salary) 最低工資,manager_id
FROM employees
WHERE manager_id>102
GROUP BY manager_id
HAVING MIN(salary)>5000 ;

可以實現排序
#案例:查詢沒有獎金的員工的最高工資>6000的工種編號和最高工資,按最高工資升序

SELECT MAX(salary) 最高工資,job_id
FROM employees
WHERE commission_pct IS  NULL
GROUP BY job_id
HAVING MAX(salary)>6000
ORDER BY MAX(salary) ASC;


按多個欄位分組
#案例:查詢每個工種每個部門的最低工資,並按最低工資降序
提示:工種和部門都一樣,才是一組

SELECT MIN(salary) 最低工資,job_id,department_id
FROM employees
GROUP BY job_id,department_id
ORDER BY MIN(salary) DESC;

分組查詢