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

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';
(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