数据库操作:
1.创建数据库
create database 数据库名称 [character set 字符集 collate字符集校对规则]
2.查看数据库
show databases; //查看数据库服务器中的所有数据库
show create database 数据库名称; //查看摸个数据库的定义信息
3.修改数据库
alter database 数据库名称 character set 字符集 collate 校对规则;
4.删除数据库
drop database 数据库名称;
5.其他数据库操作
//切换数据库
use 数据库名称;
//查看当前正在使用的数据库
select database();
mysql表格使用:
1.mysql创建表
create table 表名称(字段名称 字段类型(长度)约束);
2.切换到某个数据库
use 数据库名;
3.查看数据库下的表
show tables;
4.查看表的结构信息
desc 表的名称;
5.删除表
drop table 表的名称;
查看表单内容: select * from user;
表操作
1.修改表:
1.1添加列
alter table 表名 add 列名 类型(长度) 约束;
1.2修改列类型,长度和约束
alter table 表名 modify 列名 类型(长度) 约束;
1.2.1删除类中unique 约束
alter table 表名 drop index 字段名;
1.3删除列
alter table 表名 drop 列名;
1.4修改列名称
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
1.5修改表名
rename table 表名 to 新的表名;
1.6修改表的字符集
alter table 表名 character set 字符集;
1SQL添加表的记录(增删改查)
注意事项{
1.值的类型与数据库中表列的类型一致。
2.值的顺序与数据库中表列的顺序一致。
3.值的最大长度不能超过列设置最大长度。
4.值的类型是字符串或者是日期类型,使用单引号引起来。
}
1.约束 {
? 约束作用:保证数据的完整性
? 单表约束分类:
? 主键约束:primary key 主键约束默认就是唯一 非空的
? 唯一约束:unique
? 非空约束:not null
}
2.添加记录
添加某几列
insert into user (id,username,password) values (null,‘aaa’,‘123’);
添加所有列
insert into user values (null,'bbb','123',23,'1993-09-01');
2.修改
2.1修改某一列的所有值
update user set password = ‘abc’;
2.2按条件修改数据
update user set password = ‘xyz’ where username = ‘bbb’;
2.3按条件修改多个列
update user set password=‘123’,age=34 where username=‘aaa’;
3.删除
注意事项{
1.删除表的记录,指的是删除表中的一行记录。
2.删除如果没有条件,默认是删除表中的所有记录。
}
1.删除某一条记录
delete from user where id = 2;
2.删除表中的所有记录
delete from user; //DML 数据可恢复 rollback
truncate table user; //DDL 数据不可恢复
*删除表中的记录有两种做法:{
delete from user;
删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用在DML语句上的
truncate table user;
删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。事务不能控制DDL的}
查询:select
4.查询
4.1查询所有学生考试成绩信息
select * from exam;
4.2.查询所有学生的姓名和英语成绩
select name,english from exam;
4.3查询英语成绩信息(不显示重复的值) distinct(去掉重复的值)
select distinct english from exam;
4.4查看学生姓名和学生的总成绩
select name,english+chinese+math from exam;
4.5.别名查询(使用关键字as将列名改为sum)
select name,english+chinese+math as sum from exam;
4.6.where条件查询
4.6.1.查询李四学生的成绩:
select * from exam where name = ‘李四’;
4.6.2查询名称叫李四学生并且英文大于90分
select * from exam where name = ‘李四’ and english > 90;
4.7.like条件查询
4.7.1查询姓李的学生的信息
select * from exam where name like ‘李%’;
4.7.2查询英语成绩是69,75,89学生的信息
select * from exam where english in (69,75,89);
4.8.排序查询
?/* 使用order by 字段名称 asc/desc; */
4.8.1查询学生信息,并且按照语文成绩进行排序:
select * from exam order by chinese;
? 4.8.2查询学生信息,并且按照语文成绩倒序排序:
select * from exam order by chinese desc;
? 4.8.3查询学生信息,先按照语文成绩进行倒序排序,如果成绩相同再按照英语成绩升序排序
select * from exam order by chinese desc,english asc;
? 4.8.4查询姓李的学生的信息,按照英语成绩降序排序
select * from exam where name like ‘李%’ order by english desc;
4.9.分组统计查询–聚合函数
/*使用 if null 排除表中数值位为null 的问题,格式: select sum(ifnull(english,0)) from exam; ifnull将表中的null换成0来进行运算; */
? 聚合函数使用: sum()\count()\max()\min()\avg()\limit{
sum();
? 4.9.1获取所有学生的英语成绩的总和:
select sum(english) from exam;
4.9.2获取所有学生的英语成绩和数学成绩总和:
select sum(english),sum(math) from exam;
4.9.3查询姓李的学生的英语成绩的总和
select sum(english) from exam where name like ‘李%’;
4.9.4查询所有学生各科的总成绩:
select sum(english)+sum(chinese)+sum(math) from exam;
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;
}
分页函数:limit---分页函数
格式: limit [offset,] rows
[]:表示[]里面可写可不写
offset:从哪一行开始(初始行从0开始)
rows:取多少行
select * from 表名称 limit M , N 从数据库中第M条记录开始取N条数据 (M从0开始算)
?
5.分组查询
? 语法:使用group by 字段名称;
? 5.1按商品名称统计,每类商品所购买的个数:
select product,count(*) from orderitem group by product;
5.2按商品名称统计,每类商品所花费的总金额:
select product,sum(price) from orderitem group by product;
条件查询
使用where子句{
> , < , >= , <= , <> ,=
like:模糊查询
in: 选择查询
条件关联:and , or ,not
between…and…
}
使用like查询{
like可以进行模糊查询,在like子句中可以使用_或者%作为占位符。
_只能代表一个字符,而%可以代表任意个字符。
}
补充:
union 去重
union all 不去重
例、查询所有教师和同学的NAME、sex和birthday.
SELECT te.tname,te.tbirthday,te.tsex FROM teachers te UNION SELECT st.sname,st.sbirthday,st.ssex FROM students st;
SELECT t1.tname FROM teachers t1 UNION ALL SELECT t2.tname FROM teachers t2;
substring("str",1,4) //截取第1位到第4位
9.9总结:
书写的一般顺序
S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);(其中select和from是必须的,其他关键词是可选的)
执行的一般顺序
from--where--group by--having--select--order by
from:需要从哪个表中检索数据
where:根据条件过滤表中的数据 ----针对表进行筛选
group by:将上面过滤的数据分组
having:对上面已经分组的每一组数据进行过滤---针对分组后的每一组进行筛选
select:查看结果集中的那一列
order by:把结果按照什么顺序展示
***** where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字having
数据类型
/************************************************************************
Java中的类型 MySQL中的类型
byte/short/int/long tinyint/smallint/int/bigint
float float
double double
boolean bit
char/String char和varchar类型
char和varchar的区别:
* char代表是固定长度的字符或字符串。
* 定义类型char(8),向这个字段存入字符
****************************************************************************/
日期格式
/************************************************************************
Date 日期时间类型格式:
date/time/datetime/timestamp
datetime和timestamp区别
* datetime就是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用null存入到数据库中
* timestamp也是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用当前的系统时间存入到数据库中。
File 文件格式:
BLOB/TEXT
****************************************************************************/
外键约束
添加外键约束(在多的一方创建外键指向一的一方的主键)
alter table 表名 add foreign key (子键名) references 主表名 (对应主健名);
设置外键为非空
alter table 表名 modify 字段 int not null;
连接查询–
交叉连接 : 查询到的是两个 [个表的笛卡尔积.
select * from 表1 cross join 表2;
select*from 表1,表2;
内连接:inner join(inner是可以省略的)
(显示内连接)使用inner join关键字
select * from 表1 inner join 表2 on 关联条件;
(隐示内连接不使用inner join关键字
SELECT * FROM 表1,表2 where 关联条件;
外连接:outer join(outer 可以省略的)
左外链接:
select*from 表1 left outer join 表2 on 关联条件;
select*from 表1 right outer join 表2 on 关联条件;
子查询:一个查询语句条件需要依赖另一个查询语句的结果.
带 in 的子查询
查询学生生日在91年之后的班级的信息。
select * from classes where cid in (SELECT cno FROM student WHERE birthday > '1991-01-01');
带 exists 的子查询
查询学生生日大于91年1月1日,如果记录存在,前面的SQL语句就会执行
select * from classes where exists (SELECT cno FROM student WHERE birthday > '1991-01-01');
带 any 的子查询
带any的子查询 (符合括号内任意一个就可以执行)
SELECT * FROM classes WHERE cid > ANY (SELECT cno FROM student )
带 all 的子查询
带all的子查询 (符合括号内所有条件才可以执行)
SELECT * FROM classes WHERE cid > ALL (SELECT cno FROM student)
查询班级名称,和班级总人数
SELECT c.cname,COUNT(*) FROM classes c,student s WHERE c.cid = s.cno GROUP BY c.cname;
查询学生的姓名和学生所选的总课程平均成绩。
select s.sname,avg(sc.score) from student s,stu_cour sc where s.sid = sc.sno group by s.sname;