浅析MySQL(一)

  首先,Mysql是什么?这是链接) 存放数据的仓库,有自己的命令语言(sql语句,一种非过程性语言),被广泛地应用在Internet上的中小型网站中,体积小,速度快,成本低,还开源。
历史嘛可以追溯到我还没出生前(中间有几个大公司之间的撕逼故事和富有传奇色彩的一生自己看吧)。。。被sun收购了,然后sun被甲骨文(oracle)收购。反正不管在谁的手里,产品都是好产品。(这是链接)

  其次,sql语句是对数据库,表,表信息逐一增删改查

  

* DDL    :Data Definition Language.数据定义语言.
* create 、alter、drop ...

* DML    :Data Manipulation Language.数据处理语言.
* update 、 insert 、 delete...

* DCL    :Data Control Language.数据控制语言.
* if 、grant...

* DQL    :Data Query Language.数据查询语言.
* select

  注意:1.select查询语句的书写顺序:S...F...W...G...H...O...

     2.sql语句的执行顺序:F...W...G...H...S...O...

  对于sql语句中查询(select)作为重点单独列出,MySQL是一个关系型数据库,表和表之间存在关系表现形式有:一对一,一对多,多对多.那么查询数据的方式就会分为单表查询和多表查询,在单表的查询基础上,多表查询加大学习成本.

  一.这里先介绍单表查询:

     1.基本查询方法:select * from A;

     2.起别名 select name n from A;

     3.select的条件过滤 

      

 1 select * from A where 条件
 2 
 3 where子句后的运算符:
 4 * > ,< ,>= ,<= ,= ,<>
 5 * in:一组值.
 6 * like    :模糊查询.
 7 * 使用占位符: _和% 8 * _代表的是一个字符:    where name like '张_';
 9 * %代表的是任意个字符: where name like '张%';
10 *% :以张开头.
11 * %张 :以张结尾.
12 * %%:包含张即可.
13 * is null
14 * and , or ,not  (与或非) 

 

 

 

     4.查询记录的排序

    

* 语法:
* select * fromwhere 条件 order by 列名(字段,也就说按什么分组) asc/desc;
     asc:代表排序的时候按照升序排序.
     desc:代表排序的时候按照降序排序.
     默认值:asc:升序.

* 对数学成绩进行排序后输出:
* select * from exam order by math;

* 对总成绩按照从高到低顺序排序输出:
* select name,math + english + chinese from exam order by math + english + chinese desc;

* 对学生的数学成绩进行降序排序,如果数学成绩相同,那么参照英语成绩进行降序.
* select * from exam order by math desc,english desc;

 

 

 

     5.聚合函数

      count(*):求个数

      max():求最大值

      min():求最小值

      avg():求平均值

      这个聚合函数又叫分组函数,它不可以放在where后当作条件,但当遇到,求平均值大于xxx时,可以使用group by 进行分组 然后在分组后的having 使用聚合函数

      6.分组统计

       group by 列名

       select *|列名 from 表名 where 条件 group by 列名 having 分组条件过滤 order by 列名;  

  .再介绍多表查询:

  一对多的建表原则:在多的一方创建一个字段,作为外键指向一的一方的主键,一对多的关系如下:

* 这种一对多的关系类似于古代的皇帝,他可以有很多的妃子,但是这些妃子属于这一个皇帝

create table king (
    id int primary key auto_increment,<主键>
    dname varchar(20)
);
 
create table rani (
    id int primary key auto_increment,<主键>
    name varchar(20),
    age int,

        <内键约束的方式把妃子的名字和皇帝的id绑定>
    foreign key(name) references king (id)
        
);
    

 

   还有一种外键的连接方式:

  

 1 * 这种一对多的关系类似于古代的皇帝,他可以有很多的妃子,但是这些妃子属于这一个皇帝
 2 
 3 create table king (
 4     id int primary key auto_increment,<主键>
 5     dname varchar(20)
 6 );
 7  
 8 create table rani (
 9     id int primary key auto_increment,<主键>
10     name varchar(20),
11     age int,     
12 );
13     
14 * alter table rani add foreign key(age) references king(id);<外键约束的方式>

 

 

 

 

  多对多的建表原则是:有一个第三张表,这张的两个字段做为外键做为其他两个表的主键.也就是说在做多对多表创建时,第三张表的字段要分别对两张表的主键进行外键约束.

  一对一的建表原则是:一个表的主键指向另一个表的主键,或者一个表的外键指向一个表的主键,同时将这个外键设置为唯一,unique.

  多表查询的方法:

      笛卡尔积查询法:

            select * from A,B; 每一条记录都会交叉显示,所有笛卡尔积查询又叫交叉查询法,这个查询法慎用!!,对于数据多的数据库,使用就会宕机,因为查询数据过于庞大.

      内连接查询法:

            select * from A inner join B on name=age;(内连接中inner可以省略)

           隐式内连接:

            select * from A,B where name=age;(这种隐式内连接查询在多表查询中,方便快捷,超上手)

           显式内连接:

            select * from A join B on name=age;

      外连接查询法:

        左连接查询:

            select * from A left outer join B on name=age;(是左边表的全部,和两个表交集) 

        右连接查询:

            select * from A right outer join B on name=age;(是右边表的全部,和两个表交集)

      还有一种子查询的方式,这种查询方式基于另一条查询语句的结果,例如:

1 * 求平均年龄:
2 * select avg(age) from employee;
3 * 求员工年龄大于平均值:
4 * select * from employee where age > 平均值.
5 * 完整语句:
6 * select * from employee where age > (select avg(age) from employee);

   

  

        既然是存放数据的仓库,那么和我们的java有什么关系呢?又有什么连接方式?    

  这就需要我们Java Datebases connection(Jdbc)来进行连接.

  2016-10-03 18:38 何koo

  

posted @ 2016-10-03 16:07  何koo  阅读(192)  评论(0)    收藏  举报