2023年7月26日 星期三

練習-MySQL

SQL語句後面加分號是數據庫系統分隔每個SQL語句的標準方法


一些重要的SQL命令:

SELECT - 從數據庫中提取數據
UPDATE - 更新數據庫中的數據
DELETE - 從數據庫中刪除數據
INSERT INTO - 將新數據插入數據庫中
CREATE DATABASE - 創建一個新數據庫
ALTER DATABASE - 修改數據庫
CREATE TABLE - 創建一個新表
ALTER TABLE - 修改一個表
DROP TABLE - 刪除一個表
CREATE INDEX - 創建索引(搜索鍵)
DROP INDEX - 刪除索引



 資料庫指令:

SHOW DATABASES 

#顯示資料庫伺服器中所有的資料庫

(一定會有4個以上因為其中四個是MYSQL預設建立的系統資料庫)






CREATE DATABASE 資料庫名稱

#建立一個新的空白資料庫











DROP DATABASE 資料庫名稱


#刪除現有的資料庫









USE 資料庫名稱


#使用現有的資料庫





ps. 使用帶有I的閃電符號執行   
他只會執行索引所在的那行指令,所以可以靈活的使用 DROP CREATE USE 各種指令

    







CREATE TABLE 資料表名稱(欄位名稱 資料型態 欄位設定,...)


#創造資料表

CREATE TABLE product_V2(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
price INT NOT NULL DEFAULT 30
); #設定id是主鍵,並且會自動遞增,名稱不可以是空值,價錢不可以是空值預設價錢是30


執行 CREATE TABLE 資料表名稱 後



SELECT * FROM 資料表名稱


#查看資料表內資料

SELECT DISTINCT column1 , column2,.... FROM table_name

#只列出不同的值
EX:
SELECT COUNT(DISTINCT Country) FROM Customers; 
計算有多少個不同的城市:21








INSERT INTO 資料表名稱 (欄位名稱) VALUES (欄位資料)

#插入資料到資料表後
#如果要為表的所有列添加值,則無須再SQL查詢中指定列名稱
INSERT INTO table_name VALUES(value1,value2,....)



DROP TABLE 資料表名稱

刪除資料表




SELECT * FROM 資料表名稱 WHERE 篩選條件

#*也可以指定特定欄位 SELECT 欄位名稱,欄位名稱,... FROM 資料表名稱 WHERE 篩選條件
#篩選資料 
price > 40
name='拿鐵' and price =50
name='美式' or price =50









UPDATE 資料表名稱
SET
欄位名稱=新的資料,
欄位名稱=新的資料,
...
WHERE 篩選條件

#如果省略的 WHERE 篩選條件, 那表中的所有紀錄都被更新
#更新資料


DELETE FROM table_name WHERE condition;

#如果省略的WHERE 指定條件,整個紀錄都會被刪除

DELETE FROM table_name;

#再不刪除表的情下刪除表中所有行,意味著結構和屬性以及索引都完好







SELECT * FROM 資料表 INNER JOIN 選項資料表 ON 資料表關鍵條件=選項資校表的欄位

也可以式
SELECT
資料表一.欄位名稱,
資料表二.欄位名稱,
....
FROM 資料表一
INNER JOIN 資料表二
ON 合併條件


# 會忽略所有沒有對應的資料
#合併資料表,使用JOIN做合併查詢
!!!!!!!重要觀念,關聯式資料庫
當我們使用JOIN時他會把分割開來的資料表重新合併成大的資料表







SELECT * FROM 資料表 LEFT JOIN 選項資料表 ON 資料表

合併資料表但包含左邊所有沒有對應到的資料



SELECT * FROM 資料表 RIGHT JOIN 選項資料表 ON 資料表

合併資料表但包含右邊所有沒有對應的資料





ORDER BY 關鍵字

#該ORDER BY 關鍵字用於按升序或降序對結果集進行排序
#默認情況下,關鍵字 ORDER BY 按升序對記錄進行排序, 
#如果要按降序進行排序要使用關鍵字 DESC

SELECT column1, column2, ....
FROM table_name 
ORDER BY column1,column2,...   ASC|DESC;





EXPLAIN

#了解指令細節的運作資訊
EXPLAIN SELECT...
EXPLAIN INSERT...
EXPLAIN UPDATE...
EXPLAIN DELETE...

