您的位置:首页 > 数据库 > MySQL

mysql笔记1

2015-12-02 22:02 489 查看
1.数据库基本概念

数据库:信息存储的仓库,包括一系列的关系措施!

表:一个数据库中可以有若干张表(形式上你可以看出我们日常生活中建立的表)

字段:表里面的信息会分若干个栏目来存,这些栏目呢,我们在数据库技术中叫"字段",栏目里面存的具体信息叫"字段值"

记录:一条信息我们叫一条记录

一个数据库管理系统中可以建立若干个数据库,每个数据库中又可以建立若干张表,每张表中可以有若干条记录。

2.SQL分类

1)DDL(Data Definition Languages)语句

数据定义语句,通过这类语言可以对数据库进行创建删除更改

2)DML(Data Manipulation Language)语句

数据操纵语句,用于添加、删除、更新和查询数据库记录并检查数据完整性

3)DCL(Data Control Language)语句

数据控制语句,通过此类语句可以对数据库的相关权限进行设置

DDL语句:

1>create database 数据库名;

2>选择要操作的数据库:USE 数据库;

3>查看数据库中所有的数据表:show tables;

4>创建表

create table 表名(

字段1名 字段1类型 列的约束条件,

字段2名 字段2类型 列的约束条件,

...

)

create table t_zjclassroom_convention

(

id bigint not null auto_increment,

name varchar(200),

ts timestamp default CURRENT_TIMESTAMP,

primary key (id)

)

4)删除表

drop table 表名;

5)修改表

1>修改表的字段类型

alter table zhh_table modify id varchar(20);

2>增加表字段

alter table 表名 add [column] 字段定义及字段类型 [first|after 字段名];

alter table zhh_table add age INT after id;

3>删除表字段

alter table 表名 drop [column] 字段名;

4>字段改名
ALTER TABLE zhh_table CHANGE age name varchar(10);

注:change与modify都可以修改表的定义,不同的是change后面需要接两次列名,不方便,但是优点是 change可以修改字段名称

6)更改表名

alter table 表名 rename [to] 新的表名;

alter table zhh_table rename zhh_table1;

3.DML语句

1)插入记录

1>插入记录

insert into 表名(字段1,字段2,字段3,...,字段n) values(值1,值2,值3,...,值n);

也可以不用指定字段名,但是values后面的顺序应该和字段的排序一致

2>一次插入多条记录

insert into 表名(字段1,字段2,字段3,...,字段n)

values

(值1,值2,值3,...,值n),

(值1,值2,值3,...,值n),

(值1,值2,值3,...,值n)

;

2)更新记录

1>更新一个表

update 表名 set 字段1=值1,字段2=值2,...字段n=值n [where 条件];

3)删除记录

1>删除单表中的数据

delete from 表名 [where 条件];

4)查询记录

select 字段名|* from 表名;

1>查询不重复的记录

SELECT distinct field1,field2 FROM 表名;

只要field1,field2任何一个字段有不同就会被选择!

一般使用distinct,只筛选一个字段!

2>条件查询

注:条件字段比较符号:

=,<,>,>=,<=,!=等比较运算符

多个条件之间可以使用or and等

where 后面接条件

select * from 表名 where 条件

3>排序和限制

排序:

asc:由低到高,也是默认值

select * from employee order by salary asc;

desc:由高到底

select * from employee order by salary desc;

多个字段排序

select * from employee order by salary desc,id desc;

限制:

在语句的最后面 加上limit 数字1,数字2 来进行查询数量的限制。

limit 数字1,数字2
数字1代表从第几条记录开启取(是从0开始的),数字2代表取几条!

4>聚合

1)sum求和

select sum(字段名) from 表名;

2)count记录总数

select count(*|字段名) from 表名;

3)max最大值

select max(字段名) from 表名;

4)min最小值

select min(字段名) from 表名;

5)GROUP BY分类聚合

select department,sum(salary) from employee group by department;

6)HAVING

注意:having和where的区别在于,having是对聚合后的结果进行条件过滤,而where是在聚合前就对记录进行过滤,应该尽可能的对记录进行先过滤!

WHERE,GROUP BY,HAVING,ORDER BY,LIMIT在查询语句中的顺序;

SELECT * FROM zhh01 WHERE id>1 GROUP BY name HAVING age>10 ORDER BY age DESC LIMIT 1,3;

5>表连接

需求:显示多个表中的字段的时候即可使用表连接

连接分类

内连接:选取两张表中相互匹配的记录

外连接:不仅仅选取两张相互匹配的记录,并且会选出其他不匹配的记录

举例:

内连接:select 表.字段,.... from 表1名,表2名,... where [匹配的条件比如 表1.字段=表2.字段];

SELECT * FROM zhh01,zhh02 WHERE zhh01.id = zhh02.id;

select 语句可以给字段起别名!直接写在需要查询显示的字段的后面就ok

SELECT zhh01.id id01,zhh02.id id02 FROM zhh01,zhh02 WHERE zhh01.id =zhh02.id ;

外连接

1)左连接

概念:包含左边表中的所有记录(包括右表中没有和它匹配的记录)

select ename,deptname from emp left join dept on emp.deptno=dept.deptno;

select * from zhh01 left join zhh02 on zhh01.id=zhh02.id;

2)右连接

概念:包含右边表中的所有记录(包括左表中没有和它匹配的记录)

左连接和右连接是可以相互转换的!

6>子查询

需求:一个查询需要另外一个查询的结果参与的时候

用于子查询的关键字:

in

语法:select * from employee where id in(select eid from employee_late);

in 在..里面

注意点 in后面的子语句必须只返回一个字段

若查询结果唯一(只有一条)可以使用=代替in

not in

与in相反

exists

语法:select语句 where exists(select 语句)

例句:

select * from zhh01 where EXISTS (select eid from zhh01_1 where zhh01.id=zhh01_1.eid);

exists:后面那个子语句有没有查询出记录来,如果查询出记录来返回true,否则就是false

并且查询出来的记录的具体的值是NULL也是没有关系,也是返回true.

not exits

与exists相反
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: