日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

数据库学习(十)— 查询演练

發(fā)布時(shí)間:2023/12/29 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库学习(十)— 查询演练 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

查詢演練的數(shù)據(jù)表以及相應(yīng)數(shù)據(jù)創(chuàng)建?

drop table if exists goods; create table goods (id int unsigned primary key auto_increment,name varchar(150),cate varchar(40),brand_name varchar(40) ,price decimal(10,3) default 0, is_show bit default 1,is_saleoff bit default 0 );insert into goods values(0,'r510vc 15.6英寸筆記本','筆記本','華碩','3399', default, default); insert into goods values(0, 'y400n 14.0英寸筆記本電腦','筆記本', '聯(lián)想', '4999', default, default); insert into goods values(0, 'g150th 15.6英寸游戲本', '游戲本', '雷神', '8499', default, default); insert into goods values(0, 'x55occ 15.6英寸筆記本', '筆記本', '華碩', '2799', default, default); insert into goods values(0, '×240超級(jí)本', '超級(jí)本', '聯(lián)想', '4999', default, default); insert into goods values(0, 'u330p 13.3J寸超級(jí)本', '超級(jí)本', '聯(lián)想', '4299', default, default); insert into goods values(0, 'swp13226scb 觸控超極本', '超級(jí)本',"索尼", "7999" ,default,default); insert into goods values(0, 'ipad mini 7.9英寸平板電腦', '平板電腦', '蘋果', '1998', default, default); insert into goods values(0, 'ipad air 9.7英寸平板電腦', '平板電腦', '蘋果', '3388', default, default); insert into goods values(0, 'ipad mini 配備 retina 顯示器', '平板電腦', '蘋果', '2788', default, default);insert into goods values(0, 'ideacentre c340 20英寸一體電腦', '臺(tái)式機(jī)', '聯(lián)想', '3499', default, default);insert into goods values(0, 'vostro 3860-r1286臺(tái)式電腦', '臺(tái)式機(jī)', '戴爾', '2899', default ,default); insert into goods values(0, 'imac meo86ch/a 21.5英寸一體電腦', '臺(tái)式機(jī)','蘋果','9188',default ,default);insert into goods values(0, 'at7-74141p 臺(tái)式電腦 linux ', '臺(tái)式機(jī)', '宏基', '3699', default, default); insert into goods values(0, 'z220sff f4f86pa工作站', '服務(wù)器/工作站','惠普', '4288', default, default); insert into goods values(0, 'poweredge ii服務(wù)器', '服務(wù)器/工作站', '威爾', '5388', default, default); insert into goods values(0, 'mac pro專業(yè)級(jí)臺(tái)式電腦', '服務(wù)器/工作站','蘋果', '28888' ,default, default); insert into goods values(0, 'hmz-t3w頭戴顯示設(shè)備', '筆記本配件', '索尼', '6999', default,default); insert into goods values(0, '高務(wù)雙肩背包', '筆記本配件', '索尼', '99', default,default); insert into goods values(0, 'x3250m4機(jī)架式服務(wù)器', '服務(wù)器/工作站', ' ibm', '6888', default,default); insert into goods values(0, 'hz-t3w頭戴顯示設(shè)備', '筆記本配件', '索尼', '6999', default , default); insert into goods values(0, '高務(wù)雙肩背包', '筆記本配忤', '索尼', '99', default, default);

1.1 查詢演練

?🧐例1: 求所有電腦產(chǎn)品的平均價(jià)格,并保留2位小數(shù)

select round(avg(price), 2) from goods

?🧐例2: 查詢所有價(jià)格大于平均價(jià)格的商品,并且按價(jià)格降序排序

select * from goods where price > (select avg(price) from goods) order by price desc

??🧐例3: 查詢類型為超級(jí)本的商品價(jià)格

select price from goods where cate = '超級(jí)本'

?🧐例4: 查詢價(jià)格大于或等于’超級(jí)本‘的商品價(jià)格,并且按價(jià)格降序排序

select * from goods where price >=any(select price from goods where cate = '超級(jí)本' ) order by price desc

?

💦知識(shí)點(diǎn):