#建立索引
ALTER TABLE table_name ADD INDEX index_name(column_name)
#建立資料表的時候同時建立索引
CREATE TABLE table_name(
column1 dataType,
column2 dataType,
...
INDEX index_name(參考的欄位名稱)
);


#主鍵Primary Key 也是一種索引







#移除索引
ALTER TABLE table_name DROP INDEX index_name





Foreign Key 外鍵

ALTER TABLE variant ADD Foreign Key(product_id) REFERENCES product(id)
-------------------------------------------
ALTER TABLE 資料表一 ADD
FOREIGN KEY(外鍵欄位名稱)
REFERENCES
資料表二(主見欄位名稱)
---------------------------
也可以在建立資料表同時建立外鍵

CREATE TABLE 資料表名稱(
欄位名稱1 資料型態,
欄位名稱2 資料型態,
欄位名稱3 資料型態,
...
FOREIGN KEY(外鍵欄位名稱)
REFERENCES 資料表二(主鍵欄位名稱)
);

#明確建立關聯性
#防止資料缺漏, 保持一致性
#在選項資料表中設定一個外鍵, 這個外鍵對應到產品資料表

特點: 因為建立的關聯性,所以刪除A表的時候會確認選項資料表是否有關連的資料,
如果有關聯的資療, 刪除指令就會失敗
(如果要刪除資料,就必須先從variane資料表資料開始刪除再刪除product資料表資料)




















ALTER TABLE table_name DROP FOREIGN KEY 外鍵約束名稱;

#如果要刪除外鍵結構
#必須先刪除外鍵約束名稱 
#而外鍵約束名稱 可以使用 SHOW CREATE TABLE table_name查看

SHOW CREATE TABLE variane ; ------------------- 'variane', 'CREATE TABLE `variane` (\n `id` int NOT NULL AUTO_INCREMENT,\n `product_id` int DEFAULT NULL,\n `size` varchar(2) NOT NULL,\n `price` int NOT NULL DEFAULT \'30\',\n PRIMARY KEY (`id`),\n KEY `product_id` (`product_id`),\n CONSTRAINT `variane_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`),\n CONSTRAINT `variane_ibfk_2` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci'





LIMIT 

SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;



#用於指定要返回的紀錄數,當有數千筆以上的大型表非常有用,但返回大量紀錄可能會影響效能


-------------------MYSQL 函數-----------------


MIN() 與 MAX()

SELECT MIN(column_name)
FROM table_name
WHERE condition;

#MIN()函數返回所選列的最小值
#MAX()函數返回所選列的最大值







COUNT([DISTINCT]*|運算式)

使用DISTINCT時,重複資料不會計算
使用*時,計算表格紀錄的數量
使用運算式時,計算的數量不會包含NULL

#該CIUNT()函數返回與指定條件匹配的行數
SELECT COUNT(column_name)
FROM table_name
WHERE condition;



AVG()

#AVG()函數返回數字列的平均值
SELECT AVG(column_name)
FROM table_name
WHERE condition;


























SUM()

#SUM()函數返回數字列的總和
SELECT SUM(column_name)
FROM table_name
WHERE condition;














------------------------ 運算符------------------------

LIKE 運算符

#該LIKE運算符在子句中用於 WHERE 搜索列中的指定模式
#有兩種通佩符通常與 LIKE運算符結合使用:

% : 代表 0個 、1個或多個字符
_ : 代表一個、單個字符

#百分號和下劃線可以組合使用!

SELECT column1, column2,...
FROM table_name,
WHERE column LIKE patter;

p.s AND or OR 運算符也可以搭配組合任意數量的條件

LIKE 運算符                                                        意思
WHERE CustomerName LIKE 'a%'                找到從a開始的任何值
WHERE CustomerName LIKE '%a'                找到a結尾的任何值
WHERE CustomerName LIKE '%or%'           找到任何位置有or的任何值
WHERE CustomerName LIKE '_r%'              找到r是在第2個位置的任何值
WHERE CustomerName LIKE 'a_%'              找到從a開始並且至少2個字元的任何值
WHERE CustomerName LIKE 'a__%'            找到從a開始並且至少3個字元的任何值
WHERE CustomerName LIKE 'a%o'               找到從a開始並且以o結尾的任何值









IN 運算符

#IN運算符允許在子句中指定多個值 WHERE
#運算符 IN 是多個條件的簡寫 OR

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,....);


或者

SELECT cloumn_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);




