欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL基础、DDL语句、DML语句、DCL语句实例讲解

程序员文章站 2022-05-21 08:13:39
SQL:Structure Query Language,结构化查询语言。 DDL语句:数据定义语言 DML语句:数据操纵语言 DCL语句:数据控制语言 DDL语句 对数...

SQL:Structure Query Language,结构化查询语言。

DDL语句:数据定义语言 DML语句:数据操纵语言 DCL语句:数据控制语言


DDL语句

数据库内部的对象进行创建(create)、删除(drop)、修改(alter)等操作。

与DML语句最大的区别就是DML只是对表内部数据(记录)进行操作,而不涉及表的定义、结构的修改,更不会涉及其他对象。

1、创建数据库

create database test1;
show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| samples             |
| sys                 |
+---------------------+

information_schema: 主要存储系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息、分区信息等。

mysql: 存储了系统的用户权限信息。

2、删除数据库

drop database test1;

3、创建表

create table emp(
    ename varchar(10),
    hiredate date,
    sal decimal(10,2),
    deptno int(2)
);

查看表的定义:

desc emp;

查看表的创建语句:

show create table emp \G;

4、删除表

drop table emp;

5、修改表

(1)修改表类型

alter table emp modify ename varchar(20);

(2)增加表字段

alter table emp add column age int(3);

(3)删除表字段

alter table emp drop column age;

(4)字段改名

alter table emp change age age1 int(4);

注意:change和modify都可以修改表的定义,不同的是change后面需要写两次列名。
change的优点是可以修改列名称。

(5)修改字段排列顺序

alter table emp add birth date after ename;
alter table emp modify age int(3) first;

(6)更改表名

alter table emp rename emp1;

DML语句

1、插入记录

insert into emp(ename, hiredate, sal, deptno) values('zzx1', '2000-01-01', '2000', 1);

注意:含可空字段、非空但是含有默认值的字段、自增字段,可以不用在insert后的字段列表里出现,values后面只写对应字段名称的value。

insert into dept values(5, 'dept5'),(6, 'dept6');

2、更新记录

update emp set sal=4000 where ename='lisa';

注意:可以同时更新多个表中的数据。多表更新可以用在根据一个表的字段来动态地更新另一个表的字段。

update emp a,dept b set a.sal=a.sal*b.deptno, b.deptname=a.ename where a.deptno=b.deptno;

3、删除记录

delete from emp where ename='dony';

注意:可以删除多个表中的记录。

如果from后面的表名用别名,则delete后面也要用相应的别名,否则会提示语法错误。

delete a,b from emp a, dept b where ...;

4、查询记录

(1)查询不重复的记录

select distinct deptno from emp;

(2)where条件查询

(3)排序和限制

排序:order by field1 [desc/asc],field2 [desc/asc]

select * from emp order by sal limit 1,3;

(4)聚合

统计公司总人数:

select count(1) from emp;

统计各部门的人数:

select deptno,count(1) from emp group by deptno;

统计各部门的人数以及总人数:with rollup表明是否对分类聚合后的结果进行再汇总

select deptno,count(1) from emp group by deptno with rollup;

统计人数大于1人的部门:

select deptno,count(1) from emp group by deptno having count(1) > 1;

统计公司所有员工的薪水总额、最高和最低薪水:

select sum(sal),max(sal),min(sal) from emp;

注意:having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤。

(5)表连接

内连接

左连接

右连接:a right join b on a.deptno = b.deptno;

(6)子查询

关键字:in、not in、=、!=、exists、not exists等。

如果子查询记录数唯一,可以用=代替in。

某些情况下,子查询可以转化为表连接。

表连接在很多情况下用于优化子查询。

(7)记录联合

union

union all


DCL语句

创建一个数据库用户z1,具有对sakila数据库中所有表的select/insert权限:

grant select,insert on sakila.* to 'z1'@'localhost' identified by '123';

收回insert权限:

revoke insert on sakila.* from 'z1'@'localhost';