前言
總結一下mysql常用的sql語法 以及 命令行工具的簡單使用。
開始
常用命令行示例
登錄
mysql -uroot -p 回車
輸入密碼 回車
登錄後的終端操作:
show databases; 顯示所有 數據庫
use [database]; 使用某個數據庫;後續sql爲針對該數據庫的查詢;
show tables; 顯示所有表名
select * from [tablename] limit 10;
… 可直接使用sql語句進行查詢數據
備份還原:
備份:mysqldump [-h主機名 -P端口] -u用戶名 -p密碼 dbName > 絕對路徑.sql
還原:mysql -u用戶名 -p密碼 dbName_copy < 絕對路徑.sql --default-character-set=utf8
查用sql示例
假設有如下數據庫表:
會員表 member( id, phone, );
訂單表 order( id, member_id, total_amount, status );
訂單明細表 order_item( id, order_id, product_name );
它們之前的關係大概是: 一個會員會產生多個訂單,通過訂單表的 member_id 與 member 表連接;一個訂單有多個明細,通過明細表的 order_id 與 order 表 連接。
下面是常用的查詢sql語句示例:
-- 查詢全部會員
select * from member ;
-- 查詢id爲1000的會員
select * from member where id = 1000 ;
-- 查詢id大於1000的會員
select * from member where id > 1000 ;
-- 查詢 id 在 1000(不包含) 到 2000(包含)之前的會員,且不包含id等於1500的會員
select * from member
where id > 1000
and id <= 2000
and id <> 1500;
-- 在上面條件下,並且電話號碼以182開頭的會員
select * from member
where id > 1000
and id <= 2000
and id <> 1500;
and phone like '182%'
-- 在上面條件下,並且電話號碼包含999的會員
select * from member
where id > 1000
and id <= 2000
and id <> 1500;
and phone like '%999%';
-- 在上面的條件下,查詢會員,查詢結果按照 id 倒序排序
select * from member
where id > 1000
and id <= 2000
and id <> 1500;
and phone like '%999%';
ORDER BY id desc;
-- 查詢所有訂單 (因爲 "order by" 是 關鍵字,所以若表名爲order,需要加 點號(鍵盤歎號左邊) 區分)
select * from `order`;
-- 查詢訂單,狀態值爲3 並且 總金額大於 30 的
select * from `order`
where `status` = 3
and total_amount > 30;
-- 在上面的查詢條件下,統計用戶訂單數
select member_id,count(*) from `order`
where `status` = 3
and total_amount > 30
GROUP BY member_id ;
-- 在 上面的條件下,對分組查詢結果進行篩選,只查詢訂單數大於5的行
select member_id,count(*) from `order`
where `status` = 3
and total_amount > 30
GROUP BY member_id
HAVING count(*) > 5;
-- 查詢狀態值爲3並且金額大於30的訂單,以及對應的會員的手機號 (子查詢作爲結果中的一個字段)
select
a.id,
a.member_id,
(select phone from member where id=a.member_id) as phone,
a.total_amount
from `order` a
where a.`status` = 3
and a.total_amount > 30
-- 按照會員id分組查詢總金額的合計值 ,查詢每個會員的所有訂單的總金額,並按照合計金額倒序排序
select member_id,SUM(total_amount) from `order`
where `status` = 3
GROUP BY member_id
ORDER BY SUM(total_amount) desc ;
-- order_item 表通過order_id 與 order 表 左連接 ,查詢對應的order.id, 對應會員的手機號,order的金額,以及order_item的商品名 ,結果按照訂單的金額正序排序
select
a.id,
(select phone from member where id=a.member_id) as phone,
a.total_amount,
b.product_name
from `order` a
left join order_item b on b.order_id = a.id
where a.`status`=3
ORDER BY a.total_amount asc ;
-- 在上面的條件下,追加查詢條件 :訂單對應會員的手機號包含 '999'
select
a.id,
(select phone from member where id=a.member_id) as phone,
a.total_amount,
b.product_name
from `order` a
left join order_item b on b.order_id = a.id
where a.`status`=3
and a.member_id in (
select id from member where phone like '%999%'
)
ORDER BY a.total_amount asc ;