SQL 基礎 no.3


#函數 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 ');#去尾


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章