MySql快速入门

一、数据库基本概念
数据库:信息存储的仓库,包括一系列的关系措施!
表:一个数据库中可以有若干张表(形式上你可以看出我们日常生活中建立的表)
字段:表里面的信息会分若干个栏目来存,这些栏目呢,我们在数据库技术中叫"字段",栏目里面存的具体信息叫"字段值"
记录:一条信息我们叫一条记录
一个数据库管理系统中可以建立若干个数据库,每个数据库中又可以建立若干张表,每张表中可以有若干条记录。
二、MySQL支持的数据类型
数值类型、日期类型、字符串类型
三、(My)SQL使用入门
2.SQL分类
1)DDL(Data Definition Languages)语句
数据定义语句,通过这类语言可以对数据库进行创建删除更改
2)DML(Data Manipulation Language)语句
数据操纵语句,用于添加、删除、更新和查询数据库记录并检查数据完整性
3)DCL(Data Control Language)语句
数据控制语句,通过此类语句可以对数据库的相关权限进行设置
3.DDL语句
对数据库内部的对象进行创建、删除、修改等操作的语言,DDL语句更多的是由数据库管理员(DBA)使用,开发人员一般很少使用
登录mysql之后就可以使用sql语句对数据库进行各种操作啦!
show databases; 查看数据库列表
1)创建数据库
1>create database 数据库名;
2>选择要操作的数据库:USE 数据库; 对于要操作的数据库我们需要使用use来选择一下!
3>查看数据库中所有的数据表show tables;
2)删除数据库
drop database 数据库名称;
3)创建表(在哪个数据库里面创建表需要先使用use选择到那个要操作的数据库)
1>创建表
create table 表名(
字段1名 字段1类型 列的约束条件,
字段2名 字段2类型 列的约束条件,
...
)
2>创建完表之后可以查看表的定义
desc 表名;
3>查看创建表的SQL语句
show create table 表名 G
G选项使得记录能够按照字段竖向排列,以便更好地显示内容较长的记录,G后面无需再加分号
4)删除表
drop table 表名;
5)修改表
1>修改表的字段类型
alter table 表名 modify [column] 字段定义 [first|after 字段名];
2>增加表字段
alter table 表名 add [column] 字段定义 [first|after 字段名];
3>删除表字段
alter table 表名 drop [column] 字段名;
4>字段改名
alter table 表名 change [column] 旧的字段名 字段定义 [first|after 字段名];
注:change与modify都可以修改表的定义,不同的是change后面需要接两次列名,不方便,但是优点是change可以修改字段名称
5>修改字段排列排序
前面介绍的字段增加和修改语法(add/change/modify)中,都有一个可选项first|after 字段名,这个选择可以用来修改
字段在表中的位置新增的字段默认是加载在表中最后位置,而change/modify 默认都不会改变字段的位置
alter table t1 modify id2 tinyint first;
alter table t1 modify id2 tinyint after id1;
注意:change/first|after 字段名 这些关键字都是属于MySQL在标准SQL上的扩展,在其他的数据库上不一定适用
6)更改表名
alter table 表名 rename [to] 新的表名;

 

4.DML语句
查询 select * from 表名;
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 条件];
2>更新多个表中数据
update 表1,表2,...表n set 表1.字段1=表达式1,表n.字段n=表达式n [where 条件];
注:多表更新更多的用在根据一个表的字段来动态的更新另外一个表的字段
简单实例:
update t1,t2 set t1.age=2000,t2.age=3000 where t1.id=1 and t2.id=1;
3)删除记录
1>删除单表中的数据
delete from 表名 [where 条件];
2>删除多个表中的数据
delete 表1,表2,...表n from 表1,表2,...表n [where 条件];
不管是单表还是多表,不加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>聚合
①sum求和
select sum(字段名) from 表名;
②count记录总数
select count(*|字段名) from 表名;
③max最大值
select max(字段名) from 表名;
④min最小值
select min(字段名) from 表名;
⑤GROUP BY分类聚合
select department,sum(salary) from employee group by department;
⑥WITH ROLLUP分类聚合后的结果进行再汇总
select sum(salary) from employee group by department with rollup;
⑦HAVING
注意:having和where的区别在于,having是对聚合后的结果进行条件过滤,而where是在聚合前就对记录进行过滤
,应该尽可能的对记录进行先过滤!
select sum(salary) from employee group by department having sum(salary)>1000;
在一起使用:select sum(id),max(id),min(id),count(*) from a1;

5>表连接
需求:显示多个表中的字段的时候即可使用表连接
连接分类
内连接:选取两张表中相互匹配的记录  

  也可以这么写 跟SQL的一样  select * from 表名 a inner join 表名 b on a.字段=b.字段;

外连接:不仅仅选取两张相互匹配的记录,并且会选出其他不匹配的记录
举例:
内连接:select 表.字段,.... from 表1名,表2名,... where [匹配的条件比如 表1.字段=表2.字段];
select 语句可以给字段起别名!直接写在需要查询显示的字段的后面就ok
给表起别名
外连接
1)左连接
概念:包含左边表中的所有记录(包括右表中没有和它匹配的记录)
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
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 语句);
exists:后面那个子语句有没有查询出记录来,如果查询出记录来返回true,否则就是false
并且查询出来的记录的具体的值是NULL也是没有关系,也是返回true.
not exits
与exists相反
1)select * from emp where deptno in(select deptno from dept);
2)若查询结果唯一可以使用=代替in
select * from emp where deptno=(select deptno from dept limit 1);
7>记录联合
我们常常会碰到需要将两个表或者多个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示这是就需要用到记录联合
多个select 语句用
UNION或者UNION ALL隔开即可实现
区别: 前者 会将多个查询结果合并后并且进行去除重复后返回
后者 则直接合并并不去除重复
联合的条件:查询的列个数要相等

原文地址:https://www.cnblogs.com/xiaowie/p/11881008.html