理論知識
修改數(shù)據(jù)表
1.修改表名
格式:Alter table 舊表名 rename [to] 新表名;
如下:Alter table tb_grade rename to grade;
2.修改字段名
格式:Alter table 表名 change 舊字段名 新字段名 新數(shù)據(jù)類型蚂蕴;
如下:Alter table grade change name username varchar(20);
3.修改字段的數(shù)據(jù)類型
格式: Alter table 表名 modify 字段名 數(shù)據(jù)類型;
如下:Alter table grade modify id int(20);
4.添加字段
? 格式:Alter table 表名 add 新字段名 數(shù)據(jù)類型
如下:Alter table grade add age int(10);
5.刪除字段
格式:Alter table 表名 drop 字段名敦间;
如下:Alter table grade drop age;
6.修改字段的排列位置
格式:Alter table 表名 modify 字段名 1 數(shù)據(jù)類型 first|after 字段名2
如下:Alter table grade modify username varchar(20) first;? //將username吞瞪,該為表的第一個字 ? ? ? ? ? ? 段
Alter table grade modify id int(20) after grade;//將id字段插入到grade字段后面
7.添加數(shù)據(jù)
格式:Insert into 表名(字段名1烦磁,字段名2芹缔,….)
values(值1坯癣,值2,……)最欠;
Create database school;
Use school;
Create table student(
id int(4),
name varchar(20) not null,
grade float
);
Insert into student(id,name,grade)values(1,’zhangsan’,98.5);
Insert into student(name,grade,id)values(’lisi’,95.5,2);
(2)為表的指定字段添加數(shù)據(jù)
Insert into 表名(字段1示罗,字段2,…)values(值1芝硬,值2蚜点,…)
Insert into student(id,name)values(4,’zhaoliu’);
Insert into student(id,grade)values(5,97);//name字段沒有指定默認值,并且添加了非null約束拌阴。
(3)同時添加多條記錄
Insert into 表名[(字段名1禽额,字段名2,…)]
values(值1皮官,值2脯倒,…),(值1捺氢,值2藻丢,…),…
Insert into student values
(6,’lilei’,99),
(7,’hanmeimei’,100),
(8,’lihua’,50);
//如果指定字段摄乒,則可以只為指定字段添加值
8.更新數(shù)據(jù)
Update 表名
set 字段名1=值1[悠反,字段名2=值2,…]
[where 條件表達式]
Update student set name=‘laozhang’,grade=50 where id = 1;
更新全部數(shù)據(jù)
如:Update student set grade = 80;
9.刪除數(shù)據(jù)
1.Delete刪除部分數(shù)據(jù)
刪除部分數(shù)據(jù)是指根據(jù)指定條件刪除表中的某一條或者某幾條記錄馍佑,需要使用where子句來指定刪除記錄的條件斋否。
Insert into student values(11,’xiaowang’,80);
Select * from student where id = 11;
Delete from student where id = 11;
Delete from student where id > 5;
2.Delete刪除全部數(shù)據(jù)
在delete語句中如果沒有使用where子句,則會將表中的所有記錄都刪除
Select * from student;
Delete from student;
二 單表查詢
1.在select語句中指定所有字段
Select 字段1拭荤,字段2茵臭,…from 表名
Create table student2(
id int(3) primary key auto_increment,
name varchar(20) not null,
grade float,
gender char(2)
); //插入一些數(shù)據(jù)
Select id,name,grade,gender from student2;
2.在select語句中使用星號(“*”)通配符代表所有字段
Select * from 表名;
Select * from student2
2.按條件查詢
查詢student2表中id為4的學生姓名:
Select? id,name from student2 where id = 4;
(1.)帶in關鍵字
查詢student表中id值為1舅世、2旦委、3的記錄:
Select * from student2 where id in (1,2,3);
查詢student表中id值不為1、2雏亚、3的記錄:
Select * from student2 where id not in (1,2,3);
(2)帶between and 關鍵字的查詢
查詢student表中id值在2~5之間的學生姓名
select * from student where id between 2 and 5;
(3)空值查詢
查詢student2表中gender為空值的記錄
Select * from student where gender is null缨硝;
查詢student2表中gender不為空值的記錄
Select * from student where gender is not null;
(4)帶distinct關鍵字的查詢
查詢student2表中gender字段的值罢低,要求不能出現(xiàn)重復數(shù)據(jù):
Select distinct gender from student2查辩;
(5)帶like關鍵字的查詢
1.百分號(%)通配符
匹配任意長度的字符串,包括空字符串。
查找student表中name字段以字符“z”開頭的學生id:
Select id,name from student2 where name like ‘z%’;
查找student表中name字段以字符“z”開頭宜岛,以“n”結尾的學生id:
Select id,name from student2 where name like ‘z%n’;
查找student表中name字段包含字符“y”的學生id:
Select id,name from student2 where name like ‘%y%’;
2.下劃線(_)通配符
查詢student2表中name字段值以字符串“zhan”開始匀钧,以字符串“san”結束,并且兩個字符串之間只有一個字符的記錄:
Select * from student2 where name like ‘zhan_san’;
查詢student2表中name字段值包含8個字符谬返,并且以字符串“san”結束的記錄:
Select * from student2 where name like ‘_____san’;
注意:查詢student表中name字段值包括“%”的記錄:(\%)
select * from student where like ‘%\%%’
(6)帶and關鍵字的多條件查詢
查詢student2表中id字段值在1,2,3,4之中之斯,name字段值以字符串“san”結束,并且grade字段值小于80的記錄:
Select id,name,grade,gender from student2
where id in(1,2,3,4) and name like ‘%san’ and grade <80;
(7)帶or關鍵字的多條件查詢
查詢student2表中id字段值小于3遣铝,或者gender字段值為“女”的學生姓名:
Select id,name,gender from student2 where id<3 or gender=‘女’;
Or和and一起使用的情況
注意:and的優(yōu)先級高于or佑刷,因此當兩者在一起使用時,應該先運算and兩邊的條件酿炸,再運算or兩邊的條件
查詢student2表中gender字段值為“女”或者gender字段值為“男”瘫絮,并且grade字段值為100的學生姓名:
Select name,grade,gender from student2 where gender = ‘女’ or gender = ‘男’ and grade=100;
三 聚合函數(shù)
實際開發(fā)中,經(jīng)常需要對某些數(shù)據(jù)進行統(tǒng)計填硕,例如統(tǒng)計某個字段的最大值麦萤,最小值,平均值等扁眯,為此壮莹,MySql中提供了一些函數(shù)來實現(xiàn)這些功能。
1.count()函數(shù)
Count()函數(shù)用來統(tǒng)計記錄的條數(shù)
Select count(*) from 表名
2.sum()函數(shù)
Sum()是求和函數(shù)姻檀,用于求出表中某個字段所有值的總和
Select sum(字段名) from 表名命满;
3.avg()函數(shù)
Avg()函數(shù)用于求出某個字段所有值的平均值
Select avg(字段名) from 表名
4.max()函數(shù)
Max()函數(shù)是求最大值的函數(shù),用于求出某個字段的最大值
Select max(grade) from 表名绣版;
5.min()函數(shù)
Min()函數(shù)是求最小值的函數(shù)胶台,用于求出某個字段的最小值
Select min(grade) from 表名;
四 對查詢結果排序
從表中查詢出來的數(shù)據(jù)可能是無序的杂抽,或者其排列順序不是用戶期望的诈唬。為了使查詢結果滿足用戶的需求,可以使用order by對查詢結果進行排序
Select 字段名1缩麸,字段名2铸磅,… from 表名 order by 字段名1, [asc|desc],字段名2 [asc|desc]…
1.查出student2表中的所有記錄匙睹,并按照grade字段進行排序
2.查出student2表中的所有記錄愚屁,使用參數(shù)asc按照grade字段升序排列
3.查出student2表中的所有記錄,使用參數(shù)desc按照grade字段降序排列
4.查出student2表中的所有記錄痕檬,按照gender字段的升序和grade字段的降序進行排列
五 分組查詢
在對表中數(shù)據(jù)進行統(tǒng)計時,也可能需要按照一定的類別進行統(tǒng)計送浊。在mysql中可以使用group by按某個字段或者多個字段中的值進行分組梦谜,字段中值相同的為一組:
Select 字段名1,字段名2,…from 表名
group by字段名1唁桩,字段名2闭树,..[having 條件表達式]
1.單獨使用group by分組
Select * from student2 group by gender;
每個分組只返回一條結果
2.group by和聚合函數(shù)一起使用
Group by和聚合函數(shù)一起使用荒澡,可以統(tǒng)計出某個或者某些字段在一個分組中最大值报辱、最小值、平均值等
將student2表按照gender字段值進行分組查詢单山,計算出每個分組中各有多少名學生:
Select count(*) ,gender from student2 group by gender碍现;
3.group by和having關鍵字一起使用
Having關鍵字和where關鍵字的作用相同,都用于設置條件表達式對查詢結果進行過濾米奸,兩者的區(qū)別在于丈咐,having關鍵字后可以跟聚合函數(shù)赶诊,而where不能,通常情況下having關鍵字都和group by 一起使用,用于對分組后的結果進行過濾锯蛀。
將student2表按照gender字段進行分組查詢,查詢出grade字段值之和小于300的分組:
Select sum(grade),gender from student2 group by gender having sum(grade)<300;i
六 使用limit限制查詢結果的數(shù)量
查詢student2表的前4條記錄:
Select * from student2 limit 4;
七 為表和字段取別名
1.為表取別名
為student2表起一個別名瓷胧,并查詢student2表中gender字段值為“女”的記錄
Select * from student2 as s2 where s2.gender=‘女’;
2.為字段取別名
查詢student2表中的所有記錄的name和gender字段值衡蚂,并為這兩個字段起別名為stu_name和stu_gender:
Select name as stu_name,gender as stu_gender from student2;
具體實踐
2、創(chuàng)建如下表
a )插入數(shù)據(jù)棕硫,使表內容如下所示
b)修改李四的SERVLET為65者吁、JSP為73
c)查詢并顯示ID、USERNAME這兩個字段的值
d)將c的結果用下圖所示別名顯示
e)查詢并以如下結果顯示
f)查詢并顯示每個學生的SERVLET和JSP的總成績
g)查詢并顯示不重復的ADDRESS字段的值
h)查詢ID為2且姓名為李四的學生
i)查詢ID為2饲帅,或者姓名為張三的學生
J) 查詢SERVLET成績大于70分的學生复凳,并顯示所有字段信息
K)查詢SERVLET 成績大于60分小于80分的學生,并顯示所有字段信息
L)查詢姓名不等于張三的記錄灶泵,并顯示所有字段信息
M)查詢ADDRESS為空的記錄育八,并顯示所有字段信息
N)查詢ADDRESS不為空的記錄,并顯示所有字段信息
O)查詢李姓學生的所有信息
P)查詢所有學生SERVLET總成績
Q)查詢所有學生SERVLET的平均分
R)查詢SERVLET的最高分和最低分
S)查詢前兩條記錄
T)將表按SERVLET由大到小顯示
U)將表按JSP小到大顯示
V)查詢每個地區(qū)的人數(shù)
W)查詢分組后區(qū)域人數(shù)超過1個人的區(qū)域
x)查詢id是1,2,3的記錄
X???3x?t???