子查詢返回的結(jié)果

  • 只有一個(gè)值: 用比較符號(hào)
  • 返回多值:用in, some,any?

1.2? 數(shù)據(jù)分表——更新商品表

💦知識(shí)點(diǎn):

????????我們創(chuàng)建的數(shù)據(jù)表等數(shù)據(jù)庫(kù)數(shù)據(jù)都被放在電腦硬盤中:

?????????若表中寫一堆重復(fù)數(shù)據(jù),也會(huì)存在硬盤中,就會(huì)造成空間的浪費(fèi),及造成數(shù)據(jù)冗余(數(shù)據(jù)重復(fù))。如圖:

????????數(shù)據(jù)冗余:易造成空間浪費(fèi),若該字段的某個(gè)字符更新,對(duì)其重復(fù)數(shù)據(jù)修改耗時(shí)。不利于管理

????????對(duì)于冗余的數(shù)據(jù):不會(huì)與常規(guī)數(shù)據(jù)寫一起,而是單獨(dú)列表,以后修改重復(fù)字段的內(nèi)容,只對(duì)單獨(dú)表進(jìn)行修改,不會(huì)造成原表的大幅度修正。如圖:

創(chuàng)建表并且插入語(yǔ)句

㈠、創(chuàng)建類型表并將數(shù)據(jù)插入語(yǔ)句。(方法一)

①、創(chuàng)建類型表?

-- 創(chuàng)建類型表 -- create table goods_cate( -- cate_id int unsigned primary key auto_increment, -- cate_name varchar(10) -- )

②、去重

-- 去重,查詢goods表中的所有焦慮,并且按’類別‘分組 -- select distinct cate from goods select cate from goods group by cate

?

?③、將分組結(jié)果,插入到數(shù)據(jù)表

-- 插入數(shù)據(jù),將分組結(jié)果寫入到goods_cate數(shù)據(jù)表 insert into goods_cate(cate_name) select cate from goods group by cate

㈡、 創(chuàng)建品牌表(用另外一種方法,方法二)

????????創(chuàng)建品牌表的同時(shí)插入數(shù)據(jù),根據(jù)相同名稱插入字段,若字段名稱不同不能直接插入到表中。
????????通過create ——slect 來創(chuàng)建數(shù)據(jù)表并且同時(shí)寫入記錄,一步到位

-- 創(chuàng)建品牌表的同時(shí)插入數(shù)據(jù),根據(jù)相同名稱插入字段,若字段名稱不同不能直接插入到表中。 --通過create ——slect 來創(chuàng)建數(shù)據(jù)表并且同時(shí)寫入記錄,一步到位 create table goods_brands(brands_id int unsigned primary key auto_increment,brand_name varchar(10) ) select distinct brand_name from goods

?

💦知識(shí)點(diǎn)

????????創(chuàng)建表若創(chuàng)建只2個(gè)字段,若在創(chuàng)建表語(yǔ)句的尾部添加select,select意思是把查詢出來的數(shù)據(jù)插入到表中:插入時(shí)就會(huì)根據(jù)select查詢返回的列名,到表中找對(duì)應(yīng)的字段看能不能找到相同的字段,若無法找到新建一列,若找到相同字段則直接插入到原先創(chuàng)建的。

? ? ? ? 此處:

????????????????查詢時(shí)返回的字段名稱必須與創(chuàng)建表中的字段一樣,跟誰(shuí)一樣查詢的數(shù)據(jù)就插入到那個(gè)字段中

?㈢、方法三:快速備份表

①、若對(duì)品牌表進(jìn)行備份,快速備份一張表

-- 若對(duì)品牌表進(jìn)行備份,快速備份一張表 create table brand_bak select * from goods_brands

②、 第二步:

商品表還是記錄著還是名稱還沒有變化,接著更改商品表,將冗余字段的數(shù)據(jù)變成編號(hào)

-- 通過goods_cate數(shù)據(jù)表來更新商品表 通過連接查詢,把類型所對(duì)應(yīng)的編號(hào)查出來,只需要把select * from改為update select * from goods inner join goods_cate on goods.cate = goods_cate.cate_nameupdate goods inner join goods_cate on goods.cate = goods_cate.cate_name set goods.cate = goods_cate.cate_id

