SQL基础

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';

查阅帮助

  1. 通过?contents按层次查看帮助
  2. 快速查阅帮助?create table
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值