javaWeb系列之十一(数据库)

来源:互联网 发布:学知不足 教然后知困 编辑:程序博客网 时间:2024/05/29 15:26

1.数据库的简介
常见数据库:
oracle:是收费
DB2数据库:收费,银行,
SQLServer数据库,中型的数据库
MySQL数据库:被Oracle
SQLite数据库,小型嵌入式的数据库,用在安卓
sybase数据库:没有使用,建模的数据库powerDesigner
都叫关系数据库:实体之间的关系

非关系数据库:mongodb redis

2.mysql的存储结构
    数据库
    数据库表:相当于javabean
    表中的记录:相当于javabean里面的对象

3.标准sql:这种语句不仅可以在mysql数据库里面使用,
4.SQL语言的简介
    Structured Query Language,结构化查询语言
    非过程形语言:不需要依赖任何条件就可以执行
    sql的分类   
    DDL :数据库定义语言:(Data Definition Language)用来定义数据库的对象,如数据表,视图,索引
    DML :数据操作语言,(Data Manipulation Language)曾删改查 :update,
    DCL :数据控制语言:Data Control Language 指用于设置用户权限和控制事务语句
    如grant,revoke,if…else,while,begin transaction
    =========官方分类===========
    DQL:数据查询语言:Data Query Language

5.对数据库进行操作
    要对数据库进行操作,首先连接数据库
    执行这个命令的前提:mysql服务必须是启动的
    打开cmd窗口,在窗口里面输入一个命令
    mysql -u root -p
    -u : username
    -p :password
    输入命令之后,当出现 mysql>,表示连接成功
    创建数据库
    语句:create database 数据库的名称;
    查看数据库(显示当前所有的数据库)
    语句:show databases
    删除数据库
    语句:drop database 要删除的数据库的名称;
    切换数据库
    语句:use 要进入的那个数据库的名称;

