SQL:结构化查询语言,可以操作所有关系型数据库
数据的存储:
定义的变量存储在内存里面,随着程序的执行完毕而消失
javaSE->IO流:
针对文件进行存储,可永久保存,但频繁的使用IO流对数据进行读写,效率低
数据库软件:
1.对数据进行永久保存
2.执行效率高
3.方便维护和管理
一.创建库
* 登录命令
dos:mysql -u root -p
root
*如何创建一个数据库
create database mydb_01;(数据库的名字)
*删除一个数据库
drop database mydb_01;
*修改创建数据库的字符集
alter database mydb_01 default character set gbk;(将UTF-8改成JBK格式)
*查看创建数据库中指定(全部)的字符集
show create database mydb_01;
show databases;
二.创建表
*切换库
use mydb_01;
1.创建表
语法:create table 表名(字段名称 字段类型,字段名称 字段类型.....)
create table student(id int ,name varchar(20),age int);
--常见的字段数据类型:int varchar char double date time datatime timestamp text(大文本) blob(存字节)
*查看所有表
show tables;
*查看表中内容(表结构)
desc sdudent;
2.修改表
*在表中添加字段
alter table student add column gender(字段名称) varchar(字段类型);
*修改字段类型
alter table student modify column gender varchar(2);
*修改字段名称
alter table student change column genter sex(新名称) varchar(20);
*删除字段
alter table student drop column age;
*修改表名
alter table student rename to teacher;
*删除表
drop table student;
三.管理数据
1.插入数据(整体加入数据)
insert into student values(1,"张三",20);
--关于插入数据的注意事项
1.插入字段的值和字段的信息顺序一致
2.数量一致
*插入部分字段
insert into student(id,name) values (2,"李四");
*查询当前表中的所有数据(重)
select * from student ;
2.修改数据(批量修改,一般不适用)
update student set name ="张三";
*修改指定字段
update student set name = "李四" where id =1;
*修改多个字段
update student set name ="王五",age = 30 where id = 2;
3.删除数据(delete from)
*删除指定字段
delete from student where id = 2;
*全部删除
delete from student;
truncate table student;
--truncate table:也是全表删除,只能删除数据而不能删除单个数据
--关于delete from 和 truncate table 这俩个的区别
1.delete from 既可以删除全表,也可以删除指定数据
truncate table 只能删除全表数据
2.delete from 可以回滚(可还原)
truncate table 不可以回滚
3.(重)delete from 不可以让自增长的约束重置
truncate table 可以让自增长的约束重置
四.数据查询
*查询所有数据
select * from student;
*查询指定字段
select id ,name from student;
*查询的时候指定别名
select id as '编号' ,name as '名字' from student;(as 可以省略)
*查询时动态添加指定的列
select id as '编号' ,name as '名字','java就业班' as '班级' from student;
*查询时合并列
select name as '姓名' ,(mysql + servlet) as '总成绩' from student;
注:合并的俩个列字段名称要保持一致
*查询特定字段
select * from student where ...;
&&-->and
||-->or
IN(数值 1,2,3,4);在里面选择
(重)null 值运算
ifnull(comm,0);
*查询值是null的内容
is(is not) null;
*模糊查询(like)
需配合通配符使用(_匹配单个任意字符;%匹配多个任意字符)
select * from emp where name like 'S%';(名字以S开头)
*去除重复记录(distinct)
select distinct sal from emp where sal = 3000;(展示一条sal=3000的内容)
*排序(order by)
select * from emp order by sal ASC(从小到大);(DESC:从大到小)
*查询平均工资
select avg(sal) as 平均工资 from emp;
max(sal)
min(sal)
*查询个数(count)
select count(*) as 人数 from emp;
*(重)分组查询(group by)
--查询每个部门的总工资(配合聚合函数使用)
select deptno(部门),sum(sal) as 总工资 from emp group by depyno(以部门分);
--查询工资大于1200的部门总工资
select deptno ,sum(sal) from emp where sal>1200 group by deptno;
--查询工资大于1200的部门总工资,且总工资大于8500
select deptno ,sum(sal) from emp where sal>1200 group by deptno having sum(sal) >8500;
having:筛选后
where:筛选前
*分页(limit)
select * from limit 0(开始索引),5(每页5条);
公式:索引=(页码-1)*每页条数
四.完整型约束
对字段加以限定,约束数据
约束:一种束缚,一种限定
1.主键约束(primary key)
某个字段设置了主键,这个字段唯一且非空,一张表中只能有一个主键!
--添加主键的方式
1.create table student(sname varchar(20) primary key, age int);
2.create table student(
sname varchar(20),
sage int,
primary key(sname));
3.create table student(
sname varchar(20),
sage int);
alter table student add primary key(sname);
*联合主键
create table student(
sname varchar(20),
sage int);
alter table student add primary key(sname,sage);
*非空约束(not null)
create table student(
sname varchar(20)not null,
sage int);
*唯一约束(unique)对null值不起作用
create table student(
sname varchar(20) unique,
sage int);
*自增长约束(auto_increment)
create table student(
sid int primary key auto_increment,
sname varchar(20),
sage int);
2.外键约束(foreign key)
实体:实体之间的关系 1对1的关系 1对多的关系 多对多的关系
添加外键约束的目的:是为了保证数据的有效性和完整性
特点:主表(1表)一方不能删除从表(多表)中还在引用的数据
从表中不能添加主表中没有描述的数据
*添加外键约束
用法:foreign key(外键字段) references 主表(主键)
例:alter table orders add foregin key(user_id) references users(uid);
*多对多通过中间表转换成一对多
--多表查询
select user.*,order.* from user,orders;
俩张表关联查询(笛卡尔积),数据没有意义
--多表条件查询(查询出每个人的订单详情)
内连接:
隐式:select user.*,orders.* from user,orders where user.id=orders.user_id;
显式:delect user.id,user.username,orders,* from user inner join order on user.id = orders.user_id;
外连接:
左外连接:查询所有的订单信息,用户没有订单是null
select user.*,orders.* from user left outer join orders on user.id = orders.user_id;
右外连接:查询所有的订单信息,没有的用户以null显示
select user.*,orders.* from user right outer join orders on user.id = orders.user_id;
--子查询
一张表的查询条件,需要依赖于另一张表的查询结果
例:先找到用户的ID,用ID去订单中查找
select user.id from user where username='张三';
select orders.* from orders where user_id=3;
一步走:
select orders.* from orders where select user.id from user where username='张三';