浅析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 * from 表 where 条件 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

浙公网安备 33010602011771号