6.对数据库表进行操作
(1) 创建数据库表
    如果想要创建表,首先要到某个数据库里面去
    语句:
    create table 表名 (
    字段名称1 字段类型,
    字段名称2 字段类型
     );
    向数据库表里面添加记录时候,如果记录类型是一个字符串类型或者日期类型,
    注意一:字符串类型需要写长度
    注意二:这两个类型的值必须使用引号括起来(单引号)
    字段的类型
    字符串型 
    VARCHAR、CHAR
    如果把字段的类型设置成字符串类型,类型后面必须要加上长度 varchar(20) char(20)
    VARCHAR和CHAR区别:
    char类型长度是固定的
    如果定义char(20),长度固定20,记录比如值aa,到数据库表里面存储的方式 aa加很多空格
    varchar类型长度是可变的
    如果定义varchar(20),记录值是bb,到数据库表里面存储方式:直接存bb,没有空格
    大数据类型
    BLOB、TEXT
    主要用于存储文件到数据库,但是在实际应用中,不可能直接把文件存到数据库里面
    数值型
    TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
    对应于java里面基本数据类型里面 
     byte        short    int long    float   double
    逻辑性 
    BIT
    对应于java基本数据类型的boolean
    日期型
    DATE、TIME、DATETIME、TIMESTAMP
    data:只能表示日期 
    time:只能表示实际
     ==========================
 下面两个类型既可用表示日期,也可以表示时间
    datetime:需要手动输入日期的格式
    TIMESTAMP:不需要手动输入,字段添加当前的日期到数据库表里面
    创建一个员工表 employee
     字段 属性
     id int型
     name 字符型
     sex 字符型
     bir 字符型
     job 字符型
     sal int型
    语句
     create table employee (
      id int,
      name varchar(40),
      sex varchar(20),
      bir varchar(40),
      job varchar(40),
      sal int
     )
 (2) 查看创建的表结构
        语句:desc 表名称;
 +-------+-------------+------+-----+---------+-------+
 | Field | Type        | Null | Key | Default | Extra |
 +-------+-------------+------+-----+---------+-------+
 | id    | int(11)     | YES  |     | NULL    |       |
 | name  | varchar(40) | YES  |     | NULL    |       |
 | sex   | varchar(20) | YES  |     | NULL    |       |
 | bir   | varchar(40) | YES  |     | NULL    |       |
 | job   | varchar(40) | YES  |     | NULL    |       |
 | sal   | int(11)     | YES  |     | NULL    |       |
 +-------+-------------+------+-----+---------+-------+
     关于desc语句的使用中问题
    如果电脑上安装了杀毒软件,在某些情况下,这个语句不能执行,
    卖咖啡,卡巴斯基....
    (3)创建带约束的标签
    约束有三种
    第一种约束:主键约束
        定义的类型后面
        语句:primary key :非空,唯一性
        自动增长:auto_increment
        每次插入记录,自动增加一个值
        比如添加第一条记录 自动添加一个值 1
        比如添加第二条记录,在之前的基础之上+1
    第二种约束:唯一性约束
        这条记录值不能有重复的
        定义的类型后面 unique
    第三种约束:非空约束
        表里面字段上面不能有空数据,必须有数据
        语句 在name varchar(40) not null,
    创建一个带约束的表
 create table person (
  id int primary key,
  name varchar(40) not null,
  sex varchar(20) not null,
  bir varchar(40) not null,
  job varchar(40) not null,
  sal int
 )

 +-------+-------------+------+-----+---------+-------+
 | Field | Type        | Null | Key | Default | Extra |
 +-------+-------------+------+-----+---------+-------+
 | id    | int(11)     | NO   | PRI | NULL    |       |
 | name  | varchar(40) | NO   |     | NULL    |       |
 | sex   | varchar(20) | NO   |     | NULL    |       |
 | bir   | varchar(40) | NO   |     | NULL    |       |
 | job   | varchar(40) | NO   |     | NULL    |       |
 | sal   | int(11)     | YES  |     | NULL    |       |
 +-------+-------------+------+-----+---------+-------+
 (4)删除数据库表
    语句 drop table 要删除的表;
 (5)查看数据库里面所有的标签
    语句 show tables;
 (6)向数据库表中添加记录操作
    语句 insert into  要添加的表名称 values(要添加的值);

 +-------+-------------+------+-----+---------+-------+
 | Field | Type        | Null | Key | Default | Extra |
 +-------+-------------+------+-----+---------+-------+
 | id    | int(11)     | YES  |     | NULL    |       |
 | name  | varchar(40) | YES  |     | NULL    |       |
 | sex   | varchar(20) | YES  |     | NULL    |       |
 | bir   | varchar(40) | YES  |     | NULL    |       |
 | job   | varchar(40) | YES  |     | NULL    |       |
 | sal   | int(11)     | YES  |     | NULL    |       |
 +-------+-------------+------+-----+---------+-------+
 insert into employee values(100,'lucy','nv','2015-11-11','worker',500);
    查看表中的记录
    语句 select * from 表名;
    insert into employee values(100,'lucy','nv','2015-11-11','worker',500)
    insert into employee values(101,'小黑','unknow','2011-01-11','door',1000)
    insert into employee values(102,'小白','nv','1911-11-11','it',2000)
    insert into employee values(103,'大白','nan','1811-11-01','aaa',100000)
 +------+------+------+------------+--------+------+
 | id   | name | sex  | bir        | job    | sal  |
 +------+------+------+------------+--------+------+
 |  100 | lucy | nv   | 2015-11-11 | worker |  500 |
 +------+------+------+------------+--------+------+
 (7)修改表中的记录操作
    语句 update 表名 set 要修改字段名称=要修改成的值  where ....
    练习
    将所有员工薪水修改为5000元。
    update employee set sal=5000;
    将姓名为’lucy’的员工薪水修改为3000元
    update employee set sal=3000 where name='lucy';
    将姓名为’lucy’的员工薪水修改为4000元,job改为ccc。
    update employee set sal=4000,job='ccc' where name='lucy';
    将姓名为’lucy’的员工薪水在原有基础上增加1000元。
    update employee set sal=sal+1000  where name='lucy';
 (10)删除表中的记录的操作
    语句 delete from 表名称 where...
    如果添加where添加,根据添加进行删除;如果没有添加where,把表里面的所有数据都删除
    练习
    删除表中名称为’lucy’的记录。
    delete from employee where name='lucy';
    删除表中所有记录。
    delete from employee;
