天天看點

二戰MySQL資料庫【升華篇】

MYSQL入門系列——第二篇

  • ​​每篇前言:​​
  • ​​1.篩選條件:​​
  • ​​(1)比較運算符:​​
  • ​​(2)邏輯運算符:​​
  • ​​(3)其他操作:​​
  • ​​1.排序:​​
  • ​​2.限制:​​
  • ​​拓展:​​
  • ​​3.去重:​​
  • ​​4.模糊查詢: (like '%')​​
  • ​​5.範圍查詢:​​
  • ​​2.聚合與分組(重點哦!):​​
  • ​​(1)常用聚合函數:​​
  • ​​(2)分組查詢:​​
  • ​​(3)聚合篩選:(having)​​
  • ​​3.子查詢:​​
  • ​​4.連接配接查詢:​​
  • ​​(1)内連接配接(inner join)​​
  • ​​(2)外連接配接( left / right join )​​
  • ​​拓展:​​

每篇前言:

🏆🏆作者介紹:【孤寒者】

1.篩選條件:

(1)比較運算符:

運算符 含義
= 等于(注意:不是==)
>= 大于等于
!=或<> 不等于
< 小于
> 大于
<= 小于等于
IS NULL 為空
IS NOT NULL 不為空

知識點補給站:

關于IS NULL和IS NOT NULL如何使用?

​select * from tb_name where 字段名 IS NULL;​

​ 查詢tb_name表中指定字段名為空的所有資料。

(2)邏輯運算符:

運算符 含義
AND
OR
NOT

【運算順序:not >and>or】

(3)其他操作:

1.排序:

select  name1 from tb2_name order by tb3_name [asc/desc];      
  • 第一個name是指定查詢的資料,即顯示出來的資料;
  • 第二個tb2_name是表的名字;
  • 第三個tb3_name是表中排序的那一列的字段; (一般都是數字排序,如果是字母,按首字母順序排序)
  • asc是正序(預設,不輸入也是正序);desc(descend降序排列)是倒序。

2.限制:

select name1 from tb_name limit start,count;      
  • 第一個name1是指定查詢的資料,即顯示出來的資料;
  • 第二個tb_name表的名字;
  • 第三個start是限制的表中開始的行數,count是要顯示出來的行的個數。(表中行數以0開始。如果start沒有資料,預設從第零行開始)
拓展:

帶條件的限制(where):

select name1 from tb_name where 條件語句 limit start,count;      
  • 會從name1中篩選出符合where的且滿足限制條件start,count的資料。

3.去重:

select distinct name1 from tb_name;      
  • 第一個name1是指定查詢的資料,即顯示出來的資料。這是指定去重的資料。
  • 第二個tb_name是表名。

注意:

 如果name1是*,則把整張表裡行中一模一樣的去重;如果name1是字段名,則把對應的字段值裡一樣的去重.

4.模糊查詢: (like ‘%’)

  1. 任意多個字元: %

    模糊查詢和範圍查詢都是和where一起用。

  2. 任意一個字元:_

例子:

select name1 from tb_name where name like 'h%';      
  • 查詢表中滿足name為h開頭的對應name1字段下的字段值。
  • 如果’h%'換為’h_'則隻能查詢以h開頭且h後面隻有一個字元的name。
  • 如果’h%‘換為’%h%'則隻能查詢name中間有h的任意name

5.範圍查詢:

  1. 連續範圍:between a and b

    a <= value <= b(包括a和b)

例子:

select name1 from tb_name where id between a and b;      
  • 查詢表中id在a和b之間的(包括a和b)name1字段下的字段值。
  1. 間隔範圍:in()

    括号裡可以寫任意值,包括表裡沒有的也不會報錯,隻查詢括号裡指定的值

例子:

select name1 from tb_name  where id in (1,7);      
  • 隻查詢表中的id為1和7的對應name1字段下的字段值,裡面可以寫表裡沒有的也不會報錯 。

2.聚合與分組(重點哦!):

資料表準備(為了講解更容易了解,會配套上實操示範效果):

二戰MySQL資料庫【升華篇】
二戰MySQL資料庫【升華篇】

(1)常用聚合函數:

聚合函數 作用
count(column) 統計個數
sum(column) 求和
max(column) 最大值
avg(column) 平均值
min(column) 最小值
group_concat(column) 列出字段全部值

