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相反
数据库:信息存储的仓库,包括一系列的关系措施!
表:一个数据库中可以有若干张表(形式上你可以看出我们日常生活中建立的表)
字段:表里面的信息会分若干个栏目来存,这些栏目呢,我们在数据库技术中叫"字段",栏目里面存的具体信息叫"字段值"
记录:一条信息我们叫一条记录
一个数据库管理系统中可以建立若干个数据库,每个数据库中又可以建立若干张表,每张表中可以有若干条记录。
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相反
相关文章推荐
- Mysql出现插入中文???的问题
- MySQL中的find_in_set(A, B)函数,判断字符串A是否存在B中
- MySQL命令大全
- mysql分区表管理
- Mysql记录集锦
- MySQL当中的闰月最后一天的计算问题
- mysql5.1升级5.5
- mysql ERROR: Error 1005: Can't create table (errno: 121)
- DataSource 的理解
- MySql
- Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
- MySQL 常用的UPDATE操作
- mysql的伪列
- MySQL和MsSQL实时自动同步
- 将OWL本体文件存储到MySQL数据库
- 让MySQL支持Emoji表情 mysql 5.6
- Xtrabackup与innobackupex热备份MySQL数据
- 再谈Mysql MHA
- mac mysql error You must reset your password using ALTER USER statement before executing this statement.
- MySQL 5.7.9 免安装配置