#函數 MIN MAX COUNT AVG SUM
SELECT MAX(P_ID) AS MAX,
MIN(P_ID) AS MIN,
COUNT(DISTINCT P_ID) as count1,
COUNT(*) AS COUNT2
FROM PERSONS
WHERE P_ID>1000;
SELECT MAX(P_ID) AS MAX,
AVG(P_ID) AS avg
FROM PERSONS;
SELECT SUM(P_ID) AS avg
FROM PERSONS;
#日期函數 遞加
SELECT ADDDATE('2019-11-26',INTERVAL 30 DAY);
SELECT DATE_ADD('2019-11-26',INTERVAL 30 DAY);
SELECT ADDDATE('2019-11-26',30);
#上面三個等價
SELECT ADDTIME('1997-09-01 23:00:00','1 00:00:00');
#不同時區時間的轉換
SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','10:00');
#日期函數
SELECT CURDATE()+0;#返回值是YYYYMMDD
SELECT CURDATE();#默認是'YYYY-MM-DD'
SELECT CURRENT_DATE;
SELECT CURRENT_DATE();
#後面兩個是CURDATE()的別名
#時間
SELECT CURTIME();#形式默認是HH:MM:SS
SELECT CURRENT_TIME;
SELECT CURRENT_TIME();
#日期+時間
SELECT CURRENT_TIMESTAMP();
SELECT CURRENT_TIMESTAMP;
SELECT NOW();
#日期+時間通過DATE轉化爲日期
SELECT DATE(NOW());
#日期之差 不介意日期+時間格式 時間直接忽略
SELECT DATEDIFF(NOW(),'1997-09-01');#結果是數字
#日期往前的推進(也可以是負值
#返回的類型根據前面的格式 WEEK QUARTER YEAR
SELECT DATE_ADD('2019-10-11',INTERVAL 30 DAY);
SELECT DATE_ADD('2019-10-11',INTERVAL -30 DAY);
SELECT DATE_ADD('2019-10-11',INTERVAL 30 HOUR);
SELECT DATE_ADD('2019-10-11 23:00:00',INTERVAL 36 DAY);
SELECT DATE_ADD('2019-10-11 23:00:00',INTERVAL 360000 SECOND);
#日期格式化
SELECT DATE_FORMAT('2019-10-11','%a %b %c');
#具體的%?很多
SELECT TIME(NOW()); #返回時間
#返回datetime類型的數據
SELECT TIMESTAMP('2019-10-10');
SELECT FIELD('111','22','111','111');
#返回2 從第一個在後面查找,計算出現的次數
#MYSQL使用LIMIT和ORDER BY實現前幾名記錄
SELECT P_Id
FROM persons
ORDER BY P_Id DESC
LIMIT 1;
SELECT P_ID
FROM persons
GROUP BY P_Id
ORDER BY P_ID
LIMIT 2;
#重要的是順序
SELECT *
FROM Orders
LEFT JOIN Ship
ON Orders.ShipperID = Ship.ShipperID
GROUP BY ShipperName
ORDER BY orders.ShipperID;
#注意Group by 在前面
#注意只有GROUP BY是可以只看合併後的表的 不需要前綴表
#where中無法使用aggregate聚合函數,所以用HAVING
#注意使用順序
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC
LIMIT 10;
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;
SELECT LOWER('AbAB'),LCASE('abAB');
#全變成小寫
SELECT UPPER('AbAB'),UCASE('abAB');
SELECT MID(CustomerID,1,3) AS A
FROM orders;#從第一行開始提取三個字符
SELECT ROUND(3.33,1) AS A;
#返回一位小數
#格式化函數FORMAT在MYSQL裏面
SELECT FORMAT(12500.2015, 3);
#格式化函數 返回三位小數
SELECT FORMAT(SQRT(16),2);
#SQRT開方
SELECT RAND();
#RAND產生0和1之間的隨機數
SELECT RAND(2);
#存在參數代表可以復現 參數隨便
SELECT CustomerID
FROM orders
ORDER BY RAND();
#隨機排序
#連接函數
SELECT CONCAT('HELLO ','WORLD');
SELECT IFNULL(ShipperName,99) as a
FROM ship;
#如果爲NULL那麼返回default值
#指定某字段後,如果字段與'AA'一樣,那麼替換爲'BB'
UPDATE ship
SET ShipperName=REPLACE(ShipperName,'AA','BB');
SELECT TRIM(' SHI HI ');
#去掉開頭和結尾的空格
SELECT LTRIM(' SHI HI ');#去頭
SELECT RTRIM(' SHI HI ');#去尾
SQL 基礎 no.3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.