===========================================================
 查询语句是今天最重要的内容,重点掌握


7、查询数据库表中的记录
 (1)sql分类:DQL (数据查询语言)
    语句 select 要查询的字段(写*表示所有的字段) from 要查询的表名称 where  ..........
    关键字 DISTINCT:表示去除表中重复的记录
    创建一个学生表
 create table stu (
  id int,
  sname varchar(40),
  chinese int,
  english int,
  math int
 )

 * +---------+-------------+------+-----+---------+-------+
 | Field   | Type        | Null | Key | Default | Extra |
 +---------+-------------+------+-----+---------+-------+
 | id      | int(11)     | YES  |     | NULL    |       |
 | sname   | varchar(40) | YES  |     | NULL    |       |
 | chinese | int(11)     | YES  |     | NULL    |       |
 | english | int(11)     | YES  |     | NULL    |       |
 | math    | int(11)     | YES  |     | NULL    |       |
 +---------+-------------+------+-----+---------+-------+
 insert into stu values(201,'熊大',120,20,80);
 insert into stu values(202,'熊二',50,100,60);
 insert into stu values(203,'光头强',200,100,500);
 insert into stu values(204,'李老板',300,10,1000);
    练习:
    查询表中所有学生的信息。
    select * from stu;
    查询表中所有学生的姓名和对应的英语成绩。
    select sname,english from stu;
    去除重复的记录
    select distinct * from stu;
 (2)别名操作
    使用 as 别名的名称
    select sname as n1,english as e1 from stu;
    练习
    在所有学生分数上加10分特长分。
    select chinese+10,english+10,math+10 from stu;
    统计每个学生的总分。
    select chinese+english+math as sum1 from stu;
    查询姓名为熊二的学生成绩
    select * from stu where sname='熊二';
    查询英语成绩大于90分的同学
    select * from stu where english>90;
 (3)显示当前的数据库 : select database();
 (4)select语句里面where条件部分有关键字
    in:记录在范围里面值 
    练习:查询数学分数为60,500的同学
    select * from stu where math in(60,500);
    like:用在模糊查询 
    练习:查询表里面名字里面包含熊的学生
    select * from stu where sname like '%熊%';
    and:表示条件同时满足
    练习:查询数学分>80和语文分>80的同学
    select * from stu where math>80 and chinese>80;
    or: 表示或者
    练习:查询数学分>80 或者 语文分>50的同学   
    select * from stu where math>80 or chinese>50;

 (5)查询操作排序
    语句:order by 要排序的字段
    order by语句要写在select语句的最后
    默认是升序的排序 order by 要排序的字段 asc
    设置降序排序  order by 要排序的字段 desc
    练习:对数学成绩降序排序后输出。
    select * from stu order by math desc;
8、sql语句中的聚集函数
    封装了一些固定的功能,可以在sql语句里面直接使用这个函数实现某些功能
    count函数:得到表中有多少条记录
    语句 select count(*) from 表名  where....
    练习:
    统计一个班级共有多少学生?
    select count(*) as count1 from stu;
    统计数学成绩大于90的学生有多少个?
    select count(*) from stu where math>500;
    统计总分大于220的人数有多少?    
    select count(*) from stu where math+chinese+english>500;
    sum函数: 求和的操作
    语句 select sum(要求和的字段) from 表名 where.....
    练习:
    统计一个班级数学总成绩?
    select sum(math) from stu;
    统计一个班级语文、英语、数学各科的总成绩
    select sum(chinese),sum(english),sum(math) from stu;
    统计一个班级语文成绩平均分
    平均分:总成绩/总人数
    select sum(chinese)/count(*) from stu;

    avg函数:计算平均数
    语句 select  avg(字段) from 表名 where....
    练习:
    求一个班级数学平均分?
     select avg(math) from stu;
    求一个班级总分平均分
    select avg(math+chinese+english) from stu;
    max函数:计算最大值    
    min函数:计算最小值
    练习 
    求班级数学最高分
     select max(math) from stu;
     select min(math) from stu;

