2.SQL對錶中數據進行CRUD(增刪改查)操作

1.表中插入數據
格式:insert into 表名(列名1,列名2,列名3) values(對應值1,對應值2,對應值3);
注意:可以選擇相應的列名,插入相應的值。

insert into student(sid,sname,sex,age) values(1,"zhangsan",1,23);

簡單寫法:insert into 表名 values(對應值1,對應值2,對應值3);
注意:省略列名時,默認對全部列名的表插入值。

insert into student values(1,"zhangsan",1,23);

查看錶中的數據

select *from student;

批量插入數據

insert into student values
    (2,"zhangsan",1,23),
    (3,"zhangsan",1,23),
    (4,"zhangsan",1,23),
    (5,"zhangsan",1,23),
    (6,"zhangsan",1,23);

結果
在這裏插入圖片描述
插入數據時,中文亂碼解決方案:
臨時解決方案:使用set names gbk;相當於是高速mysql服務器軟件,我們當前在命令行下輸入的是gbk編碼的內容,當命令行關閉後,會使用默認的編碼,再輸入中文就會出現問題。
永久解決方案:修改my.ini配置(在mysql軟件安裝路徑裏)
有以下幾步:
  暫停mysql服務;
  在mysql安裝路徑中找到my.ini配置文件,在C:\Program Files\MySQL\MySQL Server 5.5;
  將第57行的編碼方式改成gbk;
  保存文件並退出;
  啓動mysql服務;

2.表中刪除數據
刪除數據
格式:delete from 表名 [where 條件];
注:這裏中括號表示可選。

刪除表中某一列:
delete from student where sid=10;
刪除表中所有列:
delete from student;

面試問題:表中使用delete刪除數據與使用truncate刪除數據有什麼差別?
delete: DML(數據操縱語言),一條一條刪除表中的數據;
truncate:DDL(數據定義語言),先刪除表,再重建表;

執行效率分析:看錶中的數據量,如果數據比較少,使用delete比較高效,如果數據量巨大,使用truncate比較高效。

3.表中更新數據
格式:update 表名 set 列名=列的值,列名1=列1的值 [where 條件]

舉例:
update student set sname=‘李四’ where sid=5; //將sid爲5的學生的名字改爲李四
update student set sname=‘張三’,sex=1; //將所有學生的名字改爲李四,性別改爲1

4.表中查詢數據
查詢所有商品

select pname,price product;

查詢商品名稱和商品價格

select pname,price product;

使用別名查詢,"."和as關鍵字(as 關鍵字可以省略)

使用表別名:select p.pname,p.price product as p;
使用列別名:select pname as 商品名稱,price as 商品價格 from product;

去掉重複的值

select price from product;
select distinct price from product;

運算查詢:僅僅在查詢結果上做了簡單運算:加減乘除

select *,price*0.8 from product;
select *,price*0.8 as 折後價 from product;

條件查詢

查詢價格大於60的商品:
select * from product where price > 60;
查詢價格在10-100之間的:兩種方式
select *from product where price between 10 and 100;
select *from product where price > 10 and price < 100;

where後的條件寫法:
  關係運算符:>,>=, < ,<=, =, !=,<>
  注:這裏的<>等於!=,只不過<>是標準的SQL語法,而!=是非標準的SQL語法

邏輯運算符:and, or , not

模糊查詢:like:
_ : 代表的是一個字符;
% :代表的是多個字符;

查詢名字中帶有“小”的所有商品:
select *from product where pname like '%小%';

查詢名字中第三個字符爲“小”的所有商品:
select *from product where pname like '__小%';

在某個範圍中獲取值:in

查詢商品分類ID在(1,4,5)裏的所有商品:
select *from product where cno in (1,4,5);

排序查詢:order by 關鍵字
關鍵字:asc(ascend,升序,也即默認的排序方式)、desc(descend,降序)

查詢所有商品,按照價格進行默認排序:
select *from product order by price;

查詢所有商品,按照價格進行降序排序:
select *from product order by price desc;

查詢名稱中帶有“小”的商品,並進行升序排序:
select *from product where pname like '%小%' order by price asc; 

聚合函數:
sum():求和;
avg():求平均值;
count():統計數量;
max():最大值;
min():最小值。

獲得所有商品價格的總和:
select sum(price) from product;

獲得所有商品的平均價格:
select avg(price) from product;

獲得所有商品的個數:
select count(*) from product;

注意:where後面不能接聚合函數

子查詢:獲得商品價格大於平均商品價格的所有商品:採用這樣的方式避免在where後面直接使用聚合函數
select *from product where price > (select avg(price) from product);

分組:group by

根據cno字段分組,分組後統計商品的個數:
select cno,count(*) from product group by cno;

根據cno分組,分組統計每組商品的平均價格,並且商品價格大於60的商品:
select cno,avg(price) from product group by cno having avg(price) > 60;

having關鍵字:可以接聚合函數,出現在分組之後;
where關鍵字:不可以接聚合函數,出現在分組之前。

編寫順序:
S(select)…F(from)…W(where)…G(group)…H(having)…O(order);
指向順序:
F(from)…W(where)…G(group)…H(having)…S(select)…O(order);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章