前言
面試過程中 SQL 語句不知道怎麼寫,一看到SQL語句就頭疼?都說 MySQL 只有增刪改查,怎麼四個字就這麼難?增刪改還比較容易掌握,這個掌握怎麼用這麼多形式呢,我該如何入手呢?大公司一聊到資料庫就是索引優化、分庫分表,都是什麼鬼?單機資料庫已經優化到極致,怎麼還能做到橫向擴展(主從、讀寫、高可用等等)呢?這些都學會了,那面試怎麼過?

準備兩個表:
mysql -uroot -p
show databases;
#表1
create database plane;
use plane;
create table destination (
region char(20),
place_name char(20));
insert into destination values('southwest','chengdu');
insert into destination values('north China','beijing');
insert into destination values('southwest','kunming');
insert into destination values('north China','tianjin');
select * from destination;
#表2
create table info (
place_name char(20),
sales int(10),
date char(10));
insert into info values('chengdu','350','2021-02-10');
insert into info values('beijing','294','2021-02-10');
insert into info values('kunming','330','2021-02-10');
insert into info values('beijing','392','2021-02-16');
select * from info;
一、MySQL高級語句
1、SELECT——顯示錶格中一個或數個欄位的所有資料
語法:SELECT "欄位" FROM "表名";
例:
select place_name,sales from info;
2、WHERE——有條件查詢
語法:SELECT "欄位" FROM "表名" WHERE "條件";
例:
select place_name from info where sales > 300;
MySQL學習筆記+面試真題+思維導圖:關注+轉發 私信【MySQL】獲取!
3、AND|OR——且|或
語法:SELECT "欄位" FROM "表名" WHERE "條件1" {[AND|OR] "條件2"}+ ;
例:
select place_name from info where sales > 350 or sales < 300;
select place_name from info where sales > 300 and sales < 350;
4、BETWEEN——顯示兩個值範圍內的資料
語法:SELECT "欄位" FROM "表名" WHERE "欄位" BETWEEN '值1' AND '值2';
例:
select * from info where sales between '300' and '350';
5、通配符
% :百分號表示零個、一個或多個字元
_ :下劃線表示單個字元
例:
'A_Z':所有以 'A' 起頭,另一個任何值的字元,且以 'Z' 為結尾的字元串。例如,'ABZ' 和 'A2Z' 都符合這一個模式,而 'AKKZ' 並不符合 (因為在 A 和 Z 之間有兩個字元,而不是一個字元)。
'ABC%': 所有以 'ABC' 起頭的字元串。例如,'ABCD' 和 'ABCABC' 都符合這個模式。
'%XYZ': 所有以 'XYZ' 結尾的字元串。例如,'WXYZ' 和 'ZZXYZ' 都符合這個模式。
'%AN%': 所有含有 'AN'這個模式的字元串。例如,'ANGELES' 和 'FRANCISCO' 都符合這個模式。
'_AN%':所有第二個字母為 'A' 和第三個字母為 'N' 的字元串。例如,'SAN FRANCISCO' 符合這個模式,而 'LOS ANGELES' 則不符合這個模式。6、ORDER BY——按關鍵字排序
語法:SELECT "欄位" FROM "表名" [WHERE "條件"] ORDER BY "欄位" [ASC, DESC];
#ASC 是按照升序進行排序的,是默認的排序方式。
#DESC 是按降序方式進行排序。
例:
select place_name,sales,date from info order by sales;
select place_name,sales,date from info order by sales asc;
select place_name,sales,date from info order by sales desc;
7、數學函數
abs(x) 返回 x 的絕對值
rand() 返回 0 到 1 的隨機數
mod(x,y) 返回 x 除以 y 以後的餘數
power(x,y) 返回 x 的 y 次方
round(x) 返回離 x 最近的整數
round(x,y) 保留 x 的 y 位小數四捨五入後的值
sqrt(x) 返回 x 的平方根
truncate(x,y) 返回數字 x 截斷為 y 位小數的值
ceil(x) 返回大於或等於 x 的最小整數
floor(x) 返回小於或等於 x 的最大整數
greatest(x1,x2…) 返回集合中最大的值
least(x1,x2…) 返回集合中最小的值
例:SELECT abs(-1), rand(), mod(5,3), power(2,3), round(1.89);8、聚合函數
avg() 返回指定列的平均值
count() 返回指定列中非 NULL 值的個數
min() 返回指定列的最小值
max() 返回指定列的最大值
sum(x) 返回指定列的所有值之和
#count(*)包括了所有的列的行數,在統計結果的時候,不會忽略值為NULL
#count(列名)只包括列名那一列的行數,在統計結果的時候,會忽略列值為NULL的行
例:
select avg(sales) from info;9、GROUP BY——對GROUP BY後面的欄位的查詢結果進行匯總分組
通常是結合聚合函數一起使用的。
GROUP BY 有一個原則,就是 SELECT 後面的所有列中,沒有使用聚合函數的列,必須出現在GROUP BY後面。
語法:SELECT "欄位1", SUM("欄位2") FROM "表名" GROUP BY "欄位1";
例:
select place_name,sum(sales) from info group by place_name order by sum(sales);
二、連接查詢

1、inner join(等值相連)
只返回兩個表中聯結欄位相等的行
SELECT * FROM 表1 表1的別名 INNER JOIN 表2 表2的別名 on 表1別名.欄位 = 表2別名.欄位; #這裡的欄位名稱相同
例:
select * from destination a inner join info b on a.place_name = b.place_name;
2、left join(左聯接)
返回包括左表中的所有記錄和右表中聯結欄位相等的記錄
SELECT * FROM 表1 表1的別名 LEFT JOIN 表2 表2的別名 on 表1別名.欄位 = 表2別名.欄位; #這裡的欄位名稱相同
例:
select * from destination a left join info b on a.place_name = b.place_name;
3、right join(右聯接)
返回包括右表中的所有記錄和左表中聯結欄位相等的記錄
SELECT * FROM 表1 表1的別名 RIGHT JOIN 表2 表2的別名 on 表1別名.欄位 = 表2別名.欄位; #這裡的欄位名稱相同
例:
select * from destination a right join info b on a.place_name = b.place_name;
三、CREATE VIEW 視圖
(1)視圖跟表格的不同是,表格中有實際儲存資料,而視圖是建立在表格之上的一個架構,它本身並不實際儲存資料。
(2)臨時表在用戶退出或同資料庫的連接斷開後就自動消失了,而視圖不會消失。
(3)視圖不含有數據,只存儲它的定義,它的用途一般可以簡化複雜的查詢。比如你要對幾個表進行連接查詢,而且還要進行統計排序等操作,寫SQL語句會很麻煩的,用視圖將幾個表聯結起來,然後對這個視圖進行查詢操作,就和對一個表查詢一樣,很方便。
語法:CREATE VIEW "視圖表名" AS "SELECT 語句";
例:
create view new_info as select a.region region,a.place_name place_name,b.sales sales from destination a inner join info b on a.place_name = b.place_name;
select * from new_info;
drop view new_info;
總結
MySQL學習筆記+面試真題+思維導圖:關注+轉發 私信【MySQL】獲取!


原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/275002.html
微信掃一掃
支付寶掃一掃