select * from 表名
create table 表名(
字段名 类型 约束,
字段名 类型 约束,
)
例如:创建学生表,字段要求如下
姓名(长度为10)
create table student(
name varchar(10) ,
age int unsigned
)
注:unsigned是无符号的意思
– 例:创建学生表,字段要求如下:
– ——
– ——姓名(长度为10),年龄,身高(保留小数点2位)
create table student2(
id int unsigned primary key auto_increment,
-- 创建id组件为无符号,自动排序
name varchar(10),
age int unsigned,
-- unsigned为无符号
height decimal(5,2)
-- decimal为小数的类型,(5,2)代表整数为3位,小数为2位
)
ps:动态添加字段:alter table 表名 add 字段名 字段类型
格式一:drop table 表名
格式二:drop table if exists 表名
例如:删除学生表
drop table students
或
drop table if exists students
添加一行数据
格式一:所有字段设置值,值的顺序与表中字段的顺序对应
说明:主键列是自动增长,插入时需要占位,通常使用0或者default或者null来占位,插入成功后以实际数据为准
insert into 表名 values(...)
例如:插入一个学生,设置所有字段的信息
insert into student value(0,'张三',18,177.56)
格式二:部分字段设值,值的顺序与给出的字段顺序对应
insert into 表名(字段1,...) values(值1,...)
例如:插入一个学生,只设置姓名
insert into student(name) values('李四')
同一个字段插入多个值
格式:insert into student(name) values('王五'),('老六'),('涂七')
格式:update 表名 set 列1=值1,列2=值2… where 条件
例如:修改id为5的学生书局,姓名改为狄仁杰,年龄改为18岁
update student set name=狄仁杰,age=18 where id=5
格式:delete from 表名 where 条件
例如:删除id为6的学生数据
delete from student where id=6
设计表,给表添加一个字段isdelete,1代表删除,0代表没有删除
update student set isdelete=0
update student set isdelete=1 where id=1
查询指定列,如果没有写where会把指定列的所有数据都显示出来
select name,sex,hometown from student
给查询出来的字段起别名
select name as 姓名,sex as 性别,hometown as 家乡 from student
给表起别名
select s.name,s.sex,s.hometown from student as s
查询学生的性别有哪几种
去掉重复数据,如果有重复的数据只显示一条
select distinct sex from student
去掉重复数据,当查询多个字段时,只有一行记录会跟另一行记录完全一样时才是重复数据
select distinct sex,class from student
select distinct * from student
等于:=
大于:>
大于等于:>=
大于:<
小于等于:<=
不等于:!=或者<>
例1:查询小乔的年龄
select age from student where name='小乔'
例2:查询20岁以下的学生
select * from student where age<20
例3:查询家乡不在北京的学生
select * from student where hometown!='北京'
练习:
1、查询学号是’007’的学生的身份证号
select * from student where studentno='007'
select card from student where studentno='007'
2、查询’1班’以外的学生信息
select * from student where class!='1班'
3、查询年龄大于20的学生的姓名和性别
select name,age from student where age>20
and
or
not
例1:查询年龄小于20的女同学
select * from student where age<20 and sex='女'
例2:查询女学生或’1班’的学生
select * from student where sex='女' or class='1班'
例3:查询非天津的学生
select * from student where not hometown='天津'
练习:
1、查询河南或者河北的学生
select * from student where hometown='河南' or hometown='河北'
2、查询’1班’的’上海’的学生
select * from student where class='1班' and hometown='上海'
3、查询非20岁的学生
select * from student where not age=20
like
%表示任意多个任意字符
_表示一个任意字符
例1:查询姓孙的学生
select * from student where name like '孙%'
例2:查询姓孙且名字是一个字的学生
select * from student where name like'孙_'
例3:查询叫乔的学生
select * from student where name like'%乔'
例3:查询姓名含白的学生
select * from student where name like '%白%'
练习:
1、查询姓名为两个字的学生
select * from student where name like '__'
2、查询姓百且年龄大于20的学生
select * from student where age>20 and name like '百%'
3、查询学号以1结尾的学生
select * from student where studentno like '%1'
in 表示在一个非连续的范围之内
例1:查询家乡是北京或上海或广东的学生
select * from student where hometown='北京' or hometown='上海' or hometown='广东' or语法
select * from student where hometown in('北京','上海','广东') in语法
between … and …表示在一个连续的范围之内
例2:查询年龄为18至20的学生
select * from student where age between 18 and 20
练习:
1、查询年龄在18或19或22的女生
select * from student where age in('18','19','20') and sex='女'
2、查询年龄在20到25以外的学生
select * from student where not age between 20 and 25
注意:null与’'是不同的
判断is null
例1:查询没有填写身份证的学生
select * from student where card is null
判断非空is not null
例2:查询填写了身份证的学生
select * from student where card is not null
为了方便查看数据,可以对数据进行排序
语法:
select * from 表名 order by 列1 asc|desc,列2 asc|desc,...
将行数据按照列1进行排序,如果某些行列1的值相同时,则按照2排序,以此类推
默认按照列值从小到大排序
asc从小到大排列,既升序
desc从大到小排序,既降序
例1:查询所有学生信息,按年龄从小到大排序
select * from student order by age asc
例2:查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
select * from student order by age desc,studentno desc
练习:
1、查询所有学生信息,按班级从小到大排序,班级相同时,再按学号从从小到大排序
对中文数据进行排序
select * from student order by convert(name using gbk)
为了快速得到统计数据,经常会用到如下5个聚合函数
count(*)表示计算总行数,括号中写星与列名,结果是相同的
聚合函数不能在where中使用
例1:查询学生总数
select count(*) from student;
max(列)表示求此列的最大值
例2:查询女生的最大年龄
select max(age) from student where sex='女';
min(列)表示求此列的最小值
例3:查询1班的最小年龄
select min(age) from student;
sum(列)表示求此列的和
例4:查询北京学生的年龄总和
select sum(age) from student where hometown='北京';
avg(列)表示求此列的平均值
例5:查询女生的平均年龄
select avg(age) from student where sex='女';
练习:
1、查询所有学生的最大年龄、最小年龄、平均年龄、
select max(age) as 最大年龄,min(age) as 最小年龄,avg(age) as 平均年龄 from student;
2、一班共有多少个学生
select sum(name) from student where class='一班'
select sum(age) from student where age<18;
按照字段分组,表示此字段相同的数据会被放到一个组里
分组后,分组的依据会显示在结果集中,其他列不会显示在结果集中
可以对分组的数据进行统计,做聚合运算
语法:
select 列1,列2,聚合... from 表名 group by 列1,列2...
例1:查询各种性别的人数
select sex,count(*) from student group by sex
例2:查询各种年龄的人数
select age,count(*) from student group by age
练习:
查询各个班级学生的平均年龄,最大年龄,最小年龄
select class,avg(age) as 平均年龄,max(age)最大年龄,min(age) as 最小年龄 from student groub by class;
语法:
select 列1,列2,聚合...from 表名 group by 列1,列2,列3... having 列1,...聚合...
having后面的条件运算符与where的相同
例1:查询男生总人数
方案1:
select count(*) from student where sex='男'
___________________________________________
方案二:
select sex,count(*) from students group by sex having sex='男'
练习:
查询1班除外其他班级学生的平均年龄、最大年龄、最小年龄
select class,avg(age),max(age),min(age) from student where class!='1班' group by class
select class,avg(age),max(age),min(age) from student group by class having class!='1班'
当数据量过大时,在一页中查看数据是一件非常麻烦的事情
语法:
select * from 表名 limit start,count
从start开始,获取count条数据
start索引从0开始
例1:查询前3行学生信息
select * from student limit 0,3
练习
查询第四到第六行学生信息
select * from student limit 3,3
已知:每页显示m条数据,求:显示第n页的数据
select * from student limit (n-1)*m,m
求总页数
查询总条数p1
使用p1除以m得到p2
如果整除则p2为总页数
如果不整除则p2+1为总页数
方法一,等值连接
select * from 表1,表2 where 表1.字段=表2.字段
此方式会产生笛卡尔积,生成的记录总数=表1的总数*表2的总数会产生临时表
——例1:查询学生信息及学生的成绩
select * from student,scores where student.studentno=scores.studentno
方式二,内连接
不会产生笛卡尔积,不会产生临时表,性能高
select * from student
inner join scores on student.studentno=scores.studentno