1. 程式人生 > 實用技巧 >MYSQL 基礎(2)

MYSQL 基礎(2)

```mysql
# mysql  select 可以查詢常量,函式, 表示式
select 100;
select "xiaomo";
select 100 * 100;
select version()
```

```mysql
#  mysql  起別名
select "xiaomo" as name;
select new_name as 姓名 from xxm;
# 預設為空格也可以
select new_name 姓名 from xxm;
# 其別名 如果為 all name 這樣的 可以使用 '' 來表示。
select new_name 'all name' from xxm;
```

```mysql
# 去重 
distinct select distinct new_name from xxm; ``` ```mysql # concat 拼接 # 注意 null 和 任何欄位拼接,結果都為null # 如果為 null 的一列有資料 有 null 或者有值 可以使用ifnull 判斷是否有值 ifnull(欄位名,"預設值") : 例如: select concat(new_name, ifnull(age,0)) from xxm; select concat(new_name,age) from xxm; /* 執行結果: zhangsan22 | | tom22 | xiaohong22
*/ ``` ```mysql # between and 在什麼什麼之間。 SELECT new_name, age FROM xxm WHERE age BETWEEN 5 AND 20 # 執行結果: nice 18 nice 18 nice 18 nice 18 ``` ```mysql # in 的使用 SELECT id,age,new_name FROM xxm WHERE age in (520,22) ``` ```mysql # is NULL 篩選出為空的資料。
SELECT id,new_name FROM xxm WHERE new_name is NULL # 執行結果: 12 null ``` ```mysql # is not null 篩選出不為空的資料 SELECT id,new_name FROM xxm WHERE new_name is NOT NULL # 執行結果: 1 zhangsan 2 tom ... 11 moyan ``` ```mysql # 安全等於 <> 不等於 != 或者 <> 1. 可以作為普通的運算子為 = # 例如: SELECT new_name FROM xxm WHERE new_name <=> 'zhangsan' # 執行結果: # zhangsan ``` ```mysql # order by 排序 # DESC 降序 , 從大到小 SELECT new_name,age FROM xxm WHERE age >= 22 ORDER BY age DESC ``` ```mysql # LENGTH 獲取字串長度 # 獲取字串長度按照降序來排序 SELECT LENGTH(new_name),new_name FROM xxm ORDER BY LENGTH(new_name) DESC /* 執行結果: 8 zhangsan 8 xiaohong 5 moyan */ ``` ```mysql # 字元函式 # LENGTH 獲取字串的位元組數 # concat 字元拼接 # UPPER SELECT UPPER(new_name) FROM xxm # 將小寫字母變成大寫字母 # lower SELECT LOWER(new_name) FROM xxm # 將大寫字母變成小寫字母 # SUBSTR SELECT SUBSTR(new_name,1,2) FROM xxm # 擷取字元長度,索引為一開始 這個是擷取倆個字元 # SUBSTR SELECT SUBSTR(new_name,1) FROM xxm # 獲取字元一後面所有的字元 # INSTR 返回字元第一次出現的索引,如果找不到返回0 SELECT INSTR(new_name,'san'),new_name FROM xxm /* 執行結果: 6 zhangsan 0 tom 0 xiaohong */ # trim 去除左右倆邊的空格 SELECT TRIM(new_name) FROM xxm # lpad 左填充 如果不夠10 位 * 號 填充 SELECT LPAD(new_name,10,"*") FROM xxm # rpad 右填充 SELECT RPAD(new_name,10,"*") FROM xxm # replace 將 xxm 中張三 替換成 lisi SELECT REPLACE(new_name,'zhangsan','lisi') FROM xxm ``` ```mysql # round 四捨五入 SELECT ROUND(age) FROM xxm # 小數點保留後倆位 SELECT ROUND(age,2) FROM xxm # CEIL # 返回 >= 最少整數 SELECT CEIL(age) FROM xxm # floor 返回該<= 最大整數 SELECT CEIL(age) FROM xxm # TRUNCATE 截斷, 只保留小數點1位數 SELECT TRUNCATE(age,1) FROM xxm # MOD 取餘 SELECT MOD(age,2) FROM xxm ``` ```mysql # now 返回年月日, 時分秒 SELECT NOW() /* 執行結果: 2020-09-17 10:00:41 */ # 只返回年月日 SELECT CURDATE() /* 結果: 2020-09-17 */ # 只返回時分秒 SELECT CURTIME() /* 執行結果: 10:55:34 */ # 獲取 年月日 時分秒 SELECT YEAR(NOW()) # 年 SELECT MONTH(NOW()) # 月 SELECT MONTHNAME(NOW()) # 英文顯示 SELECT DAY(NOW()) # 日 SELECT HOUR(NOW()) # 時 SELECT MINUTE(NOW()) # 分 SELECT SECOND(NOW()) # 秒 /* 執行結果: 2020 9 September 17 11 1 14 */ /* %Y 四位年份 %y 2位年份 %m 月份 補0 01 02 %c 月份不補 0 1 2 3 %d 日 01 02 03 ... %H 時 24 小時 %h 時 12 小時 %i 分 00 01 %s 秒 00 .. */ # STR_TO_DATE 將 字元轉換成 日期型別 SELECT STR_TO_DATE('2020-09-17','%Y-%m-%d') # DATE_FORMAT 將日期轉換成字元 SELECT DATE_FORMAT(NOW(),"%Y") /* 執行結果: 2020年 */ ``` ```mysql # IF 相當於 if else # 有沒有年齡大於或者等於520的 ,如果有返回有,如果沒有返回沒有 SELECT IF(age>=520,'','沒有') FROM xxm /* 執行結果: 沒有 有 */ ``` ```mysql # CASE SELECT id, new_name, CASE id WHEN 1 THEN age * 2 WHEN 2 THEN age / 2 # 還可以繼續寫 你的條件 ELSE age * 10 END FROM xxm /* 執行結果: 1 zhangsan 44 2 tom 11.0000 3 xiaohong 220 4 nice 180 */ ``` ```mysql /* sum 求和 avg 平均值 max 最大值 min 最小值 count 計算個數 */ # 所有 年齡的 和 SELECT SUM(age) FROM xxm # 所有 年齡的 平均值 SELECT avg(age) FROM xxm # 最小值 SELECT min(age) FROM xxm # 最大值 SELECT max(age) FROM xxm # 計算個數 SELECT count(age) FROM xxm # 聚合函式支援 distnct SELECT count(DISTINCT age) FROM xxm # 日期相差值 SELECT DATEDIFF('2020-10-01','2020-09-17') /* 執行結果: 14 */ ``` ```MYSQL # group by 分組 # 每個年齡 的 平均年齡 SELECT AVG(age) FROM xxm GROUP BY age # having 在group by 後面使用 having [聚合函式] SELECT age FROM xxm GROUP BY age HAVING AVG(age) ``` ```mysql # 內連線 SELECT * FROM teacher,xxm WHERE xxm.t_id = teacher.id # 內連線 語法 select 欄位名, 欄位名 FROM 表1 INNER JOIN 表2 ON 表1.外來鍵id = 表2.id SELECT t_name, new_name FROM xxm INNER JOIN teacher ON xxm.t_id = teacher.id /* 執行結果: toms zhangsan toms tom */ # 左連線, 查詢出所有沒有老師交的學生 SELECT xxm.id, t_id, new_name FROM xxm LEFT JOIN teacher ON teacher.id = xxm.t_id WHERE xxm.t_id = 0 /* 執行結果: 3 0 xiaohong 6 0 nice 7 0 nice */ # 右連線 SELECT xxm.id, new_name,t_id FROM teacher RIGHT JOIN xxm ON xxm.t_id = teacher.id WHERE xxm.t_id = 0 ```