#選擇不是某些國家的客戶



















#選擇供應商來自同一國家/地區的所有客戶

SELECT * FROM Customers WHERE Country IN(SELECT Country FROM Suppliers);
#IN()裡面的
SELECT Country FROM Suppliers是一個子查詢,查詢Supploers表中所有的Country
#SELECT * FROM Customers WHERE Country IN()是主查詢,他選擇Customers表中所有符合的條件,條件是Country在子查詢中的結果





#字串函式

#LPAD(str1,長度,str2) 如果str1長度小於指定長度,就在字串左邊使用str2補滿
SELECT LPAD(Name,50,'_') FROM country WHERE Continent ; 
#RPAD(str1,長度,str2) 如果str1長度小於指定長度,將使用str2在字串右邊補滿到指定長度
SELECT RPAD(Name,50,'_') FROM country WHERE Continent;
#REPLACE(str1,str2,str3) 將字串1中的字串2替換成字串3

#LEFT(str,長度) 回傳從字串左邊指定的長度內容
#RIGHT(str,長度) 回傳從字串右邊指定的長度內容
#SUBSTRING(字串,位置) 回傳字串中指定的位置開始到結束的內容
#SUBSTRING(字串,位置,長度)  回傳字串指定的位置到指定長度的內容

#連接字串 CONCAT(參數,...)
#使用分隔符號連接字串 CONCAT_WS(分隔字串,參數,...)
SELECT CONCAT('ABCDE','egg'), CONCAT('a','b','c','d','e'), CONCAT_WS('|','A','B','C','D','E');

#LENGTH(字串) 回傳[字串]的長度(bytes)
#CHAR_LENGTH(字串) 回傳[字串]的長度(字元個數)
#LOCATE(str1,str2) 回傳[str1]在[str2]中的位置,如果[str2] 中沒有[str1]指定的內容就回傳0
SELECT Name, LENGTH(Name) len, CHAR_length(Name),LOCATE(' ',Name);

SELECT LEFT(Name,LOCATE(' ',Name)-1) Name_FirstWord, Name
FROM Country
WHERE LOCATE(' ',Name) !=0
ORDER BY RAND()
LIMIT 5
;

#日期和時間的函式

#CURDATE() 日期,相同功能:CURRENT_DATE、CURRENT_DATE()
#CURTIME() 時間,相同功能:CURRENT_TIME、CURRENT_DATE()
#YEAR(日期)  傳回日期的年
#MONTH(日期) 傳回日期的月
#DAY(日期)   相同功能: DAYOFMONTH()
#CURDATE 與 CURTIME可以取得目前伺服器的日期和時間

#ADDDATE(日期,天數)回傳[日期]在指定[天數]以後的日期
#ADDDATE(日期,INTERVAL 數字 單位) 回傳[日期]在指定[數字][單位]以後的日期
#ADDTIME(日期時間,INTERVAL 數字 單位)回傳[日期時間]在指定的[數字][單位]以後的日期時間
#SUBDATE(日期,天數) 回傳[日期]在指定天數以前的日期
#SUBDATE(日期,INTERVAL 數字 單位) 回傳[日期]在指定[數字][單位]以前的日期
#SUBTIME(日其時間,INTERVAL 數字 單位)回傳[日期時間]在指定[數字][單位]以前的日期時間
#DATEDIFF(日期1,日期2) 計算兩個日期的差異天數
#timestampdiff(單位,開始時間,結束時間) 依照指定單位回傳差異時間





-------------------流程控制函式-------------------------

當需要依照條件判斷結果而顯示不同資料時

IF(條件,運算式1,運算式2)

條件成立時返回運算1
反之返回運算2
#判斷雇傭日期小於1985 的員工稱之為Senoir,反之General

SELECT ename,hiredate,IF(YEAR(hiredate) < 1985, 'Senoir','General') grade 
FROM emp
ORDER BY hiredate;
-------------------------------------------------
SMITH 1980-12-17 Senoir
ALLEN 1981-02-20 Senoir
WARD 1981-02-22 Senoir
JONES 1981-04-02 Senoir
BLAKE 1981-05-01 Senoir
CLARK 1981-06-09 Senoir
TURNER 1981-09-08 Senoir
MARTIN 1981-09-28 Senoir
KING 1981-11-17 Senoir
JAMES 1981-12-03 Senoir
FORD 1981-12-03 Senoir
MILLER 1982-01-23 Senoir
SCOTT 1987-04-19 General
ADAMS 1987-05-23 General

