目录
第一章 sql基础
sql分类:
1.DDL语句:
1.1.定义
DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象;常用的sql语句关键字包括create、drop、alter等;
1.2简单说明
DDL语句简单来说就是对数据库内部对象进行创建、删除、修改等操作的语言;其不涉及表的定义和节后的修改,更不会涉及其他对象;一般数DBA(数据库管理员)用的比较多。
1.3使用
1.3.1创建数据库
进入MySQL命令窗体,输入-u+用户名 –p 命令,然后输入密码链接数据库;
创建数据库命令:create database +数据库名;例:create database sunshine;
查看等钱用户下的数据库命令:show databases;
使用数据库命令:use +数据库名例:use sunshine;
1.3.2删除数据库
删除数据库命令:drop database +数据库名称例:drop database sunshine;
1.3.3创建表
创建表命令:create table 表名( 字段名字段类型 约束 ,主键约束);
例:CREATE TABLE test (
Id int(11) NOT NULL ,
name varchar(20) NULL ,
sex varchar(5) NULL ,
age int(3) NULL ,
PRIMARY KEY (id)
);
查看表结构命令:desc + 表名例:desc test;
查看创建表的sql语句命令:show creat table +表名 \g;
例:show create table test\g;
1.3.4删除表
删除表命令:drop table +表名; 例:drop table test;
1.3.5修改表
1.3.5.1修改表(字段)类型
修改表类型命令:alter table +表名 modify 字段名类型约束;
例:alter table test modifysex varchar(20);
1.3.5.2增加表字段
增加表字段命令:alter table 表名 add column 字段名类型约束;
例:alter table test addcolumn head varchar(20);
1.3.5.3删除表字段
删除表字段命令:alter table 表名 drop column 字段名;
例:alter table test dropcolumn head;
1.3.5.4修改表字段名
修改表字段名称命令:alter table 表名 change 原有字段名新字段名字段类型;
例:alter table test changesex sexs int(2);
1.3.5.5修改字段顺序(放在最前面或者放在某个字段后面)
修改表字段顺序命令:alter table 表名 modify 字段名类型 first;|| alter table 表名 modify 字段名类型 after 字段名;
例:alter table test modifyname varchar(20) first;|| alter table test modify name varchar(20) after id;
1.3.5.6修改表名
修改表名命令:alter table 原有表名 rename 新表名;
例:alter table test renameuser;
2.DML语句
2.1定义
DML(Data Manipulation Language)语句:数据库操纵语句,用于添加、修改、删除和查询数据库的记录;常用的sql语句关键字包括insert、delete、update、select等;
2.2简单说明
也就是对表的CRUD操作。
2.3使用
2.3.1插入记录
插入记录命令:insert into 表名 (字段名,字段名…) values (字段值,字段值…);
例:insert into user(id,name,age) values (1,'sunshine',22);
2.3.2更新记录
更新命令:update 表名 set 字段=字段值条件
例: update user setname='smile' where id = 1;
2.3.3删除记录
删除命令:delete from 表名条件
例:delete from user whereid = 1;
2.3.4查询记录
2.3.4.1查询特定字段
查询命令:select 字段名 from 表名条件;
例:select id , name , agefrom user where id = 1;
2.3.4.2查询全部字段
命令:select * from 表名条件;
例:select * from userwhere id = 1;
2.3.4.3查询不重复的记录
命令:select distinct 字段名 from 表名条件;
例:select distinct namefrom user;
2.3.4.4多条件查询
命令:select * from 表名 where 条件一 and 条件二
例:select * from userwhere name=’smile’ and age=22;
2.3.4.5排序和限制
排序查询命令:select * from 表名 order by 字段排序方式
例:select * from userorder by id DESC;
关键字:DESC:降序排序 ASC:升序排序
查询特定条数命令:select * from 表名 limit 开始条数,结束条数
例:select * from userlimit 1,3;
2.3.4.6聚合
常用的聚合函数:sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)
关键字:
group by :表示要进行分类的聚合字段 比如要按照年龄统计人数,那么年龄就要写到group by 后面。
with rollup:可选语法,表明是否对分类聚合后的结果进行再汇总
having:表示对分类后的结果再进行条件的过滤
2.3.4.7表连接
用处:当需要显示多个表中的字段的时候,就可以用表连接来实现这样的需求。
说明:表连接主要分为内连接和外连接,主要的区别是:内连接仅选出两张表中相互匹配的记录,而外链接会选出其他不匹配的记录。我们常用的是内连接;内连接又分为左链接和右连接;
定义:左连接(left join):包括所有左表中的记录甚至是右表中没有和他匹配的记录。
右连接(rightjoin):包含所有右表中的记录甚至是左表中没有和他匹配的记录。
例:创建用户表 emp 其中字段有id(主键), name(姓名) , birthday(生日) , sal(薪水) , deptno(部门);创建部门表dept 其中字段有 deptno(主键) , deptname(部门名称);
查询所有用户名和所在部门的名称:select name , deptnamefrom emp left join dept on emp. deptno = dept. deptno;(左连接)
selectname , deptname from dept right join emp on dept. deptno = emp. deptno;(右连接)
2.3.4.8子查询
用处:有时候当进行查询的时候需要用到的条件是列一个select的结果,这个时候就可以使用子查询。
关键字:in(包含), not in(不包含), =(等于), !=(不等于), exists(存在), not exists(不存在)等;
例:从emp表中查出所有部门在dept表中的所有记录
select* from emp where deptno in(select deptno from dept);(如果子查询记录数唯一,还可以用=代替in)
2.3.4.9联合查询
用处:有时候我们会遇到分别查询两个表的记录,查出之后再讲两个表的数据合起来显示,这时就用到了联合查询。
关键字:union:将union all后的结果进行一次distinct,取出重复后再显示。
unionall:直接把查询结果联合在一块显示。
查询emp表和dept表中的部门编号集合(去除重复):
selectdeptno from emp union select deptno from dept;
查询emp表和dept表中的部门编号集合(不去除重复):
selectdeptno from emp union all select deptno from dept;
3.DCL语句
3.1定义
DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句包括grant、revoke等;
3.2简单说明
简单来说,DCL语句主要是DBA用来管理系统中的对象权限时使用,一般开发人员很少用到。
3.3使用
创建一个数据库用户user01,具有对sunshine数据库中所有表有select和insert权限:
例:grant select , inserton sunshine.* to ‘user01’@’localhost’ identified by ‘0000’;
权限变更,收回user01的insert权限:
例:revoke insert onsunshine.* from ‘user01’@’localhost’;