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);