再次看下我們的知識架構(gòu)
image.png
補充:
我們要想操作數(shù)據(jù)庫必須登錄數(shù)據(jù)庫軟。登錄數(shù)據(jù)庫軟件的方式有多種
- cmd窗口登錄方式
- Mysql 命令行方式
-
圖形化界面方式
圖解:
登錄mysql軟件.png
一 數(shù)據(jù)定義語言-DDL
image.png
1 操作數(shù)據(jù)庫
- 數(shù)據(jù)庫的創(chuàng)建
- 數(shù)據(jù)庫的刪除
- 數(shù)據(jù)庫的修改
語法:
1 數(shù)據(jù)庫的創(chuàng)建:
create database 數(shù)據(jù)庫名
2 數(shù)據(jù)庫的刪除:
drop database 數(shù)據(jù)庫名
3 數(shù)據(jù)庫的修改
一般修改字符集肌厨,數(shù)據(jù)庫名 作用不大。
ps:show databases 可查看當(dāng)前所有的數(shù)據(jù)庫名字
use 數(shù)據(jù)庫名 可進入指定的數(shù)據(jù)庫中
2 操作表
- 創(chuàng)建表
- 修改表
- 刪除表
語法:
1 表的創(chuàng)建:
create table 表名(字段描述疯淫,字段描述);
字段描述:字段名 字段類型[約束條件]
注意:約束可以不寫
例如創(chuàng)建學(xué)生(stu)表:
create table stu(id int primary key auto_increment,username varchar(20));
ps: show tables:查看當(dāng)前數(shù)據(jù)庫下面的所有表
desc 表名:查看表結(jié)構(gòu)(也就是表的描述)
show create table 表名:查看建表語句(有時需要吧表拿來寫個相似的,可以看過源碼直接粘貼)
2 修改表
2.1修改表名:
alter table 表名 rename to 新表名
2.2表添加字段
alter table 表名 add 列名 字段描述
例如向stu添加pwd字段
alter table student1 add pwd varchar(20);
2.3修改字段名
alter table 表名 change 字段名稱 新字段描述
例如吧stu表的pwd字段修改為password:
alter table stu change pwd password varchar(20);
注意:修改字段名時字段描述也可以改,如上代碼varchar(20)
也可以寫為 int(20),亦可以使用如下2.4代碼修改
2.4修改字段描述
alter table 表名 modify 字段名稱 字段類型[約束]
例如 alter table stu modify password int;
注意:這種方式不能修改字段名字 否則報錯的
2.5刪除字段
alter table 表名 drop 字段
例如刪除stu表的 password字段:
alter table stu drop password;
收獲感覺2.4的語法更靈活可以取代2.5的功能。
3 刪除表:
drop table 表名;
二 數(shù)據(jù)操縱語言-DML
- 操作對象記錄(行)
- 關(guān)鍵詞: insert谦屑,update驳糯,delete
Demo表:
image.png
1 插入
語法1:insert into 表名 values(字段值1,字段值2.....);
注意:
默認(rèn)給全部字段插入值(上表id伦仍,username结窘,pwd字段)
必須保證values后面的值的類型和順序與表結(jié)構(gòu)中的一致
例如:上表的id int類型,username字符類型充蓝,pwd字符類型,則你插入 的值必須為 int 喉磁,字符谓苟,字符類型。
如向上表插入一些值:
insert into stu values(10,'kate','123');
注意:上表有三個字段 你value(xxx)xxx也要滿足三個值协怒,少一個就不行涝焙。
語法2(常用):
insert 表名 (字段1,字段2孕暇,...)values(值1仑撞,值2,...)
注意:
指定字段插入指定的值
必須保證values后面的值的類型和順序與表結(jié)構(gòu)中的一致
也就是如上表你要向id 妖滔,pwd 這兩個字段插入值隧哮,則:
insert into stu(id,pwd) values(30,15); 只要類型一致就行,username沒
插入數(shù)據(jù)座舍,查詢時顯示null沮翔。(但是你指定兩個字段此處你插入三個值或者插入一個就報錯,還是少一個也不行)
2 修改
語法:
update 表名 set 字段名1=字段值1曲秉,字段名2= 字段名2...[where 條件]
例如 吧username為tom的用戶名改為john
update stu set username = 'john' where username = 'tom';
注意:上代碼如果不寫where條件默認(rèn)吧所有的用戶名改為john
當(dāng)然你也可以根據(jù)id改變name字段:
update stu set username = 'kate' where id = 10;吧id為10 的username 改
為kate
總結(jié):修改就是修改字段值采蚀,根據(jù)某一字段值
3 刪除
語法:
delete from 表名 [where 條件]
例如刪除id為30 的 某項
delete from stu where id = 30;
則id為30 的某一相關(guān)信息都會刪除承二。
三 數(shù)據(jù)查詢語言-DQL(非官方叫法)
關(guān)鍵詞:select
- 基本查詢
- 基本條件查詢
- 高級查詢
完整的語法格式:
select 字段 from 表名 where條件 group by 分組字段 having 條件 order by 排序字段 ase|desc(增或者減順序)
1基本查詢:
1 簡單的案例:查詢表中所有字段信息
select * from products;
2 查看指定的字段信息
select 字段名1榆鼠,字段名2,.... from table;
例如:
select pname from products;
3查詢時還可以去掉重復(fù)的字段值:
例如
select distinct price from products;
(多個相同的price 只顯示一個)
4 還可以在查詢結(jié)果上進行運算(+ - * / 等)亥鸠,但是不會影響數(shù)據(jù)庫中的值妆够。
例如:將所有商品的價格+10元進行顯示
select price+10 from products;
5 還可以給查詢的結(jié)果起個別名
格式 字段名 別名
例如:select price+10 ‘新價格’ from products读虏;
注意 新的字段名最好用字符形式(‘’)否則容易出錯(比如新*價格就出錯责静,不用‘’時)
注意:sql的語法 查詢的結(jié)果是一張新表,顯示給你看的盖桥。
2 基本條件查詢
1 查詢所有:
select * from 表名;
2 指定范圍查詢
例如:查詢商品價格>60元的所有的商品信息:
select * from product where price>60;
3.模糊查詢
模糊匹配 格式: 字段名 like "匹配規(guī)則"
匹配規(guī)則: 內(nèi)容匹配"%"
數(shù)字匹配"_":_ 代表占個位
例如:"龍" 值為龍
"%龍" 值以龍結(jié)尾
"龍%" 值 以龍開頭
"%龍%" 值 包含龍
案例 查詢商品名稱中包含”新”的商品:
select * from products where pname like "%新%";
4.查詢價格為38,68,98的商品
or 或者in的用法
or: 或者
in:(a,b,c):滿足 含有a灾螃,或者b 或者 c的。
and 并且
例如:
select * from products where price=38 or price=68 or price = 98;
select * from products where price in(38,68,98);
5 查詢所有薪資在 50 -70之間的
select * from products where price between 50 and 70;
select * from products where price >=50 and price<=70 ;
小總結(jié):
where后的條件寫法:
> ,<,=,>=,<=,<>
like 使用占位符 _ 和 % _代表一個字符 %代表任意個字符.
in:在某個范圍中獲得值.(值不一定連續(xù))
between num1 and num2 :代表在某一連續(xù)區(qū)間 例如[num1,num2]
3 高級查詢
- 排序查詢: order by
- 聚合函數(shù) sum() avg() max() min() count()
- 分組:group by
案例驅(qū)動舉例子:
1 排序查詢
查詢所有的商品揩徊,按價格進行排序.(asc-升序,desc-降序)
select * from products order by price desc;(降序)
查詢名稱有“新”的商品的信息并且按價格降序排序.
select * from products where pname like"%新%"order by price desc;
2 聚合函數(shù)
sum(字段)求和
avg(字段) 平均值
max(字段) 最大值
min(字段) 最小值
count(字段) 總數(shù)
round(數(shù)字腰鬼,保留小數(shù)位數(shù)) 四舍五入
注意:
以前我們操作的都是行的數(shù)據(jù)嵌赠,而聚合函數(shù)操作的是列的數(shù)據(jù) 并且返回
一個結(jié)果,但是聚合函數(shù)會忽略null的值熄赡。
獲得所有商品的價格的總和:
select sum(price) from products ;
獲得商品表中價格的平均數(shù):
select round(avg(price),2) from products ;
獲得商品表中有多少條記錄(多少個字段)
select count(*) from products ;
3 分組
語法要求滿足:在where的后面 在order by 前面
***一般分組伴隨著聚合函數(shù)***
語法:
根據(jù)某字段分組姜挺,伴隨聚合函數(shù)(一般分組都伴隨聚合) from 表 group by 字段
select 字段,聚合函數(shù) from table group by 字段
舉個栗子:
根據(jù)cno字段分組彼硫,分組后統(tǒng)計商品的個數(shù)
select cno,count(cno) from products group by cno;
*******************************再舉個重要的栗子******************************
根據(jù)cno分組炊豪,分組統(tǒng)計每組商品的總數(shù)量,并且總數(shù)量> 200;
select cno,sum(pnum) from products group by cno having sum(pnum)>200;
注意: where 與having 的區(qū)別:
where是對分組前的數(shù)據(jù)進行過濾 having是對分組后的數(shù)據(jù)進行過濾
where 后面不能使用聚合函數(shù) having可以