关于数据库的基本操作

一,

数据库的操作
查: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.释放资源

原文地址:https://www.cnblogs.com/yumu77/p/13782955.html