---------------------------------------
也可以依照獎金分級,資深員工的獎金是2.5倍

SELECT ename,hiredate, salary*IF(YEAR(hiredate)<1985,2.5,1.2) bouns
FROM emp
ORDER BY hiredate;
-----------------------------------------------
SMITH 1980-12-17 2000.00
ALLEN 1981-02-20 4000.00
WARD 1981-02-22 3125.00
JONES 1981-04-02 7437.50
BLAKE 1981-05-01 7125.00
CLARK 1981-06-09 6125.00
TURNER 1981-09-08 3750.00
MARTIN 1981-09-28 3125.00
KING 1981-11-17 12500.00
JAMES 1981-12-03 2375.00
FORD 1981-12-03 7500.00
MILLER 1982-01-23 3250.00
SCOTT 1987-04-19 3600.00
ADAMS 1987-05-23 1320.00
--------------------------------------------

當需要完成多種條件判斷時,就要使用CASE 語法
CASE
    WHEN 條件 THEN 運算式  
    [WHEN 條件 TEHN 運算式]
    ...
    [ELSE 運算式]
END

#判斷員工薪水等級
語法一(使用when幹到底)
SELECT ename,salary,
CASE
    WHEN salary >= 3000 then 'A'
    WHEN salary between 1000 and 2999 then 'B'
    WHEN salary <1000 then 'C'
END SalaryGrade
FROM emp
ORDER BY salary DESC;
語法二
SELECT ename,salary,
CASE
    WHEN salary >= 3000 then 'A'
    WHEN salary between 1000 and 2999 then 'B'
    ELSE 'C'       #不是A,B那就是C
END SalaryGrade
FROM emp
ORDER BY salary DESC;


------------------------------
KING 5000.00 A
SCOTT 3000.00 A
FORD 3000.00 A
JONES 2975.00 B
BLAKE 2850.00 B
CLARK 2450.00 B
ALLEN 1600.00 B
TURNER 1500.00 B
MILLER 1300.00 B
WARD 1250.00 B
MARTIN 1250.00 B
ADAMS 1100.00 B
JAMES 950.00 C
SMITH 800.00 C
---------------------------
當然也可以根據等級不同 計算獎金倍率

SELECT ename,salary,Salary*
CASE
    WHEN salary >= 3000 then '2.5'
    WHEN salary between 1000 and 2999 then '1.5'
    ELSE '1.2'
END bouns
FROM emp
ORDER BY salary DESC;

---------------------------
KING 5000.00 12500
SCOTT 3000.00 7500
FORD 3000.00 7500
JONES 2975.00 4462.5
BLAKE 2850.00 4275
CLARK 2450.00 3675
ALLEN 1600.00 2400
TURNER 1500.00 2250
MILLER 1300.00 1950
WARD 1250.00 1875
MARTIN 1250.00 1875
ADAMS 1100.00 1650
JAMES 950.00 1140
SMITH 800.00 960

---------------------------


---------------------------其他函式---------------------------

IFNULL(參數,運算式)   

如果參數式NULL ,就回傳運算式得值;否則回傳參數的值

ISNULL(參數)

如果參數式NULL就回傳True   否則回傳False



---------使用情況,當資料欄位有NULL時會計算不出結果
---------------------------------------------
# ename, job, manager, hiredate, salary, comm, deptno
SMITHCLERK79021980-12-17800.0020
ALLENSALESMAN76981981-02-201600.00300.0030
WARDSALESMAN76981981-02-221250.00500.0030
JONESMANAGER78391981-04-022975.0020
MARTINSALESMAN76981981-09-281250.001400.0030
BLAKEMANAGER78391981-05-012850.00
CLARKMANAGER78391981-06-092450.0010

------------------------------------
SELECT ename, salary, salary+comm FullSalary
FROM emp;
------------------------
# ename, salary, FullSalary
'SMITH', '800.00', NULL
'ALLEN', '1600.00', '1900.00'
'WARD', '1250.00', '1750.00'
'JONES', '2975.00', NULL
'MARTIN', '1250.00', '2650.00'
'BLAKE', '2850.00', NULL
'CLARK', '2450.00', NULL
'SCOTT', '3000.00', NULL
'KING', '5000.00', NULL
'TURNER', '1500.00', '1500.00'
'ADAMS', '1100.00', NULL
'JAMES', '950.00', NULL
'FORD', '3000.00', NULL
'MILLER', '1300.00', NULL

