一、简介
SQL是英文 Structured Query Language 的缩写,是结构化查询语言,一门操作关系型数据库的编程语言,是定义操作所有关系型数据库的统一标准,对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,这称之为“方言”。
通用语法:SQL语句可以单行或多行书写,以分号;
结尾。MySQL数据库的SQL语句不区分大小写。可以添加注释,其中单行注释使用-- 注释内容
或者#注释内容(MySQL特有)
多行注释使用/* 注释内容 */
二、数据库操作语句
1、查询
查询所有数据库
show databases;
2、创建
创建数据库
create database 数据库名称;
创建数据库(判断,如果不存在则创建,一般采用该方式创建避免出错)
create database if not exists 数据库名称;
3、删除
删除数据库
drop database 数据库名称;
删除数据库(判断,如果存在则删除,一般采用该方式删除避免出错)
drop database if exists 数据库名称;
4、使用
查看当前使用的数据库
select database();
使用数据库
use 数据库名称;
三、表操作语句
1、查询
查询当前数据库下所有表名称
show tables;
查询表结构
desc 表名称;
2、创建
创建表
create table 表名(
字段名1 数据类型1,
字段名1 数据类型1,
...
字段名n 数据类型n
);
注意:最后一组数据末尾不能加逗号,
MySQL支持多种数据类型,这里整理了一个表如下:
3、删除
删除表
drop table 表名;
删除表(判断,如果存在则删除,一般采用该方式删除避免出错)
drop table if exists 表名称;
4、修改
修改表名
alter table 表名 rename to 新表名;
添加一列
alter table 表名 add 列名 数据类型;
修改列数据类型
alter table 表名 modify 列名 新数据类型;
修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型;
删除列
alter table 表名 drop 列名;
四、表数据操作语句
1、添加数据
给指定列添加数据
insert into 表名(列名1, 列名2, ...) values(值1, 值2, ...);
给全部列添加数据
insert into 表名 values(值1, 值2, ...);
批量添加数据
insert into 表名(列名1, 列名2, ...) values(值1, 值2, ...), (值1, 值2, ...), ...;
insert into 表名 values(值1, 值2, ...), (值1, 值2, ...), ...;
2、修改表数据
修改指定列数据(注意:修改语句中如果不加条件,则将对应列所有数据都修改)
update 表名 set 列名1=值1, 列名2=值2, ... where 条件;
3、删除表数据
删除数据(注意:删除语句中如果不加条件,则将所有数据都删除)
delete from 表名 where 条件;
4、查询表数据
a. 基础查询
查询多个字段
select 列名1, 列名2, ... from 表名; -- 查询指定列数据
select * from 表名; -- 查询所有列数据
去除重复记录查询
select distinct 列名1, 列名2, ... from 表名;
给列起别名查询(as也可以省略,输出的列名为起的别名)
select 列名1 as 别名, 列名2, ... from 表名;
b. 条件查询
根据where
条件查询
select 字段列表 from 表名 where 条件列表;
下表为where
后常用条件符号及功能
c. 排序查询
排序方式:
ASC:升序排列(默认值)
DESC:降序排列
select 字段列表 from 表名 order by 排序字段名1 排序方式1, 排序字段名2 排序方式2, ...;
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
d. 聚合函数查询
概念:将一列数据作为一个整体,进行纵向计算。
聚合函数分类如下表
语法如下:
select 聚合函数名(列名) from 表名;
e. 分组查询
select 字段列表 from 表名 where 分组前条件限定 group by 分组字段名 having 分组后条件过滤;
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义where
和having
的区别:
执行时机不一样:where
是分组之前进行限定,不满足where
条件,则不参与分组,而having
是分组之后对结果进行过滤。
可判断条件不一样:where
不能对聚合函数进行判断,having
可以。
执行顺序:where
> 聚合函数
> having
f. 分页查询
select 字段列表 from 表名 limit 起始索引, 查询条目数;
注意:起始索引从0开始,计算公式:起始索引 = (当前页码 - 1) * 每页显示的条数
五、SQL约束
1、概念及分类
概念:约束是作用于表中列上的规则,用于限制加入表的数据;约束的存在保证了数据库中数据的正确性、有效性和完整性。
分类如下图
2、语法
a. 非空约束
创建表时添加非空约束
create table 表名(
列名 数据类型 not null,
...
);
建完表之后添加非空约束
alter table 表名 modify 字段名 数据类型 not null;
删除非空约束
alter table 表名 modify 字段名 数据类型;
b. 唯一约束
创建表时添加唯一约束
create table 表名(
列名 数据类型 unique,
...
);
建完表之后添加唯一约束
alter table 表名 modify 字段名 数据类型 unique;
删除唯一约束
alter table 表名 drop index 字段名;
c. 主键约束
创建表时添加主键约束
create table 表名(
列名 数据类型 primary key,
...
);
create table 表名(
-- auto_increment:当不指定值时自增长
列名 数据类型 primary key auto_increment,
...
);
建完表之后添加主键约束
alter table 表名 add primary key(字段名);
删除主键约束
alter table 表名 drop primary key;
d. 默认约束
创建表时添加默认约束
create table 表名(
列名 数据类型 default 默认值,
...
);
建完表之后添加默认约束
alter table 表名 alter 列名 set default 默认值;
删除默认约束
alter table 表名 alter 列名 drop default;
e. 外键约束
创建表时添加外键约束
create table 表名(
列名 数据类型,
...
-- 外键名称为自己定义
constraint 外键名称 foreign key(外键列名) references 主表(主表列名)
);
建完表之后添加外键约束
alter table 表名 add constraint 外键名称 foreign key(外键列名) references 主表(主表列名);
删除外键约束
alter table 表名 drop foreign key 外键名称;
六、多表查询
多表查询:从多张表中查询数据。主要分为:连接查询和子查询,连接查询又分为内连接和外连接查询。
1、内连接查询
-- 隐式内连接
select 字段列表 from 表A,表B,... where 条件;
-- 显示内连接 inner 可以省略
select 字段列表 from 表A inner join 表B on 条件;
内连接查询相当于查询表A和表B的交集数据
2、外连接查询
-- 左外连接 outer 可以省略
select 字段列表 from 表A left outer join 表B on 条件;
-- 右外连接 outer 可以省略
select 字段列表 from 表A right outer join 表B on 条件;
左外连接查询相当于查询表A所有数据和交集数据
右外连接查询相当于查询表B所有数据和交集数据
使用中一般使用左外连接就够了,想要查询表B所有数据和交集数据,只需要将表A和表B位置调换即可。
3、子查询
查询中嵌套查询,称这种嵌套查询为子查询。
根据查询结果不同,作用不同可分为:单行单列、多行单列、多行多列。
a. 单行单列
子查询作为条件值,使用=
!=
>
<
等进行条件判断
select 字段列表 from 表名 where 字段名 = (子查询);
b. 多行单列
子查询作为条件值,使用in
等关键字进行条件判断
select 字段列表 from 表名 where 字段名 in (子查询);
c. 多行多列
子查询作为虚拟表
select 字段列表 from (子查询) where 条件;
以上这些都是SQL常用的操作语法,直接开撸吧!