一幅畫,一次瞬間的回眸,就在那次畫展上,那個眼神,溫柔的流轉,還是那乾凈的皮鞋,一塵不染,俊朗的眉宇性感的唇,悄悄走近,牽手一段浪漫 [toc] MySQL筆記(二) 13、條件查詢 1.普通條件查詢 語法:SELECT COL_LIST FROM TABLE_NAME [WHERE CONDITI ...
目錄
一幅畫,一次瞬間的回眸,就在那次畫展上,那個眼神,溫柔的流轉,還是那乾凈的皮鞋,一塵不染,俊朗的眉宇性感的唇,悄悄走近,牽手一段浪漫
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()