--------------------------

避免NULL導致錯誤的結果就需要使用 IFNULL

當comm是空值的時候就回傳0,反之繼續使用comm

SELECT ename, salary, salary+IFNULL(comm,0) FullSalary
FROM emp;
--------------------------
# ename, salary, FullSalary
'SMITH', '800.00', '800.00'
'ALLEN', '1600.00', '1900.00'
'WARD', '1250.00', '1750.00'
'JONES', '2975.00', '2975.00'
'MARTIN', '1250.00', '2650.00'
'BLAKE', '2850.00', '2850.00'
'CLARK', '2450.00', '2450.00'
'SCOTT', '3000.00', '3000.00'
'KING', '5000.00', '5000.00'
'TURNER', '1500.00', '1500.00'
'ADAMS', '1100.00', '1100.00'
'JAMES', '950.00', '950.00'
'FORD', '3000.00', '3000.00'
'MILLER', '1300.00', '1300.00'
----------------------


---------------------群組函式----------------


Sum () 
函数里面的参数是列名的时候,是计算列名的值的相加,而不是有值项的总数。
SUM (条件表达式),
如果记录满足条件表达式就加 1,统计满足条件的行数
count () 
函数里面的参数是列名的的时候,那么会计算有值项的次数。 (NULL 不计入, 但是’’值计入)
COUNT (*) 
可以计算出行数,包括 null
COUNT(1)
也可以计算出行数,1 在这里代表一行
count (column) 
对特定的列的值具有的行数进行计算,不包含 NULL 值
COUNT (条件表达式),
不管记录是否满足条件表达式,只要非 NULL 就加 1

————————————————
原文作者:zhaozhangxiao
转自链接:https://learnku.com/articles/69757
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。


MAX(運算式)              最大值
MIN(運算式)                最小值
SUM(運算式)               總和
AVG(運算式)               平均



COUNT([DISTIONCT]*|運算式)  
使用DISTINCT時,不重複計算                                                        
使用[*]時,計算表格紀的錄數量                                              
使用運算式時,計算的數量不含NULL
#找出總人口、平均數、最大人數、最小人數 、有多少洲

SELECT 
SUM(Population), 
AVG(Population),
MAX(Population),
MIN(Population),
COUNT(*) Amount
FROM world.country;

----------------------
# SUM(Population), AVG(Population), MAX(Population), MIN(Population), Amount
'6078749450', '25434098.1172', '1277558000', '0', '239'
----------------------

#找出最早和最晚進公司的日期
SELECT MIN(hiredate) FirstHireDate,
MAX(hiredate) LastHireDate
FROM emp;
----------------------
# FirstHireDate, LastHireDate
'1980-12-17', '1987-05-23'
----------------------


#利用COUNT()查詢一些特別資訊
#觀察COUNT(*) 不會忽略NULL 而運算式會忽略NULL狀況

SELECT
COUNT(*) '紀錄數量',
COUNT(comm) '有領comm的員工數量',
COUNT(deptno) '也分派部門的員工人數'
FROM emp;

----------------------
# 紀錄數量, 有領comm的員工數量, 也分派部門的員工人數
'14', '4', '12'
----------------------

--------------------------GROUP_CONCAT 函式----------------------

這函式是較特別的群組函式,預設分隔符號是逗號,將字串資料串接起來

----------dept表
# deptno, dname, location
'10', 'ACCOUNTING', 'NEW YORK'
'20', 'RESEARCH', 'DALLAS'
'30', 'SALES', 'CHICAGO'
'40', 'OPERATIONS', 'BOSTON'
'50', 'IT', 'NEW YORK'

------------------

SELECT group_concat(dname) FROM dept;
#使用GROUP_CONCAT()只會回傳一筆紀錄,這筆紀錄會是用逗號把字串資料串接起來的內容
------------------
# group_concat(dname)
'ACCOUNTING,RESEARCH,SALES,OPERATIONS,IT'
------------------

----------------一樣可以使用DISTINCT排除重複資料
GROUP_CONCAT([DISTINCT] 運算式1 [排序設定] [SEPARATOR 運算式2])

GROUP_CONCAT([DISTINCT] 運算式1)    運算式1是要連接的資料
SEPARATOR 運算式2 是設定連接資料之間的分隔字串,預設是逗號