-- 通過goods_brands數(shù)據(jù)表來更新商品表的品牌信息 update goods inner join goods_brands on goods.brand_name = goods_brands.brand_name set goods.brand_name = goods_brands.brands_id

🗒小技巧

?????????查看goods的數(shù)據(jù)表結(jié)構(gòu)會(huì)發(fā)現(xiàn)cate 和brand_name對(duì)應(yīng)的類型為 varchar但是存儲(chǔ)的都是字哥串修改數(shù)據(jù)表結(jié)構(gòu), 因?yàn)橹皇前裧oods表中類型和品牌的值改了,若讓一般人來看,就不知道是什么意思了,就需要把冗余字段名修改成相應(yīng)的cate_id, brands_id。

把cate字段改為cate_id且類型為int unsigned。把brand_name字段改為brands_id且類型為int unsigned
?

mysql修改字段名稱的方法: 執(zhí)行【ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數(shù)據(jù)類型;】 語(yǔ)句即可修改字段名稱。 alter table goods change cate cate_id int unsigned; alter table goods change brand_name brands_id int unsigned;

?參考:mysql修改字段名稱的方法 - MySQL數(shù)據(jù)庫(kù) - 億速云

1.3 更新完后查詢 --連接查詢

若需要商品的所有信息,就需要連接查詢。

select goods.name, goods_cate.cate_name, goods_brands.brand_name from goods inner join goods_cate on goods_cate.cate_id = goods.cate_id inner join goods_brands on goods_brands.brands_id = goods.brands_id

說明:?

????????此處使用左連接和右連接的數(shù)據(jù)結(jié)果與內(nèi)連接一樣,

對(duì)于左連接,沒有商品是對(duì)應(yīng)不到品牌或類型。沒有存在商品里面有的類型在類型表找不到

對(duì)于右連接一樣,沒有品牌或類型對(duì)應(yīng)不到商品。也沒有類型表里面有多余的類型在商品里面沒有。

對(duì)于左連接和右連接看效果,分別在good_scates 和 goods_branwus表中插入記錄

insert into goods_cate(cate_name) values('路由器'),('交換機(jī)'),('網(wǎng)卡'); insert into goods_brands(brand_name) values('海爾'),('清華同方'),('神舟');

在goods數(shù)據(jù)表中寫入任意數(shù)據(jù)。

insert into goods(name, cate_id, brands_id, price) values('LaserJet Pro P1606dn 黑白激光打印機(jī)', '12', '4', '1894');

🧐例1: 查詢所有商品的詳細(xì)信息(通過內(nèi)連接)

select goods.name, goods_cate.cate_name, goods_brands.brand_name from goods inner join goods_cate on goods_cate.cate_id = goods.cate_id inner join goods_brands on goods_brands.brands_id = goods.brands_id

🧐例2: 查詢所有商品的詳細(xì)信息(通過左連接)

select goods.name, goods_cate.cate_name, goods_brands.brand_name from goods left join goods_cate on goods_cate.cate_id = goods.cate_id left join goods_brands on goods_brands.brands_id = goods.brands_id

🧐例3: 查詢所有商品的詳細(xì)信息(通過右連接)

select goods.name, goods_cate.cate_name, goods_brands.brand_name from goods right join goods_cate on goods_cate.cate_id = goods.cate_id right join goods_brands on goods_brands.brands_id = goods.brands_id

🍇知識(shí)點(diǎn):?

多個(gè)表在連接的時(shí)候,最終數(shù)據(jù)到底把哪個(gè)顯示的更全一些,對(duì)于整體來說,看最后一個(gè)join,

????????寫right把最后一個(gè)數(shù)據(jù)表全部展示出來,

? ? ? ? 寫left把除了最后一個(gè)數(shù)據(jù)表,之前數(shù)據(jù)表連接的結(jié)果作為整體表看具體情況全部展示出來

? ? ? ? 最后看,具體要查詢的情況。

總結(jié)

以上是生活随笔為你收集整理的数据库学习(十)— 查询演练的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。