用法:

select 聚合函數(字段) from 表;      

(其實你也可能感覺到了,這些聚合函數單獨使用沒啥子實際作用,其實聚合函數一般都是和分組結合使用才能發揮其作用哦~)

重點:

select group_concat(字段) from 表;      
  • 列出指定字段的全部值 (在分組後可以列出每組指定字段的所有值。
二戰MySQL資料庫【升華篇】

(2)分組查詢:

​select 字段 from 表 group by 字段;​

​ (注意:這裡的兩個字段必須一緻,否則會報錯)

二戰MySQL資料庫【升華篇】

​select 字段,count(*) from 表 group by 字段;​

​ 配合聚合函數使用,例如—顯示count,即個數。

注意:在分組的情況下,隻能夠出現分組字段(即分組的那個字段)和聚合字段,其他的字段沒有意義,會報錯!
二戰MySQL資料庫【升華篇】

小注意:

 如果要加入where篩選,where語句要放在分組查詢grou by的前面哦~

二戰MySQL資料庫【升華篇】

(3)聚合篩選:(having)

  1. ​select 字段1 from 表名 group by 字段1,字段2 having 字段2>=80;​

(加having條件表達式,可以對輸出的結果做出限制。是不是想到了where,别急,我也想到了~)

二戰MySQL資料庫【升華篇】

假如說一個查詢語句中同時包含了别名(as),聚合函數, where, having那麼他們的執行順序是:

  • 先是執行:where 這次是在整個表的前提下篩選
  • 然後執行:聚合函數和别名
  • 最後執行:having,這次是在字段裡篩選

    (where比having執行要快!是以多用where)

注意:一般where寫的條件篩選,都可以用having篩選表示。

小tips:最後加having class = ‘first’ 跟在前面用where都可以 ,代碼執行結果一緻。

但是要注意where是在整表中進行篩選;而having是在聚合及分組操作之後産生的一張虛表中進行篩選。(即Where是在聚合分組之前對資料進行篩選

having是在聚合之後再進行篩選)二者使用哪個看場景~

3.子查詢:

将一個查詢的結果留下來用于下一次查詢 ( select 中嵌套 select )

要求:

  1. 嵌套在查詢内部
  2. 必須始終出現在圓括号内

例子:

  • 求出學生的平均年齡
select avg(age) from students;      
  1. 查找出大于平均年齡的資料
select * from student where age > 19.7273;      
  1. 将求出的平均年齡的SQL語句用于查找大于平均年齡的語句中
select * from students where age > (select avg(age) from students);      

4.連接配接查詢:

再建立一個表,結合上面建立的那張表示範效果:

二戰MySQL資料庫【升華篇】

(1)内連接配接(inner join)

  • 無條件内連接配接:

    無條件内連接配接,又名交叉連接配接/笛卡爾連接配接,第一張表中的每一項會和另一張表的每一項依次組合

​select * from 表1 [inner] join 表2;​

​ inner可寫可不寫,沒影響。

 比如第一張表有6條資料,第二張表有2條資料,那麼内連接配接查詢則有12條資料,第一張表的每一條資料分别和第二張表的兩張資料組合。

二戰MySQL資料庫【升華篇】
  • 有條件内連接配接:

    在無條件内連結的基礎上,加上一個on子句,當連接配接的時候,篩選出那些有實際意義的記錄來進行組合

    ​​

    ​select * from 表1 inner join 表2 on 條件​

    ​ (比如:表1.id = 表2.id);
二戰MySQL資料庫【升華篇】

(2)外連接配接( left / right join )

  • 左外連接配接: (以左表為基準)

    兩張表做連接配接的時候,在連接配接條件不比對的時候留下左表中的資料,而右表中的資料以NULL填充

    ​​

    ​select * from 表1 left join 表2 on 條件;​

    ​ 條件裡面可以寫 表1.字段=表2.字段。
二戰MySQL資料庫【升華篇】
  • 右外連接配接: (以右表為基準)

    對兩張表做連接配接的時候,在連接配接條件不比對的時候留下右表中的資料,而左表中的資料以NULL填充

select * from  表1 right join 表2 on 條件;      
二戰MySQL資料庫【升華篇】

拓展:

select * from 表1 left join 表2 on 條件1 left join 表3 on 條件2;      

繼續閱讀