9、sql语句的分组的操作
    使用分组操作  
    语句 group by  要分组字段
    创建一个orders 订单表
 insert into orders(id,product,price) values(1,'电视',900);
 insert into orders(id,product,price) values(2,'洗衣机',100);
 insert into orders(id,product,price) values(3,'手电',90);
 insert into orders(id,product,price) values(4,'桔子',9);
 insert into orders(id,product,price) values(5,'手电',90);
 insert into orders(id,product,price) values(6,'电视',900);
 insert into orders(id,product,price) values(7,'洗衣机',100);
    练习:显示每一类商品的总价
        总价格 使用sum(price)
        每一类商品 group by product
        select product,sum(price) from orders group by product;
    having关键字
    在分组的基础上再进行条件的判断
    group by product having sum(price)>100;
    where后面不能写聚集函数,但是having后面可以写聚集函数
    练习:查询购买了几类商品,并且每类总价大于100的商品
    这种写法从逻辑上没有问题的,但是where后面不能写聚集函数
    select product,sum(price) from orders where sum(price)>100  group by product;
    select product,sum(price) from orders  group by product having sum(price)>100;
10、sql语句里面关键字顺序
    select ... from  ... where  .... group by  ... having  .... order by...
    S-F-W-G-H-O 组合 
==========================================================
 1、对数据库表中的记录插入,修改,删除操作
 2、对数据库表中记录的查询操作

11、mysql可视化工具的使用
    通过cmd窗口,向表中插入中文记录,有乱码问题
    解决方法:找到mysql的安装路径,找到一个文件my.ini
    注意:如果要修改mysql里面的文件,首先备份
    default-character-set=gbk
    可视化工具的使用
    在不建议使用这个工具,先通过cmd窗口把sql语句熟悉之后再使用这个工具
12、mysql里面limit关键字
    imit使用
    首先可以写一个参数  limit  3:查询前三条记录
    也可以写两个参数    limit 2,3 : 第一个参数开始位置,从0开始
                                    第二个参数,从第一个参数位置开始向后取几条记录
    查询数据库表中前几条记录 
    select * from stu limit 2;
    查询数据库表中的第几条到第几条记录
    select * from stu limit 1,2;
    这个关键字一般用在分页功能里面
    limit关键字不是标准sql的一部分,只能在mysql里面使用,在其他数据库里面不能使用
    在oracle里面:使用 rownum关键字
    在sqlserver里面:使用top关键字
13、表之间的关系
    一对多的关系
    一个学生只能在一个学院,但是一个学院有多个学生
    一个员工只能在一个部门,一个部门有多个员工
    多对多的关系
    一门课程可以被多个学生选择,一个学生也可以选择多门课程
    一对一的关系
    在中国,一个男人只能有一个妻子
     一个女人只能有一个丈夫
    一个公司只能有一个注册地址,一个注册地址包含一个公司
14、一对多建表原则
    一个员工只能在一个部门,一个部门有多个员工
    首先要确定一对多里面,谁是多的那一边,谁是一的那一边
    其次在多的那一边创建一个字段,这个字段指向一的那一边的主键

15、多对多的建表原则
    一门课程可以被多个学生选择,一个学生也可以选择多门课程
    首先确定表之间的关系
    其次创建第三张表,在创建两个字段,分别指向那两张表的主键
    用第三张表作为两个表关系表

16、一对一建表原则
    一个公司只能有一个注册地址,一个注册地址包含一个公司
    在实际开发中,一般都把数据存到一张表里面

