SQL语句中不区分大小写,下面都以小写为主,下面的SQL语句第一行是最简便的,第二行是具体的,包含可选的内容,[ ] 中代表的是可选项。

一、数据库操作

创建一个新的数据库:

create database 库名;

create database [if not exists] 库名 [charset=字符集] [collate=校验规则];

charset:用于指定数据库所采用的编码格式,字符集
collate:用于指定数据库所采用的校验规则

如果创建数据库时未指明数据库的编码格式或校验规则,则默认使用MySQL配置文件中对应的编码格式和校验规则,默认的编码格式是utf8,默认的校验规则是utf8_general_ci。

可以查看系统中所有的数据库:

show databases;

查看对应数据库的创建语句:

show create database 数据库名;

删除一个现有的数据库:

drop database 库名;

drop database [if exists] 库名;

删除数据库后该数据库对应的文件夹就被删除了,并且删除数据库后,该数据库下的所有表也都会被级联删除,因此不要随意删除数据库。

数据库的备份 :

mysqldump -P 端口号 -u 用户名 -p 密码 -B 数据库名1 数据库名2 ... > 数据库备份存储的文件路径

数据库恢复:

source 数据库备份的文件路径;

二、表的操作

创建表:

create table 表名(

    列名1 类型1 [comment '注释信息'],
    列名2 类型2 [comment '注释信息'],
    列名3 类型3 [comment '注释信息']

);[charset=字符集] [collate=校验规则] [engine=存储引擎];

创建表 comment表示对指定列添加注释信息,建表时没有指定使用哪种存储引擎,那么就会默认使用InnoDB存储引擎 。

删除表:

delete from 表名;

表的增删查改:

表的增删查改简称CRUD:Create(新增),Retrieve(查找),Update(修改),Delete(删除),CRUD的操作对象是对表当中的数据,是典型的DML(Data Manipulation Language)数据操作语言。

新增数据:

insert into 表名 [列名] values [数据];

不加列名,需要全列插入

insert into students values (100,10000,'唐三藏');

指定列名,正常写

insert into students (id, sn,name) values (102,20001,'曹孟德'),(103,20002,'孙仲谋');

查询数据:

select {*/列名/表达式} from 表名 [where] [order by] [limit];

select后面是*就表示全列查询,后面的where、order by、limit都是可选项。

全列查询:

select * from students;

指定列查询:

select id, name from students;

结果去重:

select distinct 列名 from 表名;

条件查询:

举几个使用 where 字句的样例,方便大家学习理解;

1、查询语文成绩在80到100分的同学及其语文成绩,两种方式都可以

select name, chinese from students where chinese between 80 and 100;

select name, chinese from students where chinese >= 80 and chinese <= 100;

2、查询英语成绩是59或99分的同学及其英语成绩

select name, english from students where english=59 or english=99;

select name, english from students where english in (59,99);

3、查询姓王的同学/查询王某同学

查询姓王的同学
select name from students where name like '王%';
查询王某同学

select name from students where name like '王_';

4、NULL的查询

查询QQ号已知的同学
select name, qq from students where qq is not null;
查询QQ号未知的同学

select name, qq from students where qq <=> null;

 在与 null 值作比较的时候应该使用 <=> 运算符,使用 = 运算符无法得到正确的查询结果。

5、查询语文和数学总分大于180分的同学

select name, chinese + math  from students  where chinese + math > 180;

结果排序:

select {*/列名} from 表名 where order by 列名 [asc/desc];

asc和desc分别代表的是排升序和排降序,不特殊指明就默认为 asc 排升序。order by子句中可以指明按照多个字段进行排序,每个字段都可以指明按照升序或降序进行排序,各个字段之间使用逗号隔开,排序优先级与书写顺序相同。

1、查询同学的各门成绩,依次按数学降序、英语升序显示

select name, math, english from students  order by math desc, english asc;

2、查询同学及其总分,按总分降序显示

select name,  chinese + math AS 总分 from students order by 总分 desc;

此处AS是给两个相加的字段起别名,也可以省略AS不写。

筛选分页结果:

从第0条记录开始,向后筛选出n条记录:

select {*/列名} from 表名 [where...] [order by] limit n;
从第s条记录开始,向后筛选出n条记录:

select {*/列名} from 表名 [where...] [order by] limit n offset s;

聚合函数查询:

统计个数

select count(*) from students;

在select语句中使用count函数,并将表达式作为参数传递给count函数,这时也可以统计出表中的记录条数,例如以下几种写法:

select count(1) from students;

select count(qq) from students;

去重统计math个数

select count(distinct math) from students;

统计平均总分:

select avg(chinese + math) 平均总分 from students;

分组查询:

select 列名 from 表名 [where...] group by 列名 [order by...] [limit...];

group by后面的列名,表示按照指定列进行分组查询。

修改数据:

update 表名 set 列名=数值 [...] [where...] [order by...] [limit...];

下面举例说明:

1、将孙悟空同学的数学成绩修改为80分

update students set math=80 where name='孙悟空';

2、将总成绩倒数前三的3位同学的数学成绩加上30分

update students set math=math+30 order by chinese+math asc limit 3;

3、将所有同学的语文成绩修改为原来的2倍

update students set chinese=chinese*2;

删除数据:

delete from 表名 [where...];

在删除数据之前需要先找到待删除的记录,delete语句中的where、order by和limit就是用来定位数据的。

下面举例说明:

1、删除孙悟空同学的考试成绩

delete from students where name='孙悟空';

2、删除整张表数据

delete from students;

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。