一:select
1.select
使用SELECT語句從表或視圖獲取數據.

2.解釋
SELECT之后是逗號分隔列或星號(*)的列表,表示要返回所有列。FROM指定要查詢數據的表或視圖。JOIN根據某些連接條件從其他表中獲取數據。WHERE過濾結果集中的行。GROUP BY將一組行組合成小分組,並對每個小分組應用聚合函數。HAVING過濾器基於GROUP BY子句定義的小分組。ORDER BY指定用於排序的列的列表。LIMIT限制返回行的數量。
3.select * 的問題
- 使用星號(
*)可能會返回不使用的列的數據。 它在MySQL數據庫服務器和應用程序之間產生不必要的I/O磁盤和網絡流量。 - 如果明確指定列,則結果集更可預測並且更易於管理。 想象一下,當您使用星號(
*)並且有人通過添加更多列來更改表格數據時,將會得到一個與預期不同的結果集。 - 使用星號(
*)可能會將敏感信息暴露給未經授權的用戶
二:DISTINCT
1.DISTINCT子句
從表中查詢數據時,可能會收到重復的行記錄。為了刪除這些重復行,可以在SELECT語句中使用DISTINCT子句。
SELECT DISTINCT columns FROM table_name WHERE where_conditions;
舉例/:
SELECT lastname FROM employees ORDER BY lastname;

select distinct lastname from employees order by lastname;

2.distinct子句對NULL的處理
會將NULL作為相同的數據,留下一個NULL。
select distinct state from customers;
3.distinct在多列上的使用
可以使用具有多個列的DISTINCT子句。 在這種情況下,MySQL使用所有列的組合來確定結果集中行的唯一性。
select distinct state,city from customers where state is not null order by state,city;

4.distinct與group by比較
如果在SELECT語句中使用GROUP BY子句,而不使用聚合函數,則GROUP BY子句的行為與DISTINCT子句類似。
這個其實適合一列的。
一般而言,DISTINCT子句是GROUP BY子句的特殊情況。 DISTINCT子句和GROUP BY子句之間的區別是GROUP BY子句可對結果集進行排序,而DISTINCT子句不進行排序。
如果將ORDER BY子句添加到使用DISTINCT子句的語句中,則結果集將被排序,並且與使用GROUP BY子句的語句返回的結果集相同。

5.distinct與聚合函數
可以使用具有聚合函數(例如SUM,AVG和COUNT)的DISTINCT子句中,在MySQL將聚合函數應用於結果集之前刪除重復的行。
select count(distinct state) from customers where country='USa';

6.distinct與limit一起使用
如果要將DISTINCT子句與LIMIT子句一起使用,MySQL會在查找LIMIT子句中指定的唯一行數時立即停止搜索。

