目錄mysql
一幅畫,一次瞬間的回眸,就在那次畫展上,那個眼神,溫柔的流轉,仍是那乾淨的皮鞋,一塵不染,俊朗的眉宇性感的脣,悄悄走近,牽手一段浪漫sql
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
非 NOTcode
示例:查詢遊戲編號爲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
1.對指定列進行排序
單列排序要素:
排序依據
排序方式
ASC表示:升序排序(默認方式)
DESC表示:降序排序it
語法:SELECT COL_LIST FROM TABLE_NAME
ORDER BY ORDER_BY_LIST[ASC|DESC]class
示例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
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子句對結果集進行排序
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
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='孫悟空')
聯合查詢語法格式
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'
函數的概念:按指定格式輸入參數,返回正確結果的運算單元
返回當前日期:
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)
絕對值函數:
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)
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')
1.獲取MySQL版本號的函數
VERSION()
2.查看當前用戶的鏈接數
CONNECTION_ID()
3.查看當前所用數據庫函數
1.DATABASE()
2.SCHEMA()
4.獲取用戶名的函數 1.USER() 2.CURRENT_USER() 3.SYSTEM_USER() 4.SESSION_USER()