[排序設定] 與查詢的排序設定一樣使用ORDER BY



SELECT group_concat(DISTINCT dname ORDER BY dname SEPARATOR '|') FROM dept;
------------------
# group_concat(dname ORDER BY dname SEPARATOR '|')
'ACCOUNTING|IT|OPERATIONS|RESEARCH|SALES'
------------------




-------------------------
這些群組函式都是將FROM 子句指定的表格當成是一整個群組
群組函式處理的資料是表格中所有的紀錄



#以各洲為分組,計算各洲的人口
SELECT Continent, SUM(Population) 
FROM world.country
GROUP BY Continent;
--------------
# Continent, SUM(Population)

'North America', '482993000'
'Asia', '3705025700'
'Africa', '784475000'
'Europe', '730074600'
'South America', '345780000'
'Oceania', '30401150'
'Antarctica', '0'
--------------
上面使用GROUP BY 子句指定分組設定

-------------------------------GROUP BY-------------------------------

SELECT...
FROM....
WHERE....

GROUP BY {欄位|運算式|位置編號} [ASC|DESC] [WITH ROLLUP] [...]
HAVING 分組條件

ORDER BY ...
LIMIT ...

註:WITH ROLLUP 會顯示分組外的欄位以NULL顯示,
包含群組函式的條件必須放在HAVING子句中
---------------------------------------------------------
SELECT Region,SUM(Population)
FROM world.country
WHERE Continent = 'Asia'
GROUP BY Region 
HAVING SUM(Population)>1000000000;
---------------------------------------------------------

#計算各洲的國家數量
SELECT Continent,COUNT(*)
FROM world.country
GROUP BY Continent;
-----------------
# Continent, COUNT(*)

'North America', '37'
'Asia', '51'
'Africa', '58'
'Europe', '46'
'South America', '14'
'Oceania', '28'
'Antarctica', '5'
-----------------

#計算各地區的國家數量

SELECT Region,COUNT(*)
FROM world.country
GROUP BY Region;
-----------------
# Region, COUNT(*)

'Caribbean', '24'
'Southern and Central Asia', '14'
'Central Africa', '9'
'Southern Europe', '15'
'Middle East', '18'
'South America', '14'
.....

-----------------
#每一種政府形式的國家數量

SELECT GovernmentForm,COUNT(*)
FROM world.country
GROUP BY GovernmentForm;
-----------------
# GovernmentForm, COUNT(*)

'Nonmetropolitan Territory of The Netherlands', '2'
'Islamic Emirate', '1'
'Republic', '122'
'Dependent Territory of the UK', '12'
'Parliamentary Coprincipality', '1'
'Emirate Federation', '1'
'Federal Republic', '15'
'US Territory', '3'
'Co-administrated', '1'
....

-----------------

#也可以指定多個群組取得更詳細資料
#先按照洲分組再以地區分組

SELECT Continent,Region,COUNT(*),SUM(Population)
FROM world.country
GROUP BY Continent, Region;

-----------------
# Continent, Region, COUNT(*), SUM(Population)

'North America', 'Caribbean', '24', '38140000'
'Asia', 'Southern and Central Asia', '14', '1490776000'
'Africa', 'Central Africa', '9', '95652000'
'Europe', 'Southern Europe', '15', '144674200'
'Asia', 'Middle East', '18', '188380700'
'South America', 'South America', '14', '345780000'
'Oceania', 'Polynesia', '10', '633050'
-----------------
指定多群組設定時,可以考慮使用 WITH ROLLUP

SELECT Continent,Region,COUNT(*)
FROM world.country
GROUP BY Continent ,Region WITH ROLLUP;
-----------------
# Continent, Region, COUNT(*)

'Asia', 'Eastern Asia', '8'
'Asia', 'Middle East', '18'
'Asia', 'Southeast Asia', '11'
'Asia', 'Southern and Central Asia', '14'
'Asia', NULL, '51'
'Europe', 'Baltic Countries', '3'
'Europe', 'British Islands', '2'
'Europe', 'Eastern Europe', '10'
'Europe', 'Nordic Countries', '7'
'Europe', 'Southern Europe', '15'
'Europe', 'Western Europe', '9'
'Europe', NULL, '46'
'North America', 'Caribbean', '24'
...
-----------------





















































































































































標籤:

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