一,
数据库的操作
查:show databases ;
删:drop database 数据库名
改:alter database 数据库 character set 字符集(utf8)
查询所有库 : show database ;
show create database 数据库的名字 数据库结构
use 数据库 切换数据库
show tables 数据库; 查数据库表
二,
表结构的操作
创建: create table 表名(
列名 列的类型 列的约束,
列名 列的类型 列的约束
)
列的类型:char /varchar
列的约束:
primary key 主键约束
unique key 唯一约束
not null 非空约束
自动增长:auto_increment
删除:drop table 表名
修改:alter table 表名如:
alter table 表名
add [column] create_definition [first | after column_name] //添加新字段
add primary key (index_col_name,...) //添加主码名称
alter [column] col_name {set default literal |rop default} //修改字段名称
change [column] old_col_name create_definition //修改字段名及类型
modify [column] create_definition //修改字段类型
drop [column] col_name //删除字段
drop primary key //删除主码
rename [as] new_tablename //更改表名
( add 增加,modify修改列类型,change,drop 删除列)
rename table 旧表名 to 新表名
alter table 表名 character set 字符集
查询表结构
show table ;查询出所有表
show create table 数据库 查询表详细结构
desc 表名; 表的结构
三,
表中数据的操作
增:
insert into 表名 values('内容,内容')
insert into 表名 values (内容,内容,内容)
删:
delete from 表名 [where 条件];
改:
update 表名 set 列名='值', 列名='值';
查:
select * from 表名
去重:distinct
1.between...and
查询成绩在60-80之间的学生学号 成绩
select stuid,socre from score where socre>=60 and socre <=80;
select (not) between 60 and 80;
2.in
查询成绩是25或是83 或是59的成绩
select stuid socre from score where socre in (85,83,50);
3.like 模糊查询 %: 代表多个字符
select * from student where name like '张%' (张开头)
select * from student where name like '%张' (张结尾)
select * from student where name like '%张%' (带张)
4._: 代表一个字符
select * from student where name like '张_' (带张后面加一个字符)
5.is null 列的值为空
6.and or
四,
聚合函数:作用在列上面
1.avg :求平均值
查询科目一的平均分
select avg(socre) from score where sublid=1;
2.sum :求和
查询学号1的总成绩
select sum(socre) from score where stuid=1;
3.count:统计
查询学校有多少学生
select count(stuid(*)) from student
select count(*) from student
4.max:最大值 min:最小值
查询科目一的最高分和最低分
select max(socre),min(socre) from score where subid=1;
分组统计:分组函数:根据字段相同的的值进行分组,只要题目带每 各 肯定用分组 配合聚合函数
1.group by 对一张表根据字段相同的的值自定义分组
查询各科目平均成绩
select avg(socre) ,stuid from score group by subid;
2.having
查询所有成绩加5分后,成绩还是小于60分的学生学号
select stuid,socre+5 as "成绩加5分" from score having 成绩加5分<60;
having 和where 的区别,他俩都可以都查询结果进行筛选
where 针对表中真正存在的列起作用
having针对查询结果列起作用
group by 是在where 条件后执行
having 是在group by 后执行
获取平均成绩大于等于70的各科目平均成绩
select avg(socre) from score group by subid where avg(socre)>=70;
3.order by 排序功能 asc 升序(默认) desc 降序
根据班级编号进行升序
select * from student order by cid asc;
根据多个字段进行排序
select * from student order by cid asc,birthday desc;
4.limit 限制条数
limit [offset ,N] offset 初始位置 默认 0
查询年龄最大的5位学生
select * from student order by birthday asc limit 0,5;
多表查询
交叉连接:多个表两两组合,产生的结果
select * from student cross join classinfo;
select * from student join classinfo;
select * from student , classinfo;
查询所有信息,显示学号,姓名,班级编号,班级名
1.把两个表连接成一张大表,就把连接后的表当成单表用
select stuid ,name,student.cid,cname from student,classinfo
2.筛选出正确数据
where student.cid=classinfo.cid;
3.其他筛选条件
内连接:
查询所有信息,显示学号,姓名,班级编号,班级名
select stuid,name,student.cid from inner join classinfo on student.cid=classinfo.cid
外连接:
1 SELECT * FROM student; 2 SELECT * FROM classinfo; 3 SELECT * FROM `subject`; 4 SELECT * FROM score; 5 -- 交叉连接:多个表两两组合产生的结果 6 SELECT * FROM student CROSS join classinfo; 7 8 SELECT * FROM student join classinfo; 9 10 SELECT * FROM student , classinfo; 11 -- 等值连接 12 -- 查询所有学生信息,显示学号,性名,班级编号,班级名 13 -- 1.把两个表连接成一张大表,就把连接后的表当成单表用 14 SELECT stuid,name,student.cid,cname FROM student,classinfo 15 -- 2.筛选出正确数据 16 WHERE student.cid=classinfo.cid; 17 -- 3.其他筛选条件 18 19 -- 查询张三的mysql考试成绩,显示学生姓名,科目名、成绩、班级名 20 SELECT student.`name`,subname,socre,cname FROM student,classinfo,score,`subject` 21 WHERE student.cid=classinfo.cid AND student.stuid=score.stuid 22 AND score.subid=`subject`.subid 23 AND student.`name`='张三' and `subject`.subname='mysql'; 24 25 -- 内连接:inner join 26 -- 查询所有学生信息,显示学号,性名,班级编号,班级名 27 SELECT stuid,`name`,student.cid,cname from student INNER JOIN classinfo 28 ON student.cid=classinfo.cid; 29 30 -- 查询张三的mysql考试成绩,显示学生姓名,科目名、成绩、班级名 31 -- 内连接是两个表两个表的相连,确定连接条件 32 SELECT `name`,subname,socre,cname FROM student 33 INNER JOIN classinfo 34 ON student.cid=classinfo.cid 35 INNER JOIN score 36 ON score.stuid=student.stuid 37 INNER JOIN `subject` 38 ON score.subid=`subject`.subid 39 WHERE `name`='张三' AND subname='mysql'; 40 41 42 -- 查询所有学生课程的考试成绩, 43 -- 查询结果保留学生ID、姓名、性别、课程ID、成绩 44 SELECT student.stuid,`name`,sex,subid,socre from student INNER JOIN score 45 ON student.stuid=score.stuid; 46 47 -- 内连接:查询结果是两个表匹配的数据 48 -- 左外连接:left join:以左表为主表,去右表找匹配数据,如果找到查询出来 49 -- 如果找不到以null填充,说明左表中的数据都会被查询出来 50 SELECT student.stuid,`name`,sex,subid,socre from student left JOIN score 51 ON student.stuid=score.stuid; 52 -- 右外连接:以右表为主表,去左表找匹配数据,如果找到查询出来 53 -- 如果找不到以null填充,说明右表中的数据都会被查询出来 54 SELECT student.stuid,`name`,sex,subid,socre from student RIGHT JOIN score 55 ON student.stuid=score.stuid; 56 57 SELECT student.stuid,`name`,sex,subid,socre from score left JOIN student 58 ON student.stuid=score.stuid; 59 -- 左右外连接可以互转,调一下表的位置即可,以后用左外连接去替代右外连接, 60 -- 因为db2不支持右外连接
JDBC使用步骤:
1.注册驱动
2.建立连接
3.创建statement
4.执行sql,得到Resultset
5.遍历结果集
6.释放资源