17、多表之间的查询的操作
    创建一个部门表
 create table dept (
  did int,
  dname varchar(40)
 )

 insert into dept values(101,'丐帮');
 insert into dept values(102,'少林');
 insert into dept values(103,'血刀门');
 insert into dept values(104,'崆峒');

 insert into dept values(105,'太极门');
 insert into dept values(106,'宣武门');

 * 创建一个员工表
 create table employee1 (
  eid int,
  ename varchar(40),
  did int
 )

 insert into employee1 values(2001,'乔峰',101);
 insert into employee1 values(2002,'田伯光',102);
 insert into employee1 values(2003,'二师兄',102);
 insert into employee1 values(2004,'孙二娘',104);
 insert into employee1 values(2005,'扈三娘',103);
 insert into employee1 values(2006,'苗人凤',103);

 insert into employee1 values(2007,'苗若兰',null);
 insert into employee1 values(2008,'李寻欢',null);

 * 查询员工对应的门派显示出来
 select * from dept,employee1

 * 得到结果是 笛卡尔积

 (1)使用内连接进行操作

 * 语法 inner join 表 on 两个表关联的条件

 * 最终语句
 select dept.*,employee1.* from dept inner join employee1 on dept.did=employee1.did;

 * 使用内连接其实实现的是交集操作

 * 还有另外一种方式,也可以实现类似于内连接的效果
 select dept.*,employee1.* from dept,employee1 where dept.did=employee1.did;

 
 (2)使用外连接进行操作
 * 外连接有两种:
 ** 左外连接:left outer join 表 on 两个表关联的条件
 select dept.*,employee1.* from dept left outer join employee1 on dept.did=employee1.did;
 *** 左边的表里面的所有内容都显示出来,右边的表只是显示关联的内容

 ** 右外连接:right outer join 表 on 两个表关联的条件
 select dept.*,employee1.* from dept right outer join employee1 on dept.did=employee1.did;
 *** 效果;右边的表里面所有内容都显示出来,左边的表显示关联的内容

===================================================
 1、掌握对数据库表中记录的操作的语句 (插入,修改,删除语句)
 ** 把插入,修改,删除语句至少写一遍
 2、重点掌握查询表中记录的语句
 ** 把查询语句至少两遍

 * 希望不要使用工具,直接使用cmd窗口进行操作

 3、昨天案例,继续完成





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鹦鹉的脚受伤了怎么办 内痔疮疼得厉害怎么办 孕妇用了痔疮膏怎么办 痔疮犯了特别疼怎么办 有痔疮肛门很痛怎么办 这几天痔疮犯了怎么办 孕初期肛裂出血怎么办 胃疼怎么办怎么缓解胃 脚踝崴了肿了怎么办 脚扭了脚背肿了怎么办 儿童脚扭伤肿了怎么办 脚关节扭伤肿了怎么办 小孩脚扭伤肿了怎么办 抱小孩腰扭伤了怎么办 跳舞把腰拉伤了怎么办 脚不小心扭伤了怎么办 娱乐之太帅了怎么办txt 走路走多了脚痛怎么办 胃疼怎么办简单按摩法 经常胃疼的厉害怎么办 半夜胃疼的厉害怎么办 吃消炎药伤胃了怎么办 吃药伤胃了胃疼怎么办 宝宝吃药伤胃了怎么办 胃胀胃痛怎么办快速解决方法 半夜2点3点胃疼怎么办 晚上吃多了胃疼怎么办 骨折打石膏后痒怎么办 脚脖子崴了肿了怎么办 喝酒喝的吐血了怎么办 感冒后咳嗽有痰怎么办 嗓子里老是有痰怎么办 物业把水停了怎么办 机洗衬衫缩水了怎么办 羊绒大衣洗缩水了怎么办 棉质衣服缩水了怎么办 衣服洗了变小了怎么办 毛衣洗后缩水了怎么办 鼻子又大又塌怎么办 苹果6被停用了怎么办 苹果6s手机停用怎么办