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 ‘%’)
-
任意多個字元: %
模糊查詢和範圍查詢都是和where一起用。
- 任意一個字元:_
例子:
select name1 from tb_name where name like 'h%';
- 查詢表中滿足name為h開頭的對應name1字段下的字段值。
- 如果’h%'換為’h_'則隻能查詢以h開頭且h後面隻有一個字元的name。
- 如果’h%‘換為’%h%'則隻能查詢name中間有h的任意name
5.範圍查詢:
-
連續範圍: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字段下的字段值。
-
間隔範圍:in()
括号裡可以寫任意值,包括表裡沒有的也不會報錯,隻查詢括号裡指定的值
例子:
select name1 from tb_name where id in (1,7);
- 隻查詢表中的id為1和7的對應name1字段下的字段值,裡面可以寫表裡沒有的也不會報錯 。
2.聚合與分組(重點哦!):
資料表準備(為了講解更容易了解,會配套上實操示範效果):

(1)常用聚合函數:
聚合函數 | 作用 |
count(column) | 統計個數 |
sum(column) | 求和 |
max(column) | 最大值 |
avg(column) | 平均值 |
min(column) | 最小值 |
group_concat(column) | 列出字段全部值 |
用法:
select 聚合函數(字段) from 表;
(其實你也可能感覺到了,這些聚合函數單獨使用沒啥子實際作用,其實聚合函數一般都是和分組結合使用才能發揮其作用哦~)
重點:
select group_concat(字段) from 表;
- 列出指定字段的全部值 (在分組後可以列出每組指定字段的所有值。
(2)分組查詢:
select 字段 from 表 group by 字段;
(注意:這裡的兩個字段必須一緻,否則會報錯)
select 字段,count(*) from 表 group by 字段;
配合聚合函數使用,例如—顯示count,即個數。
注意:在分組的情況下,隻能夠出現分組字段(即分組的那個字段)和聚合字段,其他的字段沒有意義,會報錯! |
小注意:
如果要加入where篩選,where語句要放在分組查詢grou by的前面哦~
(3)聚合篩選:(having)
-
select 字段1 from 表名 group by 字段1,字段2 having 字段2>=80;
(加having條件表達式,可以對輸出的結果做出限制。是不是想到了where,别急,我也想到了~)
假如說一個查詢語句中同時包含了别名(as),聚合函數, where, having那麼他們的執行順序是:
- 先是執行:where 這次是在整個表的前提下篩選
- 然後執行:聚合函數和别名
-
最後執行:having,這次是在字段裡篩選
(where比having執行要快!是以多用where)
注意:一般where寫的條件篩選,都可以用having篩選表示。
小tips:最後加having class = ‘first’ 跟在前面用where都可以 ,代碼執行結果一緻。
但是要注意where是在整表中進行篩選;而having是在聚合及分組操作之後産生的一張虛表中進行篩選。(即Where是在聚合分組之前對資料進行篩選
having是在聚合之後再進行篩選)二者使用哪個看場景~
3.子查詢:
将一個查詢的結果留下來用于下一次查詢 ( select 中嵌套 select )
要求:
- 嵌套在查詢内部
- 必須始終出現在圓括号内
例子:
- 求出學生的平均年齡
select avg(age) from students;
- 查找出大于平均年齡的資料
select * from student where age > 19.7273;
- 将求出的平均年齡的SQL語句用于查找大于平均年齡的語句中
select * from students where age > (select avg(age) from students);
4.連接配接查詢:
再建立一個表,結合上面建立的那張表示範效果:
(1)内連接配接(inner join)
-
無條件内連接配接:
無條件内連接配接,又名交叉連接配接/笛卡爾連接配接,第一張表中的每一項會和另一張表的每一項依次組合
select * from 表1 [inner] join 表2;
inner可寫可不寫,沒影響。
比如第一張表有6條資料,第二張表有2條資料,那麼内連接配接查詢則有12條資料,第一張表的每一條資料分别和第二張表的兩張資料組合。
-
有條件内連接配接:
在無條件内連結的基礎上,加上一個on子句,當連接配接的時候,篩選出那些有實際意義的記錄來進行組合
(比如:表1.id = 表2.id);select * from 表1 inner join 表2 on 條件
(2)外連接配接( left / right join )
-
左外連接配接: (以左表為基準)
兩張表做連接配接的時候,在連接配接條件不比對的時候留下左表中的資料,而右表中的資料以NULL填充
條件裡面可以寫 表1.字段=表2.字段。select * from 表1 left join 表2 on 條件;
-
右外連接配接: (以右表為基準)
對兩張表做連接配接的時候,在連接配接條件不比對的時候留下右表中的資料,而左表中的資料以NULL填充
select * from 表1 right join 表2 on 條件;
拓展:
select * from 表1 left join 表2 on 條件1 left join 表3 on 條件2;