SQL语句

什么是SQL呢?SQL是英文Structured Query Language:结构化查询语言。通俗来说SQL语言就是用来操作所有关系型数据库的语言。
打个比方,每个地方都有每个地方的方言,而每一种数据库的操作方式窜在的不一样的地方,我们就把它称为“方言”,而SQL语句就可以理解为“普通话”。

SQL通用语法

SQL语句可以单行或多行书写,以分号;结尾。可以使用空格和缩进来增强语句的可读性。MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

SQL语句的分类

1,DDL数据定义语言,用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等
2,DML数据操作语言,用来对数据库中表的数据进行增删改。关键字:insert,delete,updata等。
3,DQL数据查询语言,用来查询数据控中表的记录。关键字:select,where等
4,DCL数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE等

DDL操作数据库,表

操作数据库:CRUD
C(Create):创建
创建数据库 create database 数据库名称。
在这里插入图片描述
创建数据库,如果该数据库已存在,就不会创建:create database if not exists 数据库名称
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1
R(Retrieve):查询
查询所有数据库的名称:show databases;
在这里插入图片描述
查看对应数据库的字符集:show create database 数据库名称;。
在这里插入图片描述
可以看到这个数据库的字符集是UTF8
U(Update):修改
数据库创建出来时默认的字符集是UTF8,如果我们需要修改数据库字符集:

alter database 数据库名称 character set 字符集

D(Delete):删除
删除数据库:

drop database 数据库名称;

在这里插入图片描述
可以看到名为db2的数据库已经被我们删除掉了。

使用数据库

我们之前学的是对数据库的操作,但是如果我们没进入也就无法操作里面的数据,就像我们不进入文件夹,就无法操作文件夹中的文件一样。
使用数据库的语法也很简单。

use 数据库名称;//使用(进入)数据库
select database();//查询当前正在使用的数据库名称

操作表

数据库中的表,和EXCEL中的表结构一样,数据库中的表要在创建的时候规定这个表将来要存储什么样的数据格式,每一列存储什么样的类型。
创建表的语法是:

create table 表名(
	列名1 数据类型1,
	列名2 数据类型2,
	....
	列名n 数据类型n
)//每列之间用逗号分隔,最后一列不用加逗号

常用的数据类型包括:
1,int:整数型age int,
2,double小数类型:score double(5,2)表示小数类型一共五位,保留两位小数也就是111.11这种形式。
3,data:日期,只包含年月日。
4,datatime:日期,包含年月日时分秒、
5,timestamp:时间戳,包含年月日时分秒。如果当时没有给这个字段赋值,或者赋值为null则默认使用当前的系统时间,来自动赋值
6,varchar:字符串类型。name varchar(20)姓名最大为20个字符
我们来创建一个学生表:

create table student(
	id int,
	name varchar(20),
	age int,
	score double(4,1),
	brithday date,
	insert_time timestamp
);

查询某个数据库中所有表的名称:

show tables;//搜索当前数据库中的表

查询表结构:

desc 表明;//查询当前数据库中的某个表

复制表:

create table 表明 like 被复制的表名;

删除表:

drop table 表明;

修改表名:

alter table 表明 rename to 新的表名;

修改表的字符集:

alter table 表名 character set 新字符集名称;

添加一列:

alter table 表名 add 列名 数据类型;

修改表的列名称和类型:

alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;//只修改数据类型

删除列:

alter table 表名 drop 列名;

DML增删改表中的数据

1, 添加数据
语法:insert into 表名(列名1,列名2,.....列名n) values(值1,值2,....值n);
加入我们想向student表中添加数据。我们该如何操作呢?
在这里插入图片描述
使用这句语法时,要注意列名和值要一一对应,如果表明后不定义列名,则默认给所有的列添加值。除了数字类型,其他类型需要使用引号引起来。使用单双引号都可以。

2,删除数据
语法是:delete from 表名 where 条件这里要注意,如果不加条件,则会删除表中所有记录。如果要删除所有的记录,可以使用两种方法:

delete from 表名 ;
truncate table 表名;//这条语句会删除表中的所有记录,然后创建一张一模一样的空表

删除数据时推荐使用第二种方法。

3,修改数据
语法:update 表名 set 列名1 = 值1,列名2 = 值2,.....where 条件;
注意,如果不加任何条件,则会将表中所有记录全部修改。

DQL查询表中记录

语法:

select
	字段列表
from
 	表名列表
where
 	条件列表
group by
 	分组字段
having
 	分组之后的条件
order by
 	排序
limit
 	分页限定

多字段查询:

select 字段名1,字段名2....from 表名;

注意,如果查询所有字段,则可以使用*来替代字段列表。
去除重复:

selet distinct 字段列表 from 表名;

如果使用在多字段去重,只有两个结果集的数据完全一样才可以去除
计算列:
一般可以使用加减乘除四则运算来计算一些列的值。(一般只会进行数值型的计算)
这里有一个ifnull的函数,来判断列表是否为null值,语法如下:

select 字段列表 + ifnull(字段列表,替换为的值) from 表名

如果判断的字段不为null则使用原来的值,null参与的运算,计算结果都为null所以我们要用到ifnull函数。上面的语法表示两个字段相加,如果第二个字段中有null值,则将null值替换为ifnull中的第二个参数。
起别名:

select 字段列表 as 新名字 from 表名

as可以使用在字段列表后面,为字段列表起一个别名,方便我们观看。

条件查询:
where子句后面跟条件。在条件中可以使用条件运算符。这些运算符和我们在Java中学过的运算符很像,假设我们要查询一个表中的age列表中大于20的数据。

