JavaEE學習日誌持續更新----> 必看!JavaEE學習路線(文章總彙)
SQL查詢語句
創建以下表,方便查詢練習
CREATE DATABASE day02;
USE day02;
#創建商品表:
CREATE TABLE product(
pid INT PRIMARY KEY,
pname VARCHAR(20),
price DOUBLE,
category_id VARCHAR(32)
);
INSERT INTO product(pid,pname,price,category_id) VALUES(1,'聯想',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海爾',3000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(4,'JACK JONES',800,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真維斯',200,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(7,'勁霸',2000,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(8,'香奈兒',800,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(10,'麪霸',5,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你棗',56,'c004');
INSERT INTO product(pid,pname,price,category_id) VALUES(12,'香飄飄奶茶',1,'c005');
INSERT INTO product(pid,pname,price,category_id) VALUES(13,'果9',1,NULL);
簡單查詢語句
格式一:查詢指定列
select 列名1,列名2...from 表名;
-- 查詢商品名稱和商品價格的所有信息
SELECT pname,price FROM product
格式二:查詢所有列
select * from 表名;
SELECT * FROM product
格式三:過濾重複的數據
select distinct 字段1,字段2,... from 表名;
注意:
- distinct關鍵字之後只有一個字段,那麼就會過濾掉這個字段中重複的數據
- distinct關鍵字之後如果有多個字段,多個字段必須同時滿足重複,纔會過濾
-- 查詢商品價格,過略掉重複的價格
SELECT DISTINCT price FROM product;
-- 查詢商品名稱和價格,過濾掉名稱和價格同時重複的數據
SELECT DISTINCT pname,price FROM product;
格式四:別名查詢
- 給表起別名:多表查詢時使用
select *|字段 from 表名 [as] 別名;
- 給表中的字段起別名
select 字段1 [as] 別名, ...字段n [as] 別名 from 表名;
注意:
- 別名只是對查詢的結果臨時起個名字,不會改變表中原有的名字
- 別名中如果有特殊符號或空格,必須使用引號包裹起來
-- 1.給表起別名
SELECT * FROM product AS p;
SELECT * FROM product p;
-- 2.給表中的字段起別名
SELECT pname AS 商品名,price AS 商品價格 FROM product
SELECT pname 商品名,price 商品價格 FROM product
格式五:查詢語句中,可以直接進行數據計算
SELECT (1+1); -- 2
SELECT (5/2); -- 2.5000
-- 查詢商品名和商品價格,把商品價格在查詢的時候增加10000
SELECT pname,price+10000 FROM product;
條件查詢語句
運算符:看圖
條件查詢語句的格式:
select 字段|* from 表名 [where 條件]
查詢商品名爲"花花公子"的商品所有信息
SELECT * FROM product WHERE pname='花花公子';
查詢價格不是800的商品
SELECT * FROM product WHERE price <> 800;
SELECT * FROM product WHERE price != 800;
SELECT * FROM product WHERE NOT(price = 800);
查詢價格大於60的商品
SELECT * FROM product WHERE price > 60;
查詢商品價格在200到1000之間的所有商品
SELECT * FROM product WHERE price>=200 && price<=1000;
使用between…and優化sql語句
注意:
- 小的值要寫在前邊
- 可以對時間區間進行查詢 ‘2018-01-01’到’2020-01-01’
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
查詢商品價格是200 或800的商品
SELECT * FROM product WHERE price=800 OR price=200;
-- 使用in優化代碼
SELECT * FROM product WHERE price IN(200,800);
模糊查詢:關鍵字like
%
:多個任意字符_
:1個任意字符
查詢商品名稱中以雷開頭的商品信息
SELECT * FROM product WHERE pname LIKE '雷%';
查詢商品名稱中以霸結尾的商品信息
SELECT * FROM product WHERE pname LIKE '%霸';
查詢商品名稱中包含’霸’的商品信息
SELECT * FROM product WHERE pname LIKE '%霸%';
查詢商品名稱中第二個字爲想的商品信息
SELECT * FROM product WHERE pname LIKE '_想%';
查詢商品名稱是5個字符的商品信息
SELECT * FROM product WHERE pname LIKE '_____';
查詢沒有分類的商品
SELECT * FROM product WHERE category_id IS NULL;
查詢有分類的商品
SELECT * FROM product WHERE category_id IS NOT NULL;
SELECT * FROM product WHERE NOT(category_id IS NULL);
排序查詢語句
排序查詢語句:對查詢的結果進行排序
使用關鍵字:order by [ASC]|[DESC]
格式:
select *|字段 from 表名 [where 條件] order by 被排序的字段 [ASC]|[DESC];
- ASC:升序,不寫默認
- DESC:降序
注意:無論sql語句多麼複雜,排序語句必須寫在sql語句的末尾
使用價格排序(升序)
SELECT * FROM product ORDER BY price;
SELECT * FROM product ORDER BY price ASC;
使用價格排序(降序)
SELECT * FROM product ORDER BY price DESC;
顯示商品價格(去重複),並排序(降序)
SELECT DISTINCT price FROM product ORDER BY price DESC;
在價格排序(降序)的基礎上,以分類排序(降序)
SELECT DISTINCT * FROM product ORDER BY price DESC,category_id DESC;
聚合查詢語句
聚合查詢語句:對某列的數據進行查詢,結果返回一個單一的值,會忽略null值
關鍵字:
count
:統計指定列不爲NULL的記錄行數;sum
:計算指定列的數值和,如果指定列類型不是數值類型,那麼計算結果爲0;max
:計算指定列的最大值,如果指定列是字符串類型,那麼使用字符串排序運算;min
:計算指定列的最小值,如果指定列是字符串類型,那麼使用字符串排序運算;avg
:計算指定列的平均值,如果指定列類型不是數值類型,那麼計算結果爲0;
格式: select 關鍵字(字段|*) from 表名
查詢商品的總條數
SELECT COUNT(pid) FROM product; -- 13
SELECT COUNT(pname) FROM product; -- 13
SELECT COUNT(category_id) FROM product; -- 12
SELECT COUNT(*) FROM product; -- 13
查詢商品價格大於200的總條數
SELECT COUNT(*) FROM product WHERE price>200; -- 7
查詢商品的總金額
SELECT SUM(price) FROM product; -- 17503
查詢分類爲’c001’的商品的總價格
SELECT SUM(price) FROM product WHERE category_id = 'c001'; -- 13000
查詢商品的平均價格
SELECT AVG(price) FROM product; -- 1346.3846153846155
查詢分類爲’c002’的商品的平均價格
SELECT AVG(price) FROM product WHERE category_id='c002';-- 860
查詢商品的最大值和最小值
SELECT MAX(price),MIN(price) FROM product -- 5000 1
sum,avg如果指定列類型不是數值類型,那麼計算結果爲0
SELECT SUM(pname),AVG(pname) FROM product -- 0 0
分組查詢
關鍵字:group by 被分組的字段
格式:
select 被分組的字段,(求和,平均,個數,最大,最小) from 表名 [where] group by 被分組的字段 [having 條件]
注意:被分組的字段,一般寫在select語句的後邊,作爲查詢條件,方便查看結果
按照商品類別分組,統計各個分組商品的個數
SELECT category_id,COUNT(*) FROM product GROUP BY category_id;
按照商品類別分組,統計各個分組商品價格的平均值
SELECT category_id,AVG(price) FROM product GROUP BY category_id;
where和having的區別:
- where:用於分組前進行條件過濾
- having:用於分組後,對分組的數據進行條件過濾
按照商品類別分組,統計各個分組商品的個數,且顯示個數等於3的信息
SELECT category_id,COUNT(*) FROM product GROUP BY category_id HAVING COUNT(*)=3;
按照商品類別分組,統計各個分組商品的個數,只查詢每組商品價格大於200的商品
-- 先where過濾,再分組,再統計
SELECT category_id,COUNT(*) FROM product WHERE price>200 GROUP BY category_id;
分頁查詢
分頁查詢語句:
關鍵字:limit
格式:
- 只要前n條數據
select *|字段 from 表名 limit n;
- 分頁查詢
select *|字段 from 表名 limit m,n;
m:每頁開始行的索引(變化的)
n:每頁顯示的數量,不變的
注意:數據庫行的索引從0開始,列的索引從1開始
只要前6條數據
SELECT * FROM product LIMIT 6;
分頁查詢,每頁顯示5條數據,查詢第一頁
SELECT * FROM product LIMIT 0,5;
分頁查詢,每頁顯示5條數據,查詢第二頁
SELECT * FROM product LIMIT 5,5;
分頁查詢,每頁顯示5條數據,查詢第三頁
SELECT * FROM product LIMIT 10,5;
分頁查詢可以用於模擬翻頁查詢商品:
SQL備份與恢復
使用可視化工具進行備份與恢復
備份:
導入:
使用命令行進行備份與導入
備份:
mysqldump -uroot -proot day02>d:\day02.sql
導入:
mysqldump -uroot -proot day02<d:\day02.sql