一幅畫,一次瞬間的回眸,就在那次畫展上,那個眼神,溫柔的流轉,還是那干凈的皮鞋,一塵不染,俊朗的眉宇性感的唇,悄悄走近,牽手一段浪漫
目錄
- MySQL筆記(二)
- 13、條件查詢
- 14、對查詢結果排序
- 15、匯總和分組資料結果
- 16、連接查詢
- 17、子查詢
- 18、聯合查詢
- 19、日期和時間函式
- 20、數字函式
- 21、字串函式
- 22、系統函式
MySQL筆記(二)
13、條件查詢
1.普通條件查詢
語法:SELECT COL_LIST FROM TABLE_NAME
[WHERE CONDITION_EXPRESSION]
示例1:查詢QQ號為12301的玩家資訊
SELECT*FROM USERS WHERE USER_QQ='12301'
示例2:查詢分數大于2500分的資料
SELECT*FROM SCORES WHERE SCORE>2500
?
2.比較運算子
? 等于 =
? 不等于 <>
? 大于 >
? 大于等于 >=
? 小于 <
? 小于等于 <=
示例:查詢游戲編號為1且分數大于4000分的分數資訊
SELECT * FROM SCORES
WHERE GNO=1 AND SCORE>4000
3.邏輯運算子
并且 AND
或者 OR
非 NOT
示例:查詢游戲編號為1和2的分數資訊
SELECT * FROM SCORES WHERE GNO=1 OR GNO=2
4.模糊查詢
示例1:查詢分數在2500(含)到3000(含)的分數資訊
SELECT * FROM SCORES
WHERE SCORE>2500 AND SCORE<=3000
或
SELECT * FROM SCORES
WHERE SCORE BETWEEN 2500 AND 3000
示例2:查詢分數不在2500(含)到3000(含)的分數資訊
SELECT * FROM SCORES
WHERE SCORE NOT BETWEEN 2500 AND 3000
示例3:查詢1987年1月1日到1992年7月31日出生的玩家
SELECT * FROM USERS
WHERE USER_BIRTHDAY
BETWEEN '1987-01-01' AND '1992-07-31'
5.通配符
'_' 一個字符
% 任意字符
[] 指定范圍內
[^] 不在括號中
示例1:查詢所有姓孫的玩家資訊
SELECT * FROM USERS
WHERE USER_NAME LIKE '孫%'
示例2:查詢所有非姓孫的玩家資訊
SELECT * FROM USERS
WHERE USER_NAME NOT LIKE '孫%'
6.查詢空值的運算子
示例1:查詢生日為NULL的玩家資訊
SELECT * FROM USERS WHERE USER_BIRTHDAY IS NULL
示例2:查詢生日不為NULL的玩家資訊
SELECT * FROM USERS WHERE USER_BIRTHDAY IS NOT NULL
14、對查詢結果排序
1.對指定列進行排序
單列排序要素:
排序依據
排序方式
ASC表示:升序排序(默認方式)
DESC表示:降序排序
? 語法:SELECT COL_LIST FROM TABLE_NAME
? ORDER BY ORDER_BY_LIST[ASC|DESC]
示例1:查詢分數表中編號為1的所有分數資訊,并按照分數升序排序
SELECT * FROM SCORES
WHERE GNO=1
ORDER BY SCORE ASC
示例2:查詢分數表中編號為1的所有分數資訊,并按照分數降序排序
SELECT * FROM SCORES
WHERE GNO=1
ORDER BY SCORE DESC
2.多列排序
多列排序要點:
排序依據
排序方式
優先級
示例1:查詢分數表所有資訊,并按照游戲編號的升序和分數的降序進行排序
SELECT * FROM SCORES
ORDER BY GNO ASC,SCORE DESC
15、匯總和分組資料結果
1.聚合函式
聚合函式 支持的資料型別 描述
sum() 數字 對指定列中的所有非空值求總和
avg() 數字 對指定列中的所有非空值求平均值
min() 數字 字符 dateinme 回傳指定列中的最小數字,最早的日期或者最小的字串
max() 數字 字符 dateinme 回傳指定列中的最大數字,最近的日期或者最大的字串
conut() 任意基于行的資料型別 統計結果集合中全部記錄行的數量
示例1:查詢玩家表中一共有多少名玩家資訊
語法1:SELECT COUNT(USER_QQ)FROM USERS
語法2:SELECT COUNT(*)FROM USERS
示例2:查詢QQ號是12301的玩家游戲的總分數
語法:SELECT SUM(SCORE) AS '總分數' FROM SCORES WHERE USER_QQ='12301'
示例3:查詢QQ號是12301的玩家游戲的平均分數
語法:SELECT AVG(SCORE) AS '平均分數' FROM SCORES WHERE USER_QQ='12302'
示例4:查詢游戲編號是1的游戲的最高分數
語法:SELECT MAX(SCORE)AS'最高分數' FROM SCORES WHERE GNO=1
示例5:查詢QQ號是12302的玩家的總分,平均分和最高分
語法:SELECT SUM(SCORE)AS'總分' AVG(SCORE)AS'平均分' MAX(SCORE)AS'最高分'
FROM SCORES WHERE USER_QQ='12302'
2.在結果集內分組
使用GROUP BY 分組
示例1:查詢每個玩家的總分數,平均分,最高分數
語法:SELECT SUM(SCORE)AS'總分' AVG(SCORE)AS'平均分' MAX(SCORE)AS'最高分'
FROM SCORES GROUP BY user_qq
示例2:查詢每個玩家的平均分數,并顯示玩家QQ和平均分數
語法:SELECT USER_QQ,AVG(SCORE)AS'平均分'
FROM SCORES GROUP BY user_qq
3.篩選分組結果
示例1:查詢平均分數大于4000的玩家QQ號,總分數,平均分數
語法:SELECT USER_QQ,SUM(SCORE)AS'總分數',AVG(SCORE)AS'平均分數'
FROM SCORES GROUP BY USER_QQ HAVING AVG(SCORE)>4000
示例2:查詢所有用戶的平均分數和總分數,并按平均分倒序排列
語法:SELECT USER_QQ,AVG(SCORE)AS'平均分數',SUM(SCORE)AS'總分數'
FROM SCORES GROUP BY USER_QQ HAVING AVG(SCORE)DESC
SELECT陳述句的執行順序
1.from子句指定資料源
2.where子句基于指定的條件對記錄進行篩選
3.group by子句將資料劃分為多個分組
4.使用聚合函式進行進一步的計算統計
5.使用having子句篩選分組
6.使用order by子句對結果集進行排序
16、連接查詢
1.FROM子句進行多表查詢
示例:查詢分數資訊,顯示玩家昵稱,游戲名稱和分數
語法:SELECT USER_NAME AS'昵稱',GNAME AS'游戲名稱',SCORE AS'分數'
FROM USERS,GAMES,SCORE
WHERE USERS.USER_QQ=SCORES.USER_QQ
AND GAMES.GNO=SCORES.GNO
2.內連接
連接查詢分為內連接和外連接兩種
內連接特點:
1.相連接的兩張表地位平等
2.如果一張表中在另一張表中不存在對應資料,側不做連接
語法:SELECT USER_NAME ,score
FROM USERS,SCORE
WHERE users.user_qq=scores.user_qq
示例1:查詢每個玩家的昵稱,總分和平均分
語法:SELECT USER_NAME AS'昵稱',SUM(SCORE)AS'總分',AVG(SCORE)AS'平均分'
FROM USERS U INNER JOIN SCORES S ON S.USER_QQ=U.USER_QQ
GROUP BY U.USER_QQ,USERS.USER_NAME
示例2:查詢平均分數大于3500的分數資訊,顯示玩家昵稱,總分數,平均分數,并按照平均分數降序排列
語法:SELECT USER_NAME AS'昵稱',SUM(SCORE)AS'總分',AVG(SCORE)AS'平均分'
FROM USERS U INNER JOIN SCORES S ON S.USER_QQ=U.USER_QQ
GROUP BY U.USER_QQ,USERS.USER_NAME
HAVING AVG(SCORE)>3500
ORDER BY AVG(SCORE) DESC
3.外連接
外連接分為左連接和右外連接
外連接的特點:
1.做連接的兩個表地位不平等,其中有一張是基礎表
2.基礎表中的每條資料必須出現,即使另一張表沒有資料與之匹配,也要用NULL補齊
3.左外連接時左表是基礎表,右外連接時右表是基礎表
外連接語法:SELECT COL_LIST
FROM TABLE1 LEFT|RIGHT[OUTER]JOIN TABLE2 ON TABLE1.COL=TABLE2.COL
示例:查詢所有玩家關于5號游戲的分數資訊
語法:SELECT USER_NAME AS'昵稱'
GNO AS '游戲編號',SCORE AS'分數'
FROM USERS U LEFT JOIN SCORES S ON U.USER_QQ=S.USER_QQ
AND S.GNO=5
17、子查詢
1.使用IN關鍵字的子查詢
示例:查詢游戲型別是‘棋牌類’的游戲的分數資訊
1.游戲分數表中并包含游戲型別資訊
2.采用連接查詢
3.分兩步進行,首先找到所有“棋牌類”游戲的編號,再以這一組編號為查詢依據完成查詢
語法:SELECT * FROM SCORES WHERE GNO IN
(SELECT gno from games WHERE gtype='棋牌')
注意:子查詢一般不寫成SELECT*FROM
示例:查詢沒有參與5號游戲的玩家QQ
語法:SELECT USER_QQ FROM USERS
WHERE USER_QQ NOT IN
(SELECT USER_QQ FROM SCORES WHERE GNO=5)
2.使用EXISTS關鍵字的子查詢
示例;如果存在昵稱為“孫悟空”側查詢分數表中資料
SELECT * FROM SCORES
WHERE EXISTS
(SELECT*FROM USERS WHERE USER_NAME='孫悟空')
18、聯合查詢
聯合查詢語法格式
SELECT_STATEMENT
UNION[ALL]SELECT_STATEMENT
[UNION[ALL]SELECT_STATEMENT]
[...n]
作用與特點:
1.可以把多條查詢陳述句所產生的結果集縱向連接為一體
陳述句:SELECT user_name from users
UNION
SELECT gname from gemes
2.有ALL關鍵字可以顯示全部資料(重復的也顯示出來)
3.列的數量與型別都要兼容
示例1:查詢玩家表中所有女性玩家和生日為空的玩家
語法:SELECT *FROM USERS WHERE USER_SEX='女'
UNION
SELECT * FORM USERS WHERE USER_BIRTHDAY IS NULL
示例2:查詢QQ是"12301"的玩家所有分數并計算出總分數和平均分數,并顯示到同一結果集中
語法:SELECT USER_QQ,GNO,SCORE FROM SCORES WHERE USER_QQ='12301'
UNION ALL
SELECT '總分', ' ',SUM(SCORE)FROM SCORES
WHERE USER_QQ='12301'
UNION ALL
SELECT '平均分', ' ',AVG(SCORE)FROM SCORES
WHERE USER_QQ='12301'
19、日期和時間函式
函式的概念:按指定格式輸入引數,回傳正確結果的運算單元
回傳當前日期:
1.CURDATE()
2.CURRENT_DATE()
3.CURDATE()+0可以將當前日期值轉換為數值型
語法:SELECT CURDATE()
回傳當前時間:
1.CURTIME()
2.CURRENT_TIME()
3.CURTIME()+0可以將當前時間值轉換為數值型
語法:SELECT CURTIME()
回傳當前日期和時間:
1.CURRENT_TIMESTAMP()
2.LOCALTIME()
3.NOW()
4.SYSDATE()
語法:SELECT NOW()
獲取月份:
1.MONTH(DATE)
2.MONTHNAME(DATE)
語法:SELECT MONTH("2015-09-22")
獲取星期:
1.DAYNAME(DATE)
2.DAYOFWEEK(DATE)
3.WEEKDAY(DATE)
4.WEEK(DATE)
5.WEEKOFYEAR(DATE)
語法:SELECT DAYNAME(2017-04-05)
獲取天數:
1.DAYOFYEAR(DATE)
2.DAYOFMONTH(DATE)
語法:SELECT 1.DAYOFYEAR(2017-04-05)
獲取年份,季度,小時,分鐘,秒鐘
1.YEAR(DATE)
2.QUARTER(DATE)
3.HOUR(TIME)
4.MINUTE(TIME)
5.SECOND(TIME)
20、數字函式
絕對值函式:
ABS(X)
語法:SELECT ABS(7)
符號函式:
SIGN(X)
語法:SELECT SIGN(-1)
獲取亂數函式
1.RAND()
2.RAND(X)
語法:SELECT RAND()
獲取整數的函式
1.CEIL(X)/CEILING(X)
2.FLOOR(X)
四舍五入函式
1.ROUND(X)
2.ROUND(X.Y)
3.TRUNCATE(X,Y)
求余數函式
MOD(X,Y)
域運算函式(平方根)
1.pow(x,y)或Power(x,y)
2.EXP(X)
3.SQRT(X)
角度弧度互換函式
1.RADIANS(X)
2.DEGREES(X)
圓周率函式
PI()
三角函式
1.SIN(X)
2.ASIN(X)
3.COS(X)
4.ACOS(X)
5.TAN(X)
6.ATAN(X)
7.COT(X)
21、字串函式
1.計算字符數和字串長度的函式
1.CHAR_LENGTH(S)
2.LENGTH(S)
語法:SELECT LENGTH('s')
2.合并字串函式
1.CONCAT()
語法:SELECT CONCAT('HH','逗逼')
3.替換字串函式
1.INSERT(S1,X,LEN,S2)
2.REPLACE(S,S1,S2)
語法:SELECT INSERT('ADCDE',2,3,'##')
4.截取字串的函式
1.LEFT(S,N)
2.RIGHT(S,N)
語法:SELECT LEFT()
5.重復生成字串函式
REPEAT(S,N)
語法:SELECT REPEAT('ABC',3)
6.大小寫轉換函式
1.LOWER(X)/LCASE(X)
2.UPPER(X)/UCASE(X)
語法:SELECT LCASE('ABCD')
7.填充字串函式
1.LPAD(S1,LEN,S2)
2.RPAD(S1,LEN,S2)
語法:SELECT LPAD('abcd',10,'#')
8.洗掉空格函式
1.LTRIM(S)/RTRIM(S)
2.TRIM(S)
語法:SELECT RTRIM(' ABCD ')
9.洗掉指定字串
TRIM(S1 FROM S)
語法:SELECT TRIM('A' FROM 'ABCADE')
10.獲取子字串
SUBSTRING(S,N,LEN)
MID(S,N,LEN)
語法:SELECT SUBSTRING('abcade',3,2)
11.回傳指定位置字串函式
ELT(N,S1,S2)
語法:SELECT ELT(2,'ABC','DEF','MYSQL')
12.回傳指定字串位置
FIELD(S,S1,S2)
語法:SELECT FIELD('ABC','ABC','DEF','MYSQL')
22、系統函式
1.獲取MySQL版本號的函式
VERSION()
2.查看當前用戶的連接數
CONNECTION_ID()
3.查看當前所用資料庫函式
1.DATABASE()
2.SCHEMA()
4.獲取用戶名的函式
1.USER()
2.CURRENT_USER()
3.SYSTEM_USER()
4.SESSION_USER()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/86033.html
標籤:MySQL
上一篇:MySql筆記(一)
下一篇:MySQL8.0.19安裝