select * from 表名 where age >20;

如果我们要查询一个区间的,比如age在20和30之间的数据。语法如下:

select * from 表名 where between 20 and 30;

这个方法包含20和30两个数据。
如果我们想要查询某几个固定年龄的话,语法如下:

select * from 表名 where age in(数值1,数值2,.....数值n);

注意,这里有一个特殊的值,null值的查询方法有些特殊:

select * from 表名 where 字段列表 is null;
select * from 表名 where 字段列表 is not null;

模糊查询:
条件查询中有一个模糊查询的语句,like。like中有占位符,“_”代表单个字符,“%”代表多个字符。假如我们需要在一个列表中查询到姓王的人。我们可以使用下面的语句:

select *from 表名 where 字段列表 like ‘王%’;//查询出所有姓王的
select *from 表名 where 字段列表 like ‘_西%’;//查询出第二个字符是西的
select *from 表名 where 字段列表 like ‘___’;//查询名字是三个字符的
select *from 表名 where 字段列表 like ‘%王%’;//查询所有名字中含有王的,%在这里代表占用0位或多位。

排序查询:

order by 排序字段1 排序方式1,排序字段2 排序方式2,.....排序字段n 排序方式n;

如果不写排序方式,则会按照默认方式升序排列。排序方式有两种ASC(升序),DESC(降序)。如果有多个排序条件,当前面的条件值一样时,才会判断第二个条件。
聚合函数:
将一列数据作为一个整体,进行纵向的计算。聚合函数的计算会排除null值,也就是说null值不会加入到计算中。
count:计算个数

select count(字段列表) from 表名;
select count(ifnull(字段列表,0)) from 表名;

max:计算最大值

select MAX(字段列表) from 表名;

min:计算最小值

select MIN(字段列表) from 表名;

sum:计算和
在计算和的时候会自动排除null值

    select sum(字段列表) from 表名;

avg:计算平均值
注意avg忽略null值,而不是将其作为0参与计算

select avg(字段列表) from 表名;

分组查询
分组之后查询的字段要么是分组字段,要么是聚合函数,假如我们要看班级里男女同学的平均分:

select sex , avg(字段列表) from 表名 group by sex;

分页查询:
开始索引的计算公式 = (当前的页码 - 1) * 每页显示的条数

select 字段列表 from 表名 limit 开始的索引,每页查询的条数;

limit语法是一个MySQL的方言,如果换到别的数据库中可能会不一样。

约束

约束就是对表中的数据进行限定,保证数据的正确性,有效性,完整性。
非空约束 not null:
1,在创建表是添加约束,假如我们创建一个表并在创建的时候为一个字段列表添加约束。

create table 表名(
	字段列表名 字段列表类型,
	字段列表名 字段列表类型 not null
)

如果我们在创建完表后,又想给这个表添加约束怎么办呢?

alter table 表名 modify 字段列表名 字段列表类型 not null;

如果我们想删除约束该怎么做呢?

alter table 表名 modify 字段列表名 字段列表类型;

只要我们不加not null就相当于清空了这个列表的非空约束。
唯一约束 UNIQUE:
唯一约束的语法和非空约束一样,但是MySQL唯一约束中可以存在多个null值。唯一约束的删除方法与非空约束不一样:

ALTER TABLE 表名 DROP INDEX 字段列表名;

如果我们在创建表后添加唯一约束,跟非空约束的方法一样。但是在添加唯一约束时要注意表中不可以有相同的数据,否则会报错。
主键约束 primary key:
主键约束代表非空且唯一,一张表中只能有一个字段为主键,主键就是表中记录的唯一标识,一般情况下我们都是用ID为主键:

create table 表名(
	字段列表名 字段列表类型 PRIMARY KEY
)

删除主键的方法:

ALTER TABLE 表名 DROP PRIMARY KEY;

创建完表再添加主键的方式和上面都一样,主键中的某些属性和非空约束与唯一约束一样。
自动增长:
如果某一列的数值类型的,是用AUTO_INCREMENT可以完成自动增长一般自动增长是配合主键一起使用的。可以再创建表时,添加主键约束,并且完成主键自动增长:

create table 表名(
	字段列表名 字段列表类型 PRIMARY KEY AUTO_INCREMENT
)

自动增长的时候只跟上面一条数据有关系。假如你储存的数据时1,2,3,4,5,60.那么下一个数据就是61而不是6。删除自动增长的方法与非空约束和唯一约束方法一样。

外键约束 foreignkey:
让表与表产生关系,从而保证数据的正确性。我们举一个例子。比如说玩游戏,没个账号里有不同的角色,每个角色的背包和仓库里又有不同的物品和装备,如果把这些东西都写在一个表里,到时候查询起来也不方便,我们可以吧角色信息放在一个表里,再把仓库装备信息放在一个表里,然后将表关联起来。这就是外键的作用。
外键可以为null但是不可以是不存在的外键值。比如关联的外键只有1和2,你写了个5。
在创建表时,可以添加外键:

creat table 表名(
	字段列表
	外键列
	constraint 外键名称 foreign key外键列名 references 主表名称(主表列名称);

);

删除外键:

alter table 表名 drop foreign key 外键名;

在创建好的表中添加外键:

alter table 表名 add constraint 外键名 foreign key(外键字段名称) references 主表名称(主表列名称);

级联更新:

alter table 表名 add constraint 外键名称 foreign key(外键字段名称) references 主键名称(主键列表) on update cascade;

级联删除:

alter table 表名 add constraint 外键名称 foreign key(外键字段名称) references 主键名称(主键列表)  on delete cascade;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值