Java學習日誌(二十九): SQL查詢語句,SQL備份與恢復

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;

格式四:別名查詢

  1. 給表起別名:多表查詢時使用
    select *|字段 from 表名 [as] 別名;
  2. 給表中的字段起別名
    select 字段1 [as] 別名, ...字段n [as] 別名 from 表名;

注意:

  1. 別名只是對查詢的結果臨時起個名字,不會改變表中原有的名字
  2. 別名中如果有特殊符號或空格,必須使用引號包裹起來
-- 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語句
注意:

  1. 小的值要寫在前邊
  2. 可以對時間區間進行查詢 ‘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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章