-建表语句
create database web_test1;
use web_test1;
create table user(
id int primary key auto_increment,
username varchar(20) unique,
password varchar(20) not null,
age int,
birthday date
);
-修改表
*添加列: //(添加字段)
alter table 表名 add 列名 类型(长度) 约束;
*修改列类型,长度和约束
alter table 表名 modify 列名 类型(长度) 约束;
删除列
alter table 表名 drop 列名;
修改列名称
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
修改表名
rename table 表名 to 新的表名;
修改表的字符集
alter table 表名 character set 字符集;
SQL对数据库表的记录进行操作(重点)
SQL添加表的记录
语法:
向表中插入某些列:insert into 表名 (列名1,列名2,列名3...) values(值1,值2,值3...)
向表中插入所有列:insert into 表名 values(值1,值2,值3...);
注意事项;
1.值的类型与数据库中表列的类型一致.
2.值的顺序与数据库中表列的顺序一致.
3.值的最大长度不能超过列设置的最大长度.
4.值的类型时字符串或者是日期类型,使用单引号引起来.
添加记录
添加某几列(可以选择性的添加值,也可以一次性添加所有值,要注意值的顺序不能变)
insert into user (id,username,password) values (null,'aaa','123');
添加所有列
insert into user values (null,'bbb','123',23,'1993-09-01');
添加中文记录
1.需要将MYSQL数据库服务器中的客户端部分的字符集改为gbk.
2.找到MYSQL的安装路径:my.ini文件,修改文件中[client]下的字符集
3.重新启动MySQL的服务器 services.msc
SQL修改表的记录
语法:
update 表名 set 列名=值,列名=值 [where 条件];
注意事项:
1.值的类型与数据库中表列的类型一致.
2.值的最大长度不能超过列设置的最大长度.
3.字符串类型和日期类型要添加单引号.
修改某一列的所有值:(很少用)
update user set password = 'abc';
按条件修改数据:(主要)
update user set password = 'xyz' where username = 'bbb';
按条件修改多个列:
update user set password='123',age=34 where username='aaa';
SQL删除表的记录
语法:
delete from 表名 [where 条件];
注意事项:
1.删除表的记录,指的是删除表中的一行记录.
2.删除如果没有条件,默认是删除表中的所有记录.
删除某一条记录:
delete from user where id = 2;
删除表中的所有记录:
delete from user;
*删除表中的记录有两种做法:
delete from user; 删除所有记录,属于DML语句,一条记录一条记录删除.事务可以作用宅DML语句上的
truncate table user; 删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表.事务不能控制DDL的
SQL查看表的记录(重要)
基本查询
语法: select [distinct*]列名 from 表 [条件];
环境的准备:
查询所有学生考试成绩信息:
select* from examl;
查询所有学校的姓名和英语成绩:
select name,english from examl;
查询英语成绩信息(不显示重复的值):
select distinct english from exam;
查看学生姓名和学生的总成绩:
select name,english+chinese+math from exam;
别名查询:
select name,english+chinese+math as sum from exam;
条件查询:
使用where子句
>,<,>=,<=,<>,= //注意: <>是不等于
like:模糊查询
in:范围查询
条件关联:and, or, not
查询李四的学生成绩:
查询名称叫李四学生并且英文大于90分:
查询姓李的学生的信息:
like可以进行模糊查询,在like子句中可以使用_或者%作为占位符._只能代表一个字符,而%可以代表任意字符.
* like ‘李_’ :名字中必须是两个字,而且是姓李的。
* like ‘李%’ :名字中姓李的学生,李子后可以是1个或任意个字符。
* like ‘%四’ :名字中以四结尾的。
* like ‘%王%’ :只要名称中包含这个字就可以
排序查询:
//使用order by 字段名称 asc(升序)/desc(降序);
查询学生信息,并且按照语文成绩进行排序
select * from exam order by chinese;
查询学生信息,并且按照语文成绩进行倒序排序
select* from exam order by chinese desc;
查询学生信息,先按照语文成绩进行倒序排序,如果成绩相同再按照英语成绩升序排序
select* from exam order by chinese desc,english asc;
查询姓李的学生信息,在按照英语的成绩降序排序
select * from exam where name like '李%' order by english desc;
分组统计查询:
聚合函数使用:
sum();求和
举例: 获取所有学生的英语成绩的总和
select sum(english) from exam;
获取所有学生的英语成绩和数学成绩的总和
select sum(english),sum(math) from exam;
查询姓李的学生的英语成绩的总和
select sum(english) from exam where name like '李%';
查询所有学生各科的总成绩
1. select sum(english)+sum(chinese)+sum(math) from exam;
2. select sum(english+chinese+math) from exam;
*上面的语句是按照列的方式统计,英语成绩总和+语文成绩的总和+数学成绩总和.
*下面的语句先计算英语+数学+语文然后再求和.
使用 ifnull 的函数.
//null 加上任何值都为null
count();统计次数
获得学生的总数
select count(*) from exam;
获得姓李的学生的个数
select count(*) from exam where name like '李%';
max();最大值
获得数学成绩的最高分
select max(math) from exam;
min();最小值
获得语文成绩的最低分
select min(chinese) from exam;
avg();平均值
获取语文成绩的平均值
select avg(chinese) from exam;
分组查询
语法: 使用group by字段名称;
环境准备