mysql5.7讀書筆記7(查詢SELECT)

七、數據查詢(SELECT)

7.1:SELECT語句基本格式:

SELECT {*|字段列表} [FROM <表1>,<表2>... [where <表達式> [GROUP BY <group by 字段> ] [HAVING <expression> [{<operator> <expression>}...]] [ORDER BY <order by 字段>] [LIMIT {<offest>,} <row count>]]正則表達式

  • {*|字段列表}:*表明全部字段|字段1,字段2,字段3...
  • FROM <表1>,<表2>...:查詢的數據來自那張表
  • WHERE子句:查詢條件
  • GROUP BY <字段>:結果按某字段分組
  • HAVING子句 :分組後結果查詢條件,跟在group by 後使用
  • [ORDER BY <字段>]:結果按某字段排序

7.2:單表查詢

  1. 查詢全部字段
SELECT * FROM 表名
  1. 查詢指定字段(提示:若非取全部字段,建議按需獲取字段信息,提高查詢效率)
SELECT 字段一、字段2... FROM 表名
  1. 查詢指定記錄,單條件(查詢條件 例:id=3)
SELECT 字段一、字段2... FROM 表名 WHERE 查詢條件
  1. 查詢空值
SELECT 字段一、字段2... FROM 表名 WHERE 字段1 is null
SELECT 字段一、字段2... FROM 表名 WHERE 字段1 is not null
  1. 多條件的查詢(查詢條件 例:id=3 and name='abc' and ...)
SELECT 字段一、字段2... FROM 表名 WHERE 查詢條件
  1. 對查詢結果進行排序(默認asc升序 desc 降序)
SELECT 字段一、字段2... FROM 表名 WHERE 查詢條件 ORDER BY 字段1 ASC|DESC
  1. 查詢記錄去重
SELECT DISTINCT 字段1 FROM 表名
  1. 查詢結果分組
SELECT 字段1,字段2... FROM 表名 GROUP BY 字段1 HAVING <條件表達式>
  1. 限制顯示條數(LIMIT 0,5)
SELECT 字段1,字段2... FROM 表名 LIMIT 0(位置偏移量即第幾行開始),5(行數)

7.3: 聚合函數

函數 參數 做用
AVG() 列名 返回某列的平均值
COUNT() 列名 返回某列的行數
MAX() 列名 返回某列的最大值
MIN() 列名 返回某列的最小值
SUM() 列名 返回某列的和

7.4:鏈接查詢|關聯查詢(內連|外連)

1.內鏈接(INNER JOIN)
2.外鏈接(LEFT JOIN | RIGHT JOIN)sql

鏈接類型 鏈接方式 返回結果
內鏈接 INNER JOIN 返回知足全部條件的記錄即兩表的交集
外鏈接 LEFT JOIN 返回包括左表中的全部記錄和右表中鏈接字段相等的記錄,即兩表的交集+剩下的左表的數據
外鏈接 RIGHT JOIN 返回包括右表中的全部記錄和左表中鏈接字段相等的記錄,即兩表的交集+剩下的右表的數據

7.5:子查詢

將一個查詢(子查詢)的結果當作另外一個查詢(主查詢)的條件去搜索返回結果
子查詢經常使用操做符express

名稱 用法 描述
ANY() >(比較運算符) ANY(子查詢) 知足子查詢的任一條件,返回一結果當作主查詢的條件
SOME() >(比較運算符) SOME(子查詢) 知足子查詢的任一條件,返回一結果當作主查詢的條件
ALL() >(比較運算符) ALL(子查詢) 知足子查詢的全部條件,返回結果當作主查詢的條件
IN() IN(子查詢) 結果等同於 = ANY(子查詢)
EXISTS() EXISTS(子查詢) 子查詢返回行,則爲true,反之false,即要麼執行主查詢,要麼不執行主查詢
比較運算符 >(比較運行符) 子查詢(返回結果爲標量) where 子句的查詢條件爲比較子查詢返回的值

7.6:合併查詢結果

用 union 關鍵字 將兩個或多個select查詢結果合併成一個
兩個或多個select查詢結果的列數、數據類型必須同樣
union 去重; union all 不去重.效率高點。函數

  • 例:SELECT abc,def FROM table1 union SELECT abc,def FROM table2

7.7:查詢條件使用模糊匹配

一、使用REGEXP關鍵字指定正則表達式的字符匹配模式code

選項 說明 例子 匹配值示例
^ 匹配文本的開始字符 '^b'匹配以字母b開頭的字符串 book、big、banana、bike
$ 匹配文本的結束字符 'st$'匹配以st結尾的字符串 test、resist、persist
. 匹配任何單個字符 'b.t'匹配任何b和t之間有一個字符 bit、bat、but、bite
* 匹配零個或多個在它前面的字符 'f*n'匹配字符n前面有任意個字符f fn、fan、faan、abcn
+ 匹配前面的字符1次或屢次 'ba+'匹配以b開頭,後面至少緊跟一個a ba、bay、bare、battle
<字符串> 匹配包含指定字符的文本 'fa' fan、afa、faad
[字符集合] 匹配字符集合中的任何一個字符 '[xz]'匹配x或者z dizzy、zebra、x-ray、 extra
[^] 匹配不在括號中的任何字符 '[^abc]'匹配任何不包含a、b或c的字符串 desk、fox、f8ke
字符串{n,} 匹配前面的字符串至少n次 b{2}匹配至少2個的b bbb、bbbb、bbbbbbb
字符串{n,m} 匹配前面的字符串至少n次,至多m次 b{2,4}匹配最少2個,最多4個b bbb、bbbb

二、使用LIKE關鍵字匹配字符
where 字段1 like %abc% 同 where 字段1 regexp 'abc' 查找帶abc的字符
where 字段1 like abc% 同 where 字段1 regexp '^abc' 查找abc開頭的字符
where 字段1 like %abc 同 where 字段1 regexp 'abc$' 查找abc結束的字符regexp

查詢sql書寫我的建議:排序

  • 一、創建合適的索引
  • 二、儘可能避免全表掃描
相關文章
相關標籤/搜索